J'ai une taxonomie personnalisée et un type de publication personnalisé. Je vise la structure permalien suivante:
{custom taxonomy}/{custom taxonomy term}/{custom post slug}
Ou à tout le moins
{custom taxonomy term}/{custom post slug}
J'ai actuellement
{%category%}/{%postname%}
, mais pas de dés.
Par exemple, supposons que j'ai:
states
et un terme de taxonomie newyork
jobs
avec une publication qui a le slug wordpress-developer
Je cherche à atteindre:
states/newyork
: une archive de toutes les jobs
dans newyork
, cela fonctionne.states/newyork/wordpress-developer
: page du message personnalisé utilisant la taxonomie et le terme comme base dans le permalien.L’objectif est de naviguer à partir de states/newyork
(liste des "travaux" et de passer dans le message individuel sans déroger à la structure de lien permanent jusqu’à présent, donc states/newyork/wordpress-developer
Les problèmes rencontrés:
states/newyork/wordpress
donne un 404
newyork/wordpress-developer
redirige vers jobs/wordpress-developer
Résultat souhaité:
states/newyork/wordpress-developer
atterrissant sur la page de type de publication personnaliséePS - ne pas construire un autre tableau de bord, mais juste comme exemple :)
taxonomie actuelle et numéro de registre de poste:
function register() {
register_taxonomy('state', 'district', array(
'labels' => array(
'name' => 'States',
'singular_name' => 'State',
'search_items' => 'Search States',
'all_items' => 'All States',
'parent_item' => 'Parent State',
'parent_item_colon' => 'Parent State:',
'edit_item' => 'Edit State',
'update_item' => 'Update State',
'add_new_item' => 'Add New State',
'new_item_name' => 'New State',
'menu_name' => 'States'
),
'public' => true,
'show_admin_column' => true,
'hierarchical' => true,
'query_var' => true,
'rewrite' => array(
'slug' => 'states',
'with_front' => false
)
));
register_post_type('district',
array(
'labels' => array(
'name' => 'Districts',
'singular_name' => 'Districts'
),
'hierarchical' => true,
'supports' => array('title', 'page-attributes'),
'public' => true,
'has_archive' => 'states',
'rewrite' => array(
'with_front' => false,
'slug' => 'states/%show_category%'
)
)
);
}
J'ai pu résoudre ce problème en définissant une règle de réécriture:
function rewrite_rules($rules) {
$newRules = array();
$newRules['states/(.+)/(.+?)$'] = 'index.php?district=$matches[2]';
return array_merge($newRules, $rules);
}
add_filter('rewrite_rules_array', __NAMESPACE__ . '\\rewrite_rules');