sanitize_title est-il suffisant pour générer des post slugs?

14

Je souhaite générer un slug pour certaines chaînes sans passer par le flux de génération du slug de WordPress. Par conséquent, je veux savoir quelles fonctions il appelle pour obtenir une limace soignée. J'ai essayé sanitize_title () mais il reste% c2% a0 dans le résultat.

    
posée a_fan 06.07.2011 - 16:27

4 réponses

26

Vous êtes presque là. La fonction dont vous avez besoin est sanitize_title_with_dashes ($ title)

.     
réponse donnée Brady 06.07.2011 - 17:03
2

sanitize_title() semble être le seul dont vous avez besoin.

Dans la ligne 211 de wp-includes / default-filters.php, vous trouverez:

add_filter( 'sanitize_title', 'sanitize_title_with_dashes', 10, 3);

Cela signifie que l'appel de sanitize_title() supprimera d'abord tous les caractères spéciaux, puis appliquera le filtre sanitize_title , appelant ainsi sanitize_title_with_dashes()

Comme @JHoffmann l'a souligné, le simple fait d'appeler sanitize_title_with_dashes() ne supprimera pas les caractères spéciaux.

    
réponse donnée Jules 20.02.2018 - 11:25
1

Eh bien, il y a déjà une réponse, mais je voulais l'élargir un peu. Voici donc mes conclusions:

Si nous regardons dans wp_insert_post() , nous voyons, le $post_name est nettoyé à l'aide de wp_sanitize_title() (voir wp-includes/post.php )

Dans la fonction sanitize_title() , nous avons un filtre sanitize_title . C’est intéressant, puisque dans les filtres par défaut, sanitize_title_with_dashes() est lié à ce filtre (voir wp-includes/default-filters.php ).

<?php
echo sanitize_title( 'Â+ÄÖßáèäç' ) // aaeoessaeaec
?>
  

J'ai essayé sanitize_title () mais il reste% c2% a0 dans le résultat.

Cela semble étrange. Ce serait bien de connaître la valeur d’entrée, mais suivre wp_insert_post() sanitize_title() semble être suffisant.

    
réponse donnée websupporter 10.01.2017 - 13:58
0

En plus de l'excellent answer de Websupporter, j'ai trouvé ce qui suit:

En fonction de votre utilisation, cela dépend de vos besoins.

sanitize_title() comme il est dit:

  

les accents sont supprimés (les caractères accentués sont remplacés par des équivalents non accentués)

... et sanitize_title_with_dashes dit:

  

Notez que ne remplace pas les caractères spéciaux accentués

Donc, avec cet exemple chaîne: Â+Ä Ö %%% ßá %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?''~ èäç

sanitize_title() résultat:

  

aa-o-sa-% 20-oo-pp -_- eac

Comme vous pouvez le constater, a remplacé les caractères accentués par leurs équivalents non accentués et , tous les autres caractères non alphanumériques ont été supprimés, à l'exception du % qui est suivi d'un numéro, mais vous verrez qu'il a été supprimé lorsqu'il a été suivi d'une lettre; c'est peut-être parce qu'il le perçoit comme déjà codé . Ceci est appliqué lorsque vous essayez d'insérer %c3 dans votre chaîne, cela ne la supprimera pas car %c3 est une séquence de codage valide.

sanitize_title_with_dashes résultat:

  

% c3% a2% c3% a4-% c3% b6-% c3% 9f% c3% a1-% 20-oo-pp -_-% c3% a8% c3% a4% c3% a7

Comme vous pouvez le constater, il n'a pas supprimé les caractères accentués, mais les a codés.

Maintenant, regardons une chaîne avec aucun caractères accentués pour voir comment ils se comportent tous les deux ...

Exemple de chaîne: %%% building %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?''~'

sanitize_title() résultat:

  

bâtiment-% 20-oo-pp -_

sanitize_title_with_dashes résultat:

  

bâtiment-% 20-oo-pp -_

Comme vous pouvez le constater, ils sont exactement identiques. Il semble donc que la seule différence entre eux est qu’un encode des chartes accentuées, tandis que l’autre les remplace .

    
réponse donnée Brett 30.07.2018 - 17:53

Lire d'autres questions sur les étiquettes