Функция wp_get_post_revisions()
в WordPress позволяет разработчикам получить все ревизии определенного поста. Это полезно для управления изменениями контента и для восстановления предыдущих версий записей.
wp_get_post_revisions( int|WP_Post $post, array|null $args = null ): WP_Post[]|int[]
Параметры
- $post (опциональный): ID поста или объект WP_Post, для которого нужно получить ревизии. По умолчанию используется глобальная переменная
$post
. - $args (опциональный): Массив аргументов для получения ревизий поста. По умолчанию значение
null
.
Возвращаемое значение
- WP_Post[]: Массив объектов ревизий или пустой массив, если ревизий нет.
Как работает функция
Функция wp_get_post_revisions()
использует функцию get_children()
для получения всех ревизий поста, которые имеют post_type
равный revision
. По умолчанию, WordPress хранит ревизии в базе данных, и их количество можно контролировать с помощью константы WP_POST_REVISIONS
.
Чтобы включить поддержку ревизий для кастомных типов записей, нужно использовать параметр 'supports'
при регистрации типа записи:
register_post_type( 'my_custom_post', [
'supports' => ['revisions'],
] );
Если необходимо изменить количество ревизий, которые WordPress будет хранить, это можно сделать с помощью хука wp_revisions_to_keep
.
Пример 1: Получение всех ревизий поста
Для получения всех ревизий поста по ID можно использовать следующий код:
$post_id = 42; // ID поста, для которого получаем ревизии
$revisions = wp_get_post_revisions( $post_id );
if ( !empty( $revisions ) ) {
echo "Ревизии для поста с ID {$post_id}:<br>";
foreach ( $revisions as $revision ) {
echo "Ревизия ID: {$revision->ID} - Дата: {$revision->post_date}<br>";
}
} else {
echo "У поста с ID {$post_id} нет ревизий.";
}
Пример 2: Получение ревизий как массива ID
Если вам нужны только ID ревизий, вы можете использовать $args
:
$post_id = 10; // ID поста
$args = ['fields' => 'ids']; // Получение только ID
$revision_ids = wp_get_post_revisions( $post_id, $args );
if ( !empty( $revision_ids ) ) {
echo "ID ревизий для поста с ID {$post_id}: " . implode(', ', $revision_ids);
} else {
echo "У поста с ID {$post_id} нет ревизий.";
}
Пример 3: Получение последней ревизии поста
Вы можете получить последнюю ревизию поста, сортируя массив ревизий по дате:
$post_id = 55; // ID поста
$revisions = wp_get_post_revisions( $post_id );
$latest_revision = end( $revisions ); // Получаем последнюю ревизию
if ( $latest_revision ) {
echo "Последняя ревизия ID: {$latest_revision->ID} - Дата: {$latest_revision->post_date}";
} else {
echo "У поста с ID {$post_id} нет ревизий.";
}
Пример 4: Получение ревизий с дополнительными параметрами
Вы можете использовать дополнительные параметры для фильтрации получаемых ревизий. Например, вы можете указать, чтобы возвращались только ревизии, созданные после определенной даты:
$post_id = 75; // ID поста
$args = [
'date_query' => [
[
'after' => '2023-01-01',
],
],
];
$recent_revisions = wp_get_post_revisions( $post_id, $args );
if ( !empty( $recent_revisions ) ) {
echo "Недавние ревизии для поста с ID {$post_id}:<br>";
foreach ( $recent_revisions as $revision ) {
echo "Ревизия ID: {$revision->ID} - Дата: {$revision->post_date}<br>";
}
} else {
echo "У поста с ID {$post_id} нет ревизий после 1 января 2023 года.";
}
Заключение
Функция wp_get_post_revisions()
является мощным инструментом для работы с ревизиями постов в WordPress. Она позволяет разработчикам легко получать доступ к истории изменений контента и управлять предыдущими версиями записей. С помощью приведенных примеров вы можете адаптировать функциональность получения ревизий под свои нужды и улучшить управление контентом на своем сайте.