web-dev-qa-db-fra.com

Ne remplacez pas "|" avec une chaîne vide ("") lors de la génération de slugs à partir du titre

Je travaille pour une entreprise d'architecture et les noms de nos projets se présentent comme suit: house|something, bridge|somewhere, building|whatever.

Maintenant, quand je veux ajouter un nouveau projet nommé comme ça, WordPress le convertit automatiquement en housesomething, bridgesomewhere et le met comme slug. I ' Je préfère de loin garder une sorte de séparateur, par exemple house-something, bridge-somewhere au lieu.

Alors, comment faire WordPress convertir | à - et pas Empty String ("")? Je suis évidemment fatigué de le faire manuellement tout le temps.

Il me semble que c'est très simple à faire. Il suffit d'une simple recherche et de remplacer le genre de chose si l'on sait où chercher (dans le noyau WP ou ailleurs), mais je n'ai pas la moindre idée où chercher, ni quel code éxécuter.

3
Marg9

Lorsque WordPress insère une publication , il exécute le titre via un filtre appelé sanitize_title pour obtenir la limace. Par défaut, il existe une fonction appelée santize_title_with_dashes attaché à ce filtre avec la priorité 10. Cette fonction supprime simplement le |. S'il est entouré d'espaces, ces espaces seront convertis en tirets.

Votre tâche consiste donc à exécuter un filtre sur le même crochet avant (disons, priorité 9) celui par défaut et à remplacer le | avec - avant qu'il ne soit retiré. Comme ça:

add_filter( 'sanitize_title', function ( $title ) {
    return str_replace( '|', '-', $title );
}, 9 );
7
cjbj

Si vous mettez des espaces entre les mots et le séparateur | le permalien inclura automatiquement des tirets entre les mots. Par exemple, essayez ceci comme titre de publication:

house | something, bridge | somewhere

Cela se traduit par la limace:

house-something-bridge-somewhere
1
Michelle