按照codex的规定,刷新重写规则不应按常规进行:
不要在任何常规触发的挂钩上执行此操作。
您应该通过插件激活挂钩或主题切换挂钩来实现:
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();
}
以上任何一项,都应该在注册自定义帖子类型后完成。
此外,您应该在停用插件后刷新重写规则。这确保没有留下任何无效规则。
然而,与其他所有问题一样,这也有一个棘手的解决方法。如果重写规则包含半唯一关键字,则可以从选项中获取重写规则,对其进行搜索,并仅在必要时刷新规则:
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();
}
}
也许不是最好的解决方案,但也可以。