web-dev-qa-db-fra.com

Wordpress renvoie 404 sur le conflit de règle de réécriture personnalisée dans les paramètres

J'ai suivi les étapes sur la répondre ici et cela a fonctionné à merveille.

Mais mon problème est sur cette partie,

sur l'original:

add_filter('rewrite_rules_array', 'mmp_rewrite_rules');
function mmp_rewrite_rules($rules) {
    $newRules  = array();
    $newRules['custom-post-type-base/(.+)/(.+)/(.+)/(.+)/?$'] = 'index.php?custom_post_type_name=$matches[4]'; // my custom structure will always have the post name as the 5th uri segment
    $newRules['custom-post-type-base/(.+)/?$']                = 'index.php?taxonomy_name=$matches[1]'; 

    return array_merge($newRules, $rules);
} 

ma version:

add_filter('rewrite_rules_array', 'mmp_rewrite_rules');
function mmp_rewrite_rules($rules) {
    $newRules  = array();
    $newRules['custom-post-type-base/(.+)/(.+)/(.+)/?$'] = 'index.php?custom_post_type=$matches[3]'; 
    $newRules['custom-post-type-base/(.+)/?$']           = 'index.php?custom_taxonomy=$matches[1]';

    return array_merge($newRules, $rules);
} 

Étant donné que ma taxonomie comporte deux niveaux, elle ne peut pas savoir si le 2nd paramètre (custom-post-type-base/(.+)/[here]/) est une publication personnalisée ou une taxonomie personnalisée. Il est renvoyé correctement dans la taxonomie personnalisée, mais renvoie 404 dans un type de publication personnalisé avec le type de publication en cours de classement. la taxonomie parente.

Voir des exemples d'URL:

"/custom-post-type-base/taxonomy-parent/taxonomy-child/single-custom-post-type/"
/*works as single custom post*/

"/custom-post-type-base/taxonomy-parent/taxonomy-child/"
/*works as custom taxonomy page*/

"/custom-post-type-base/taxonomy-parent/"
/*works as custom taxonomy page too*/

"/custom-post-type-base/taxonomy-parent/single-custom-post-type/"
/*returns a 404*/
1
reikyoushin

Tu as:

  • Une règle de réécriture qui gère le poste étant dans la 5ème partie
  • Une règle de réécriture pour gérer la partie taxonomie

Une règle de réécriture pour gérer le poste étant dans la 2ème ou 3ème partie n'est pas dans la liste ci-dessus, d'où pourquoi vous obtenez un 404.

Si nous prenons cette règle de réécriture:

$newRules['basename/(.+)/(.+)/(.+)/(.+)/?$'] = 'index.php?custom_post_type_name=$matches[4]'; // my custom structure will always have the post name as the 5th uri segment

Et modifiez-le légèrement en utilisant du bon sens, à savoir:

  • nom_base /(.+)/(.+)/(.+)/(.+) /? $ ....

    custom_post_type_name = $ correspond à [ 4 ]

    // ma structure personnalisée aura toujours le nom du message sous la forme 5 th uri segment

  • nom_base /(.+)/(.+)/(.+)/?$. ...

    custom_post_type_name = $ correspond à [ 3 ]

    // ma structure personnalisée aura toujours le nom du message sous la forme 4 th uri segment

  • nom_base /(.+)/(.+)/?$ ....

    custom_post_type_name = $ correspond à [ 2 ]

    // ma structure personnalisée aura toujours le nom du message sous la forme 3 th uri segment

etc

Placez-les dans l'ordre croissant avant votre règle existante et répétez autant de fois que nécessaire.

1
Tom J Nowell