Intereting Posts
Отображать тег только в том случае, если есть описание Получать сообщение или страницу раньше Синхронизация сообщений с одного сайта WordPress на другой Как изменить свой RSS-канал по умолчанию? Изменение пользовательского типа URL-адреса Не удается отправить почту WordPress с помощью аутентификации SMTP Правильно встраивать javascript в WP (используя функцию.php) – не работает? Ajax Security для пользователей priviliges и nonces Можно ли использовать add_filter во включенном файле в функции child.php дочерней темы? Хотите узнать, кто является пользователем Admin / User Web push notificaaiton для dw question & answer plugin Отдельный должен использовать плагины Каталог для локальной разработки как настроить стандартное #adminmenu в wp-admin Можно ли создавать настраиваемые роли в многопользовательском режиме, которые могут добавлять сайты? Предотвращение индексирования поисковых систем страниц 2, 3 и более?

flush_rewrite_rules () отменяет эффект add_rewrite_rule ()

Как одна из возможностей моего плагина, я пытаюсь определить настраиваемую структуру http://www.mysite.tld/foo/{action} , например http://www.mysite.tld/foo/{action} . Я использую add_rewrite_rule() вместе с flush_rewrite_rules() при активации плагина, который работает так, как ожидалось.

Пока flush_rewrite_rules() будет вызван снова, во время другого запроса, либо вручную, либо путем включения другого плагина. Когда это произойдет, мое правило переписывания внезапно исчезнет (я использую Rewrite Rules Inspector, чтобы проверить это).

Минимальный код, необходимый для воспроизведения проблемы, следующий:

 <?php /* Plugin Name: PluginA */ register_activation_hook(__FILE__,'PluginA_activation'); function PluginA_activation() { add_rewrite_tag('%foo%','([^&]+)'); add_rewrite_rule('foo/([^/]+)','index.php?foo=$matches[1]','top'); flush_rewrite_rules(); } 

Любая идея, что я делаю неправильно?

Solutions Collecting From Web of "flush_rewrite_rules () отменяет эффект add_rewrite_rule ()"

Правила перезаписи сохраняются в опции. Когда flush_rewrite_rules() , этот параметр удаляется, WordPress собирает все правила, зарегистрированные во время текущего запроса, и записывает этот параметр в базу данных.

Ваша регистрация не выполняется по каждому запросу, поэтому она не существует, когда этот параметр перезаписывается.

Зарегистрируйте правило при загрузке страницы, сбросьте правила перезаписи при активации. Отделите регистрацию и флеш.

 register_activation_hook(__FILE__,'PluginA_activation'); add_action( 'wp_loaded', 'PluginA_rewrite_rules' ); function PluginA_activation() { PluginA_rewrite_rules(); flush_rewrite_rules(); } function PluginA_rewrite_rules() { add_rewrite_tag('%foo%','([^&]+)'); add_rewrite_rule('foo/([^/]+)','index.php?foo=$matches[1]','top'); }