Intereting Posts
Условно запрашивать пользовательские типы сообщений по почте Meta для главной страницы блога? get_template_part для каждого уровня таксономии Echo do shortcode с настраиваемым полем не работает Переопределение перевода родительских тегов по дочерней теме Файлы PHP, включенные в functions.php, похоже, не работают Использование OR в WP_Query отменяет сравнение «NOT EXISTS» Как добавить новые сайты и отобразить пользовательский домен в WordPress Multisite? Как изменить URL-адрес (добавить значения GET) после отправки формы в конец? Условное заявление – лучший способ удалить Nav на странице контактов Помощь в функции WP gallery, обертка галереи в div Что означают эти ошибки phpMyAdmin для моих баз данных WordPress? Как я могу получить запрос, который будет запущен для страницы архива? Почему массив, созданный в функции, подключенной для настройки регистра, заполняется, когда настраивается пользовательский интерфейс, но не когда загружается интерфейс? добавьте комментарии GD Star Rating's к комментариям приятеля Как выделить меню для дочерней страницы?

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