我最近处理过这个问题。
我建议尽早添加一个钩子来识别自定义页面请求,如下所示:
// Function to run before page generation begins
add_action(\'init\',array(\'MyPluginClass\',\'MyInitPublicFunction\'));
那么该函数应该如下所示:
public function MyInitPublicFunction() {
// Custom tag we will be using to recognize page requests
add_rewrite_tag(\'%mycustomtag%\',\'([^/]+)\');
// Custom rewrite rule to hijack page generation
add_rewrite_rule(\'locations/address/([^/]+)/?$\',\'index.php?mycustomtag=$matches[1]\',\'top\');
// Update WP rewrite rules without writing a new .htaccess file
flush_rewrite_rules(false);
}
随后在插件中:
// Allow access to Wordpress query variables
global $wp_query;
// Retrieve Wordpress query variables
$query_vars = $wp_query->query_vars;
// Check if requesting our custom page
if(!empty($query_vars[\'mycustomtag\'])) {
// CUSTOM PAGE REQUESTED!
$custom_id = $query_vars[\'mycustomtag\'];
die(\'<html><head><title>Not a Wordpress Page</title></head><body>Content here</body></html>\');
}
这不是结束代码的最整洁的方式,您可以使用Wordpress挂钩覆盖标题/等,但您似乎只想提供看起来不像是在Wordpress中生成的页面,所以为什么不完全绕过主题引擎,生成您自己的页面呢?您仍然可以使用Wordpress命令来检索数据,只需确保您的代码在任何输出开始之前运行并结束页面生成。
Don\'t forget! 只要使用“flush\\u rewrite\\u rules”将自定义重写规则推送到数据库中,就可以在任何时候(例如,在插件激活时)添加自定义重写规则。这意味着您可以有一个插件配置,允许您设置特定的自定义页面,或者您可以使用启用了快捷码的页面来激活重写规则,以便将来访问该页面。