CPT-Unterseiten-URL erneut schreiben, um Abfrage-Var zu unterstützen

Ich habe einige Probleme mit Rewrite-Regeln. Ich habe eine URL wie folgt:

http://www.domain.com/post-type/parent-page/child-page/section-id

Was ich via Query vars behandeln möchte

http://www.domain.com/post-type/parent-page/child-page?section=section-id

Ich habe dieses Tag und Regel festgelegt:

add_action('init', 'custom_rewrite_tag', 10, 0); function custom_rewrite_tag() { add_rewrite_tag('%section%', '([^(&)]+)'); } add_action('init', 'custom_rewrite_rule', 10, 0); function custom_rewrite_rule() { add_rewrite_rule('post-type/(.+?)/(.+?)/(.+?)/?$', 'index.php?pagename=$matches[1]/$matches[2]&section=$matches[3]','top'); } 

Die Seite ist jedoch 404, und die Ausgabe von $wp->matched_query zeigt, dass sie nicht meine Regel auswählt, sondern eine weiter unten in der Liste der Regeln (die automatisch von WP erstellt wurde). Es entspricht tatsächlich der letzten Regel im Array $wp_rewrite->wp_rewrite_rules() , die mit post-type beginnt.

Sonderbare Sache ist, dass, wenn ich die Regel zu ändern:

 add_rewrite_rule('post-type/(.+?)/(.+?)/(.+?)/?$', 'index.php?p=1234567&extravar=$matches[1]/$matches[2]&section=$matches[3]','top'); 

(Das heißt, die Seite absichtlich 404 zu machen, indem man zu einer ID geht, die nicht existiert, und einfach die Vars als Referenz $wp->matched_query ) $wp->matched_query zeigt meine Regex, und die URL ist so wie sie sein sollte ( index.php?p=1234567&extravar=parent-page/child-page&section=section-id )

Aus welchem ​​Grund verursacht meine Weiterleitungs-URL, dass die Rewrite-Engine meine Regel überspringt? Ist etwas mit pagename ?

Bearbeiten : Zusätzliche Tests haben ergeben, dass die direkte Verwendung von http://www.domain.com/post-type/?pagename=parent-page/child-page&section=section-id funktioniert. Der pagename ist offensichtlich gültig.

Edit 2 : Mehr Tests, änderte den Aufruf von add_rewrite_rule , um auch nach dem Post-Typ zu add_rewrite_rule … No Dice:

 add_rewrite_rule('post-type/(.+?)/(.+?)/(.+?)/?$', 'index.php?post_type=post-type&pagename=$matches[1]/$matches[2]&section=$matches[3]','top'); 

Ich habe auch versucht, nur $matches[2] , immer noch nicht funktioniert:

 add_rewrite_rule('post-type/(.+?)/(.+?)/(.+?)/?$', 'index.php?post_type=post-type&pagename=$matches[2]&section=$matches[3]','top'); 

Das Seltsame ist immer noch, dass beim manuellen Erstellen dieser URLs (wie beim Ausfüllen der Abfragezeichenfolgen) tatsächlich die richtige Seite geladen wird. Ich weiß nicht, was die Rewrite API anders machen würde.

Solutions Collecting From Web of "CPT-Unterseiten-URL erneut schreiben, um Abfrage-Var zu unterstützen"

Okay, nach viel Herumspielen habe ich folgendes gefunden:

  1. Der Regex, den es passierte (beim Überspringen meiner Regel), war practice-area/(.+?)(?:/([0-9]+))?/?$
    • Dies hatte ein $matches Array von 2: parent-page/child-page und eine darauf folgende number , die leer ist, da es in der URL, die ich zu erstellen versuchte, keinen gibt.
    • Auch die URL, zu der es weitergeleitet wurde, war index.php?post-type=$matches[1]&page=$matches[2] . Ich wusste nicht, dass der post-type ein Abfrage-Var-Schlüssel sein könnte. Das hat mich letztendlich auf den richtigen Weg gebracht.
  2. Also habe ich mich entschieden, das direkt zu kopieren, aber anstatt nach einer Zahl zu suchen, suche ich nach einem beliebigen Zeichen
    • Ich habe post-type/(.+?)(?:/(.+))?/?$
    • Das hat nicht funktioniert, weil ich am Ende $matches[1] = parent-page und $matches[2] = child-page/section-id
  3. Also, mit ein bisschen mehr Feinabstimmung, und Verwirrung mit der Faulheit der post-type/(.+)/(.+?)/?$ , kam ich mit post-type/(.+)/(.+?)/?$ , die erfolgreich ersetzt die Regex in (1) oben .
    • $matches[1] = parent-page/child-age und $matches[2] = section-id

Die letzte Rewrite-Regel lautet:

 add_rewrite_rule('post-type/(.+)/(.+?)/?$', 'index.php?post-type=$matches[1]&section=$matches[2]','top');