webentwicklung-frage-antwort-db.com.de

schreiben Sie den Endpunkt neu, der auf der Homepage nicht funktioniert

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:

  1. Ich habe die Einstellungen => Lesen => Startseite als statische Seite festgelegt.
  2. Ich habe die Einstellungen => Lesen => Blogseite auf eine andere Seite gesetzt.
  3. Die Umschreiberegeln/query_var funktionieren ordnungsgemäß für innere Seiten-URLs: http://example.com/sample-page/item/ct0608/
  4. Ich habe mehrere Male Permalinks gespeichert

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.

2
cale_b

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' );
3
bswatson