Respostas:
Você está quase lá. A função que você precisa é sanitize_title_with_dashes ($ title)
èäçetc. permanecerão no lugar com esta função.
sanitize_title_with_dashes, além de sanitize_titledeixar 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 usando wp_sanitize_title()(ver 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()está associado a esse filtro (consulte wp-includes/default-filters.php).
<?php
echo sanitize_title( 'Â+ÄÖßáèäç' ) // aaeoessaeaec
?>
Eu tentei sanitize_title (), mas deixa% c2% a0 no resultado.
Isso parece estranho. Seria ótimo saber o valor de entrada, mas o seguinte wp_insert_post() sanitize_title()parece ser suficiente.
sanitize_title() parece ser o único que você precisa.
Na linha 211 do wp-includes / default-Filters.php, você encontrará:
add_filter( 'sanitize_title', 'sanitize_title_with_dashes', 10, 3);
Isto significa que chamado sanitize_title()irá primeiro remover todos os caracteres especiais, em seguida, aplicar o sanitize_titlefiltro, pondo assimsanitize_title_with_dashes()
Como apontou @JHoffmann, simplesmente chamar sanitize_title_with_dashes()não removerá caracteres especiais.
Além da ótima resposta do websupporter, encontrei o abaixo:
Dependendo do seu uso, isso dependerá do que você precisa.
sanitize_title() como diz:
acentos são removidos (caracteres acentuados são substituídos por equivalentes não acentuados)
... e sanitize_title_with_dashesdiz:
Observe que ele não substitui caracteres acentuados especiais
Portanto, com este exemplo de sequência:Â+Ä Ö %%% ßá %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~ èäç
sanitize_title() resultado:
aa-o-sa-% 20-oo-pp -_- eac
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 %c3sua string, não a tira, pois %c3é uma sequência de codificação válida.
sanitize_title_with_dashes resultado:
% 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 sequência sem caracteres acentuados para ver como os dois se comportam ...
Sequência de exemplo: %%% building %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~'
sanitize_title() resultado:
building-% 20-oo-pp-_
sanitize_title_with_dashes resultado:
building-% 20-oo-pp-_
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 .