Запрос сообщений о сроках в цикле


Я пытаюсь показать свою категорию 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. В любом случае, как мне отредактировать свой запрос, чтобы извлекать сообщения только из этой определенной категории?

Author: Howdy_McGee, 2013-10-17

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; ?>

Обратите внимание на несколько вещей:

  1. Вы должны использовать while ($cat_posts->have_posts) для перебора сообщений.
  2. Вызов cat_posts->the_post() для подготовки данных для отображения в таких функциях, как get_the_title()
  3. При ссылке на переменные post, такие как ID, вы должны сделать так, чтобы $cat_posts->post->ID
  4. Когда вызывая такие функции, как get_the_title(), вам не нужно передавать идентификатор.
 1
Author: random_user_name, 2013-10-17 20:08:17

Вам нужен tax_query а то, что у вас есть, - это не то.

$cat_posts = new WP_Query(
  array(
    'post_type' => 'custcpt', 
    'tax_query' => array(
      array(
        'taxonomy' => 'custtax', 
        'field' => 'id',
        'terms' => $cat->term_id,
      )
    ), 
    'order' => 'ASC'
  )
);
 2
Author: s_ha_dum, 2013-10-17 19:24:42