Функция wp_update_post()
в WordPress предназначена для обновления данных существующего поста. Это полезный инструмент, который позволяет менять содержимое постов, их категории, метаданные и другие параметры без необходимости создавать новый пост.
wp_update_post( array|object $postarr = array(), bool $wp_error = false, bool $fire_after_hooks = true );
Функция обновляет запись на основе переданных данных, включая идентификатор поста, который необходимо изменить. Основное отличие от wp_insert_post()
заключается в том, что для обновления достаточно указать только те поля, которые нужно изменить. Остальные поля останутся неизменными.
Параметры
$postarr
(массив|объект, по умолчанию: пустой массив): Массив данных поста, которые нужно обновить. Обязательно должно содержаться полеID
— идентификатор поста. Другие поля зависят от того, что требуется обновить.$wp_error
(логический, по умолчанию:false
): Если установлено вtrue
, функция вернет объектWP_Error
в случае ошибки.$fire_after_hooks
(логический, по умолчанию:true
): Если установить вfalse
, не будут запускаться хуки, которые срабатывают после вставки поста.
Возвращаемое значение
- ID поста при успешном обновлении.
0
или объектWP_Error
при ошибке (в зависимости от значения параметра$wp_error
).
Пример 1: Обновление заголовка и контента поста
Для того чтобы обновить заголовок и содержание поста с ID 52
, достаточно указать необходимые поля в массиве:
$my_post = array(
'ID' => 52,
'post_title' => 'Обновленный заголовок поста',
'post_content' => 'Это обновленный контент поста',
);
// Обновляем запись в базе данных
wp_update_post( wp_slash( $my_post ) );
Пример 2: Обработка ошибок
Если обновление может завершиться неудачей, имеет смысл использовать параметр $wp_error
для возврата подробной информации об ошибке:
$post_id = wp_update_post( $my_post, true ); // $wp_error = true
if ( is_wp_error( $post_id ) ) {
$errors = $post_id->get_error_messages();
foreach ( $errors as $error ) {
echo 'Ошибка: ' . $error;
}
}
Пример 3: Обновление мета-полей поста
Функция позволяет также обновлять мета-данные, используя ключ meta_input
. Пример обновления мета-полей для поста с ID 73
:
$my_post = array(
'ID' => 73,
'meta_input' => array(
'ключ_1' => 'значение_1',
'ключ_2' => 'значение_2',
),
);
// Обновляем мета-поля
wp_update_post( wp_slash( $my_post ) );
Пример 4: Публикация поста в будущем
Для того чтобы запланировать публикацию поста в будущем, нужно задать статус future
и установить соответствующую дату публикации:
$time = strtotime( 'послезавтра' );
$my_post = array(
'ID' => 84,
'post_status' => 'future',
'post_date' => date( 'Y-m-d H:i:s', $time ),
'post_date_gmt' => gmdate( 'Y-m-d H:i:s', $time ),
);
// Запланируем публикацию
wp_update_post( $my_post );
Важные моменты
- Бесконечные циклы: При использовании функции внутри хука
save_post
может возникнуть бесконечный цикл. Это происходит из-за того, что функцияwp_update_post()
сама вызывает этот хук. Чтобы избежать этого, нужно временно отключить хук и снова его подключить после обновления:
add_action( 'save_post', 'my_function' );
function my_function( $post_id ) {
if ( ! wp_is_post_revision( $post_id ) ) {
remove_action( 'save_post', 'my_function' ); // Отключаем хук
wp_update_post( $my_post ); // Обновляем пост
add_action( 'save_post', 'my_function' ); // Включаем хук обратно
}
}
- Экраннирование данных: Если данные, переданные в функцию, не экранированы, их нужно экранировать с помощью
wp_slash()
.
Заключение
Функция wp_update_post()
— это мощный инструмент для изменения записей в WordPress. С ее помощью можно легко обновлять контент, метаданные, категории и многое другое.