我如何停止重写规则.htaccess从被删除的WordPress?

2eafrhcq  于 2023-01-12  发布在  WordPress
关注(0)|答案(1)|浏览(123)

我正在开发一个插件,它可以重写一个特定的URL模式到插件中的一个目录。为了添加这些规则,我在调用flush_rewrite_rules()之前在插件激活函数中调用add_rewrite_rule()。这在创建重写规则方面做得很好,但是有时候它们会被删除。
在一个案例中,我改变了帖子的永久链接结构。WordPress似乎重新生成了.htaccess文件而没有我的规则。为了重新生成规则,我不得不停用并重新激活插件。这让我很惊讶,因为我的印象是调用flush_rewrite_rules()在添加新规则和重新生成.htaccess文件之前清点现有规则。我的系统中的某些东西似乎正在重新生成文件,而没有首先清点现有规则。
在另一个案例中,我添加了一些插件,我认为其中一个插件在激活时重新生成了.htaccess文件。
有什么方法可以阻止WordPress和其他插件从.htaccess文件中删除我的规则吗?
如果有一些方法来标记规则,使WordPress不能删除他们在未来,这将是伟大的。例如,如果你可以添加一个特殊字符或东西,告诉WordPress永远不要删除该特定规则的任何原因,而不是一个指令,以删除它起源于插件创建它。
我不能接受的是通过文件权限使.htaccess文件不可写,因为它必须是可写的WordPress创建规则摆在首位。我也相信我不能添加规则的init,因为这是一个插件,而不是一个主题。这是我的第一个插件,使用重写规则,所以我可能是错的,但是根据我目前的研究,你应该在插件激活时而不是初始化时添加重写规则。

nfs0ujit

nfs0ujit1#

使用“保存_mod_rewrite_rules”过滤器修改.htaccess规则,然后再保存。您可以使用此过滤器在.htaccess文件中包含插件的重写规则,然后再保存该文件。

function my_mod_rewrite_rules( $rules ) {
    // Get your plugin's rewrite rules
    $my_rules = my_get_rewrite_rules();

    // Add your plugin's rewrite rules to the beginning of the $rules string
    $rules = $my_rules . $rules;

    return $rules;
}

add_filter( 'mod_rewrite_rules', 'my_mod_rewrite_rules' );

你可以在插件的激活函数中使用这个过滤器,当你的插件被激活时,把插件的重写规则添加到.htaccess文件中。
祝你好运!

相关问题