你需要add rewrite rules query\\u vars可以满足您的需要。
例如在您的功能中。php或插件文件:
// Register a new vars to be used in the rewrite rules
add_filter(\'query_vars\', \'properties_add_query_vars\');
function properties_add_query_vars( $vars) {
$vars[] = "my_action"; // name of the var as seen in the URL
return $vars;
}
// Add the new rewrite rule to existings ones
add_action(\'init\',\'properties_add_rewrite_rules\');
function properties_add_rewrite_rules() {
//Change your_page_id with the ID of the whats-on page
add_rewrite_rule( \'whats-on/(.+)/?$\' , \'index.php?page_id=your_page_id&my_action=\'.$matches[1] , \'top\' );
}
然后在页面上的whats模板中(创建一个page-whats-on.php模板文件,
see this):
global $wp_query;
if(isset($wp_query->query_vars(\'my_action\')) && $wp_query->query_vars(\'my_action\') == \'some_action\'){
//Do what you want
}
在尝试测试新的重写规则之前,不要忘记刷新重写规则。您可以通过转到设置->永久链接并单击保存按钮来完成此操作。
编辑更新后的问题,您的代码中有一些问题。
我的代码中有一个错误,页面的查询变量为page_id
我写了p
. 对此表示抱歉应该在init action hook上添加重写规则和自定义查询变量,只有flush\\u rewrite\\u rules();由于性能原因,应仅在激活挂钩上运行(I asked a related question myself).我已经测试了这段代码,它正在运行:
class SpektrixPlugin {
public function __construct(){
add_filter(\'query_vars\', array($this, \'add_query_vars\'));
add_action(\'init\', array($this, \'add_rewrite_rules\'));
}
public function activate() {
flush_rewrite_rules();
}
public function deactivate() {
flush_rewrite_rules();
}
public function add_query_vars($vars) {
$vars[] = "event"; // name of the var as seen in the URL
return $vars;
}
public function add_rewrite_rules() {
//Change your_page_id with the ID of the whats-on page
add_rewrite_rule( \'whats-on/(.+)/?$\' , \'index.php?page_id=8&event=$matches[1]\' , \'top\' );
}
public function spektrix_list_events() {
//$api = new SpektrixApiClient();
//return $api->getAllEvents();
return \'Test\';
}
}
$SpektrixEvents = new SpektrixPlugin();
register_activation_hook( __file__, array($SpektrixEvents, \'activate\') );
register_deactivation_hook( __file__, array($SpektrixEvents, \'deactivate\') );
现在需要检查查询变量
event
存在。在你的情况下,我认为,正如我之前所说的,最好的检查方法是在tempalte页面。您可以为ID为8的页面创建特定模板。只需创建第8页。php文件并将其放在主题文件夹中(您也可以将其放在插件文件夹中,但这需要额外的工作)。第8页。php您可以制作如下内容:
<?php
get_header();
global $wp_query;
if($wp_query->get(\'event\') == \'event\'){
echo $SpektrixEvents->spektrix_list_events();
}
get_footer();
?>
现在如果你去你的网站。com/whats on/event/your get“Test”打印出来。