Ich verwende diesen Code, um einen Umschreibe-Endpunkt in einem benutzerdefinierten Plugin zu erstellen:
function setup_seo_endpoing() {
add_rewrite_endpoint( 'item', EP_ALL );
}
add_action( 'init', 'setup_seo_endpoint');
Dieser Code läuft/wird aufgerufen und der Endpunkt funktioniert mit einem Problem :
Wenn ich die Homepage besuche (sagen wir mal http://example.com
), wird tatsächlich die richtige statische Seite pro Dashboard-Einstellungen angezeigt.
Wenn ich versuche, die Homepage mit dem festgelegten benutzerdefinierten Endpunkt (z. B. http://example.com/item/ct588
) aufzurufen, zeigt WordPress die Blog-Liste an.
Der Vollständigkeit halber benutze ich den folgenden Code (innerhalb einer Funktion), um den Wert vom Endpunkt abzurufen.
global $wp_query;
if ( isset( $wp_query->query_vars[ 'item' ] ) ) {
// ... do stuff
// This does not fire
}
Relevante Hinweise:
http://example.com/sample-page/item/ct0608/
Warum wird das Blog-Listing anstelle der statischen Homepage angezeigt?
Ist es möglich, benutzerdefinierte Umschreibe-Endpunkte auf der Homepage zu verwenden? Kein Artikel, den ich gefunden habe, zeigt tatsächlich an, dass dies auf der Homepage funktionieren würde/könnte.
Sie müssen eine Kombination aus add_rewrite_tag
und add_rewrite_rule
verwenden
function setup_seo_endpoint() {
// Ensures the $query_vars['item'] is available
add_rewrite_tag( '%item%', '([^&]+)' );
// Requires flushing endpoints whenever the
// front page is switched to a different page
$page_on_front = get_option( 'page_on_front' );
// Match the front page and pass item value as a query var.
add_rewrite_rule( '^item/([^/]*)/?', 'index.php?page_id='.$page_on_front.'&item=$matches[1]', 'top' );
// Match non-front page pages.
add_rewrite_rule( '^(.*)/item/([^/]*)/?', 'index.php?pagename=$matches[1]&static=true&item=$matches[2]', 'top' );
}
add_action( 'init', 'setup_seo_endpoint', 1);
// http://wordpress.stackexchange.com/a/220484/52463
// In order to keep WordPress from forcing a redirect to the canonical
// home page, the redirect needs to be disabled.
function disable_canonical_redirect_for_front_page( $redirect ) {
if ( is_page() && $front_page = get_option( 'page_on_front' ) ) {
if ( is_page( $front_page ) ) {
$redirect = false;
}
}
return $redirect;
}
add_filter( 'redirect_canonical', 'disable_canonical_redirect_for_front_page' );