web-dev-qa-db-ja.com

カスタムエンドポイントにより404ヘッダーが付与される

私はテンプレートをロードする一般的なエンドポイントを書き込もうとしています。返されたヘッダーが404 - ページが見つかりませんという小さな例外を除いて、期待どおりに動作します。書き換えに何か足りないのですか。これが現在の書き換えの様子です。

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

私は解決策を探し回っていましたが、すべてが「ああ、ちょうどあなたの書き換えを洗い流しなさい」と言っています。しかし、私は何度もそれをやって$wp_rewriteで遊んでいました。

3
Howdy_McGee

これがうまくいかなかった唯一の理由かどうかはわかりませんが、2つのことが欠けていました。

  1. テストするための書き換え規則は追加されていません
  2. 私はquery_varsではなくpagenameに対してテストしていました。

これが最終的な解決策です。

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