Когда нужно называть `add_rewrite_rule` для безопасности

Я начинаю сталкиваться с ситуациями в проектах, где я объединяю несколько плагинов, которые все используют add_rewrite_rule и flush_rewrite_rules в разных точках. Как мы все знаем, вызов flush_rewrite_rules при загрузке каждой страницы – это плохо .

Проблема возникает, когда плагин A еще не добавил, что он переписывает правила, но плагин B вызывает flush_rewrite_rules . Плагин A является хорошим гражданином и не вызывает flush_rewrite_rules если это необходимо, и поэтому теперь правила перезаписи больше не присутствуют.

Я искал действие, которое flush_rewrite_rules до того, как правила будут сопоставлены flush_rewrite_rules , которые я могу подключить для своих вызовов add_rewrite_rule чтобы убедиться, что все правила присутствуют до их компиляции, но я их не нашел. Какие-либо предложения?

Самое простое решение этого – перехватить ваши призывы на добавление к последнему действию, которое запускается до того, как правила будут восстановлены во время процесса очистки.

Первой частью процесса промывки является удаление опции 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, которые вы можете использовать для этого.