WP_REWRITE::FLUSH_RULES() — Обновление правил адресации в WordPress
Что это за метод?
Метод WP_REWRITE::FLUSH_RULES()
отвечает за удаление и обновление правил переписывания URL в WordPress. Это важно для правильной работы "чистых" и удобных URL-адресов на сайте.
Как это работает?
После удаления старых правил, метод вызывает WP_Rewrite::wp_rewrite_rules()
, чтобы создать новые правила. Если существует функция с названием save_mod_rewrite_rules
, она будет также вызвана.
Кому полезен этот метод?
Метод используется, например, в функции flush_rewrite_rules()
, которая позволяет обновлять правила переписывания.
Как это использовать?
Чтобы использовать этот метод, сначала необходимо объявить глобальную переменную $wp_rewrite
, а затем вызвать метод flush_rules()
.
global $wp_rewrite;
$wp_rewrite->flush_rules($hard);
Параметр $hard
:
true
(по умолчанию) — обновляет файл.htaccess
(жесткое обновление).false
— обновляет только опциюrewrite_rules
(мягкое обновление).
Примеры использования
Пример 1: Обновление правил переписывания
// Убедитесь, что переменная $wp_rewrite определена глобально
global $wp_rewrite;
$wp_rewrite->flush_rules();
Либо можно сделать так:
$GLOBALS['wp_rewrite']->flush_rules();
Пример 2: Обновление при активации плагина
register_activation_hook( __FILE__, 'author_base_rewrite' );
function author_base_rewrite(){
flush_rewrite_rules(false);
}
В этом примере flush_rewrite_rules(false)
говорит, что файл .htaccess
не должен обновляться. Если не указать false
, файл будет обновлен.
Возврат
Метод ничего не возвращает (null).
Обновления и изменения
Метод был введен в версии 2.0.1.
Как он выглядит в коде?
Ниже приведен код самого метода flush_rules
:
public function flush_rules( $hard = true ) {
static $do_hard_later = null;
// Предотвращаем выполнение действия, пока все правила не будут зарегистрированы.
if ( ! did_action( 'wp_loaded' ) ) {
add_action( 'wp_loaded', array( $this, 'flush_rules' ) );
$do_hard_later = ( isset( $do_hard_later ) ) ? $do_hard_later || $hard : $hard;
return;
}
if ( isset( $do_hard_later ) ) {
$hard = $do_hard_later;
unset( $do_hard_later );
}
$this->refresh_rewrite_rules();
/**
* Фильтрует, нужно ли выполнять "жесткое" обновление правил переписывания.
*
* "Жесткое" обновление обновляет .htaccess (для Apache) или web.config (для IIS).
*/
if ( ! $hard || ! apply_filters( 'flush_rewrite_rules_hard', true ) ) {
return;
}
if ( function_exists( 'save_mod_rewrite_rules' ) ) {
save_mod_rewrite_rules();
}
if ( function_exists( 'iis7_save_url_rewrite_rules' ) ) {
iis7_save_url_rewrite_rules();
}
}
Связанные функции
Вот некоторые функции, которые могут помочь при работе с правилами переписывания:
add_permastruct()
add_rewrite_endpoint()
add_rewrite_rule()
add_rewrite_tag()
remove_permastruct()
remove_rewrite_tag()
WP_Rewrite()
Используйте данные функции для настройки и управления правилами переписывания на вашем сайте.