Regulă de rescriere pentru taxonomie personalizată
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)

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ă.
