Você está quase lá. A função que você precisa é sanitize_title_with_dashes ($ title)
Eu quero gerar slug para algumas strings sem passar pelo fluxo de geração de slugs do WordPress. Portanto, eu quero saber quais funções ele chama para obter um slug puro. Eu tentei sanitize_title () mas isso deixa% c2% a0 no resultado.
Você está quase lá. A função que você precisa é sanitize_title_with_dashes ($ title)
sanitize_title()
parece ser o único que você precisa.
Em wp-includes / default-filters.php linha 211 você encontrará:
add_filter( 'sanitize_title', 'sanitize_title_with_dashes', 10, 3);
Isso significa que chamar sanitize_title()
primeiro removerá todos os caracteres especiais e, em seguida, aplicará o filtro sanitize_title
, chamando assim sanitize_title_with_dashes()
Como apontado por @JHoffmann, simplesmente chamar sanitize_title_with_dashes()
não removerá caracteres especiais.
Bem, já existe uma resposta, mas eu queria expandir um pouco, então aqui estão as minhas descobertas:
Se dermos uma olhada em wp_insert_post()
, o $post_name
é higienizado usando wp_sanitize_title()
(veja wp-includes/post.php
)
Na função sanitize_title()
, temos um filtro sanitize_title
. Isso é interessante, já que nos filtros padrão sanitize_title_with_dashes()
é enganchado neste filtro (veja wp-includes/default-filters.php
).
<?php
echo sanitize_title( 'Â+ÄÖßáèäç' ) // aaeoessaeaec
?>
Eu tentei sanitize_title (), mas isso deixa% c2% a0 no resultado.
Isso parece estranho. Seria ótimo saber o valor de entrada, mas seguir wp_insert_post()
sanitize_title()
parece ser suficiente.
Além da excelente resposta do websupporter, encontrei o seguinte:
Dependendo do seu uso, dependerá do que você precisa.
sanitize_title()
como diz:
Os acentossão removidos (caracteres acentuados são substituídos por equivalentes não acentuados)
... e sanitize_title_with_dashes
diz:
Note que não substitui caracteres acentuados especiais
Portanto, com esta sequência de exemplo : Â+Ä Ö %%% ßá %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?''~ èäç
sanitize_title()
result:
aa-o-sa-% 20-oo-pp -_- eac
Como você pode ver, ele substituiu caracteres acentuados por seus equivalentes não acentuados e e removeu todos os outros caracteres não-alfanuméricos do %
que é seguido por um número, mas você verá que foi removido quando foi seguido por uma letra; talvez isso aconteça porque ele já está codificado . Isso é imposto quando você tenta inserir %c3
em sua string, mas não tira isso porque %c3
é uma sequência de codificação válida.
sanitize_title_with_dashes
result:
% c3% a2% c3% a4-% c3% b6-% c3% 9f% c3% a1-% 20-oo-pp -_-% c3% a8% c3% a4% c3% a7
Então, como você pode ver, ele não removeu os caracteres acentuados, mas os codificou.
Agora vamos ver uma string com no caracteres acentuados para ver como eles se comportam ...
String de exemplo: %%% building %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?''~'
sanitize_title()
result:
construção-% 20-oo-pp -_
sanitize_title_with_dashes
result:
construção-% 20-oo-pp -_
Então, como você pode ver, eles são exatamente iguais. Então parece que a única diferença neles é que um codifica cartas acentuadas enquanto o outro substitui elas.
Tags slug sanitization seo