Как отобразить список лучших постов через виджет в вордпресс,?
Есть список категорий:
category 1
category 2
---
---
category 999
Необходимо чтобы в виджете отображались лучшие посты, но именно той категории, которая сейчас открыта. Например: перешли в category 2 - в виджете лучшие посты из category 2.
Можно это сделать вручную, например через плагин wppostpopular, но тогда виджетов придется добавлять больше 1000, на каждую рубрику свой.
А как сделать так, чтобы обойтись одним виджетом? Может есть готовый плагин?
Дополнительные вопросы
Ответы:
Сейчас меньше занимаюсь WP.
Про плагин ничего не могу сказать. Может быть таких плагинов и не существует.
Лучшие посты это какие? Обычно виджеты показывают посты с самым большим количеством просмотров. Решение такое. Сделать цикл:
1. Получать id категории, на которой сейчас находится пользователь.
2. Делать выборку сделать выборку постов и ранжировать по количеству просмотров.
3. Вывести необходимое количество постов (вернее ссылок на них и т. д.)
Портал wp-kama в помощь. Думаю, что так будет быстрей чем плагин искать.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Да, для этого не нужны отдельные виджеты под каждую рубрику. Виджет должен быть динамическим: на странице архива определить текущую категорию, затем сделать запрос популярных записей только внутри этой категории. Важный момент: WordPress сам не знает, какие записи «лучшие», поэтому нужен критерий сортировки: просмотры, комментарии, рейтинг, ручной флаг или данные плагина популярности.
Если просмотры записываются в meta-поле, например
post_views_count, можно сделать shortcode и вставить его в один HTML/shortcode-виджет:add_shortcode('popular_current_category', function () { if (! is_category()) { return ''; } $query = new WP_Query([ 'post_type' => 'post', 'post_status' => 'publish', 'posts_per_page' => 5, 'cat' => get_queried_object_id(), 'meta_key' => 'post_views_count', 'orderby' => 'meta_value_num', 'order' => 'DESC', 'no_found_rows' => true, ]); if (! $query->have_posts()) { return ''; } ob_start(); echo '<ul class="popular-posts">'; while ($query->have_posts()) { $query->the_post(); echo '<li><a href="' . esc_url(get_permalink()) . '">' . esc_html(get_the_title()) . '</a></li>'; } wp_reset_postdata(); echo '</ul>'; return ob_get_clean(); });
Если используете WordPress Popular Posts, сначала проверьте его shortcode/API: у него обычно есть параметры для taxonomy/category. Тогда задача сводится к передаче ID текущей категории в вызов плагина. Если плагин не умеет динамические параметры в виджете, проще сделать свой небольшой shortcode-обёртку.
is_category()иget_queried_object_id().comment_countили по ручному meta-полю.