WP_Comment_Query

Базовый класс для выполнения запросов к комментариям
Класс WordPress
INT 3.1.0
WordPress Icon

Описание класса

Класс WP_Comment_Query является ядром для выполнения запросов к комментариям в WordPress. Он предоставляет методы для поиска, фильтрации и сортировки комментариев в соответствии с заданными параметрами.

Этот класс используется для получения списка комментариев, соответствующих заданным параметрам запроса. Он позволяет разработчикам выполнять сложные запросы к комментариям, используя различные фильтры, сортировку и поиск.

Класс WP_Comment_Query является частью ядра WordPress и доступен для использования в темах и плагинах.

Методы

  • __call — Позволяет доступ к приватным/защищенным методам для обеспечения обратной совместимости.
  • __construct — Конструктор класса WP_Comment_Query.
  • fill_descendants — Получает дочерние комментарии для найденных комментариев.
  • get_comment_ids — Внутренний метод, используемый для получения списка идентификаторов комментариев, соответствующих параметрам запроса.
  • get_comments — Получает список комментариев, соответствующих параметрам запроса.
  • get_search_sql — Внутренний метод, используемый для генерации SQL-строки для поиска по нескольким столбцам.
  • parse_order — Разбирает переменную запроса «order» и приводит ее к ASC или DESC при необходимости.
  • parse_orderby — Разбирает и очищает ключи «orderby», переданные в запросе комментария.
  • parse_query — Разбирает аргументы, переданные в запрос комментария, с использованием параметров запроса по умолчанию.
  • query — Настраивает запрос WordPress для получения комментариев.
  • set_found_comments — Заполняет свойства found_comments и max_num_pages для текущего запроса, если было использовано ограничение.

Методы

fill_descendants()

Метод fill_descendants() класса WP_Comment_Query используется для получения всех потомков для найденных комментариев.

WP_Comment_Query::fill_descendants( WP_Comment[] $comments ): array

Метод fill_descendants() принимает один обязательный параметр:

  • $comments (обязательный): Массив верхнеуровневых комментариев, для которых нужно получить потомков.

$comments (обязательный): Массив верхнеуровневых комментариев, для которых нужно получить потомков.

Метод fill_descendants() возвращает массив с заполненными потомками для найденных комментариев.

<?php
$comments = array( $comment1, $comment2, $comment3 );
$filled_descendants = WP_Comment_Query::fill_descendants( $comments );
?>

В приведенном выше примере кода метод fill_descendants() вызывается для массива комментариев $comments. Результат заполняется в переменную $filled_descendants.

get_comments()

Метод get_comments() является частью класса WP_Comment_Query и используется для получения списка комментариев, соответствующих заданным параметрам запроса.

Этот метод позволяет получить комментарии, удовлетворяющие определенным условиям, таким как автор комментария, пост, к которому относится комментарий, статус комментария и другие параметры.

WP_Comment_Query::get_comments( $args );

Метод get_comments() принимает один обязательный аргумент $args, который является массивом параметров запроса. В этом массиве можно указать различные условия для фильтрации комментариев.

Код:


$args = array(
    'author_email' => 'email@example.com',
    'post_id'      => 1,
    'status'       => 'approve',
);
$comments = WP_Comment_Query::get_comments( $args );

В приведенном выше примере мы получаем комментарии, автор которых имеет указанный email, относящиеся к посту с ID 1 и имеющие статус «approve».

Метод get_comments() возвращает список комментариев, удовлетворяющих заданным параметрам запроса. Если аргумент $count равен true, то метод вернет количество найденных комментариев.

Тип возвращаемого значения может быть одним из трех вариантов: int, int[] или WP_Comment[]. Если указан аргумент $count, то будет возвращено число найденных комментариев.

get_comment_ids()

Метод get_comment_ids() является внутренним методом класса WP_Comment_Query, используемым для получения списка идентификаторов комментариев, соответствующих заданным параметрам запроса. Он используется внутри WordPress для выполнения запросов к базе данных и получения необходимых данных о комментариях.

