web-dev-qa-db-ja.com

安全のためにいつadd_rewrite_ruleを呼び出すべきか

私は、add_rewrite_ruleflush_rewrite_rulesをそれぞれ異なるポイントで使用している複数のプラグインを組み合わせているプロジェクトで、状況に遭遇し始めています。すべての人が知っているように、 ページを読み込むたびにflush_rewrite_rulesを呼び出すのは悪いことです

プラグインAが書き換え規則をまだ追加していないときに問題が発生しますが、プラグインBがflush_rewrite_rulesを呼び出します。プラグインAは善良な市民であり、必要でない限りflush_rewrite_rulesを呼び出しません。そのため、書き換え規則は存在しなくなりました

ルールがflush_rewrite_rulesによって照合される前に呼び出されるアクションを探していました。コンパイルする前にすべてのルールが存在することを確認するためにadd_rewrite_rule呼び出しをフックできますが、見つけられませんでした。助言がありますか?

3
Simon Wheatley

これに対する最も簡単な解決策は、追加処理を、フラッシュ処理中にルールが再構築される前に起動される最後のアクションにフックすることです。

フラッシュ処理の最初の部分は、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のフィルタ。

2
Peter Westwood