Intereting Posts
Get_terms перестает работать после WP 4.2 Перенаправление на домашнюю страницу при сохранении любого отредактированного кода Лучший способ обновить WP 2.8 (!)? Постоянная ссылка, чтобы один пользовательский тип сообщения был ребенком другого, не работающим В какой функции WordPress API отображаются активные / неактивные плагины? Использование wordpress для четырехстраничного веб-сайта может быть излишним? Изменение пользовательских страниц Слишком много вложенных циклов wp_query в этом гипотетическом запросе? Пользовательские параметры плагина не будут обновляться Пользовательская тема updater – случайная строка в новом названии темы Проблема создания задания cron wordpress WordPress – другое изображение значка зависит от номера комментария Функции функции Ajax call from front Пользователь Как публиковать страницу, которая не может быть обнаружена поисковыми системами?

generate_rewrite_rules (действие) vs add_rewrite_rule (функция): какой из них предпочтительнее?

Я вижу, что эти два метода могут быть использованы для создания нового пользовательского правила перезаписи, поэтому при какой ситуации предпочтительнее? Полагаю, они делают то же самое?

Я могу либо использовать:

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

Solutions Collecting From Web of "generate_rewrite_rules (действие) vs add_rewrite_rule (функция): какой из них предпочтительнее?"

Они совершенно разные: generate_rewrite_rules – это крюк действия, а add_rewrite_rule – это функция. Тем не менее, используйте add_rewrite_rule() если вы хотите определить пользовательские правила перезаписи. Используйте generate_rewrite_rules для выполнения действия (от codex) «после того, как все правила перезаписи были созданы».

Это не означает, что вы не можете добавлять правила перезаписи с помощью 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']) ) { //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' ); } );