首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >flush_rewrite_rules()取消了add_rewrite_rule()的作用

flush_rewrite_rules()取消了add_rewrite_rule()的作用
EN

WordPress Development用户
提问于 2014-02-08 16:09:43
回答 1查看 1.3K关注 0票数 1

作为插件的一个特性,我试图定义一个自定义url结构,比如http://www.mysite.tld/foo/{action}。我在插件激活上使用了add_rewrite_rule()flush_rewrite_rules(),这就像预期的那样。

直到flush_rewrite_rules()再次被调用,在另一个请求中,要么手动调用,要么启用另一个这样做的插件。当这种情况发生时,我的重写规则突然消失了(我正在使用重写规则检查器检查此规则)。

复制该问题所需的最低限度代码如下:

代码语言:javascript
复制
<?php
/*
Plugin Name: PluginA
*/

register_activation_hook(__FILE__,'PluginA_activation');

function PluginA_activation()
    {
    add_rewrite_tag('%foo%','([^&]+)'); 
    add_rewrite_rule('foo/([^/]+)','index.php?foo=$matches[1]','top');
    flush_rewrite_rules();
    }

知道我做错什么了吗?

EN

回答 1

WordPress Development用户

回答已采纳

发布于 2014-02-08 16:13:18

重写规则存储在选项中。当调用flush_rewrite_rules()时,该选项将被删除,WordPress收集在当前请求期间注册的所有规则,并将该选项写入数据库。

在重写选项时,您的注册并不会在每个请求上运行,因此它并不存在。

在加载任何页面时注册规则,在激活时刷新重写规则。把登记和冲洗分开。

代码语言:javascript
复制
register_activation_hook(__FILE__,'PluginA_activation');
add_action( 'wp_loaded', 'PluginA_rewrite_rules' );

function PluginA_activation()
{
    PluginA_rewrite_rules();
    flush_rewrite_rules();
}

function PluginA_rewrite_rules()
{
    add_rewrite_tag('%foo%','([^&]+)');
    add_rewrite_rule('foo/([^/]+)','index.php?foo=$matches[1]','top');  
}
票数 4
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/133906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档