如何向递增和分页类别循环添加排序顺序

时间:2019-03-13 作者:jsmod

我在一个类别模板的循环中使用了它,以获得编号的帖子列表,并在下一页继续:

<?php 
   $mypage = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
   $ppp = get_query_var(\'posts_per_page\');
   $counter = ($mypage * $ppp) - $ppp; 
   while(have_posts()) : the_post(); $counter++; ?>

     <div class="entry">
         <?php echo $counter; the_title(\'\'); ?>
     </div>

<?php endwhile; ?>
建议:s-ha-dum 作为answer to another question 在StackExchange上。

然而,我需要这个循环来按asc顺序对帖子进行排序,我不知道如何在所有这些变量就绪的情况下进行排序。通常,在循环之前,我会使用如下内容,它会非常有效:

<?php $sortorder= new WP_Query( \'orderby=date&sort=asc\' ); ?>
代码的最终结果如下:

<?php 
   $mypage = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
   $ppp = get_query_var(\'posts_per_page\');
   $counter = ($mypage * $ppp) - $ppp;
   $sortorder= new WP_Query( \'orderby=date&sort=asc\' );
   while ( $sortorder->have_posts() ) : $sortorder->the_post(); $counter++ ?>

     <div class="entry">
         <?php echo $counter; the_title(\'\'); ?>
     </div> 

<?php endwhile; ?>
但这并没有像预期的那样奏效。它确实按升序对它们进行排序,但所有页面都显示相同的标题列表,只是数字有所变化。所以同样的10个标题显示在第一页,编号为1-10,然后再次显示在第二页,但编号从11开始。。。等等

因此,请原谅我的无知,并帮助我理解我的错误所在以及如何解决它。

非常感谢。

<小时/>

Update: This is the final working query:

<?php
   $mypage = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
   $ppp = get_query_var(\'posts_per_page\');
   $counter = ($mypage * $ppp) - $ppp; 
   $query = new WP_Query( array(
       \'category_name\' => \'research\',
       \'paged\' => $paged, 
       \'posts_per_page\' => 20, 
       \'orderby\' => \'date\',
       \'order\' => \'asc\',
   ) );

   while ( $query->have_posts() ) : $query->the_post(); $counter++ ?>

      <div class="entry">
          <?php echo $counter; the_title(\'\'); ?>
      </div>

<?php endwhile; ?>
<小时/>Update #2: Improved answer based on further comments by Jaydip Nimavat.

类别页面模板中的循环现在是:

<?php
   $mypage = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
   $ppp = get_query_var(\'posts_per_page\');
   $counter = ($mypage * $ppp) - $ppp;

   while ( have_posts() ) : the_post(); $counter++ ?>

      <div class="entry">
          <?php echo $counter; the_title(\'\'); ?>
      </div>

<?php endwhile; ?>
以及functions.php 现在包括:

// Sort order for research, articles, and literature category pages
function custom_posts_per_page($query) {
    if( !is_admin() && $query->is_category( array(\'research\',\'articles\',\'literature\') )) {
      $qobj = get_queried_object();
      if( isset($qobj->taxonomy) && \'category\' == $qobj->taxonomy ) {
        $query->set( \'orderby\', \'date\' );
        $query->set( \'order\', \'asc\' );
      }
    }
}
add_filter( \'pre_get_posts\', \'custom_posts_per_page\' );
一切都很完美。谢谢你,杰迪普。

1 个回复
最合适的回答,由SO网友:Jaydip Nimavat 整理而成

将分页参数添加到WP_Query,Check Here.

请检查您的查询:$sortorder= new WP_Query( \'orderby=date&sort=asc\' );

没有参数posts_per_pagepaged, 因此,每次只会得到相同的(第1页)结果,并显示相同的数据。

如果只想在主查询中管理某些参数,请不要使用自定义查询使用pre_get_posts

请检查:

<?php
function custom_posts_per_page($query) {
    if( !is_admin() && $query->is_category()) {
      $qobj = get_queried_object();
      if( isset($qobj->taxonomy) && \'category\' == $qobj->taxonomy ) {
        $query->set( \'orderby\', \'date\' );
        $query->set( \'order\', \'asc\' );
      }
    }
}
add_filter( \'pre_get_posts\', \'custom_posts_per_page\' );

相关推荐

The Loop not looping?

在进行了大量的故障排除和搜索之后,我想我终于明白了如何进行循环。但我似乎无法让它真正循环!我创建了一个子主题,并添加了functions.php 文件中包含以下代码:<?php function my_theme_enqueue_styles() { $parent_style = \'grow-thinkup-style-minimal\'; // This is \'twentyfifteen-style\' for the Twenty Fifteen the