flush_rewrite_rules
正在开火,但为时已晚;以前的重写设置已确定register_post_type
args在请求的开头,所以您只是刷新“旧”规则。
您可以在刷新之前尝试重新注册帖子类型,但我不确定更广泛的含义,甚至不确定这是否有效。
如果是我,我会使用您已经具备的逻辑在设置中隐藏一个标志,然后处理后续请求:
function my_flush_rules_while_rewrite_changed( $new_values, $old_values ) {
if( empty( $new_values[\'rewrite_url\'] ) && ! empty( $old_values[\'rewrite_url\'] ) || ! empty( $new_values[\'rewrite_url\'] ) && empty( $old_values[\'rewrite_url\'] ) ) {
$new_values[\'flush_rewrite_rules\'] = true;
}
return $new_values;
}
add_filter( \'pre_update_option_my_custom_settings\', \'my_flush_rules_while_rewrite_changed\', 11, 2 );
然后作为一个例子:
add_action( \'init\', function () {
$settings = get_option( \'my_custom_settings\' );
if ( ! empty( $settings[\'flush_rewrite_rules\'] ) ) {
flush_rewrite_rules();
unset( $settings[\'flush_rewrite_rules\'] );
update_option( \'my_custom_settings\', $settings );
}
});