У меня немного странная проблема с правилами перезаписи, которые не обновляются должным образом.
Я пытался использовать flush_rewrite_rules();
и flush_rewrite_rules(true);
.
Я также пытался глобализировать, $wp_rewrite
используя $wp_rewrite->flush_rules();
и$wp_rewrite->flush_rules(true);
Ни один из которых, кажется, не очищает правила перезаписи правильно. Эти вызовы действительно сбрасывают правила перезаписи при вызове. Откуда я это знаю? Использование решения для отладки перезаписи правил сброса .
В настоящее время я переписал правила, сбрасываемые при активации и деактивации плагина. Там нет проблем.
У меня есть страница настроек администрирования плагина для пользователей, чтобы настроить плагин. Некоторые параметры настраивают структуру постоянных ссылок, поэтому правила перезаписи необходимо сбросить на странице настроек администрирования плагина «Сохранить настройки». (Использует стандарт update_option();
) для сохранения настроек.
Хотелось бы отметить, что в зависимости от указанных настроек создаются настраиваемые типы сообщений, соответствующие заданным пользователем настройкам. Поэтому правила перезаписи должны быть сброшены сразу после сохранения настроек. Это где вещи не функционируют должным образом.
Приведенное выше решение для отладки правил перезаписи, представленное командой @toscho
, показывает, что оно сбрасывает тонны правил перезаписи. Однако при посещении отдельного элемента пользовательского типа записи или даже архива пользовательского типа записи в этом случае каждый из них возвращает 404 ошибки.
Пользовательский тип записи зарегистрирован правильно и соответствующим образом. Я точно знаю, что это не проблема.
Сразу же после установки плагина с настройками страницы администрирования сохраните. Создаются пользовательские типы записей, настраивается структура постоянных ссылок, и все правила перезаписи пытаются быть сброшены.
Пользовательские типы сообщений затем загружаются всегда и загружаются init
как обычно.
По какой-то причине правила перезаписи не обновляются должным образом, потому что, как я уже говорил, посещение отдельных или архивных разделов пользовательского типа записи возвращает 404 ошибки.
Теперь странная часть: если все, что я делаю, это просто посещаю страницу настроек постоянных ссылок администрирования, а затем возвращаюсь к интерфейсу, чтобы просмотреть отдельные или архивные разделы пользовательского типа записи, они волшебным образом работают, как и ожидалось.
Что делает эта страница с настройками администрации, что я не делаю, что позволяет правилам перезаписи корректно сбрасываться, а мои нет?
Я имею в виду, что как временное решение я перенаправляю пользователя на страницу настроек постоянных ссылок администрирования после сохранения страницы настроек администрирования плагина, но это не идеальное решение. Я бы предпочел, чтобы правила перезаписи просто корректно вставлялись в код моего плагина.
Есть ли в WordPress определенный момент, когда сброс правил перезаписи просто не сбрасывает ВСЕ правила больше?
admin_menu
- Добавлена страница настроек плагина для администрирования WordPress.
add_options_page()
- Страница настроек плагина добавлена в меню настроек.
Страница настроек отображается в обратном вызове для add_options_page()
. Это также где $_POST
обрабатывается для обновления настроек плагина и очистки правил перезаписи.
Поскольку это уже длинный вопрос, я хотел бы предоставить блоки кода (если это поможет) в удаленной ссылке, чтобы помочь в получении правильного ответа.
init
который регистрирует типы сообщений. Я подумал, что настройки страницы сохраняются, и страница перезагружается ... затем init
снова запускается, чтобы зарегистрировать необходимые типы записей. Поэтому я решил, что типы сообщений уже будут загружены, и все, что мне нужно было сделать, это обновить опцию, а затем сбросить правила перезаписи со страницы настроек моего плагина. Я выложу ответ, как я нашел решение.
flush_rewrite_rules
, которая просто удаляетrewrite_rules
опцию и восстанавливает ее, вы можете открыть файлwp-admin/options-permalinks.php
и посмотреть, где это происходит. так как эта операция просто удаляет весь параметр, невозможно частично очистить правила.