Функция wp_publish_post() в WordPress: использование и примеры

Функция 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, поскольку они позволяют выполнять различные операции: вставку, удаление и обновление записей.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *