分页不适用于foreach循环

时间:2018-04-07 20:55:48

标签: wordpress loops foreach pagination

我有一个循环遍历每个标记并显示每个标记的10个帖子。这有效,但我想将其设置为每页仅显示20个帖子,因此第1页显示标签1帖子,标签2帖子,然后第2页显示标签3帖子,标签4帖子等

我不知道该怎么做。我是否需要将foreach循环放在另一个数组中并在新数组中定义posts_per_page?或者是否需要使用pre_get_posts设置函数?

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;

$car_group_terms = get_terms( 'post_tag' );

foreach ( $car_group_terms as $car_group_term ) {
            $car_group_query = new WP_Query( array(
            'post_type' => 'car_listing',
            'posts_per_page' => 10,
            'tax_query' => array(
            array(
                'taxonomy' => 'post_tag',
                'field' => 'slug',
                'terms' => array( $car_group_term->slug ),
                'operator' => 'IN'
            )
        )
    ) );

 while ($car_group_query->have_posts() ) : $car_group_query->the_post(); 
    get_template_part( 'content', 'car_listing' ); 
    }
    endwhile; 
    }

1 个答案:

答案 0 :(得分:0)

如果你想在每个页面上显示两个标签的帖子,我认为最好的方法是只查询“get_terms”函数中的那两个标签。此外,我认为您必须创建自己的分页,因为分页是按查询进行的,因为您正在创建自定义分页,标准分页将不适用。

此外,如果您在页面模板中执行所有操作,则应使用“page”而不是“paged”查询var。如果它是一个存档页面(或任何单个页面),那么“paged”var就可以了。在下面的代码中,我考虑了两种选择。

<?php
        if (get_query_var('paged')) { /* in case the code is on an archive/taxonomy page */
            $paged = get_query_var('paged');
            $nextpage = add_query_arg('paged', $paged + 1, get_permalink()); /* for paging later */
            $prevpage = add_query_arg('paged', $paged - 1, get_permalink());
        } elseif (get_query_var('page')) { /* in case the code is on a single page */
            $paged = get_query_var('page');
            $nextpage = add_query_arg('page', $paged + 1, get_permalink());
            $prevpage = add_query_arg('page', $paged - 1, get_permalink());
        } else {
            $paged = 1;
            if(!is_single() && !is_page()) { /* since there is no corresponding query var, need to check by type of page */
                $nextpage = add_query_arg('paged', $paged + 1, get_permalink());
                $prevpage = add_query_arg('paged', $paged - 1, get_permalink());
            } else {
                $nextpage = add_query_arg('page', $paged + 1, get_permalink());
                $prevpage = add_query_arg('page', $paged - 1, get_permalink());
            }
        }


        $number_per_page = 2; /* number of tags to show per page */

        $car_count = get_terms(array(
            'taxonomy' => 'post_tag',
            'fields' => 'count', /* returns only number of terms for paging purpose */
        ));

        $number_of_pages = $car_count / $number_per_page; /* get the total amount of pages */

        $car_group_terms = get_terms(array(
            'taxonomy' => 'post_tag',
            'number' => $number_per_page,
            'offset' => $number_per_page * ($paged - 1) /* offset to show the correct tags according to page number */
        ));


        foreach ($car_group_terms as $car_group_term) {

            /* Do What ever you want to do with each tag here */

        }

        /** paging **/
        if ($paged < $number_of_pages) {
            echo '<a href="' . $nextpage . '">Next Page</a> ';
        }

        if ($paged < $number_of_pages && $paged > 1) {
            echo ' | ';
        }

        if ($paged > 1) {
            echo '<a href="' . $prevpage . '">Previous Page</a> ';
        }

        /** /paging **/
        ?>

使用您自己的代码替换“/ *使用此处的每个标记做什么* /”。我没有将它复制到我的答案中,因为你在卷曲的括号中遇到了一些问题,这与答案无关。