WP_Comment_Query::get_comment_ids(): int|array

Метод get_comment_ids() возвращает либо одно число — количество идентификаторов комментариев, если выполняется запрос на подсчет количества комментариев, либо массив идентификаторов комментариев, если выполняется полный запрос.

Код метода:


public function get_comment_ids() {
    // Код метода
}

Комментарии к коду:

  • Метод является публичным и доступен извне класса WP_Comment_Query.
  • Метод не принимает никаких аргументов.

Метод get_comment_ids() возвращает либо одно число — количество идентификаторов комментариев, если выполняется запрос на подсчет количества комментариев, либо массив идентификаторов комментариев, если выполняется полный запрос.

get_search_sql()

Метод get_search_sql() используется внутренне для генерации SQL-строки для поиска по нескольким столбцам.

WP_Comment_Query::get_search_sql( string $search, string[] $columns ): string

Метод get_search_sql() принимает два обязательных параметра: $search (строка) и $columns (массив строк). Он возвращает строку SQL для поиска.

$search (строка, обязательный): Поисковая строка.

$columns (массив строк, обязательный): Массив столбцов для поиска.

Метод get_search_sql() возвращает строку SQL для поиска.


$search = 'example';
$columns = array( 'column1', 'column2' );
$sql = WP_Comment_Query::get_search_sql( $search, $columns );

В данном примере мы задаем поисковую строку $search со значением ‘example’ и массив столбцов $columns со значениями ‘column1’ и ‘column2’. Затем мы вызываем метод get_search_sql() класса WP_Comment_Query с этими параметрами и сохраняем результат в переменную $sql. Результатом будет строка SQL для поиска по указанным столбцам.

parse_order()

Метод parse_order() класса WP_Comment_Query используется для разбора значения переменной запроса ‘order’ и приведения его к значениям ‘ASC’ или ‘DESC’ в зависимости от необходимости. Он принимает один обязательный параметр — значение переменной запроса ‘order’.

WP_Comment_Query::parse_order( string $order ): string

Метод parse_order() принимает значение переменной запроса ‘order’ в качестве аргумента и возвращает приведенное к нужному формату значение ‘order’.

$order (обязательный): Значение переменной запроса ‘order’.

Метод parse_order() возвращает приведенное к нужному формату значение переменной запроса ‘order’ в виде строки.

<?php
/**
 * Пример использования метода parse_order()
 *
 * @param string $order Значение переменной запроса 'order'.
 *
 * @return string Приведенное к нужному формату значение переменной запроса 'order'.
 */
$order = WP_Comment_Query::parse_order( $order );
?>

parse_orderby()

Метод parse_orderby() используется для разбора и очистки ключей orderby, переданных в запросе комментариев. Он принимает один обязательный параметр — алиас поля для сортировки.

Метод проверяет переданный алиас на наличие недопустимых символов и преобразует его в безопасную строку для использования в запросе.

WP_Comment_Query::parse_orderby( string $orderby ): string|false

Метод parse_orderby() принимает один обязательный параметр — алиас поля для сортировки. Он возвращает строку, которая будет использоваться в части ORDER BY запроса. В случае ошибки возвращает false.

$orderby (обязательный): Алиас для поля, по которому нужно сортировать комментарии.

Метод parse_orderby() возвращает строку, которая будет использоваться в части ORDER BY запроса. В случае ошибки возвращает false.

<?php
/**
 * Пример использования метода parse_orderby()
 */
// Создаем новый объект WP_Comment_Query
$query = new WP_Comment_Query();
// Задаем алиас для сортировки
$orderby = 'comment_date';
// Вызываем метод parse_orderby() для разбора и очистки алиаса
$orderby_parsed = $query->parse_orderby( $orderby );
// Выводим результат
echo $orderby_parsed;
?>

