如果我使用REST在插件中创建端点,我应该在init
或rest_api_init
上刷新重写规则吗?
我意识到,它应该做插件激活/失活。但是,一旦触发了这些事件中的任何一个,您是否仍然必须尊重传统的钩子过程,以确保修改后的重写规则被刷新?A/K/A -在增加其他路线之后。
示例:
function activate() {
// do something when this plugin is activated...
add_action( 'init', function () {
flush_rewrite_rules( true );
}, 9999 );
return true;
}
# Plugin Activation
register_activation_hook( __FILE__, function () {
require_once( PATH . '/backend/inc/activation.php' );
Backend\activate();
} );
init
add_action( 'init', function () {
flush_rewrite_rules( true );
}, 9999 );
rest_api_init
add_action( 'rest_api_init', function () {
flush_rewrite_rules( true );
}, 9999 );
发布于 2018-09-24 14:58:28
如法典所述,不应按惯例重写法拉盛规则:
不要在任何会在常规基础上触发的钩上做。
您应该通过插件激活钩子或主题开关挂钩来执行此操作:
add_action( 'after_switch_theme', 'wpse315001_flush_rewrite_rules' );
register_deactivation_hook( __FILE__, 'wpse315001_flush_rewrite_rules' );
register_activation_hook( __FILE__, 'wpse315001_flush_rewrite_rules' );
function wpse315001_flush_rewrite_rules() {
flush_rewrite_rules();
}
以上任一项,都应该在您注册自定义post类型之后进行。
另外,在插件被禁用后,您应该刷新重写规则。这样可以确保没有留下无效的规则。
然而,与其他所有问题一样,这也有一个棘手的解决办法。如果重写规则包含半唯一关键字,则可以从选项中获取重写规则,对其执行搜索,并只在必要时刷新规则:
add_action( 'init', 'wpse315001_flush_rewrite_rules', 99999 );
function wpse315001_flush_rewrite_rules(){
// Get the rewrite rules
$rules = get_option('rewrite_rules');
// Check if your semi-unique rule exists in this string
if ( ! strpos( $rules, 'your-rewrite-rules' ) ) {
// Flush'em All!
flush_rewrite_rules();
}
}
也许不是最好的解决办法,但也行。
https://wordpress.stackexchange.com/questions/315001
复制相似问题