Hübsche Permalinks für Suchergebnisse mit extra Abfrage var

Ich würde gerne wissen, wie ich eine Such-URL, die auch eine zusätzliche Abfrage Var enthält, in einen schönen Permalink mit wp_redirect und dem template_redirect Hook umschreiben kann.

Ich habe den Code aus dem Nice Search Plugin genommen, der gut funktioniert, um http://example.com?s=africa in http://example.com/search/africa zu ändern:

 add_action( 'template_redirect', 'my_rewrite' ) ); function my_rewrite() { if ( is_search() and false === strpos( $_SERVER['REQUEST_URI'], '/search/' ) ) { wp_redirect( get_bloginfo( 'home' ) . '/search/' . str_replace( ' ', '+', str_replace( '%20', '+', get_query_var( 's' ) ) ) ); exit(); } } 

Aber ich verwende ein Auswahl-Dropdown in Kombination mit dem Relevanssi- Plugin, damit Besucher die Suche auf einen bestimmten Post-Typ eingrenzen können . Dies fügt eine Abfrage vom post_type hinzu, zB http://example.com?s=africa&post_type=features . Ich hätte gerne eine URL wie http://example.com/search/africa/section/features .

Der Nice Search-Code bewirkt, dass die post_type-Abfrage var verloren geht. Also habe ich den folgenden Code ausprobiert:

 function my_rewrite() { if ( is_search() and false === strpos( $_SERVER['REQUEST_URI'], '/search/' ) ) { if ( isset( $_GET['post_type'] ) and '' !== $_GET['post_type'] ) { wp_redirect( get_bloginfo( 'home' ) . '/search/' . str_replace( ' ', '+', str_replace( '%20', '+', get_query_var( 's' ) ) ) . '/section/' . str_replace( ' ', '+', str_replace( '%20', '+', get_query_var( 'post_type' ) ) ) ); } else { wp_redirect( get_bloginfo( 'home' ) . '/search/' . str_replace( ' ', '+', str_replace( '%20', '+', get_query_var( 's' ) ) ) ); } exit(); } } 

aber WordPress denkt jetzt, dass der Suchbegriff africa/section/features .

Gibt es eine Möglichkeit, den Suchbegriff und die Abfrage var alle in einem schönen Permalink zu halten?

Danke Simon

Solutions Collecting From Web of "Hübsche Permalinks für Suchergebnisse mit extra Abfrage var"

Um die Regeln für das Umschreiben von search_rewrite_rules zu ändern, können Sie den Filter search_rewrite_rules . Sie können entweder die zusätzlichen Rewrite-Regeln hinzufügen, die den Post-Typen entsprechen, oder Sie können die Standard-Suchumschreibungsstruktur ändern, um auch den Post-Typ einzuschließen und dann die Regeln neu zu generieren (es gibt vier Regeln: einen Standard, einen mit Paging) und zwei für Feeds). Da WP_Rewrite::generate_rewrite_rules() Regeln auf jeder “Verzeichnisebene” generiert , erhalten Sie Regeln für /search/[keyword]/section/[post_type]/ , /search/[keyword]/section/ und /search/[keyword]/ . Du brauchst die mittlere Regel nicht, aber es wird nicht schaden, sie zu behalten.

 add_filter( 'search_rewrite_rules', 'wpse15418_search_rewrite_rules' ); function wpse15418_search_rewrite_rules( $search_rewrite_rules ) { global $wp_rewrite; $wp_rewrite->add_rewrite_tag( '%post_type%', '([^/]+)', 'post_type=' ); $search_structure = $wp_rewrite->get_search_permastruct(); return $wp_rewrite->generate_rewrite_rules( $search_structure . '/section/%post_type%', EP_SEARCH ); } 

Um die Regeln zu überprüfen, benutze mein Rewrite Analyzer Plugin .