自定义帖子类型循环父类别

时间:2019-02-25 16:22:51

标签: php wordpress

在single.php上,我有一个标准的WP循环,用于显示帖子内容。

<main>
    <div class="container">
        <?php if (have_posts()): while (have_posts()) : the_post(); ?>

            <article>
                <div class="col-md-12">
                    <h2><?php the_title(); ?></h2>
                    <?php the_content(); ?>
                </div>              
            </article>
        <?php endwhile; ?>
        <?php endif; ?>
    </div>
</main>

在它下面,我有一个简单的循环,显示3个最新的自定义帖子类型项目

<div class="manuals">

            <?php
                    $loop = new WP_Query( array(
                            'post_type' => 'manuals',
                            'posts_per_page' => 3
                        )
                    );
            ?>

            <?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
                    <div class="col-md-12">

                                <?php if ( has_post_thumbnail()) : // Check if Thumbnail exists ?>
                                    <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">
                                        <?php the_post_thumbnail(); // Fullsize image for the single post ?>
                                    </a>
                                <?php endif; ?>         
                                <h5><?php the_title(); ?></h5>
                    </div>
            <?php endwhile; wp_reset_query(); ?>    
</div>

帖子和自定义帖子类型都共享2个WP类别(简单,高级)。 如果用户打开在“高级”类别中发布的文章,我希望自定义帖子类型仅显示“高级”类别中的帖子...

希望您能理解我的意思,英语不是我的母语……谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

如果我理解您的意思,那么您的简单/高级类别是互斥的,因此您可以假设当前博客文章中只有一个类别。假设是这种情况,您首先要使用get_the_terms()获取当前帖子的类别,然后通过tax_query将该类别传递给自定义查询。

类似的事情应该起作用:

// main loop up here...

// get terms (categories) from the current post
$cats = get_the_terms($post->ID, 'category');

// default args for querying our manual posts
$manuals_query_args = array(
  'post_type' => 'manuals',
  'posts_per_page' => 3
);

// filter manuals by category, if and only if current post is categorized
if (isset($cats[0])) {
  $cat_id = $cats[0]->term_id;
  $manuals_query_args['tax_query'] = array(
    // note that tax_query needs to be an *array of arrays* -
    // in this case, an array containing just one array
    array(
      'taxomony' => 'category',
      'field'    => 'id',
      'terms'    => $cat_id
    )
  );
}

$loop = new WP_Query($manuals_query_args);

您可能需要调整它,我没有测试此代码。