wp_publish_post() │ WP 2.1.0
Публикует запись. Меняет её статус с future , draft и т.д. на publish . Запускает все хуки необходимые для смены статуса записи.
Если вам нужно поменять статус записи например с draft
на publish
, то лучше запустить функцию wp_update_post() :
wp_update_post( [
'ID' => $post_id,
'post_status' => 'publish',
] );
Эта функция не делает всех нужных операций для правильной смены статуса, в частности не выставляются даты поста и возможно что-то еще.
Возвращает
null
. Ничего (null)
Использование
wp_publish_post( $post_id );
$post_id(число/WP_Post) (обязательный)
Объект или ID записи.
Примеры
#1 Публикация поста с задержкой
Допустим нам нужно опубликовать пост только если пройдена какая-то проверка. Для этого, мы добавляем пост в БД со статусом pending
. Затем делаем нашу проверку и если она пройдена публикуем пост, а если не пройдена, то ничего не делаем.
function add_coin_post(){
// Добавляем пост в БД
$post_data = [
'post_type' => 'coin',
'post_title' => $args['name'],
'post_name' => sanitize_title( $symbol ),
'post_status' => 'pending', // ! IMPORTANT
];
$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 );
}
}
Добавить свой пример
Заметки
Global. wpdb. $wpdb WordPress database abstraction object.
Список изменений
Код wp_publish_post() wp publish post
WP 6.6.1
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 );
// Ensure at least one term is applied for taxonomies with a default term.
foreach ( get_object_taxonomies( $post->post_type, 'object' ) as $taxonomy => $tax_object ) {
// Skip taxonomy if no default term is set.
if (
'category' !== $taxonomy &&
empty( $tax_object->default_term )
) {
continue;
}
// Do not modify previously set terms.
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 );
/** This action is documented in wp-includes/post.php */
do_action( "edit_post_{$post->post_type}", $post->ID, $post );
/** This action is documented in wp-includes/post.php */
do_action( 'edit_post', $post->ID, $post );
/** This action is documented in wp-includes/post.php */
do_action( "save_post_{$post->post_type}", $post->ID, $post, true );
/** This action is documented in wp-includes/post.php */
do_action( 'save_post', $post->ID, $post, true );
/** This action is documented in wp-includes/post.php */
do_action( 'wp_insert_post', $post->ID, $post, true );
wp_after_insert_post( $post, true, $post_before );
}
Cвязанные функции