Quero gerar slug para algumas strings sem passar pelo fluxo de geração de slug do WordPress. Portanto, quero saber quais funções ele chama para obter uma lesma pura. Eu tentei sanitize_title (), mas deixa% c2% a0 no resultado.
seo
slug
sanitization
um fã
fonte
fonte
èäç
etc. permanecerão no lugar com esta função.sanitize_title_with_dashes
, além desanitize_title
deixar alguns caracteres especiais que podem danificar alguns sistemas. I você quer uma abordagem mais universal na redução cordas dar uma olhadasanitize_html_class
Bem, já existe uma resposta, mas eu queria expandi-la um pouco, então aqui estão minhas descobertas:
Se dermos uma olhada
wp_insert_post()
, veremos que o$post_name
é higienizado usandowp_sanitize_title()
(verwp-includes/post.php
)Na função
sanitize_title()
, temos um filtrosanitize_title
. Isso é interessante, já que nos filtros padrãosanitize_title_with_dashes()
está associado a esse filtro (consultewp-includes/default-filters.php
).Isso parece estranho. Seria ótimo saber o valor de entrada, mas o seguinte
wp_insert_post()
sanitize_title()
parece ser suficiente.fonte
sanitize_title()
parece ser o único que você precisa.Na linha 211 do wp-includes / default-Filters.php, você encontrará:
Isto significa que chamado
sanitize_title()
irá primeiro remover todos os caracteres especiais, em seguida, aplicar osanitize_title
filtro, pondo assimsanitize_title_with_dashes()
Como apontou @JHoffmann, simplesmente chamar
sanitize_title_with_dashes()
não removerá caracteres especiais.fonte
Além da ótima resposta do websupporter, encontrei o abaixo:
Dependendo do seu uso, isso dependerá do que você precisa.
sanitize_title()
como diz:... e
sanitize_title_with_dashes
diz:Portanto, com este exemplo de sequência:
Â+Ä Ö %%% ßá %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~ èäç
sanitize_title()
resultado:Como você pode ver, ele substituiu caracteres acentuados por seus equivalentes não acentuados e removeu todos os outros caracteres não alfanuméricos, além do
%
que é seguido por um número, mas você verá que ele foi removido quando foi seguido por uma letra; talvez seja porque o percebe como já codificado . Isso é aplicado quando você tenta inserir%c3
sua string, não a tira, pois%c3
é uma sequência de codificação válida.sanitize_title_with_dashes
resultado:Então, como você pode ver, ele não removeu os caracteres acentuados, mas os codificou.
Agora, vamos ver uma sequência sem caracteres acentuados para ver como os dois se comportam ...
Sequência de exemplo:
%%% building %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~'
sanitize_title()
resultado:sanitize_title_with_dashes
resultado:Então, como você pode ver, eles são exatamente iguais. Portanto, parece que a única diferença neles é que um codifica cartas acentuadas enquanto o outro as substitui .
fonte