从类别+自定义帖子类型迭代正确数量的wordpress帖子

时间:2018-04-12 02:39:27

标签: php wordpress while-loop

我们的wordpress post loop结合并显示来自特定类别和自定义帖子类型的帖子。这有效,但不显示所有帖子。我认为post循环迭代特定类别中的帖子数量,而不是特定类别中的帖子数量+自定义帖子类型中的帖子数量。如何确保显示正确数量的帖子?

<?php
/*
Template Name: Articles & Cases
*/
get_header(); ?>
<div class="center-holder">
    <div id="content">
        <?php while ( have_posts() ) : the_post(); ?>
            <?php the_title( '<h1>', '</h1>' ); ?>
            <?php the_post_thumbnail( 'full' ); ?>
            <?php the_content(); ?>
            <?php if ( $cats = get_field( 'category' ) ) : ?>
                <?php
                    $args = array(
                        'post_type' => array( 'post' ),
                        'category__in' => $cats,
                        'fields' => 'ids',
                    );

                    $articles = new WP_Query( $args );
                    wp_reset_postdata();

                    $args = array(
                        'post_type' => array( 'case_study' ),
                        'fields' => 'ids',
                        );
                    $case_study = new WP_Query( $args );
                    wp_reset_postdata();

                    $all_posts_ids = array_merge( $articles->posts, $case_study->posts );

                    $paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
                    $args = array(
                        'post_type' => array( 'post', 'case_study' ),
                        'post__in' => $all_posts_ids,
                        'paged' => $paged,
                        );                  

                    query_posts( $args );
                ?>
                <?php if ( have_posts() ) : ?>
                    <?php while ( have_posts() ) : the_post(); ?>
                        <?php get_template_part( 'blocks/content', get_post_type() ); ?>
                    <?php endwhile; ?>
                    <?php get_template_part( 'blocks/pager' ); ?>
                <?php else: ?>
                    <?php get_template_part( 'blocks/not_found' ); ?>
                <?php endif; wp_reset_query(); ?>

            <?php endif; ?>
        <?php endwhile; ?>
    </div>
    <?php get_sidebar( 'blog' ); ?>
</div>
<?php get_footer(); ?>

1 个答案:

答案 0 :(得分:0)

有很多事情你做错了。

您正在使用页面模板,然后使用the loop进行循环。 这可能会提取所有帖子,因为页面模板的最后一个回退是index.php(如图here中所示)。

然后你在循环中进行3个额外的查询(因此,对于你循环的每个帖子,你进行3次额外的查询)。

最后一个查询,您正在使用覆盖主查询的query_posts()。只是不要使用它。

所以攻击计划应该是:

  1. 我想展示什么?

  2. 我希望如何以及在何处展示它?

  3. 我需要做些什么来实现这个目标?

  4. 开始写下实现这一目标所需的东西。

  5. ???

  6. 利润!!!

  7. 如果您想控制特定的分类,请使用$taxonomy.php模板($taxonomy是分类法的名称。)。

    希望这有帮助。