WP_Rewrite::flush_rules()
Обновляет правила перезаписи ссылок (ЧПУ) в базе данных и кэше.
Смотрите функцию-обертку flush_rewrite_rules().
Нужно использовать после добавления новых правил перезаписи УРЛов, чтобы новые правила вступили в силу, иначе они работать не будут. Новые правила добавляются функцией add_rewrite_rule(), или при регистрации типа поста или таксономии.
WordPress сохраняет все правила перезаписи в опции rewrite_rules
(в кэше). Иногда плагины, темы или функции могут добавить свои, новые правила перезаписи и WordPress ничего не будет знать об этих новых правилах, до тех пор, пока все правила не будут перезаписаны (обновлены).
Эта функция требовательна к ресурсам, поэтому, нельзя вызывать функцию каждый раз при генерации странице (при запросе). Её нужно использовать один раз! Например, во время активации/деактивации плагина/темы, или после условия (проверки), что это нужно сделать.
Сбрасывать правила перезаписи рекомендуется не раньше события wp_loaded.
Вообще, в код функции добавлена такая проверка - эта функция переназначает вызов смой себя, если она вызвана раньше события wp_loaded. Однако, иногда такое переназначение может вызвать баги, поэтому, если есть возможность, то лучше сразу вызывать функцию во время события wp_loaded.
Если вы создали новый тип записи с помощью функции register_post_type(), затем создали новую запись этого типа, и при заходе на неё увидели ошибку 404, значит правила перезаписи ЧПУ не были сброшены.
Так происходит потому что новые правила перезаписи (хранятся в БД) не были созданы. Чтобы их создать нужна эта функция.
Другие варианты сброса правил перезаписи:
Вручную сбросить правила перезаписи ЧПУ можно через страницу настроек "Постоянные ссылки" (Permalinks). Во время посещения этой страницы, правила перезаписи удаляются из базы данных, генерируются новые и сохраняются на место прежних.
В старых версиях WP на этой страницы нужно было еще нажать кнопку Сохранить.
Также для сброса, можно опустошить опцию rewrite_rules
(в ней хранятся правила ЧПУ).
update_option( 'rewrite_rules', '' );
При следующей генерации страницы опция создастся автоматически. См. wp_rewrite_rules(). При этом базовые правила ЧПУ будут получены сразу по необходимости, а также будет создано событие на перегенерацию на хуке wp_loaded, чтобы еще раз правильно обновить ЧПУ.
Метод класса: WP_Rewrite{}
Хуки из метода
Возвращает
null
. Функция ничего не возвращает.
Использование
$wp_rewrite->flush_rules();
Примеры
#1 Пример обновления правил перезаписи УРЛов:
// Убедимся, что переменная $wp_rewrite определена глобально global $wp_rewrite; $wp_rewrite->flush_rules();
Или можно так:
$GLOBALS['wp_rewrite']->flush_rules();
#2 Пример обновления правил перезаписи с использованием функции flush_rewrite_rules()
, во время активации плагина:
register_activation_hook( __FILE__, 'author_base_rewrite' ); function author_base_rewrite(){ flush_rewrite_rules( false ); }
flush_rewrite_rules( false ) - false указывает, что не нужно обновлять файл .htaccess
, если не указать false, то файл .htaccess
будет обновлен в соответствии с правилами.
Список изменений
С версии 2.0.1 | Введена. |