Verwenden benutzerdefinierter / dynamischer “slug” für eine Seite

Ich habe eine benutzerdefinierte Seite, die eine Vorlage namens “Stores” http://example.com/stores/ . Diese Seite enthält eine Liste von Staaten und / oder Unternehmen als Kategorien. Für dieses System habe ich einen benutzerdefinierten Post-Typ “Geschäft”, der einer einzelnen Kategorie (Staat oder Firma) zugeordnet werden kann,

Jedes Geschäft ist keine bestimmte Seite, sondern Kontaktinformationen, die in einer Art Layout im Telefonbuchstil für Staaten / Unternehmen angezeigt werden.

Das Problem, das ich jetzt habe, ist, wie kann ich zulassen, dass meine Vorlage “Stores” URL-Anfragen von http://example.com/stores/california/ akzeptiert (ohne 404-Fehler zu casting)?

California in diesem Sinne keine Seite, sondern eine Frage. Ich möchte auch nicht manuell eine Seite für jede dieser Kategorien erstellen (wie es aus der database gezogen wird, und automatisch). Ich könnte ?state=california für diesen Zweck verwenden, aber ich würde gerne den richtigen Weg erfahren, um diese URL innerhalb von WordPress zu erlauben.

Ist der richtige Weg, die Datei htaccess manuell zu bearbeiten? Würde das nicht überschrieben, wenn Sie die Permalink-Struktur bearbeiten? Wie würde ich den htaccess formatieren?

Solutions Collecting From Web of "Verwenden benutzerdefinierter / dynamischer “slug” für eine Seite"

Erstellen Sie eine Seitenvorlage

Füge eine neue Seite hinzu und gib ihr die Slug stores

Fügen Sie eine öffentliche Abfragevariable hinzu

 add_filter('query_vars', 'add_state_var', 0, 1); function add_state_var($vars){ $vars[] = 'state'; return $vars; } 

Fügen Sie eine Rewrite-Regel hinzu

Dadurch wird Ihre Anfrage an Ihre stores Seite weitergeleitet.

 add_rewrite_rule('^stores/([^/]*)/?','index.php?post_type=page&name=stores&state=$matches[1]','top'); 

Innerhalb Ihrer Vorlage

Sie können wie folgt auf Ihre Statusvariable zugreifen:

  $state = get_query_var('state'); 

Lege deine Permalinks ab

Rufen Sie Einstellungen-> Permalinks auf, um Ihre Permalinks zu löschen und Ihre Rewrite-Regel dem Stack hinzuzufügen.

Ich habe die Antwort auf der WordPress-Website gefunden und die Lösung getestet: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule#Using_Custom_Templates_with_custom_querystring

Erstellen Sie eine Seitenvorlage

Erstellen Sie eine Seitenvorlage für Stores und wenden Sie sie auf eine Seite an.

 $stores = get_query_var('stores'); 

Fügen Sie ein Rewrite-Tag hinzu

Fügen Sie in Ihrer functions.php ein Rewrite-Tag hinzu, das es WordPress ermöglicht, nach dem bestimmten Tag zu suchen

 function custom_rewrite_tag() { add_rewrite_tag('%stores%', '([^&]+)'); } add_action('init', 'custom_rewrite_tag', 10, 0); 

Fügen Sie eine Rewrite-Regel hinzu

Um nun die URL zu formatieren und mit den vars auf die index.php zu verweisen, geben Sie in Ihrer functions.php Folgendes ein. Hinweis: Sie müssen die Seiten-ID auf die Seiten-ID der Shop-Seite aktualisieren (in diesem Beispiel 12).

  function custom_rewrite_rule() { add_rewrite_rule('^stores/([^/]*)/?','index.php?page_id=12&stores=$matches[1]','top'); } add_action('init', 'custom_rewrite_rule', 10, 0); 

Von dort aus können Sie zu / stores / south-dakota / navigieren und die Variable $ stores in Ihrer Seitenvorlage wird “south-dakota” sein.

Ich habe auch versucht, das Gleiche zu tun und habe es schließlich auf folgende Weise getan.

Fügen Sie Ihrer functions.php innerhalb Ihres Themas den folgenden Code hinzu.

 add_filter('query_vars', 'add_state_var', 0, 1); function add_state_var($vars){ $vars[] = 'state'; return $vars; } add_rewrite_rule('^stores/([^/]+)/?$','index.php?pagename=stores&state=$matches[1]','top'); 

In Ihrer Vorlage erhalten Sie die Abfragevariable mit diesem

 $state = get_query_var('state');