Запрос сообщений о сроках в цикле
Я пытаюсь показать свою категорию CPT вместе с любыми сообщениями, связанными с ней, под заголовком. У меня есть первый цикл в порядке:
<?php $cats = get_categories(array('taxonomy' => 'custtax', 'orderby' => 'term_group'));
if(!empty($cats)) :
foreach($cats as $cat) : ?>
<a href="<?php echo get_category_link($cat->term_id); ?>"><?php echo $cat->name; ?></a>
<br />
<?php wp_reset_query(); ?>
<?php $cat_posts = new WP_Query(array('post_type' => 'custcpt', 'taxonomy' => 'custtax', 'terms' => $cat->slug, 'order' => 'ASC'));
foreach($cat_posts as $cat_post) : ?>
<center><?php get_the_post_thumbnail($cat_post->ID, 'thumbnail'); ?></center>
<br />
<a href="<?php get_permalink($cat_post->ID); ?>"><?php get_the_title($cat_post->ID); ?></a>
<br />
<br />
<?php endforeach; ?>
<?php endforeach; ?>
<?php endif; ?>
Но мой второй цикл запрашивает все мои сообщения, а не только те, которые относятся к этой категории. Я пробовал get_posts()
и вместо того, чтобы вытаскивать все сообщения, он не вытащил ни одного. Я не уверен, ожидает ли 'category'
в кодексе строку, слаг или идентификатор, но я перепробовал все 3. В любом случае, как мне отредактировать свой запрос, чтобы извлекать сообщения только из этой определенной категории?
2 answers
Чтобы расширить ответ от @s_ha_dum - вам нужно изменить несколько вещей в своем запросе.
Во-первых, используйте предложенный им налоговый запрос:
$args = array(
'post_type' => 'custcpt',
'tax_query' => array(
array(
'taxonomy' => 'custtax',
'field' => 'id',
'terms' => $cat->term_id,
)
),
'order' => 'ASC'
);
Затем измените свой код следующим образом:
$cat_posts = new WP_Query($args);
while ($cat_posts->have_posts()) :
$cat_posts->the_post();
// Below, when referencing the post variables, must be as $cat_post->post->ID, etc. ?>
<center><?php get_the_post_thumbnail($cat_post->post->ID, 'thumbnail'); ?></center>
<br />
<?php // Below, don't need to pass the post ID into these functions. ?>
<a href="<?php get_permalink(); ?>"><?php get_the_title(); ?></a>
<br />
<br />
<?php endwhile; ?>
<?php endif; ?>
Обратите внимание на несколько вещей:
- Вы должны использовать
while ($cat_posts->have_posts)
для перебора сообщений. - Вызов
cat_posts->the_post()
для подготовки данных для отображения в таких функциях, какget_the_title()
- При ссылке на переменные post, такие как ID, вы должны сделать так, чтобы
$cat_posts->post->ID
- Когда вызывая такие функции, как
get_the_title()
, вам не нужно передавать идентификатор.