В WordPress система перезаписи URL-адресов (ЧПУ) позволяет создавать удобные и читабельные ссылки на страницы и посты. Однако при добавлении новых правил перезаписи или пользовательских типов записей может возникнуть необходимость сбросить эти правила, чтобы новые изменения вступили в силу. В этом случае вам поможет функция flush_rewrite_rules()
.
flush_rewrite_rules( bool $hard = true )
Эта функция удаляет существующие правила перезаписи и затем создает их заново. Она может использоваться как для «жесткого» сброса (с обновлением файла .htaccess
), так и для «мягкого» (без обновления файла).
Параметры:
- $hard (bool, необязательный): Определяет, нужно ли обновлять файл
.htaccess
(жесткий сброс) или просто обновить опциюrewrite_rules
(мягкий сброс). По умолчанию —true
.
Важные замечания
Использовать эту функцию стоит осторожно, так как она может быть ресурсоемкой. Обычно её следует применять только в случае необходимости, например, после добавления новых правил перезаписи или новых типов записей. Частый вызов этой функции может негативно сказаться на производительности вашего сайта.
Пример 1: Сброс правил при активации/деактивации плагина
Один из распространенных случаев использования flush_rewrite_rules()
— это сброс правил при активации или деактивации плагина. Рассмотрим следующий пример:
// Функция для активации плагина
function my_plugin_activate() {
// Здесь можно выполнить другие действия при активации плагина
// Сброс правил перезаписи
flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'my_plugin_activate' );
// Функция для деактивации плагина
function my_plugin_deactivate() {
flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, 'my_plugin_deactivate' );
В этом коде при активации и деактивации плагина будет выполнен сброс правил перезаписи, что позволит WordPress использовать новые структуры URL.
Пример 2: Сброс правил при активации темы
Если вы разрабатываете тему и хотите сбрасывать правила при её активации, вы можете использовать следующий код:
add_action( 'after_switch_theme', 'bt_flush_rewrite_rules' );
function bt_flush_rewrite_rules() {
flush_rewrite_rules();
}
Эта функция сработает сразу после переключения на новую тему, обновив правила перезаписи.
Пример 3: Сброс правил при изменении файла
Во время разработки может быть удобно сбрасывать правила, если файл изменился, или каждые 48 часов:
add_action( 'init', 'maybe_flush_rewrite_rules' );
function maybe_flush_rewrite_rules() {
// Получаем время изменения файла
$ver = filemtime( __FILE__ );
$defaults = array( 'version' => 0, 'time' => time() );
$r = wp_parse_args( get_option( __CLASS__ . '_flush', array() ), $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 );
}
}
}
Этот код проверяет, изменился ли файл, и сбрасывает правила при необходимости.
Заключение
Функция flush_rewrite_rules()
является важным инструментом для управления правилами перезаписи в WordPress. Она позволяет обновить структуру URL вашего сайта при необходимости. Однако важно использовать её разумно и не вызывать на каждом запросе, чтобы не снижать производительность вашего сайта.