我试图编写一个加载模板的通用端点。它可以像预期的那样工作,但有一个小的例外,返回的标题是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
(相比之下,仅仅保存permalinks却毫无用处。有人能指出我遗漏了什么或做错了什么吗?
最合适的回答,由SO网友:Howdy_McGee 整理而成
我不确定这是否是它不起作用的唯一原因,但我错过了两件事。
我没有添加任何类型的重写规则来测试pagename
而不是query_vars
.最后的解决方案是:
/** 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\' );