В данном примере мы создаем новый объект класса WP_Comment_Query, задаем алиас для сортировки комментариев и вызываем метод parse_orderby() для разбора и очистки алиаса. Результат выводится на экран.

parse_query()

Метод parse_query() используется для разбора аргументов, переданных в запрос комментариев, с использованием параметров запроса по умолчанию. Он позволяет настроить параметры запроса комментариев, такие как автор комментария, дата комментария, статус комментария и другие.

WP_Comment_Query::parse_query( string|array $query = '' )

Метод parse_query() принимает один параметр $query, который может быть строкой или массивом аргументов запроса комментариев. Он разбирает переданные аргументы и применяет параметры запроса по умолчанию.

Метод parse_query() принимает следующие параметры:

  • $query (строка или массив): Строка или массив параметров запроса комментариев. См. WP_Comment_Query::__construct() для получения дополнительных аргументов.
  • author_email (строка): Email автора комментария.
  • author_url (строка): URL автора комментария.
  • author__in (массив): Массив идентификаторов авторов для включения комментариев.
  • author__not_in (массив): Массив идентификаторов авторов для исключения комментариев.
  • comment__in (массив): Массив идентификаторов комментариев для включения.
  • comment__not_in (массив): Массив идентификаторов комментариев для исключения.
  • count (логическое): Возвращать ли количество комментариев (true) или массив объектов комментариев (false). По умолчанию false.
  • date_query (массив): Клаузы запроса по дате для ограничения комментариев. См. WP_Date_Query.
  • fields (строка): Поля комментариев для возврата. Принимает ‘ids’ для возврата только идентификаторов комментариев или пустую строку для всех полей. По умолчанию пустая строка.
  • и другие параметры…
<?php
$args = array(
    'author_email' => 'john@example.com',
    'author__not_in' => array( 1, 2, 3 ),
    'count' => true,
    'date_query' => array(
        array(
            'after' => '2022-01-01',
            'before' => '2022-12-31',
            'inclusive' => true,
        ),
    ),
    'fields' => 'ids',
    // Добавьте другие параметры запроса комментариев здесь
);
$query = new WP_Comment_Query;
$results = $query->parse_query( $args );
// Обработка результатов запроса комментариев
if ( $results ) {
    $comment_count = $results;
    // Действия при успешном запросе комментариев
} else {
    // Действия при отсутствии комментариев
}
?>

В приведенном выше примере кода мы создаем массив $args с различными параметрами запроса комментариев. Затем мы создаем новый экземпляр класса WP_Comment_Query и вызываем метод parse_query(), передавая ему массив $args. Результаты запроса комментариев сохраняются в переменной $results.

Затем мы проверяем, успешно ли выполнен запрос комментариев, и выполняем соответствующие действия в зависимости от результата.

query()

Метод query() класса WP_Comment_Query устанавливает запрос WordPress для получения комментариев. Он используется для настройки параметров запроса и выполнения самого запроса.

WP_Comment_Query::query( string|array $query ): array|int

Метод query() принимает один обязательный параметр $query, который может быть массивом или строкой запроса URL. Параметры запроса определяются в этом параметре.

$query (string|array) (обязательный): Массив или строка запроса URL параметров. В этом параметре определяются параметры запроса. Если передана строка, она должна быть в формате URL-запроса.

Метод query() возвращает список комментариев в виде массива или количество комментариев в случае, когда в качестве переменной запроса передано значение ‘count’.


$args = array(
    'author_email' => 'user@example.com',
    'status' => 'approve',
    'number' => 5,
    'orderby' => 'comment_date',
    'order' => 'DESC',
);
$comments_query = new WP_Comment_Query;
$comments = $comments_query->query( $args );
if ( $comments ) {
    foreach ( $comments as $comment ) {
        echo '<p>' . $comment->comment_content . '</p>';
    }
} else {
    echo '<p>No comments found.</p>';
}

