Ich habe eine Datenbanktabelle außerhalb von WordPress, für die ich Endpunkte erstellen muss. Ich habe eine Seite erstellt, /cars/
auf der ich mithilfe einer Seitenvorlage Links generieren möchte. Ich möchte, dass die URL wie folgt aussieht /cars/camaro/
( /cars/%model%/
). Ursprünglich dachte ich, ich könnte es mit Endpunkten machen, war mir aber nicht sicher, wie ich sie dynamisch machen sollte, basierend auf der aus der Modelltabelle gezogenen Schnecke. Ich war mir auch nicht sicher, ob es einfacher wäre, Permalink Structure-Tags zu verwenden, oder welches besser war.
Ich bin mir nicht einmal ganz sicher, wo ich anfangen soll. Ich habe zuvor "statische" Endpunkte erstellt, sodass ich eine Basis hatte, von der ich springen konnte, aber wenn ich zum request
Filter 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, dies ermöglicht mir mein template_include (weshalb ich die model_template
Variable hinzugefügt habe ), aber die URL wird nicht neu geschrieben. Also fing ich an zu spielenadd_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 geleert, aber die Umschreibungen scheinen nicht wirksam zu sein. Ich kann nur annehmen, dass etwas mit der Schreibweise der Regel nicht stimmt.
Benötige ich sowohl den Endpunkt als auch die Umschreiberegel oder nur eine der beiden? Gehe ich alles falsch? Wie kann ich die Permalink-Struktur von erreichen /cars/camaro/
?
quelle
add_rewrite_tag()
ist ein guter Ausgangspunkt.Antworten:
10up Engineering Best Practices als gutes Beispiel dafür, wie dies erreicht werden kann. Sie fügen im Grunde ein neues Umschreibetag und eine neue Umschreiberegel hinzu und geben dann mit der Aktion template_redirect Ihre benutzerdefinierte Aktion zurück.
Hier ist der Code:
Vergessen Sie nicht, Permalinks zu leeren, bevor Sie Ihren neuen Endpunkt ausprobieren! Verwenden von wp-cli:
Oder verwenden Sie die Admin-Benutzeroberfläche: http: //example.local/wp-admin/options-permalink.php und klicken Sie auf Speichern.
quelle