Dynamische Endpunkte

Ich habe eine databasetabelle außerhalb von WordPress, für die ich Endpunkte erstellen muss. Ich habe eine Seite /cars/ wo ich eine Seitenvorlage verwenden möchte, um Links zu generieren. Ich möchte für die URL aussehen wie /cars/camaro/ ( /cars/%model%/ ). Ursprünglich dachte ich, ich könnte es mit Endpunkten machen, aber ich war mir nicht sicher, wie man sie dynamisch machen könnte, basierend auf dem Slug, der aus der Model-Tabelle gezogen wurde. Ich war mir auch nicht sicher, ob es einfacher wäre, Permalink-Struktur-Tags zu verwenden oder was besser war.

Ich bin mir nicht einmal ganz sicher, wo ich anfangen soll, ich habe “statische” Endpunkte erstellt, also hatte ich eine Basis, von der ich abspringen konnte, aber wenn ich zum Anfragefilter komme, bin ich mir nicht sicher, was ich tun soll.

 /** * Add endpoint to handle models */ function theme_endpoints() { add_rewrite_endpoint( 'cars', 'EP_PAGES' ); // Since cars is our base } add_action( 'init', 'theme_endpoints' ); /** * Filter request variables * @param array $vars * @return array $vars */ function theme_perma_requests( $vars ) { if( isset( $vars['model'] ) ) { $vars['model_template'] = true; } return $vars; } add_filter( 'request', 'theme_perma_requests' ); 

Ich meine, das erlaubt mir, mein template_include (weshalb ich die model_template Variable hinzugefügt model_template ), aber es schreibt die URL nicht wirklich um. Also habe ich angefangen mit add_rewrite_rule()

 /** * Theme rewrite rules */ function theme_rewrite_rules() { add_rewrite_rule( '^cars/([^/]*)/?$', 'index.php?page_id=8&model=$matches[0]', 'top' ); } add_action( 'init', 'theme_rewrite_rules' ); 

Ich habe meine Permalinks gelöscht, aber die Umschreibungen scheinen nicht zu wirken, ich kann nur annehmen, dass etwas nicht stimmt mit der Art und Weise wie die Regel geschrieben wird.


Brauche ich sowohl die Endpoint- als auch die Rewrite-Regel oder nur eine der beiden? Gehe ich alles falsch? Wie kann ich die Permalink-Struktur von /cars/camaro/ ?

Solutions Collecting From Web of "Dynamische Endpunkte"

10up-Engineering Best Practices als ein gutes Beispiel dafür, wie dies zu erreichen ist. Sie fügen im Grunde ein neues Rewrite-Tag und eine neue Rewrite-Regel hinzu und verwenden dann die Aktion template_redirect, mit der Sie Ihre benutzerdefinierte Aktion zurückgeben.

Hier ist der Code:

 add_action( 'init', function() { add_rewrite_tag( '%model%', '([^/]+)' ); add_rewrite_rule( 'cars/([^/]+)/?', 'index.php?model=$matches[1]', 'top' ); } ); add_action( 'template_redirect', function() { global $wp_query; $model = $wp_query->get( 'model' ); if ( ! empty( $model ) ) { // Return stuff here } } ); 

Vergessen Sie nicht, Permalinks zu spülen, bevor Sie Ihren neuen Endpunkt ausprobieren! Mit wp-cli:

 wp rewrite flush 

Oder verwenden Sie die Admin-Benutzeroberfläche: http: //example.local/wp-admin/options-permalink.php und klicken Sie auf Speichern.