webentwicklung-frage-antwort-db.com.de

Benutzerdefinierter Endpunkt gibt 404-Header

Ich versuche, einen allgemeinen Endpunkt zu schreiben, der eine Vorlage lädt. Es funktioniert wie erwartet mit der kleinen Ausnahme, dass der zurückgegebene Header 404 - Seite nicht gefunden ist. Vermisse ich etwas in meinen Umschreibungen? So sieht das Umschreiben derzeit aus:

/** Register Query Vars **/
function theme_custom_query_vars( $vars ){
    $vars[] = 'map';
    return $vars;
}
add_filter( 'query_vars', 'theme_custom_query_vars' );

/** Register Endpoint **/
function theme_register_endpoints() {
    add_rewrite_endpoint( 'map', EP_PERMALINK );
}
add_action( 'init', 'theme_register_endpoints' );

/** Give Endpoint a Template **/
function endpoint_map_template( $templates = '' ){
    global $wp_query;

    if( ! ( isset( $wp_query->query['pagename'] ) && 'map' == $wp_query->query['pagename'] && ! is_singular() ) ) {
        return $templates;
    }

    include locate_template( 'page-templates/template-map.php', false, true );
    exit;

}
add_filter( 'template_redirect', 'endpoint_map_template' );

Ich habe mich nach einer Lösung umgesehen, aber alles sagt: "Oh, spül deine Umschreibungen!" Aber ich habe das schon mehrere Male gemacht und mit dem $wp_rewrite gespielt (statt nur Permalinks ohne Erfolg zu speichern. Kann jemand darauf hinweisen, was ich vermisse oder falsch mache?

3
Howdy_McGee

Ich bin mir nicht sicher, ob dies der einzige Grund ist, warum es nicht funktioniert hat, aber mir fehlten zwei Dinge.

  1. Ich habe keine Umschreiberegel zum Testen hinzugefügt
  2. Ich habe gegen pagename anstelle von query_vars getestet.

Hier ist die endgültige Lösung:

/** Register Query Vars **/
function theme_custom_query_vars( $vars ){
    $vars[] = 'map';
    return $vars;
}
add_filter( 'query_vars', 'theme_custom_query_vars' );

/** Register Endpoint **/
function theme_register_endpoints() {
    add_rewrite_rule( '^map/?', 'index.php?map=map', 'top' );
    add_rewrite_endpoint( 'map', EP_PERMALINK );
}
add_action( 'init', 'theme_register_endpoints' );

/** Give Endpoint a Template **/
function endpoint_map_template( $templates = '' ){
    global $wp_query;
    $template = $wp_query->query_vars;

    if ( array_key_exists( 'map', $template ) && 'map' == $template['map'] ) {
        include( get_template_directory().'/page-templates/template-map.php' );
        exit;
    }
}
add_filter( 'template_redirect', 'endpoint_map_template' );
2
Howdy_McGee