Warum funktioniert diese Umschreiberegel nicht?

Hier ist das Setup.

Ich habe einen benutzerdefinierten Beitragstyp “Unternehmen”. Ich habe eine benutzerdefinierte Taxonomie ‘Kategorie anzeigen’. Und ich habe eine zweite benutzerdefinierte Taxonomie “Filter”

Beide Taxonomien arbeiten mit dem benutzerdefinierten Post-Typ.

Ich versuche eine URL-Struktur zu erhalten, die so aussieht

www.domain.com/businesses/display Kategorie Begriff / Filterbegriff

Es gibt nur 3 mögliche Optionen für die Kategorie “Anzeigen”, also “essen”, “bleiben” und “spielen”. Die Filter haben dann ziemlich viele Möglichkeiten. Also hier ist die Rewrite-Regel, die ich bis jetzt habe, aber es funktioniert nicht und ich bin mir nicht sicher warum.

function test_add_rewrite_rules() { global $wp_rewrite; $new_rules = array( 'businesses/(eat|stay|play)/(.+)/?$' => 'index.php?post_type=businesses&display_category=' . $wp_rewrite->preg_index(1) . '&filters=' . $wp_rewrite->preg_index(2), 'businesses/(eat|stay|play)/?$' => 'index.php?post_type=businesses&display_category=' . $wp_rewrite->preg_index(1) $wp_rewrite->rules = $new_rules + $wp_rewrite->rules; } add_action( 'generate_rewrite_rules', 'test_add_rewrite_rules' ); 

Ich verwende ein Rewrite-Regel-Inspektor-Plugin, damit ich weiß, dass die Regeln hinzugefügt werden. Aber sie geben nicht die Seiten zurück, die ich möchte. Ich fand diesen Artikel über Neuschreibungsregeln und es half mir, so weit zu kommen, aber ich stecke jetzt fest. Jede Hilfe wäre sehr dankbar!

Aktualisieren

Hier ist der obige Code, aber stattdessen die function add_rewrite_rule verwenden. Ich habe mich jetzt in init eingebunden, weil der Haken generate_rewrite_rules zu spät ausgetriggers hat, damit die neuen Regeln gespeichert werden konnten. Ich habe auch gemerkt, dass ich die ausgelagerten Regeln auch anwenden muss, aber ich bin mir nicht sicher, wie ich das machen soll.

 function test_add_rewrite_rules() { global $wp_rewrite; add_rewrite_rule('businesses/(eat|stay|play)/(.+)/?$', 'index.php?post_type=businesses&display_category=$matches[1]&filters=$matches[2]', 'top'); add_rewrite_rule('businesses/(eat|stay|play)/?$', 'index.php?post_type=businesses&display_category=$matches[1]', 'top'); } add_action( 'init', 'test_add_rewrite_rules' ); 

Solutions Collecting From Web of "Warum funktioniert diese Umschreiberegel nicht?"

Sie müssen Ihre Rewrite-Regeln für den paged Parameter berücksichtigen, da sie dies sonst nicht paged . Es würde ungefähr wie unten gezeigt aussehen.

 function test_add_rewrite_rules() { add_rewrite_rule( 'businesses/(eat|stay|play)/(.+)/page/([0-9]+)/?$', 'index.php?post_type=businesses&display_category=$matches[1]&filters=$matches[2]&paged=$matches[3]', 'top' ); add_rewrite_rule( 'businesses/(eat|stay|play)/page/([0-9]+)/?$', 'index.php?post_type=businesses&display_category=$matches[1]&paged=$matches[2]', 'top' ); } add_action( 'init', 'test_add_rewrite_rules' );