generate_rewrite_rules (Aktion) vs add_rewrite_rule (function): Welche wird bevorzugt?

Ich sehe, dass diese zwei Methoden verwendet werden können, um neue benutzerdefinierte Rewrite-Regel zu erstellen, also unter welcher Situation welche bevorzugt wird? Ich nehme an, sie machen das Gleiche?

Ich kann entweder verwenden:

add_action( 'generate_rewrite_rules', function( $wp_rewrite ) { $wp_rewrite->rules = array( 'xxx' => 'index.php?xxx' ) + $wp_rewrite->rules; } ); 

oder

 add_rewrite_rule( 'xxx', 'index.php?xxx', 'top' ); 

Solutions Collecting From Web of "generate_rewrite_rules (Aktion) vs add_rewrite_rule (function): Welche wird bevorzugt?"

Sie sind total differents: generate_rewrite_rules ist ein add_rewrite_rule und add_rewrite_rule ist eine function. Verwenden Sie add_rewrite_rule() wenn Sie benutzerdefinierte Umschreibungsregeln definieren möchten. Verwenden Sie generate_rewrite_rules , um eine Aktion (vom Codex) auszuführen, nachdem alle Umschreibungsregeln erstellt wurden.

Das bedeutet nicht, dass Sie keine Rewrite-Regeln über generate_rewrite_rules hinzufügen können. In der Tat können Sie, was es bedeutet, dass jeder Entwickler erwartet, dass alle Rewrite-Regeln gesetzt werden, sobald generate_rewrite_rules ausgetriggers wird:

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

Aber das wird wie erwartet funktionieren:

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