Regulă de rescriere pentru taxonomie personalizată

12 feb. 2014, 13:25:50
Vizualizări: 15.5K
Voturi: 3

Sunt destul de nou în WordPress și încerc să creez un blog de rețete.

Am creat o taxonomie personalizată pentru ingrediente:

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

Totul funcționează și URL-urile mele arată astfel:

www.mysite.com/recipes-with/onion

dar aș dori ca URL-urile să arate astfel:

www.mysite.com/recipes-with-onion

Am încercat să mă uit la add_rewrite_rule(), dar nu reușesc să o fac să funcționeze.

Orice ajutor ar fi foarte apreciat!

EDITAT: Iată cum am rezolvat problema cu ajutorul lui toni_lehtimaki.

1) Am eliminat array-ul rewrite din argumentele funcției register_taxonomy, astfel a devenit:

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

2) Apoi am adăugat câteva reguli de rescriere

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) Ultimul lucru de care am avut nevoie a fost să adaug un filtru

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) Actualizează regulile de rescriere (trebuie doar să mergi la setări->legături permanente și să dai click pe salvare)

0
Toate răspunsurile la întrebare 1
0

Am venit cu această soluție folosind add_rewrite_rule():

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

Am făcut câteva teste pentru codul de mai sus și funcționează bine atunci când îl folosești pentru o singură taxonomie. Iată codul din 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'
                    ))
        );
}
// Nu uita să folosești flush_rewrite_rules(); sau să vizitezi pagina de setări a structurii de permalink-uri din WordPress
add_rewrite_rule('^recipes-with-([^/]*)/?','index.php?ingredient=$matches[1]','top');

Apoi am folosit șablonul taxonomy-post_format.php din tema WordPress twentyfourteen pentru a testa dacă funcționează. De asemenea, am resetat regulile de rescriere (rewrite rules) pentru ca noua regulă să devină efectivă.

12 feb. 2014 16:11:47