O sanitize_title é suficiente para gerar post slugs?

14

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.

    
por a_fan 06.07.2011 / 16:27

4 respostas

26

Você está quase lá. A função que você precisa é sanitize_title_with_dashes ($ title)

    
por Brady 06.07.2011 / 17:03
2

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.

    
por Jules 20.02.2018 / 11:25
1

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.

    
por websupporter 10.01.2017 / 13:58
0

Além da excelente resposta do websupporter, encontrei o seguinte:

Dependendo do seu uso, dependerá do que você precisa.

sanitize_title() como diz:

  Os acentos

sã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.

    
por Brett 30.07.2018 / 17:53