В этом примере мы устанавливаем параметры запроса для получения последних 5 одобренных комментариев от пользователя с адресом электронной почты ‘user@example.com’. Затем мы выполняем запрос с помощью метода query() и выводим содержимое каждого комментария, если они найдены. Если комментарии не найдены, выводится сообщение «No comments found.»

set_found_comments()

Метод set_found_comments() является частью класса WP_Comment_Query и используется для заполнения свойств found_comments и max_num_pages для текущего запроса, если было использовано ограничение количества комментариев.

Метод set_found_comments() позволяет установить количество найденных комментариев и максимальное количество страниц для текущего запроса комментариев. Он вызывается автоматически внутри класса WP_Comment_Query при выполнении запроса комментариев.

Когда в запросе используется ограничение количества комментариев, метод set_found_comments() вычисляет общее количество найденных комментариев и максимальное количество страниц, основываясь на количестве комментариев, удовлетворяющих условиям запроса, и на установленном ограничении.

WP_Comment_Query::set_found_comments();

Метод set_found_comments() вызывается автоматически при выполнении запроса комментариев и не требует явного вызова в коде.

Он используется внутри класса WP_Comment_Query для заполнения свойств found_comments и max_num_pages на основе ограничения количества комментариев, указанного в запросе.

Свойство found_comments содержит общее количество найденных комментариев, удовлетворяющих условиям запроса. Свойство max_num_pages содержит максимальное количество страниц, которые могут быть созданы для отображения найденных комментариев, основываясь на ограничении количества комментариев.

__call()

Метод «__call()» является магическим методом класса «WP_Comment_Query» и используется для вызова приватных и защищенных методов класса. Он позволяет сделать приватные и защищенные методы доступными для использования вне класса, обеспечивая обратную совместимость.

WP_Comment_Query::__call( string $name, array $arguments ): mixed|false

Метод «__call()» принимает два обязательных параметра: $name (строка) — имя вызываемого метода, и $arguments (массив) — аргументы, которые передаются при вызове метода.

$name (string) — Обязательный. Имя метода, который нужно вызвать.

$arguments (array) — Обязательный. Аргументы, которые передаются при вызове метода.

Метод «__call()» возвращает значение, возвращаемое вызываемым методом, или false, если метод не найден.


/**
 * Пример использования метода "__call()"
 *
 * @param string $name     Имя метода, который нужно вызвать.
 * @param array  $arguments Аргументы, которые передаются при вызове метода.
 *
 * @return mixed|false     Значение, возвращаемое вызываемым методом, или false, если метод не найден.
 */
public function __call( $name, $arguments ) {
    // Код метода "__call()"
}

__construct()

Метод «__construct()» является конструктором класса «WP_Comment_Query». Он используется для создания нового объекта запроса комментариев и инициализации его свойств.

Конструктор принимает один параметр $query, который может быть строкой или массивом параметров запроса комментариев. Параметры определяют условия запроса и фильтрацию комментариев.

Метод «__construct()» выполняется автоматически при создании нового объекта класса «WP_Comment_Query».

WP_Comment_Query::__construct( string|array $query = '' )

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

$args = array(
    'author_email' => 'user@example.com',
    'status' => 'approve',
    'number' => 10
);
$query = new WP_Comment_Query( $args );

Метод «__construct()» принимает следующие параметры:

  • $query (строка или массив) — Опционально. Массив или строка с параметрами запроса комментариев.
  • author_email (строка) — Email автора комментария.
  • author_url (строка) — URL автора комментария.
  • author__in (массив) — Массив идентификаторов авторов комментариев для включения.
  • author__not_in (массив) — Массив идентификаторов авторов комментариев для исключения.
  • comment__in (массив) — Массив идентификаторов комментариев для включения.
  • comment__not_in (массив) — Массив идентификаторов комментариев для исключения.
  • count (логическое) — Опционально. Возвращать количество комментариев (true) или массив объектов комментариев (false). По умолчанию false.
  • date_query (массив) — Опционально. Условия запроса по дате комментариев. См. WP_Date_Query.
  • fields (строка) — Опционально. Поля комментариев, которые нужно вернуть. Принимает ‘ids’ для возврата только идентификаторов комментариев или пустую строку для всех полей. По умолчанию пустая строка.
  • … (другие параметры опущены для краткости)
