web-dev-qa-db-fra.com

Mise en forme slug: caractères acceptables?

J'ai fait beaucoup de recherches sur cela, donc je m'excuse sincèrement s'il existe une entrée codex pour cela, mais pour ma vie, je ne peux pas trouver de règle absolue sur les caractères acceptables dans , mais plus spécifiquement pour un type de publication personnalisé dans ce cas).

Nous avons actuellement une situation où nous avons quelques types de publication personnalisés avec une structure de type slug comme (pseudo):

some_Context_Thats_Not_A_Category_slug/sub_context_thats_not_a_category_slug/ + le titre de l'article

Le segment dans grey est le "slug" dans son intégralité. En pratique, cela ressemblerait à ceci:

hamburgers/cheeseburgers comme slug de type post

L'utilisation de la barre oblique est-elle autorisée/sécurisée dans ce scénario?

Critères d'acceptation d'une réponse:

"oui" ou "non" à la question posée et lien vers l'endroit où je peux trouver des ensembles de règles contemporains WP slug.

Merci d'avance!

5
Brandt Solovij

Non, les barres obliques ne sont pas autorisées dans les slugs. Cependant, ils sont automatiquement supprimés lorsque vous essayez d'inclure des barres obliques dans un slug sur l'écran de post-édition. Les limaces sont désinfectées en utilisant sanitize_title().

Malheureusement, il n’existe pas de moyen simple d’expliquer ce qui est autorisé ou non dans un slug, et encore moins de donner un ensemble de règles simples auxquelles doivent adhérer des slugs valables. Cependant, nous pouvons résumer de manière assez compacte les caractéristiques les plus importantes d’un slug: un slug se compose uniquement de caractères alphanumériques minuscules, de tirets et de tirets bas, sans 2 tirets ou plus à la suite (séquences de tirets bas are _ permis). En outre, une limace ne peut pas commencer ou se terminer par un trait d'union.

sanitize_title ()

Paramètres:

  • $title: Titre à supprimer
  • $fallback_title (facultatif, chaîne vide par défaut): slug à utiliser si le $title désinfecté s'avère vide
  • $content (facultatif, la valeur par défaut est 'save'): l'opération pour laquelle la chaîne est assainie

La fonction sanitize_title se comporte de la manière suivante (par défaut, avec les arguments par défaut $fallback_title et $context, sans filtres externes appliqués):

  1. Les caractères accentués tels que "é" et "Ö" sont remplacés par leurs caractères "non accentués" correspondants (dans cet exemple, "e" et "O", respectivement)
  2. sanitize_title_with_dashes() est appelé sur la chaîne résultante

L'explication plus longue (et plus complète) peut être trouvée ci-dessous.

sanitize_title_with_dashes ()

En plus du paramètre $title, sanitize_title_with_dashes() a deux autres arguments, le premier non utilisé et le second, le contenu, $context, qui est passé de sanitize_title (et est donc 'save'). sanitize_title_with_dashes() fait beaucoup de choses, je vais donc essayer d'expliquer la séquence d'étapes qu'il effectue pour assainir une chaîne.

  1. Toutes les balises HTML sont supprimées
  2. Les signes de pourcentage sont supprimés, à l'exception de ceux en octets (tels que %20 pour l'espace)
  3. La chaîne est convertie en minuscule
  4. Toutes les entités HTML, telles que & sont supprimées
  5. Tous les points (.) sont remplacés par des traits d'union (-)
  6. Les traits en et tirets ( WikiPedia sur les tirets ), ainsi que les espaces, sont convertis en traits d'union.
  7. Certains caractères spéciaux, tels que les accents (par exemple, l'accent grave) sont supprimés
  8. Le caractère "times" ( × ) est remplacé par "x"
  9. Tous les caractères sauf les caractères alphanumériques, les espaces, les tirets et les traits de soulignement sont supprimés
  10. Les séquences de traits d'union (2 ou plusieurs traits d'union) sont remplacées par un trait d'union.
  11. Les traits d'union et de fuite sont supprimés

Et voilà le processus complet de désinfection du titre!

13
engelen