私はこれら二つの方法が新しいカスタム書き換えルールを作成するために使われることができるのを見ます、それではどの状況の下でどちらが好ましいですか?私は彼らが同じことをしていると思いますか?
私はどちらを使用することができます:
add_action( 'generate_rewrite_rules', function( $wp_rewrite ) {
$wp_rewrite->rules = array( 'xxx' => 'index.php?xxx' ) + $wp_rewrite->rules;
} );
または
add_rewrite_rule( 'xxx', 'index.php?xxx', 'top' );
generate_rewrite_rules
はアクションフックで、 add_rewrite_rule
は関数です。とはいえ、カスタムの書き換え規則を定義したい場合はadd_rewrite_rule()
を使用してください。 「すべての書き換えルールが作成された後」に(codexから)アクションを実行するには、generate_rewrite_rules
を使用します。
generate_rewrite_rules
経由で書き換えルールを追加できないということではありません。実際には、generate_rewrite_rules
がトリガーされた瞬間にすべての書き換えルールが設定されることを開発者が期待するという意味です。
add_action( 'init', function( ) {
add_rewrite_rule( 'xxx', 'index.php?xxx', 'top' );
} );
add_action( 'generate_rewrite_rules', function( $wp_rewrite ) {
//All rewrite rules are expected to be set at this moment
if( isset($wp_rewrite->rules['yyy']) ) {
//Ooops. The rewrite rule 'yyy' is not set
}
} );
//using `generate_rewrite_rules` to add some rewrite rule
add_action( 'generate_rewrite_rules', function( $wp_rewrite ) {
//All rewrite rules are expected to be set at this moment
$wp_rewrite->rules = array( 'yyy' => 'index.php?yyy' ) + $wp_rewrite->rules;
} );
しかし、これは期待通りに機能します。
add_action( 'init', function( ) {
add_rewrite_rule( 'xxx', 'index.php?xxx', 'top' );
} );
add_action( 'generate_rewrite_rules', function( $wp_rewrite ) {
//All rewrite rules are expected to be set at this moment
if( isset($wp_rewrite->rules['yyy']) ) {
//Aha!! Now the rewrite rule 'yyy' is correctly set
}
} );
add_action( 'init', function( ) {
add_rewrite_rule( 'yyy', 'index.php?yyy', 'top' );
} );