【问题标题】:Pagination not working with a foreach loop分页不适用于 foreach 循环
【发布时间】:2018-04-07 20:55:47
【问题描述】:

我有一个循环遍历每个标签并显示每个标签的 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; 
    }

【问题讨论】:

    标签: wordpress loops foreach pagination


    【解决方案1】:

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

    另外,如果您在页面模板中执行所有操作,则应使用“page”而不是“paged”查询变量。如果它是存档页面(或任何非单页),则“分页”变量很好。在下面的代码中,我考虑了这两个选项。

    <?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 **/
            ?>
    

    用您自己的代码替换“/* Do What ever you want to do with each tag here */”。我没有将其复制到我的答案中,因为您的花括号有一些问题,并且与答案无关。

    【讨论】:

    • 尤里你是个传奇。这第一次奏效。我昨天花了一整天试图弄清楚这一点。只是无法弄清楚分页。谢谢!
    • @mark914 很高兴为您提供帮助,欢迎来到 Stack Overflow。如果此答案或任何其他答案解决了您的问题,请单击绿色复选标记将其标记为已接受。
    猜你喜欢
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 2016-11-24
    • 2018-12-20
    相关资源
    最近更新 更多