Je veux générer un slug pour certaines chaînes sans passer par le flux de génération de slugs WordPress. Par conséquent, je veux savoir quelles fonctions il appelle pour obtenir une limace nette. J'ai essayé sanitize_title () mais cela laisse% c2% a0 en résultat.
seo
slug
sanitization
un fan
la source
la source
èäç
etc. resteront en place avec cette fonction.sanitize_title_with_dashes
plus desanitize_title
laisser des caractères spéciaux qui peuvent casser certains systèmes. Si vous voulez une approche plus universelle pour réduire les cordes, jetez un œil àsanitize_html_class
Eh bien, il y a déjà une réponse, mais je voulais l'étendre un peu, voici donc mes conclusions:
Si nous regardons,
wp_insert_post()
nous voyons, le$post_name
est assaini en utilisantwp_sanitize_title()
(voirwp-includes/post.php
)Dans la fonction,
sanitize_title()
nous avons un filtresanitize_title
. Ceci est intéressant, car dans les filtres par défautsanitize_title_with_dashes()
est accroché à ce filtre (voirwp-includes/default-filters.php
).Cela semble étrange. Ce serait formidable de connaître la valeur d'entrée, mais suivre
wp_insert_post()
sanitize_title()
semble être suffisant.la source
sanitize_title()
semble être le seul dont vous avez besoin.Dans la ligne 211 de wp-includes / default-filters.php, vous trouverez:
Cela signifie que l'appel
sanitize_title()
supprimera d'abord tous les caractères spéciaux, puis appliquera lesanitize_title
filtre, appelant ainsisanitize_title_with_dashes()
Comme l'a souligné @JHoffmann, un simple appel
sanitize_title_with_dashes()
ne supprimera pas les caractères spéciaux.la source
En plus de l'excellente réponse du websupporter j'ai trouvé ce qui suit:
En fonction de votre utilisation, cela dépendra de ce dont vous avez besoin.
sanitize_title()
comme il est dit:... et
sanitize_title_with_dashes
dit:Donc, avec cet exemple de chaîne:
Â+Ä Ö %%% ßá %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~ èäç
sanitize_title()
résultat:Comme vous pouvez le voir, il a remplacé les caractères accentués par leurs équivalents non accentués et il a supprimé tous les autres caractères non alphanumériques à l'exception de celui
%
qui est suivi d'un nombre, 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, il ne la supprime pas comme%c3
une séquence de codage valide.sanitize_title_with_dashes
résultat:Comme vous pouvez le voir, il n'a pas supprimé les caractères accentués, mais les a encodés.
Examinons maintenant une chaîne sans 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:sanitize_title_with_dashes
résultat:Comme vous pouvez le voir, ils sont exactement les mêmes. Il semble donc que la seule différence entre elles est que l'une code les chartes accentuées tandis que l'autre les remplace .
la source