Как отображать избранные сообщения вне цикла на странице категории, где сообщения должны соответствовать категории

#wordpress #categories #posts

#wordpress #Категории #Публикации

Вопрос:

Я пытаюсь создать область «Популярные статьи» на всех страницах категории, над циклом, в котором отображаются сообщения. Я добавил флажок «Избранный пост» для каждого поста, который позволяет администратору отмечать определенные посты как избранные, и я смог отображать эти посты в верхней части каждой страницы категории. НО в настоящее время он отображает ВСЕ избранные сообщения на всех страницах категории, и мне нужно, чтобы система фильтровала сообщения, чтобы показывать ТОЛЬКО сообщения, которые находятся в той же категории, что и страница, на которой они отображаются.

Вот что я использую в своем файле функций, который хорошо работает для отображения избранных сообщений — любая помощь в добавлении фильтрации категорий приветствуется!

   $args = array(
        'posts_per_page' => 5,
        'meta_key' => 'meta-checkbox',
        'meta_value' => 'yes'
    );
    $featured = new WP_Query($args);
 
if ($featured->have_posts()): while($featured->have_posts()): $featured->the_post(); ?>
<h3><a href="<?php the_permalink(); ?>"> <?php the_title(); ?></a></h3>
<p class="details">By <a href="<?php the_author_posts() ?>"><?php the_author(); ?> </a> / On <?php echo get_the_date('F j, Y'); ?> / In <?php the_category(', '); ?></p>
<?php if (has_post_thumbnail()) : ?>
 
<figure> <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(); ?></a> </figure>
<p ><?php the_excerpt();?></p>
<?php
endif;
endwhile; else:
endif;
?>```
 

Ответ №1:

Если это нужно только для страниц архива категорий, а не для других или пользовательских таксономий, все, что вам нужно, это глобальная переменная $category_name . Несмотря на то, что это называется «имя», на самом деле это пуля категории, что позволяет нам использовать его в tax_query поле, которое мы добавим к нашему запросу.

Сначала мы делаем $category_name его доступным, а затем используем его в нашем запросе вместе с вашими мета-полями:

 global $category_name;

$featured_posts = new WP_Query(
    [
        "showposts"  => 5,
        "meta_key"   => "meta-checkbox",
        "meta_value" => "yes",
        "tax_query"  => [
            [
                "taxonomy" => "category",
                "field"    => "slug",
                "terms"    => $category_name,
            ],
        ]
    ]
);
 

Это даст нам сообщения, которые

  • внутри категории текущей страницы архива категории,
  • помечены администратором как избранные сообщения с помощью meta-checkbox мета-ключа.

Теперь мы можем использовать эти сообщения и просматривать их. Вот очень простой цикл с небольшой разметкой:

 if ($featured_posts->have_posts()) {
    while ($featured_posts->have_posts()) {
        $featured_posts->the_post();
        ?>
         <h3>
             The post "<?php the_title(); ?>" is in category "<?php the_category(" "); ?>"
         </h3>
        <?php
    }
}
else {
    ?>
    <h3>No featured posts were found :(</h3>
    <?php
}
 

Вот пример того, как это выглядит. Как вы можете видеть, все пять сообщений находятся в той же категории, что и категория страницы архива.

Пример вывода

Я надеюсь, что это помогло.

Комментарии:

1. Большое вам спасибо! Я очень ценю, что вы нашли время, чтобы помочь незнакомому человеку, это было ИМЕННО то, что я искал!