web-dev-qa-db-fra.com

Taxonomie personnalisée et permalien post-slug

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:

  • une taxonomie states et un terme de taxonomie newyork
  • une publication personnalisée de type 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ée

PS - 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%'
      )
    )
  );
}
1
Atticus

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');
1
Atticus