Функция wp_get_post_revision()
в WordPress предназначена для получения информации о ревизиях постов. Ревизии позволяют сохранять историю изменений контента, что полезно для восстановления предыдущих версий постов или проверки изменений.
wp_get_post_revision( int|WP_Post $post, string $output = OBJECT, string $filter = 'raw' ): WP_Post|array|null
Параметры
- $post (обязательный): ID поста или объект поста, для которого требуется получить ревизию.
- $output (опциональный): Тип возвращаемого значения. Может быть:
OBJECT
: возвращает объект WP_Post (по умолчанию).ARRAY_A
: возвращает ассоциативный массив.ARRAY_N
: возвращает нумерованный массив.
- $filter (опциональный): Фильтр для очистки возвращаемых полей. По умолчанию используется значение
'raw'
.
Возвращаемое значение
- WP_Post: возвращается объект ревизии, если он успешно найден и $output установлен в
OBJECT
. - array: возвращается массив, если $output установлен в
ARRAY_A
илиARRAY_N
. - null: возвращается, если ревизия не найдена или указанный пост не является ревизией.
Как работает функция
Функция wp_get_post_revision()
проверяет, существует ли запись с указанным ID и является ли она ревизией (т.е. имеет поле post_type
равным revision
). Если это так, функция возвращает соответствующий объект или массив. В противном случае возвращается null.
Пример 1: Получение ревизии по ID
Для получения ревизии с известным ID можно использовать следующий код:
$revision_id = 12; // ID ревизии, которую нужно получить
$revision = wp_get_post_revision( $revision_id );
if ( $revision ) {
// Да, это ревизия
echo "Полученная ревизия: ";
print_r( $revision );
} else {
echo "Ревизия с ID {$revision_id} не найдена.";
}
Пример 2: Получение ревизии как ассоциативного массива
Если вам нужно получить ревизию в виде ассоциативного массива, вы можете указать параметр $output
:
$revision_id = 15; // ID ревизии
$revision = wp_get_post_revision( $revision_id, 'ARRAY_A' );
if ( $revision ) {
echo "Ассоциативный массив ревизии: ";
print_r( $revision );
} else {
echo "Ревизия с ID {$revision_id} не найдена.";
}
Пример 3: Проверка, является ли пост ревизией
Вы можете использовать функцию wp_get_post_revision()
в комбинации с другой функцией для проверки, является ли пост ревизией. Пример ниже показывает, как это сделать:
function is_post_revision( $post_id ) {
$revision = wp_get_post_revision( $post_id );
if ( $revision ) {
return "Пост с ID {$post_id} является ревизией поста с ID {$revision->post_parent}.";
}
return "Пост с ID {$post_id} не является ревизией.";
}
$post_id = 20; // ID поста для проверки
echo is_post_revision( $post_id );
Пример 4: Получение всех ревизий для поста
Если вам нужно получить все ревизии для определенного поста, вы можете использовать SQL-запрос:
global $wpdb;
$post_id = 5; // ID поста, для которого получаем ревизии
$revision_ids = $wpdb->get_col( $wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_parent = %d AND post_type = 'revision'",
$post_id
));
$revisions = [];
foreach ( $revision_ids as $revision_id ) {
$revision = wp_get_post_revision( $revision_id );
if ( $revision ) {
$revisions[] = $revision;
}
}
echo "Ревизии для поста с ID {$post_id}: ";
print_r( $revisions );
Заключение
Функция wp_get_post_revision()
является полезным инструментом для работы с ревизиями постов в WordPress. Она позволяет легко получать информацию о прошлых версиях контента и предоставляет разработчикам возможность контролировать историю изменений. С приведенными примерами вы можете адаптировать функциональность получения ревизий под свои нужды и улучшить управление контентом на вашем сайте.