Функция wp_publish_post()
в WordPress служит для изменения статуса записи на «опубликовано». Она полезна в сценариях, где необходимо управлять статусами постов программно, без вмешательства через интерфейс админки.
wp_publish_post( int|WP_Post $post )
wp_publish_post()
меняет статус записи с одного из следующих значений: draft
, future
, или pending
на publish
. Важно отметить, что эта функция не выполняет всех операций, связанных с публикацией, таких как обновление даты публикации или установка post_name
. Если требуется выполнение всех этих операций, рекомендуется использовать wp_update_post()
.
Параметры
$post
(int|WP_Post) — ID записи или объект записи. Этот параметр является обязательным.
Возвращаемое значение
- Функция не возвращает никаких значений (null).
Хуки
При использовании wp_publish_post()
активируются следующие хуки:
edit_post_(post_type)
— вызывается при редактировании поста.edit_post
— вызывается при редактировании поста.save_post_(post_type)
— вызывается при сохранении поста.save_post
— вызывается при сохранении поста.wp_insert_post
— вызывается при вставке нового поста.
Эти хуки позволяют разработчикам подключать дополнительные действия во время процесса публикации.
Пример 1: Публикация поста с задержкой
В этом примере мы сначала создаем пост со статусом draft
, а затем, после проверки, публикуем его:
function create_event_post( $event_data ) {
// Определяем данные для поста
$post_args = [
'post_type' => 'event', // Пользовательский тип записи
'post_title' => $event_data['title'],
'post_content'=> $event_data['description'],
'post_status' => 'draft', // Сначала создаем как черновик
];
// Вставляем пост в БД
$post_id = wp_insert_post( wp_slash( $post_args ), true );
// Проверяем на ошибки
if ( is_wp_error( $post_id ) ) {
return $post_id; // Возвращаем ошибку, если есть
}
// Предполагаем, что переменная $event_date содержит дату события
$event_date = $event_data['event_date'];
// Проверка, если событие происходит в будущем
if ( strtotime( $event_date ) > time() ) {
// Публикуем пост
wp_publish_post( $post_id );
// Отправляем уведомление о публикации
$admin_email = get_option( 'admin_email' );
wp_mail( $admin_email, 'Новое событие опубликовано', 'Событие "' . $event_data['title'] . '" было успешно опубликовано.');
}
return $post_id; // Возвращаем ID поста
}
// Пример вызова функции
$event_data = [
'title' => 'Концерт в парке',
'description' => 'Приглашаем всех на концерт в городском парке!',
'event_date' => '2024-11-15', // Дата события
];
create_event_post( $event_data );
Пример 2: Публикация поста из черновика
Предположим, что у нас есть пост с ID 12
, который мы хотим опубликовать. Код будет выглядеть следующим образом:
$post_id = 12;
$post_status = get_post_status( $post_id );
if ( in_array( $post_status, ['draft', 'pending'] ) ) {
wp_publish_post( $post_id );
echo 'Запись успешно опубликована.';
} else {
echo 'Запись уже опубликована или имеет другой статус.';
}
Заключение
Функция wp_publish_post()
предоставляет удобный способ управления статусом записей в WordPress. Однако стоит помнить, что она не выполняет всех необходимых операций для корректной публикации, таких как обновление даты публикации. Для этих целей лучше использовать wp_update_post()
.