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.
D'entrée de jeu, je ne peux pas vous donner de page/tutoriel/documentation sur la façon dont WP slug sont générés, mais jetez un coup d'œil à la fonction sanitize_title()
.
Ne vous méprenez pas sur le nom de la fonction, c’est pas destiné à assainir un titre pour un usage ultérieur en tant que titre de page/poste. Il faut un titre et le retourne pour qu'il soit utilisé dans une URL:
Il se peut que il y ait des cas où le noyau effectue quelque chose de plus (vous devez vérifier le code source pour vérifier que sanitize_title()
suffira toujours pour générer exactement exactement la même chose que vous attendez), mais cela devrait couvrir au moins 99%, sinon tous les cas.
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 de réécriture" , qui est un encapsuleur de bas niveau pour la classe WP_Rewrite
, que vous pouvez lire dans Codex }. L'objet global $wp_rewrite
se tient à votre service pour l'inspecter ou interagir avec la classe.
Toschos "T5 Rewrite" -Plugin et Jan Fabrys "Monkeyman Rewrite Analyzer" -Plugin vous guidera dans votre chemin. 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 compte-rendu "T5 Rewrite" wikie ici sur GitHub .
Le plug-in "Monkeyman" ajoute une nouvelle page, classée dans le menu de l'interface utilisateur administrative sous Outils . Le plug-in "T5 Rewrite" ajoute un nouvel onglet d'aide à la page Paramètres > Permaliens . Mon extension ajoute également les onglets d'aide à la page Tools - mentionnée.
Voici une capture d'écran de ce à quoi ressemble le contenu de l'onglet d'aide "T5 Rewrite" -plugins.
Vorlage = Motif | Beschreibung = Explication | Beispiele = Exemples
Le plug-in "T5 Rewrite" vous aide à inspecter l'objet de réécriture. Et cela fait encore plus: Cela ajoute de nouvelles possibilités. C'est pourquoi (du moins dans mes installations) fait partie de mon paquet de plugins de base.
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;
}
C'est exactement ce que fait la fonction de désinfection d'url wp.
En fait, si vous regardez la fonction principale wp_insert_post (post.php), vous verrez qu’elle effectue les opérations suivantes:
$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(
Pardonnez de reprendre une vieille question, mais j'avais la même nécessité que celle trouvée que 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
, où les balises HTML et PHP sont supprimées et les accents sont supprimés (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 toute autre ponctuation est supprimée.
J'espère que cela aide quelqu'un! :)