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!