Как отобразить список лучших постов через виджет в вордпресс,?

Ссылка скопирована
1 ответ

Есть список категорий:
category 1
category 2
---
---
category 999

Необходимо чтобы в виджете отображались лучшие посты, но именно той категории, которая сейчас открыта. Например: перешли в category 2 - в виджете лучшие посты из category 2.

Можно это сделать вручную, например через плагин wppostpopular, но тогда виджетов придется добавлять больше 1000, на каждую рубрику свой.

А как сделать так, чтобы обойтись одним виджетом? Может есть готовый плагин?

Дополнительные вопросы

Ответы:

Сейчас меньше занимаюсь WP.

Про плагин ничего не могу сказать. Может быть таких плагинов и не существует.

Лучшие посты это какие? Обычно виджеты показывают посты с самым большим количеством просмотров. Решение такое. Сделать цикл:

1. Получать id категории, на которой сейчас находится пользователь.

2. Делать выборку сделать выборку постов и ранжировать по количеству просмотров.

3. Вывести необходимое количество постов (вернее ссылок на них и т. д.)

Портал wp-kama в помощь. Думаю, что так будет быстрей чем плагин искать.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Антон С. Ответ

Да, для этого не нужны отдельные виджеты под каждую рубрику. Виджет должен быть динамическим: на странице архива определить текущую категорию, затем сделать запрос популярных записей только внутри этой категории. Важный момент: 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();
});

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().
  • Не выводите черновики и приватные записи в публичном виджете.
  • Для большого сайта добавьте кэширование результата по ID рубрики.
  • Если счётчика просмотров нет, временно сортируйте по comment_count или по ручному meta-полю.
Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

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

Вам также может быть интересно