Regeln neu schreiben und virtuelle Seite abfragen

Meine Frage kommt von diesem . Ich habe die Rewrite-Regeln nie so richtig berührt, sie ergeben für mich immer noch keinen Sinn

Was ich habe

Ich habe erfolgreich den folgenden Link erstellt

http://localhost/wordpress/custom-archive/ 

Dies sollte standardmäßig zu einer 404-Seite führen, da das custom-archive nicht existiert. Es ist das Gleiche wie ein Besuch

 http://localhost/wordpress/category/ 

Dieser Teil funktioniert gut.

Nun, was passiert, kommt dieser Link und wird nur in einem einzigen Post angezeigt, wenn dem einzelnen Post Kategorien und ein Tag zugeordnet sind. Wenn der Beitrag Kategorien und / oder Tags enthält, füge ich die entsprechenden Kategorie-IDs und Tag-IDs dem Link über benutzerdefinierte query_vars . Der Link sieht dann so aus

 http://localhost/wordpress/custom-archive/?cq=21&tq=18,19,20,144 

WEITERE WICHTIGE INFORMATIONEN

  • Ich kann template_include , wenn eines der beiden query_vars existiert, benutze eine benutzerdefinierte Vorlage. Das funktioniert

  • Zeigen Sie die richtigen Posts an, wenn Sie eine benutzerdefinierte Abfrage für diese bestimmte Vorlage haben

MEIN PROBLEM

Obwohl ich Posts mit einer benutzerdefinierten Abfrage (die ich auch beseitigen möchte) bekomme ich die Hauptabfrage 404. Dies kann in meinen Breadcrumbs und in der Browser-Registerkarte angezeigt werden, die “Seite nicht gefunden” anzeigt

WAS ICH VERSUCHT HABE

Ich habe pre_get_posts , um die Werte aus meinem benutzerdefinierten query_vars zu erhalten, um die query_vars zu ändern, aber das funktioniert nicht, da WordPress versucht, die Seite als Post oder einzelne Seite zu lesen

Ich habe auch versucht, Regeln umzuschreiben, was auch meiner Sache nicht hilft. Das Problem hier ist, ich kann wirklich nicht die richtige Kombination bekommen. Ich weiß, dass ich irgendwie WordPress mitteilen muss, dass diese Seite ein benutzerdefiniertes Archiv und kein Post oder eine Seite ist, und dann die Werte von meinem benutzerdefinierten query_vars in einer tax_query , um Posts zu erhalten, die zu den in der benutzerdefinierten query_vars angegebenen Kategorien query_vars

Irgendwelche Vorschläge zu den richtigen Rewrite-Regeln, um dies zu erreichen?

BEARBEITEN

Ich weiß, dass ich irgendwie umschreiben muss

 http://localhost/wordpress/custom-archive/?cq=XXX&tq=XXX 

zu etwas, wo WordPress verstehen kann, dass dies eine benutzerdefinierte Archivseite (oder virtuelle Seite) für den Beitragstyp post , und die Beiträge, die auf der Seite angezeigt werden sollten Beiträge übereinstimmen, die in den Kategorien von cq UND hat Tags, die ist gegeben durch tq .

Dies ist eine Grundidee dessen, was in meiner benutzerdefinierten Vorlage mit einer benutzerdefinierten Abfrage funktioniert

 $args = [ 'post_type' => 'post', 'tax_query' => [ 'relation' => 'AND', [ 'taxonomy' => 'category', 'terms' => get_query_var( 'cq' ), ], [ 'taxonomy' => 'post_tag', 'terms' => get_query_var( 'tq' ), ], ], ]; $q = new WP_Query( $args ); 

Ich muss dies übersetzen, um für die Hauptabfrage zu arbeiten. Einfach das obige zu pre_get_posts funktioniert nicht, die Seite ist einfach 404, also muss die URL irgendwie umgeschrieben werden, damit dies funktioniert

Solutions Collecting From Web of "Regeln neu schreiben und virtuelle Seite abfragen"

Sie können ein Post-Archiv erstellen, indem Sie post_type=post in Ihrer Rewrite-Regel post_type=post :

 function custom_archive_rule() { add_rewrite_rule( 'custom-archive/?', 'index.php?post_type=post', 'top' ); } add_action( 'init', 'custom_archive_rule' ); 

WordPress wird dies als is_home identifizieren, daher müssen Sie es in pre_get_posts durch das Vorhandensein Ihrer zusätzlichen pre_get_posts anvisieren.

 function custom_arcive_tax( $query ) { if ( $query->is_home() && $query->is_main_query() && isset( $_GET['cq'] ) ) { $tax_query = array( array( 'taxonomy' => 'category', 'terms' => $_GET['cq'], ) ); $query->set( 'tax_query', $tax_query ); } } add_action( 'pre_get_posts', 'custom_arcive_tax' );