wp_revisions_to_keep() │ WP 3.6.0

Click here to view original web page at wp-kama.ru

Определяет сколько последних ревизий (изменений) следует хранить в базе данных для конкретной записи (поста).

Это обертка для:

Значение константы передается в первый хук, затем во второй и полученное число (результат) возвращается. Т.е. функция опирается на значение константы WP_POST_REVISIONS и позволяет изменить результат через хуки.

Константа WP_POST_REVISIONS задается в файле wp-config.php.

WP_POST_REVISIONS может быть равно:

  • true (по умолчанию) - сохраняется бесконечное количество ревизий.

    Дефолтное значение константы определено в файле /wp-includes/default-constants.php.

  • false или 0 - ревизии будут отключены.

  • число - сколько ревизий сохранять. Если указано 5, то будет сохраняться 5 последних изменений записи.

Поддержка ревизий включается при регистрации типа записи register_post_type(). Или отдельно через функцию:

post_type_supports( 'post_type', 'revisions' )

Если у типа записи поддержка ревизий отключена, то значение константы WP_POST_REVISIONS обнуляется. Однако, даже если ревизии отключены для типа записи, их все равно можно включить через хуки, например для отдельной записи. Смотрите пример 2.

Возвращает

int. Количество ревизий, которые необходимо хранить для указанной записи.

  • число - сколько ревизий хранить в БД.
  • -1 - хранить в БД все ревизии.
  • 0 - не сохранять ревизии вообще.

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

wp_revisions_to_keep( $post );

Примеры

#1 Узнаем сколько ревизий разрешено хранить записи

На чистой установке WordPress узнаем, какой лимит ревизий у самой первой записи.

// Получим запись с ID=1
$post = get_post( 1 );

// Получим лимит ревизий для этой записи
$qty = wp_revisions_to_keep( $post );

// Выведет -1, то есть можно сохранять бесконечное количество ревизий
print_r( $qty ); //> -1

#2 Включим ревизии для отдельной записи

Допустим у нас есть тип записи article, который не поддерживает ревизии. Но нам нужно включить ревизии для одной конкретной записи, например, с ID 54.

add_filter( 'wp_revisions_to_keep', function( $num, $post ){

	if( 54 === $post->ID ){
		return -1;
	}

	return $num;

}, 10, 2 );

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

function wp_revisions_to_keep( $post ) {
	$num = WP_POST_REVISIONS;

	if ( true === $num ) {
		$num = -1;
	} else {
		$num = (int) $num;
	}

	if ( ! post_type_supports( $post->post_type, 'revisions' ) ) {
		$num = 0;
	}

	/**
	 * Filters the number of revisions to save for the given post.
	 *
	 * Overrides the value of WP_POST_REVISIONS.
	 *
	 * @since 3.6.0
	 *
	 * @param int     $num  Number of revisions to store.
	 * @param WP_Post $post Post object.
	 */
	$num = apply_filters( 'wp_revisions_to_keep', $num, $post );

	/**
	 * Filters the number of revisions to save for the given post by its post type.
	 *
	 * Overrides both the value of WP_POST_REVISIONS and the {@see 'wp_revisions_to_keep'} filter.
	 *
	 * The dynamic portion of the hook name, `$post->post_type`, refers to
	 * the post type slug.
	 *
	 * Possible hook names include:
	 *
	 *  - `wp_post_revisions_to_keep`
	 *  - `wp_page_revisions_to_keep`
	 *
	 * @since 5.8.0
	 *
	 * @param int     $num  Number of revisions to store.
	 * @param WP_Post $post Post object.
	 */
	$num = apply_filters( "wp_{$post->post_type}_revisions_to_keep", $num, $post );

	return (int) $num;
}

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