Comment WordPress génère-t-il des slugs d'URL?

11

Existe-t-il une page quelque part qui explique exactement comment WordPress génère des slugs pour les URL? J'écris un script qui doit générer des slugs d'URL identiques à ceux générés par WordPress.

    
posée George Edison 30.11.2012 - 03:24

5 réponses

11

Au départ, je ne peux pas vous donner de page / tutoriel / documentation sur la façon dont les slugs WP sont générés, mais jetez un oeil sur le sanitize_title() fonction.

Ne vous méprenez pas par le nom de la fonction, il ne n'est pas destiné à assainir un titre pour une utilisation ultérieure en tant que titre de page / publication . Il faut un titre et le retourne pour l'utiliser dans une URL:

  • supprime le code HTML & PHP
  • supprime les caractères spéciaux
  • convertit tous les caractères en minuscules
  • remplace les espaces, les traits de soulignement et les points par des tirets / tirets
  • réduit plusieurs tirets consécutifs à un

Il y a il pourrait y avoir des cas extrêmes dans lesquels le noyau ferait quelque chose de plus (vous devez regarder la source pour vérifier que sanitize_title() restera toujours suffisant pour générer < em> exactement les mêmes que vous attendez), mais cela devrait couvrir au moins 99%, sinon tous les cas.

    
réponse donnée Johannes Pille 30.11.2012 - 03:42
4

Le cœur à votre service

Il n'y a pas de mode développeur intégré à WordPress en dehors de WP_DEBUG , ce qui ne vous aidera pas beaucoup dans ce cas. Fondamentalement, WP utilise le "API Rewrite" , qui est un wrapper de bas niveau basé sur la fonction pour le WP_Rewrite class, que vous pouvez lire dans Codex . L'objet global $wp_rewrite se tient à votre service pour l'inspecter ou interagir avec la classe.

Des plug-ins qui aident à regarder.

Toschos "T5 Rewrite" -Plugin et Jan Fabrys" Monkeyman Rewrite Analyzer "-Plugin vous guidera à votre guise. J'ai écrit une petite extension pour "T5 Rewrite" pour l'intégrer en douceur au "Monkeyman Rewrite Analyzer", que vous pouvez trouver dans le répertoire "T5 Rewrite" ici sur GitHub .

Le plug-in "Monkeyman" ajoute une nouvelle page, classée dans le menu de l'interface utilisateur administrateur sous Outils . Le plug-in "T5 Rewrite" ajoute un nouvel onglet d'aide à la Paramètres > page Permaliens . Mon extension ajoute également les onglets d'aide à la page Outils mentionnée.

Voici une capture d'écran de ce à quoi ressemble le contenu de l'onglet d'aide "Plugins" de T5 Rewrite.

Vorlage=Pattern|Beschreibung=Explication|Beispiele=Exemples

Notes

Leplug-in"T5 Rewrite" fait un travail formidable en vous aidant à inspecter l'objet de réécriture. Et cela fait encore plus: Cela ajoute de nouvelles possibilités. Par conséquent, il fait partie (du moins dans mes installations) de mon paquet de plugins de base.

    
réponse donnée kaiser 30.11.2012 - 03:38
3

Vous pouvez utiliser cette fonction:

static public function slugify($text)
{
  // replace non letter or digits by -
  $text = preg_replace('~[^\pL\d]+~u', '-', $text);

  // transliterate
  $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);

  // remove unwanted characters
  $text = preg_replace('~[^-\w]+~', '', $text);

  // trim
  $text = trim($text, '-');

  // remove duplicate -
  $text = preg_replace('~-+~', '-', $text);

  // lowercase
  $text = strtolower($text);

  if (empty($text)) {
    return 'n-a';
  }

  return $text;
}

Son genre de fonctionnement exact de la fonction wp url wurize de wp.

    
réponse donnée Vivek Sancheti 08.06.2016 - 09:35
2

En fait, si vous regardez la fonction principale wp_insert_post (post.php), vous verrez que cela a les effets suivants:

$data['post_name'] = wp_unique_post_slug( sanitize_title( $data['post_title'], $post_ID ), $post_ID, $data['post_status'], $post_type, $post_parent );

$wpdb->update( $wpdb->posts, array( 'post_name' => $data['post_name'] ), $where );

L'essentiel à noter est d'utiliser à la fois wp_unique_post_slug et sanitize_title:

wp_unique_post_slug( sanitize_title( 
    
réponse donnée Jahmic 26.09.2016 - 11:38
0

Pardonnez de reprendre une vieille question, mais j'avais la même nécessité que celle qui a été trouvée, cette méthode fonctionne parfaitement pour moi:

$some_string = "DON'T STOP ME NOW!";
$slug = sanitize_title(sanitize_title($some_string, '', 'save'), '', 'query');
echo $slug; // dont-stop-me-now

Cette méthode utilise une double désinfection.

Le premier utilise le mode save , qui supprime les balises HTML et PHP et supprime les accents (les caractères accentués sont remplacés par des équivalents non accentués).

Le second mode query garantit que tous les espaces sont remplacés par des tirets - et que les autres signes de ponctuation sont supprimés.

J'espère que ça aide quelqu'un! :)

    
réponse donnée GigiSan 05.06.2018 - 12:23

Lire d'autres questions sur les étiquettes