<?php
$args = array(
    'author_email' => 'user@example.com',
    'status' => 'approve',
    'number' => 10
);
// Создание нового объекта запроса комментариев
$query = new WP_Comment_Query( $args );
?>

В приведенном примере создается новый объект запроса комментариев с параметрами:

  • Email автора комментария — ‘user@example.com’.
  • Статус комментариев — ‘approve’.
  • Максимальное количество комментариев — 10.

Объект запроса комментариев сохраняется в переменной $query и может быть использован для выполнения запроса и получения результатов.

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

Поиск комментариев


$args = array(
    'author_email' => 'user@example.com',
    'status' => 'approve',
    'number' => 5,
);
$query = new WP_Comment_Query;
$comments = $query->query( $args );
if ( $comments ) {
    foreach ( $comments as $comment ) {
        echo '<p>' . $comment->comment_content . '</p>';
    }
} else {
    echo 'No comments found.';
}

В данном примере кода мы создаем новый объект класса WP_Comment_Query и передаем ему массив аргументов для поиска комментариев. В данном случае мы ищем комментарии, автором которых является пользователь с email-адресом «user@example.com» и статусом «approve». Мы также ограничиваем количество найденных комментариев до 5. Затем мы проходимся по каждому найденному комментарию и выводим его содержимое.

Сортировка комментариев


$args = array(
    'orderby' => 'comment_date',
    'order' => 'DESC',
);
$query = new WP_Comment_Query;
$comments = $query->query( $args );
if ( $comments ) {
    foreach ( $comments as $comment ) {
        echo '<p>' . $comment->comment_content . '</p>';
    }
} else {
    echo 'No comments found.';
}

В этом примере мы сортируем комментарии по дате их создания в порядке убывания. Мы создаем новый объект класса WP_Comment_Query и передаем ему массив аргументов для сортировки комментариев. Затем мы выводим содержимое каждого найденного комментария.

Получение дочерних комментариев


$args = array(
    'parent' => 123,
);
$query = new WP_Comment_Query;
$comments = $query->query( $args );
if ( $comments ) {
    foreach ( $comments as $comment ) {
        echo '<p>' . $comment->comment_content . '</p>';
    }
} else {
    echo 'No comments found.';
}

В данном примере мы получаем все дочерние комментарии для комментария с ID 123. Мы создаем новый объект класса WP_Comment_Query и передаем ему массив аргументов с указанием родительского комментария. Затем мы выводим содержимое каждого найденного комментария.

Установка ограничения количества комментариев


$args = array(
    'number' => 10,
);
$query = new WP_Comment_Query;
$comments = $query->query( $args );
if ( $comments ) {
    foreach ( $comments as $comment ) {
        echo '<p>' . $comment->comment_content . '</p>';
    }
} else {
    echo 'No comments found.';
}

В этом примере мы ограничиваем количество найденных комментариев до 10. Мы создаем новый объект класса WP_Comment_Query и передаем ему массив аргументов с указанием максимального количества комментариев. Затем мы выводим содержимое каждого найденного комментария.

Вопросы и ответы

Как получить список комментариев, соответствующих заданным параметрам запроса?

Для получения списка комментариев, соответствующих заданным параметрам запроса, используется класс WP_Comment_Query. Для этого необходимо создать экземпляр этого класса и передать в его конструктор массив с параметрами запроса.


$args = array(
    'author_email' => 'user@example.com',
    'status' => 'approve',
    'number' => 10,
);
$query = new WP_Comment_Query( $args );
$comments = $query->get_comments();

