save_mod_rewrite_rules()WP 1.5.0

Функция обновляет файл .htaccess, если он доступен для записи. Удаляет старые правила и добавляет новые.

Функция запускается при каждом вызове функции flush_rewrite_rules(), когда первый параметр = true (это по умолчанию). Поэтому вызывать её отдельно как правило не нужно.

Не работает для мультисайта - проверка осуществляется функцией is_multisite().

Отработает только на сервере Apache с загруженным модулем mod_rewrite - проверка осуществляется функцией got_mod_rewrite().

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

Хуков нет.

Возвращает

true|false|null. Ничего (null).

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

save_mod_rewrite_rules();

Примеры

0

#1 Отключим обновление .htaccess

При вызове функции flush_rewrite_rules() по умолчанию срабатывает функция save_mod_rewrite_rules(). Если нам это поведение не нужно, то его можно отключить через хук flush_rewrite_rules_hard:

add_filter( 'flush_rewrite_rules_hard', '__return_false' );

Заметки

  • Global. WP_Rewrite. $wp_rewrite WordPress rewrite component.

Список изменений

С версии 1.5.0 Введена.

Код save_mod_rewrite_rules() WP 6.1.1

function save_mod_rewrite_rules() {
	global $wp_rewrite;

	if ( is_multisite() ) {
		return;
	}

	// Ensure get_home_path() is declared.
	require_once ABSPATH . 'wp-admin/includes/file.php';

	$home_path     = get_home_path();
	$htaccess_file = $home_path . '.htaccess';

	/*
	 * If the file doesn't already exist check for write access to the directory
	 * and whether we have some rules. Else check for write access to the file.
	 */
	if ( ! file_exists( $htaccess_file ) && is_writable( $home_path ) && $wp_rewrite->using_mod_rewrite_permalinks()
		|| is_writable( $htaccess_file )
	) {
		if ( got_mod_rewrite() ) {
			$rules = explode( "\n", $wp_rewrite->mod_rewrite_rules() );

			return insert_with_markers( $htaccess_file, 'WordPress', $rules );
		}
	}

	return false;
}