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

wp_get_post_revisions() WP 2.6.0

Получает все ревизии (редакции) указанной записи (поста).

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

Хуков нет.

Возвращает

Массив. Массив объектов записей-ревизий или array() если ревизий нет.

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

wp_get_post_revisions( $post_id, $args );
$post_id(число/WP_Post)
ID записи, ревизии которой нужно получить. Можно передать объект записи.
По умолчанию: global $post
$args(строка/массив)
Дополнительные параметры. Все параметры которые принимает get_children(). Этот параметр чаще всего, использовать не нужно.
По умолчанию: null

Примеры

#1 Получим последнюю редакцию записи

$post_id = 999;
$revisions = wp_get_post_revisions( $post_id );

$last_revision = false;
// Получим последнюю версию но не autosave
foreach ( $revisions as $revision ) {
	if ( false !== strpos( $revision->post_name, "{$revision->post_parent}-revision" ) ) {
		$last_revision = $revision;
		break;
	}
}

#2 Пример того, что выводит функция

$revisions = wp_get_post_revisions( 128 );

/* ревизии записи 128
Array (
	[22] => WP_Post Object  (
			[ID]                    => 22
			[post_author]           => 0
			[post_date]             => 2017-02-21 01:41:45
			[post_date_gmt]         => 2017-02-20 22:41:45
			[post_content]          => Контент ревизии ...
			[post_title]            => Рецепт мороженого
			[post_excerpt]          => 
			[post_status]           => inherit
			[comment_status]        => closed
			[ping_status]           => closed
			[post_password]         => 
			[post_name]             => 128-revision-v1
			[to_ping]               => 
			[pinged]                => 
			[post_modified]         => 2017-02-21 01:41:45
			[post_modified_gmt]     => 2017-02-20 22:41:45
			[post_content_filtered] => 
			[post_parent]           => 128
			[guid]                  => http://site.ru/recept-morojenogo/128-revision-v1.html
			[menu_order]            => 0
			[post_type]             => revision
			[post_mime_type]        => 
			[comment_count]         => 0
			[filter]                => raw
		)

	[19] => WP_Post Object (
			[ID]                    => 19
			[post_author]           => 0
			[post_date]             => 2017-02-19 15:40:48
			[post_date_gmt]         => 2017-02-19 12:40:48
			[post_content]          => Конетнт ревизии ...
			[post_title]            => Рецепт мороженого
			[post_excerpt]          => 
			[post_status]           => inherit
			[comment_status]        => closed
			[ping_status]           => closed
			[post_password]         => 
			[post_name]             => 128-revision-v1
			[to_ping]               => 
			[pinged]                => 
			[post_modified]         => 2017-02-19 15:40:48
			[post_modified_gmt]     => 2017-02-19 12:40:48
			[post_content_filtered] => 
			[post_parent]           => 128
			[guid]                  => http://site.ru/recept-morojenogo/128-revision-v1.html
			[menu_order]            => 0
			[post_type]             => revision
			[post_mime_type]        => 
			[comment_count]         => 0
			[filter]                => raw
		)

	[12] => WP_Post Object (
			...
		)

)
*/

Код wp get post revisions: wp-includes/revision.php WP 4.9

<?php
function wp_get_post_revisions( $post_id = 0, $args = null ) {
	$post = get_post( $post_id );
	if ( ! $post || empty( $post->ID ) )
		return array();

	$defaults = array( 'order' => 'DESC', 'orderby' => 'date ID', 'check_enabled' => true );
	$args = wp_parse_args( $args, $defaults );

	if ( $args['check_enabled'] && ! wp_revisions_enabled( $post ) )
		return array();

	$args = array_merge( $args, array( 'post_parent' => $post->ID, 'post_type' => 'revision', 'post_status' => 'inherit' ) );

	if ( ! $revisions = get_children( $args ) )
		return array();

	return $revisions;
}

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

Из метки: post revision (ревизии, редакции записи)

Еще из раздела: Ревизии (редакции)

wp_get_post_revisions 3 комментария
  • chesterfobitt

    День добрый. Голову сломал от поисков. Может вы поможете?
    Суть в том, что есть произвольный тип записи с полями произвольного типа, и есть поле, скажем "текущий этап". При изменении этого поля нужно отправлять письмо пользователю. Но я так и не нашел и не придумал решения чтобы отследить изменение этого поля. То есть фактически нужно посмотреть при сохранении поста, отличается значение поля "текущий этап" от предыдущей сохраненной версии и если отличается то добавляем экшн отправки письма пользователю, если нет - ничего не делаем(или проверяем другие нужные поля). Как думаете может мне помочь в этой задумке функция описанная выше в статье или может есть решение получше чем получать все ревизии и сравнивать данные?
    Произвольные тип записи и поля создавал через код, без плагинов

    Ответить1.3 года назад #
    • Kama4662

      Да прям на save_post или update_post прикрепиться и там прям самому проверить что было и что есть...

      Вот хук может пригодится:

      do_action( 'pre_post_update', $post_ID, $data );

      У вас еще зависит от того, в какой момент обновляется метаполе... Скорее всего вам и поздние хуки save_post подойдут тоже... Подробнее хуки см. в функции wp_insert_post()

      Ответить1.3 года назад #
      • chesterfobitt

        Спасибо. Я не мог понять сначала как именно можно проверить, что у поля изменилось значение, а потом у вас прочитал про update_post_meta, что эта функция возвращает true если значение изменилось и false если значение осталось неизменным. Не знаю, правильно ли, но я добавил отправку письма в условие

        if (update_post_meta($post_id, 'field_name', $_POST['field_name'])) {
        
        	/* Отправляем письмо */
        
        }

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

        Хотел еще сказать спасибо за огромный труд над сайтом, самая полноценная и информативная документация.

        Ответить1.3 года назад #

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

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