it-swarm.com.de

Wordpress gibt 404 bei einem benutzerdefinierten Überschreibregelkonflikt in Parametern zurück

Ich habe die Schritte auf der Antwort hier verfolgt und es hat Wunder gewirkt.

Aber mein Problem ist in diesem Teil,

auf dem 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);
} 

meine 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);
} 

Da meine Taxonomie zwei Ebenen hat, konnte sie nicht erkennen, ob der 2. Parameter (custom-post-type-base/(.+)/[here]/) ein benutzerdefinierter Beitrag oder eine benutzerdefinierte Taxonomie ist. Er gibt die benutzerdefinierte Taxonomie korrekt zurück, aber 404 für einen benutzerdefinierten Beitragstyp mit dem Beitragstyp, der nach kategorisiert ist die übergeordnete Taxonomie.

Siehe Beispiel-URLs:

"/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

Du hast:

  • Eine Umschreiberegel, die den Beitrag im 5. Teil behandelt
  • Eine Umschreibungsregel für den Taxonomieteil

Eine Umschreiberegel, die den Beitrag im 2. oder 3. Teil behandelt, ist nicht in der obigen Liste aufgeführt, weshalb Sie eine 404 erhalten.

Wenn wir diese Umschreiberegel anwenden:

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

Und ändern Sie es leicht mit gesundem Menschenverstand, nämlich:

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

    custom_post_type_name = $ entspricht [ 4 ]

    // Meine benutzerdefinierte Struktur wird immer den Post-Namen als 5 -tes uri-Segment haben

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

    custom_post_type_name = $ entspricht [ 3 ]

    // Meine benutzerdefinierte Struktur hat immer den Post-Namen als 4 -tes uri-Segment

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

    custom_post_type_name = $ entspricht [ 2 ]

    // Meine benutzerdefinierte Struktur wird immer den Post-Namen als 3 -tes uri-Segment haben

usw

Platzieren Sie diese in aufsteigender Reihenfolge vor Ihrer bestehenden Regel und wiederholen Sie sie so oft wie nötig

1
Tom J Nowell