ADD_REWRITE_RULE在主题函数php中工作,但当移动到插件中时,它停止工作

时间:2017-05-15 作者:phlipinmi

正如标题中所述,此代码在活动子主题的my functions php文件中工作。我没有太多,如果有什么安装,因为这是在香草WP安装开发。

这是我正在使用的代码。。。

add_action(\'init\', \'foo_add_rewrite_rule\');
function foo_add_rewrite_rule(){
    add_rewrite_rule(\'^foobar?\',\'index.php?is_foobar_page=1&post_type=custom_post_type\',\'top\');
    //Customize this query string - keep is_foobar_page=1 intact
}

add_action(\'query_vars\',\'foo_set_query_var\');
function foo_set_query_var($vars) {
    array_push($vars, \'is_foobar_page\');
    return $vars;
}

add_filter(\'template_include\', \'foo_include_template\', 1000, 1);
function foo_include_template($template){
    if(get_query_var(\'is_foobar_page\')){
        $new_template = WP_CONTENT_DIR.\'/themes/your-theme/template-name.php\';
        if(file_exists($new_template))
            $template = $new_template;
    }
    return $template;
}
这在活动子主题中非常有效,但当我将其移出并插入插件时,它会失败。

我正在使用flush\\u rewrite\\u rules();并已禁用/启用它以刷新重写规则。

我已经在templae函数中设置了从插件目录中提取的常量。

有人能告诉我我错过了什么吗?

1 个回复
最合适的回答,由SO网友:Milo 整理而成

当插件被激活时,激活挂钩是唯一在该请求上运行的代码。如果您在激活时刷新重写规则,则您的规则不在从中重建所有内容的规则数组中,除非您首先在激活挂钩中显式添加它。

register_activation_hook( __FILE__, \'myplugin_flush_rewrites\' );
function myplugin_flush_rewrites() {
    // call your function that adds the rule here
    // (it should also be hooked into \'init\')
    foo_add_rewrite_rule();
    flush_rewrite_rules();
}
您的规则仍需添加init 在每个请求上,因为其他一些代码或永久链接设置页面加载可以刷新任何请求上的规则。

结束

相关推荐

Functions are causing errors

我在插件的PHP上声明一个函数。插件在每个帖子的顶部加载代码(帖子布局是插件的名称)。无法在/home/content/08/10290908/html/wp-content/plugins/post-layout/plugin.php(181):eval()\'d code:4)中重新声明vote\\u-up()(之前在/home/content/08/102908/html/wp-content/plugins/post-layout/plugin.php中声明)。php(181):第36行的eval