wp_revisions_to_keep()WP 3.6.0

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

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

Значение константы передается в первый хук, затем во второй и полученное число (результат) возвращается. Т.е. функция опирается на значение константы 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.

Есть еще функция wp_revisions_enabled() - проверят включены ли ревизии для записи.

1 раз — 0.0005041 сек (медленно) | 50000 раз — 0.04072 сек (скорость света) | PHP 7.4.25, WP 5.9

Возвращает

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

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

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

wp_revisions_to_keep( $post );
$post(WP_Post) (обязательный)
Объект записи.

Примеры

0

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

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

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

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

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

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

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

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

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

	return $num;

}, 10, 2 );

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

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

Код wp_revisions_to_keep() WP 5.9.3

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;
}