Изменение статуса комментария в WordPress с помощью wp_set_comment_status()

WP_SET_COMMENT_STATUS() │ WP 1.0.0

Функция wp_set_comment_status используется для изменения статуса комментария в WordPress. Данная функция позволяет устанавливать статусы комментариев, такие как "одобрено", "в спаме", "в корзине" или "ожидает модерации".

Как это работает

После обработки комментария вызывается действие wp_set_comment_status. Если статус комментария не принадлежит к установленному списку, функция вернет значение false.

Ключевые слова

  • wp_set_comment_status: действие, вызываемое после обработки комментария.
  • Возвращаемые значения: true, если операция прошла успешно; false или WP_Error в случае ошибки.

Синтаксис

wp_set_comment_status( $comment_id, $comment_status, $wp_error );

Параметры

  • $comment_id (int|WP_Comment): Обязательный. ID комментария или объект WP_Comment.
  • $comment_status (string): Обязательный. Новый статус комментария: 'hold', 'approve', 'spam' или 'trash'.
  • $wp_error (bool): Опционально. Если true, функция вернет объект WP_Error в случае неудачи. По умолчанию: false.

Примеры использования

Пример 1: Одобрение комментария с ID = 9

wp_set_comment_status( 9, 'approve' ); // Одобряем комментарий

Если вы хотите вернуть статус обратно в "ожидает модерации":

wp_set_comment_status( 9, 'hold' ); // Возвращаем статус "ожидает модерации"

Пример 2: Проверка статуса комментариев к посту

Сначала получим пост:

$get_post = get_post( 123 );
$status = $get_post->comment_status;

// Делаем что-то, только когда комментарии открыты
if ( $status === 'open' ) { 
    // Ваш код здесь...
}

Важные замечания

  • Переменная $wpdb — это обертка для работы с базой данных WordPress.
  • Если функция не может обновить статус комментария, она может вернуть объект WP_Error, если это установлено в параметре $wp_error.

Код функции

function wp_set_comment_status( $comment_id, $comment_status, $wp_error = false ) {
    global $wpdb;

    switch ( $comment_status ) {
        case 'hold':
        case '0':
            $status = '0';
            break;
        case 'approve':
        case '1':
            $status = '1';
            add_action( 'wp_set_comment_status', 'wp_new_comment_notify_postauthor' );
            break;
        case 'spam':
            $status = 'spam';
            break;
        case 'trash':
            $status = 'trash';
            break;
        default:
            return false;
    }

    $comment_old = clone get_comment( $comment_id );

    if ( ! $wpdb->update( $wpdb->comments, array( 'comment_approved' => $status ), array( 'comment_ID' => $comment_old->comment_ID ) ) ) {
        if ( $wp_error ) {
            return new WP_Error( 'db_update_error', __( 'Не удалось обновить статус комментария.' ), $wpdb->last_error );
        } else {
            return false;
        }
    }

    clean_comment_cache( $comment_old->comment_ID );

    $comment = get_comment( $comment_old->comment_ID );

    do_action( 'wp_set_comment_status', $comment->comment_ID, $comment_status );

    wp_transition_comment_status( $comment_status, $comment_old->comment_approved, $comment );

    wp_update_comment_count( $comment->comment_post_ID );

    return true;
}

Связанные функции

  • get_post_stati(): Получить все статусы постов.
  • wp_transition_comment_status(): Переход комментария из одного статуса в другой.
  • wp_update_comment_count(): Обновить количество комментариев к посту.

Теперь, когда у вас есть представление о функции wp_set_comment_status, вы можете использовать ее для управления комментариями на своих страницах WordPress!

Leave a Reply

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