web-dev-qa-db-fra.com

Ajouter une règle de réécriture à la structure permalien

J'ai une configuration de structure personnalisée pour les publications dans Réglages> Permaliens en tant que:

/%category%/%post_id%-%postname%

Cela fonctionne très bien pour la plupart de mes publications, mais il y a une catégorie pour laquelle je veux supprimer le post_id. Elle ressemble à ceci:

/%category%/%postname%

Donc, si la catégorie est MOUSE et que le post-id est 123 et que postname (slug) est my-great-mouse-post, le permalien se présente comme suit:

mydomain.com/mouse/123-my-great-mouse-post

Mais si la catégorie est DOG, alors je ne veux pas de post-id, il devrait donc ressembler à ceci:

mydomain.com/dog/my-great-dog-post

Je comprends comment utiliser les actions et les filtres dans le fichier functions.php et dans un plugin. Je pense que je veux utiliser add_rewrite_rule, mais je ne comprends vraiment pas comment écrire la règle, car la regex est compliquée et je ne la comprends pas.

3
jsherk

1. Ajoutez une nouvelle règle de réécriture:

add_action('init', function()
{
    add_rewrite_rule('^dog/([^/]+)/?$', 'index.php?cat=dog&name=$matches[1]', 'top');
}, 10, 0);

2. Filtrez le lien de publication:

add_filter('post_link', function($post_link, $post, $leave_name = false, $sample = false)
{
    if ( is_object_in_term($post->ID, 'category', 'DOG') ) {
        $post_link = str_replace($post->ID . '-', '', $post_link);
    }

    return $post_link;

}, 10, 4);

Essayez-le dans votre functions.php. J'espère que ça marche pour toi!

3
Jane Brye