Benutzerdefinierte Abfragevariable – Holen Sie sich WordPress, um auf die nette Permalink-URL umzuleiten

Ich habe in den letzten Stunden nach einer Antwort gesucht, konnte aber nichts finden, was mich in die richtige Richtung weist. Einige Ratschläge würden sehr geschätzt werden!

  • Was ich schon habe:
    • Ein benutzerdefinierter Beitragstyp 'stores'
    • Eine öffentliche 'query_vars' Filter-Hook 'query_vars' : 'state' .
    • Die entsprechende Rewrite-Regel wurde hinzugefügt:
      • Muster: stores/state/([^/]+)/?$
      • index.php?post_type=stores&state=$matches[1] : index.php?post_type=stores&state=$matches[1]
    • Da 'state' ein benutzerdefiniertes Meta-Feld ist, habe ich eine function hinzugefügt, die in den pre_get_posts Aktions-Hook pre_get_posts und alle Abfragemagie meta_query (Erstellen von meta_query usw.), um nur die übereinstimmenden stores auf der Archivseite anzuzeigen.

Das funktioniert alles ganz gut:

Wenn ich also www.myurl.com/stores/state/austria meine Archivseite nur österreichische Stores.

Um die Speicher nicht nur nach URL zu filtern, enthält die Archivseite ein Formular, um sie zu filtern. Hier kommt mein Problem auf: Das Formular übergibt offensichtlich nur POST- oder GET-Daten, zB wie folgt:

 www.myurl.com/stores/?state=austria 

Ich kann damit umgehen, indem ich einen Check in meine pre_get_posts Filterfunktion hinzufüge:

 if( isset( $_REQUEST['state'] ) || $query->get('state') != "" ) { 

Dies ist jedoch ein wenig schmutzig, da ich möchte, dass WordPress automatisch auf die umgeschriebene URL umleitet:

 www.myurl.com/stores/?state=austria 

sollte umgeleitet werden

 www.myurl.com/stores/state/austria 

genauso wie es gemacht wird, wenn ich eine Seite oder Post ID eingebe und es zum Permalink weiterleitet.

Gibt es einen weiteren Aktionshaken, den ich noch nicht entdeckt habe? Wie würde ich WordPress dazu bringen, automatisch auf den hübschen Permalink umzuleiten?

Danke für jeden Hinweis.

Solutions Collecting From Web of "Benutzerdefinierte Abfragevariable – Holen Sie sich WordPress, um auf die nette Permalink-URL umzuleiten"

Ich habe selbst eine Lösung gefunden. Kein JavaScript erforderlich, nur eine weitere Vorlagenfunktion. URL-Erstellung erfolgt manuell.

Die Idee ist, den Haken ‘template_redirect’ zu verwenden, zu prüfen, ob die angeforderte Seite die entsprechende Filialarchivseite ist, dann nach $ _REQUEST vars zu suchen und eine neue URL zu erstellen. Schließlich redirect zu dieser URL.

 function my_template_redirect() { if ( is_post_type_archive( 'stores' ) ) { if ( isset( $_REQUEST['state'] ) ) { $myurl = get_post_type_archive_link( 'stores' ); if (substr($myurl, -1) != "/") $myurl .= "/"; $myurl .= "state/"; $myurl .= trim( sanitize_title_for_query( $_REQUEST['state'] ) ) . "/"; exit( wp_redirect( $myurl ) ) ; } } } add_action( 'template_redirect', 'my_template_redirect' ); 

functioniert ziemlich gut. Korrekturen / bessere Ideen sind natürlich willkommen.

Vielleicht ist das nicht die beste Lösung, noch die Lösung, die Sie suchen, aber das kommt mir jetzt in den Sinn, jemand kann Ihnen vielleicht einen anderen geben.

Ich denke in der Seitenform hast du so etwas:

  

Mit Javascript ist es einfach, Benutzer an die hübsche URL zu senden.

(Ich habe Javascript hier, Sie stellen es in eine separate js-Datei und fügen Sie es mit wp_enqueue_script )

Ungetestet:

 jQuery().ready(function($) { $('select[name="state"]').change(function(e){ e.preventDefault(); var state = $(this).children('option:selected').val(); window.location.href = window.location.href + '/' + state; }); });