Intereting Posts
Создать список архивов на основе мета-массива Проверить is_single () вне цикла Скрытие постов по умолчанию в данной категории, за исключением некоторых случаев $ wpdb-> insert Предоставление дубликатов Может ли wp-cli отображать всех пользователей и их роли на всех сайтах в многопользовательском экземпляре? Плагин Posts2Posts и интерфейс пользователя wp подключаются программно Гель все изображение определенного типа сообщения Как я могу сделать имена пользователей комментарием кликабельными ссылками на профиль пользователя на экране комментариев администратора? как отправить пользовательское сообщение конкретному пользователю, которому понравилась запись Переименование пользователя-администратора при многопользовательской установке MySQL Примените фильтр the_title, чтобы публиковать заголовки и встроенный плагин для совместного использования социальных сетей, но не навигационное меню Добавляет ли WordPress свои собственные классы в навигационные меню? Как скрыть / удалить страницы в меню (панель инструментов) Запустить javascript-код после wp_login? создать отдельный шаблон страницы для комментариев WordPress

Запрос и сортировка комментариев по пользовательскому комментарию meta

Я добавил базовую «любимую / рекомендуемую» функциональность для сообщений и комментариев на сайт WordPress, над которым я работаю.

Я сохраняю общее количество комментариев «нравится» в настраиваемом мета-поле комментариев (update_comment_meta). Теперь я хотел бы запросить и отсортировать комментарии на основе этого настраиваемого мета-ключа и соответствующих значений, чтобы отображать популярные комментарии.

В идеале я хотел бы иметь возможность использовать такие параметры, как «meta_key» и «order_by = meta_value_num», похожие на WP_Query, но, похоже, запросы комментариев не поддерживают их.

Должен ли я использовать пользовательский письменный запрос к базе данных? Если да, может кто-нибудь дать мне начальный толчок о том, как подойти к этому?

К сожалению, он не поддерживается применимыми функциями WordPress для запросов комментариев, что в первую очередь связано с (я чувствую), что недостаточно людей (или кого-либо), которые просят об этом.

Я хочу выделить пару основных файлов здесь, чтобы помочь понять проблему.


  • Первая функция comments-template.php , функция comment_template , эта функция запрашивает комментарии, а затем добавляет их в объект WP_Query .

    • См. Строку 882
    • Нет фильтров или действий, чтобы перехватить запрос до его возникновения или изменить его.

  • Следующая функция comments.php и get_comments , на этот раз вы не найдете поддержки для пользовательских сортировок, например. мета сортировка.

    • См. Строку 262
    • array_intersect ищет только совпадения, если это не тот массив значений, который вы видите там, тогда он не считается допустимым порядком.

В функции шаблона комментария есть один фильтр, который будет передаваться по всему массиву комментариев, называемых comments_array (вы увидите, что этот крючок в первом файле, который я связал в строке 892).

Вы можете перебрать массив комментариев, которые были извлечены, и создать новый массив, отсортированный на основе ваших метаданных (хотя вам, вероятно, потребуется специальный запрос, чтобы получить метаданные, если вы хотите быть максимально эффективными) ,

Я могу добавить пример жонглирования массива позже, если вам это нужно.