我使用以下代码在自定义插件中创建重写端点:
function setup_seo_endpoing() {
add_rewrite_endpoint( \'item\', EP_ALL );
}
add_action( \'init\', \'setup_seo_endpoint\');
此代码正在运行/被调用,并且端点可以工作
with one problem:
如果我访问主页(比如http://example.com
), 它实际上是根据仪表板设置显示正确的静态页面。
如果我尝试使用自定义端点集访问主页(例如http://example.com/item/ct588
), WordPress显示博客列表。
为了完整起见,下面的代码是我(在函数内部)用来从端点获取值的代码。
global $wp_query;
if ( isset( $wp_query->query_vars[ \'item\' ] ) ) {
// ... do stuff
// This does not fire
}
相关注释:
我已经将设置=>阅读=>首页设置为静态页面我已将设置=>阅读=>博客页面设置设置为其他页面重写规则/查询变量do work 正确显示内部页面URL:http://example.com/sample-page/item/ct0608/
我已多次保存永久链接Why does the blog listing 是否显示而不是静态主页?Is it possible to use custom rewrite endpoints on the home page? 我没有找到任何文章表明这会/可能会在主页上起作用。
最合适的回答,由SO网友:bswatson 整理而成
您需要结合使用add_rewrite_tag
和add_rewrite_rule
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\' );