Функция wp_publish_post() ─ WP 2.1.0
Функция wp_publish_post() используется для публикации поста путем изменения его статуса. Эта функция облегчает процесс управления статьями в WordPress, позволяя вам публиковать записи с помощью простого вызова функции.
Использует
Функция wp_publish_post() делает следующее:
- Использует
wp_transition_post_status(), чтобы изменить статус поста.
Хуки функции
Функция имеет несколько хуков, которые позволяют выполнять действия на разных этапах:
edit_post_(post_type)— срабатывает при редактировании поста.edit_post— общее событие редактирования поста.save_post_(post_type)— срабатывает при сохранении поста.save_post— общее событие сохранения поста.wp_insert_post— срабатывает при вставке нового поста.
Возврат
Функция ничего не возвращает (null).
Использование функции
Для использования функции необходимо передать ей идентификатор поста или объект поста:
wp_publish_post( $post );
Параметры
$post(int|WP_Post) — об��зательный параметр. Это ID поста или объект поста.
Примеры использования
Пример 1: Отложенная публикация поста
Предположим, вам нужно опубликовать пост только в том случае, если выполнено определенное условие. Для этого вы можете добавить пост в базу данных со статусом "ожидает". Затем выполняете проверку, и если она сработала, публикуете пост. Если проверка не прошла, ничего не делаете.
function add_coin_post() {
// Добавляем пост в базу данных
$post_data = [
'post_type' => 'coin',
'post_title' => $args['name'],
'post_name' => sanitize_title( $symbol ),
'post_status' => 'pending', // ! ВАЖНО
];
$post_id = wp_insert_post( wp_slash( $post_data ), true, false );
if ( is_wp_error( $post_id ) ) {
return $post_id; // Возврат ошибки, если возникла проблема
}
// Делаем нужную проверку
// Здесь переменная $check_is_ok будет определена, если всё в порядке
if ( $check_is_ok ) {
// Запускаем хуки для операции над новым опубликованным постом
wp_publish_post( $post_id );
}
}
Заметки
- Глобальная переменная:
$wpdb— объект абстракции базы данных WordPress.
История изменений
- С 2.1.0: Функция была введена.
Исходный код функции wp_publish_post()
Ниже приведен исходный код функции wp_publish_post():
function wp_publish_post( $post ) {
global $wpdb;
$post = get_post( $post );
if ( ! $post ) {
return;
}
if ( 'publish' === $post->post_status ) {
return;
}
$post_before = get_post( $post->ID );
// Убедимся, что хотя бы один термин применен для таксономий с термином по умолчанию.
foreach ( get_object_taxonomies( $post->post_type, 'object' ) as $taxonomy => $tax_object ) {
// Пропустим таксономию, если нет установленного термина по умолчанию.
if (
'category' !== $taxonomy &&
empty( $tax_object->default_term )
) {
continue;
}
// Не изменяем ранее установленные термины.
if ( ! empty( get_the_terms( $post, $taxonomy ) ) ) {
continue;
}
if ( 'category' === $taxonomy ) {
$default_term_id = (int) get_option( 'default_category', 0 );
} else {
$default_term_id = (int) get_option( 'default_term_' . $taxonomy, 0 );
}
if ( ! $default_term_id ) {
continue;
}
wp_set_post_terms( $post->ID, array( $default_term_id ), $taxonomy );
}
$wpdb->update( $wpdb->posts, array( 'post_status' => 'publish' ), array( 'ID' => $post->ID ) );
clean_post_cache( $post->ID );
$old_status = $post->post_status;
$post->post_status = 'publish';
wp_transition_post_status( 'publish', $old_status, $post );
do_action( "edit_post_{$post->post_type}", $post->ID, $post );
do_action( 'edit_post', $post->ID, $post );
do_action( "save_post_{$post->post_type}", $post->ID, $post, true );
do_action( 'save_post', $post->ID, $post, true );
do_action( 'wp_insert_post', $post->ID, $post, true );
wp_after_insert_post( $post, true, $post_before );
}
Связанные функции
get_default_post_to_edit()wp_delete_post()wp_insert_post()wp_trash_post()wp_update_post()
Эти функции могут быть полезны при работе с постами в WordPress, поскольку они позволяют выполнять различные операции: вставку, удаление и обновление записей.