希望大家都好,我正在WordPress中学习自定义端点。我知道如何创建端点以及它们是如何工作的(有一点)。但当我只想在一个页面上添加一个端点时,我就陷入了困境。让我给你举一个我想做的例子。
以id为77的示例命名的页面像这样设置自定义模板some-template.php
如果用户已设置此模板,请创建端点,如example.com/example/endpoint1
或example.com/example/endpoint2
如果用户打开另一个页面,如示例所示。com/example new/endpoint1,不要创建端点以下是添加端点的方法。
add_action( \'init\', \'add_new_e\' );
add_filter( \'query_vars\', \'filter_vars_e\');
function add_new_e() {
add_rewrite_endpoint( \'mash\', EP_PAGES );
}
function filter_vars_e($vars) {
$vars[] = \'mash\';
return $vars;
}
当插件激活/停用时,我刷新重写规则。
现在的问题是,当我打开另一个带有端点的页面时,它不会抛出404错误,而且我知道我正在使用EP_PAGES
面具
有人能帮我实现目标吗。
Goal: 将端点添加到仅具有特定模板的特定页面
此外,我希望端点的工作方式与woocommerce中的工作方式相同,比如我的帐户页面。提前谢谢。如果有人需要其他信息,请告诉我。
最合适的回答,由SO网友:Sally CJ 整理而成
不add_rewrite_endpoint()
不限于任何特定页面,仅限于add_rewrite_rule()
我能做到。
但是,如果我理解正确,您可以使用pre_handle_404
钩子以检查是否设置了端点查询以及页面是否使用了特定模板,如果不满足这些条件,则抛出404错误。
基于代码的工作示例:
add_filter( \'pre_handle_404\', \'wpse_376370\', 10, 2 );
function wpse_376370( $value, $wp_query ) {
if (
// It\'s a valid "mash" endpoint request,
$wp_query->get( \'mash\' ) &&
// but the request is not a Page or its slug is not \'example\',
! $wp_query->is_page( \'example\' ) &&
// and the Page is not using the template some-template.php.
! is_page_template( \'some-template.php\' )
) {
// Therefore, we throw a 404 error
$wp_query->set_404();
// and avoid redirect to the page. (at example.com/example)
remove_action( \'template_redirect\', \'redirect_canonical\' );
}
return $value;
}