Flush_rewrite_rules()不用于更新设置API

时间:2017-05-06 作者:Mayeenul Islam

我为插件设置API提供了一个复选框,用于启用/禁用插件CPT的某些重写规则。我想在更改特定设置时刷新重写规则。因此,我做了以下工作:

function my_flush_rules_while_rewrite_changed( $old_values, $new_values ) {
    if( $old_values[\'rewrite_url\'] != $new_values[\'rewrite_url\'] ) {
        flush_rewrite_rules();
        //echo "Rewrite rules flushed";
        //exit();
    }
}

add_action( \'update_option_my_settings\', \'my_flush_rules_while_rewrite_changed\', 10, 2 );
这不是刷新重写规则。虽然我在没有条件的情况下进行了测试echo如果与一起使用,则显示d文本exit(). 所以,我确信,函数正在被调用,但令人遗憾的是,它不起作用。

Flush the rewrite rules

我认为这是重写规则插件的问题,但如果不保存永久链接更改,实际的重写就无法工作。所以这实际上是我的代码的一个问题-它不起作用。

但为什么呢?

1 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

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 );
    }
});

结束

相关推荐