web-dev-qa-db-fra.com

Le point de terminaison personnalisé donne l'en-tête 404

J'essaie d'écrire un point d'extrémité général qui charge un modèle. Cela fonctionne comme prévu à la petite exception près que l'en-tête renvoyé est 404 - page non trouvée. Est-ce que je manque quelque chose dans mes réécritures? Voici à quoi ressemble la réécriture:

/** 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' );

Je cherchais une solution, mais tout indique "Oh, effacez vos réécritures!" mais je l'ai fait plusieurs fois et joué avec le $wp_rewrite (par opposition à la sauvegarde de permaliens sans résultat. Quelqu'un peut-il indiquer ce que je manque ou ce que je fais de travers?

3
Howdy_McGee

Je ne suis pas sûr que ce soit la seule raison pour laquelle cela n'a pas fonctionné, mais il me manquait deux choses.

  1. Je n'ai pas ajouté de règle de réécriture pour tester
  2. Je testais contre pagename au lieu de query_vars.

Voici la solution finale:

/** 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