web-dev-qa-db-fra.com

Règle de réécriture pour la taxonomie personnalisée

Je suis assez nouveau sur wordpress et j'essaie de créer un blog de recettes.

J'ai créé une taxonomie personnalisée pour les ingrédients:

register_taxonomy( 
    'ingredient', 
    'post', 
    array( 'label' => 'Ingredient', 
           'hierarchical' => true
         ), 
    array( 'rewrite' => array (
                            'slug'=>'recipes-with'
                        )
    );

Tout fonctionne et mes URL sont comme

www.mysite.com/recipes-with/onion

mais j'aimerais que mes urls soient comme

www.mysite.com/recipes-with-onion

J'ai essayé de regarder dans add_rewrite_rule(), mais je n'arrive pas à le faire fonctionner.

Toute aide serait grandement appréciée!

EDIT: Voici comment j'ai résolu le problème avec l'aide de toni_lehtimaki aussi.

1) J'ai supprimé le tableau rewrite dans l'argument args de register_taxonomy afin qu'il devienne:

register_taxonomy( 'ingredient', 'post', array('label'=>'Ingredient', 'hierarchical'=>true));

2) Puis j'ai ajouté des règles de réécriture

add_rewrite_rule('^recipes-with-(.*)/page/([0-9]+)?$','index.php?ingredient=$matches[1]&paged=$matches[2]','top');
add_rewrite_rule('^recipes-with-(.*)/?','index.php?ingredient=$matches[1]','top');

3) La dernière chose à faire était d'ajouter un filtre

add_filter( 'term_link', 'change_ingredients_permalinks', 10, 2 );

function change_ingredients_permalinks( $permalink, $term ) {
    if ($term->taxonomy == 'ingredient') $permalink = str_replace('ingredient/', 'recipes-with-', $permalink);
    return $permalink;
}

4) Flush rewrite rules (vous devez seulement aller dans settings-> permalink et cliquer sur save)

3
checcco

Je suis venu avec cela avec la add_rewrite_rule():

add_rewrite_rule('^recipes-with-([^/]*)/?','index.php?ingredient=$matches[1]','top');

J'ai fait quelques tests pour ce qui précède, et cela fonctionne bien lorsque vous l'utilisez pour une taxonomie à la fois. Voici le code de mon functions.php:

add_action( 'init', 'create_ingredient_tax' );
function create_ingredient_tax() {
    register_taxonomy( 
            'ingredient', 
            'post', 
             array( 'label' => 'Ingredient', 
            'hierarchical' => true
            ), 
            array( 'rewrite' => array (
                        'slug'=>'recipes-with'
                    ))
        );
}
// Remember to flush_rewrite_rules(); or visit WordPress permalink structure settings page
add_rewrite_rule('^recipes-with-([^/]*)/?','index.php?ingredient=$matches[1]','top');

J'ai ensuite utilisé taxonomy-post_format.php template fiel de WordPress vingt-quatorze thème pour vérifier que cela fonctionnait. J'ai également vidé les règles de réécriture pour que la nouvelle règle soit effective.

2
toni_lehtimaki