私は、add_rewrite_rule
とflush_rewrite_rules
をそれぞれ異なるポイントで使用している複数のプラグインを組み合わせているプロジェクトで、状況に遭遇し始めています。すべての人が知っているように、 ページを読み込むたびにflush_rewrite_rules
を呼び出すのは悪いことです 。
プラグインAが書き換え規則をまだ追加していないときに問題が発生しますが、プラグインBがflush_rewrite_rules
を呼び出します。プラグインAは善良な市民であり、必要でない限りflush_rewrite_rules
を呼び出しません。そのため、書き換え規則は存在しなくなりました。
ルールがflush_rewrite_rules
によって照合される前に呼び出されるアクションを探していました。コンパイルする前にすべてのルールが存在することを確認するためにadd_rewrite_rule
呼び出しをフックできますが、見つけられませんでした。助言がありますか?
これに対する最も簡単な解決策は、追加処理を、フラッシュ処理中にルールが再構築される前に起動される最後のアクションにフックすることです。
フラッシュ処理の最初の部分は、rewrite_rulesオプションを削除することです。これが起こると、次のような動作が起こります。
do_action( 'delete_option', $option );
do_action( "delete_option_$option", $option );
do_action( 'deleted_option', $option );
注:dbにrewrite_rulesオプションがない場合、これらのアクションは実行されません。そのため、誰かがget_option( 'rewrite_rules')を呼び出して空の文字列を返す場合も、必ずルールを登録する必要があります。これに使用できるget_optionのフィルタ。