# FLUSH_REWRITE_RULES() │ WP 3.0.0
Функция FLUSH_REWRITE_RULES() удаляет правила переписывания URL и затем создает их заново. Это полезно, когда вы изменяете структуру ваших URL и хотите, чтобы WordPress знал о этих изменениях.
## Описание использования
- **Синтаксис**: flush_rewrite_rules( $hard );
- **Параметр**:
- $hard (boolean): Указывает, нужно ли обновить файл .htaccess (жесткая очистка) или просто обновить опцию rewrite_rules (мягкая очистка).
- **По умолчанию**: true (жесткая очистка)
## Примеры использования
### Пример 1: Обновление правил при активации/деактивации плагина
Этот пример показывает, как восстановить правила Friendly URL при активации или деактивации плагина:
```php
register_activation_hook( __FILE__, 'myplugin_activate' );
register_deactivation_hook( __FILE__, 'myplugin_deactivate' );
function myplugin_activate() {
// Здесь мы выполняем необходимые действия при активации плагина
flush_rewrite_rules();
}
function myplugin_deactivate() {
flush_rewrite_rules();
}
Пример 2: Обновление правил при активации/деактивации темы
Этот пример демонстрирует, как сбросить правила Friendly URL при активации темы:
/* Сбрасываем правила переписывания. */
add_action( 'after_switch_theme', 'bt_flush_rewrite_rules' );
function bt_flush_rewrite_rules() {
flush_rewrite_rules();
}
Пример 3: Сброс правил URL, если файл был изменен или каждые 48 часов
Если вы разрабатываете тему, код, который будет сбрасывать правила Friendly URL, если файл изменился или каждые 48 часов, может быть полезен:
// Не используйте на рабочих серверах
add_action( 'init', 'maybe_rewrite_rules' );
function maybe_rewrite_rules() {
// Выполняем это только в админке
if ( ! is_admin() ) {
return;
}
// Получаем время изменения файла как номер версии
$ver = filemtime( __FILE__ );
$defaults = [ 'version' => 0, 'time' => time() ];
$r = wp_parse_args( get_option( __CLASS__ . '_flush', [] ), $defaults );
// Сбрасываем, если версия изменилась или ��рошло 48 часов
if ( $r['version'] != $ver || $r['time'] + 172800 < time() ) {
flush_rewrite_rules();
$args = array( 'version' => $ver, 'time' => time() );
if ( ! update_option( __CLASS__ . '_flush', $args ) )
add_option( __CLASS__ . '_flush', $args );
}
}
Примечание: Сброс правил переписывания следует выполнять только в админке. Выполнение этого на пользовательской стороне может вызвать проблемы на рабочем сайте.
Примечания
- Глобальный объект:
$wp_rewrite— это компонент переписывания WordPress.
Изменения
- С версии: 3.0.0 — функция была введена.
Код функции
Вот код функции flush_rewrite_rules из файла wp-includes/rewrite.php:
function flush_rewrite_rules( $hard = true ) {
global $wp_rewrite;
if ( is_callable( array( $wp_rewrite, 'flush_rules' ) ) ) {
$wp_rewrite->flush_rules( $hard );
}
}