WordPress как на ладони
wordpress jino

flush_rewrite_rules() WP 3.0

Обновляет правила перезаписи ЧПУ: удаляет имеющиеся, генерирует и записывает новые.

Эта функция полезна при регистрации новых типов записей, так как она позволяет автоматически сбрасывать правила перезаписи ЧПУ. Обычно это делается вручную.

Если вы создали новый тип записи с помощью функции register_post_type(), создали новую запись этого типа, и при попытке посмотреть запись, увидели ошибку 404, значит правила перезаписи ЧПУ не были сброшены. Когда вы создали новый тип записи, WordPress еще не знает структуры ссылок этого типа, чтобы научить WP нужна функция flush_rewrite_rules().

Чтобы вручную сбросить правила перезаписи ЧПУ. Нужно зайти на страницу настроек "постоянные ссылки" (Permalink Settings) и нажать кнопку "Сохранить изменения". Во время такого сохранения, правила перезаписи удаляются из базы данных, генерируются новые и сохраняются на место прежних.

Сбрасывать правила перезаписи необходимо только единожды, потому что это ресурсоемкая операция. Сбрасывать правила можно при активации, деактивации, удалении плагина или в других случаях, когда вы точно знаете что это нужно сделать. Не нужно использовать функцию каждый раз при генерации страницы! Не нужно вешать эту функцию на хук init, кроме случаев, когда вы знаете что делаете.

Работает на основе: WP_Rewrite()

Хуков нет.

Возвращает

Ничего не возвращает.

Использование

flush_rewrite_rules( $hard );
$hard(логический)
Нужно ли обновлять файл .htaccess или просто обновить правила. По умолчанию - true, обновляется файл .htaccess.
По умолчанию: true

Примеры

#1. Сброс ЧПУ при активации/деактивации плагина

Пример, показывает как сбрасывать правила перезаписи ЧПУ в момент активации/деактивации плагина:

function myplugin_activate() {

	// Здесь, регистрируем таксономию или тип поста

	flush_rewrite_rules();
}

register_activation_hook( __FILE__, 'myplugin_activate' );

function myplugin_deactivate() {
	flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, 'myplugin_deactivate' );

#2. Сброс ЧПУ при активации/деактивации темы

Пример, показывает как сбрасывать правила перезаписи ЧПУ в момент активации темы:

/* Сбрасываем правила для произвольного типа записей. */
add_action( 'after_switch_theme', 'bt_flush_rewrite_rules' );

function bt_flush_rewrite_rules() {
	 flush_rewrite_rules();
}

#3. Сброс ЧПУ, если файл был изменен или каждые 48 часов

Если вы разрабатываете тему, то на время разработки может пригодится такой код, который будет сбрасывать правила перезаписи ЧПУ, если файл был изменен или каждые 48 часов.

// do not use on live/production servers
add_action( 'init','maybe_rewrite_rules' );
function maybe_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: wp-includes/rewrite.php VER 4.9.1

<?php
function flush_rewrite_rules( $hard = true ) {
	global $wp_rewrite;
	$wp_rewrite->flush_rules( $hard );
}

Cвязанные функции

Из метки: Rewrite (ЧПУ перезапись)

flush_rewrite_rules Комментариев нет

Здравствуйте, !

Ваш комментарий