В приведенном примере мы создаем объект WP_Comment_Query с параметрами запроса, чтобы получить список комментариев, автором которых является пользователь с email-адресом «user@example.com» и статус которых «approve». Мы также указываем, что нужно получить только 10 комментариев.

Как получить SQL-строку для поиска комментариев по нескольким столбцам?

Для генерации SQL-строки, используемой для поиска комментариев по нескольким столбцам, используется метод get_search_sql класса WP_Comment_Query. Этот метод принимает аргументы для поиска и возвращает сгенерированную SQL-строку.


$search = 'example search query';
$columns = array( 'comment_author', 'comment_content' );
$query = new WP_Comment_Query();
$sql = $query->get_search_sql( $search, $columns );

В приведенном примере мы создаем объект WP_Comment_Query и вызываем метод get_search_sql с аргументами для поиска и массивом столбцов, по которым нужно производить поиск. Метод возвращает сгенерированную SQL-строку, которую можно использовать для выполнения запроса к базе данных.

Как распарсить и очистить ключи ‘orderby’, переданные в запросе комментариев?

Для распарсивания и очистки ключей ‘orderby’, переданных в запросе комментариев, используется метод parse_orderby класса WP_Comment_Query. Этот метод принимает ключи ‘orderby’ и возвращает их в очищенном виде.


$orderby = 'comment_date DESC, comment_author ASC';
$query = new WP_Comment_Query();
$clean_orderby = $query->parse_orderby( $orderby );

В приведенном примере мы создаем объект WP_Comment_Query и вызываем метод parse_orderby с ключами ‘orderby’, которые нужно распарсить и очистить. Метод возвращает ключи в очищенном виде, готовые для использования в запросе комментариев.

Как распарсить и привести к нужному формату переменную ‘order’ в запросе комментариев?

Для распарсивания и приведения переменной ‘order’ в запросе комментариев к нужному формату, используйте метод parse_order(). Этот метод принимает один параметр — значение переменной ‘order’ и возвращает значение ‘ASC’ или ‘DESC’ в зависимости от переданного значения.


$order = 'desc';
$comment_query = new WP_Comment_Query();
$parsed_order = $comment_query->parse_order( $order );

Как получить список идентификаторов комментариев, соответствующих заданным параметрам запроса?

Для получения списка идентификаторов комментариев, соответствующих заданным параметрам запроса, используйте метод get_comment_ids(). Этот метод возвращает массив идентификаторов комментариев.


$args = array(
    'post_id' => 1,
    'status' => 'approve',
);
$comment_query = new WP_Comment_Query( $args );
$comment_ids = $comment_query->get_comment_ids();

Как заполнить потомков для найденных комментариев?

Для заполнения потомков для найденных комментариев используйте метод fill_descendants(). Этот метод принимает массив комментариев и заполняет для каждого комментария поле ‘children’ с массивом его потомков.


$comments = array(
    // комментарии
);
$comment_query = new WP_Comment_Query();
$comments_with_descendants = $comment_query->fill_descendants( $comments );

Как настроить запрос WordPress для получения комментариев?

Для настройки запроса WordPress для получения комментариев используйте метод query(). Этот метод принимает массив аргументов запроса и выполняет запрос, возвращая список комментариев, соответствующих заданным параметрам.


$args = array(
    'post_id' => 1,
    'status' => 'approve',
);
$comment_query = new WP_Comment_Query();
$comments = $comment_query->query( $args );

Класс WP_Comment_Query предоставляет мощный инструмент для выполнения запросов к комментариям в WordPress. С его помощью вы можете легко настраивать и выполнять запросы, получая список комментариев, удовлетворяющих заданным параметрам. Методы класса позволяют распарсить и привести к нужному формату переменную ‘order’, получить список идентификаторов комментариев, заполнить потомков для найденных комментариев и настроить запрос WordPress для получения комментариев.

Обсуждение