我目前正在开发一个主题,我想添加两个永久链接 一个是使用一些自定义参数和值(存储在wp_options表中的规则)重定向到index.php,另一个是重定向到我的模板中的文件,该文件提供admin-ajax.php功能(存储在.htaccess文件中的规则)
add_action( 'init', 'custom_rewrite_rules' );
function custom_rewrite_rules() {
add_rewrite_rule(
'^(activate|reset)/([0-9]*)sfa([A-Za-z0-9]*)/?$',
'index.php?sfa_user=$matches[2]&sfa_password_reset=$matches[3]',
'top'
);
add_rewrite_rule(
'ajax-api/?$',
str_replace( ABSPATH, '', dirname( dirname( __FILE__ ) ) . '/api/ajax-api.php' )
);
flush_rewrite_rules( true );
} );
当我处于开发模式时,我正在通过执行'init'挂钩来刷新规则
(我知道这是不好的做法,但这似乎是我检查的最佳方法如果.htaccess文件中有任何更改。)。
问题:
flush_rewrite_rules()
默认重置硬刷新,我也将参数设置为true以确保。我的第一个重写规则是非常好的,而.htaccess文件在我访问后端的options-permalink.php页面之前没有重新生成(其中flush函数也被调用并且可以工作?!)。
我已尝试在参考文献中提出的另一个钩子上执行flush_rewrite_rules()
。
提前感谢您的帮助!
答案 0 :(得分:0)
最后我找到了解决方案......
save_mod_rewrite_rules()
是生成和添加重写规则的函数。在Doc中它说:
/* If the function named 'save_mod_rewrite_rules' exists, it will be called. */
此函数是由wp-admin/includes/misc.php
加载的wp-admin/includes/admin.php
的一部分,它在admin_init
操作挂钩之前加载。
然而,你永远不应该在任何init动作钩子上刷新重写规则:Flush Rewrite Examples