新闻档案页面上的分页工作不正常

时间:2013-11-25 作者:Gaurav

我需要在新闻档案页上翻页。如果在同一页上显示所有记录,则数据正确。但如果添加分页代码,则分页值(如1,2,3,…16)正确,但如果单击第2页,则显示与第1页相同的文章标题。

    <h1 style="margin-left:10px;">News</h1>

    <ul class="years">
    <?php
    $paged = ( get_query_var( \'paged\' ) ) ? get_query_var( \'paged\' ) : 1;
$all_posts = get_posts(array(
    \'post_type\' => \'news\',
 \'posts_per_page\' => 20,
  \'orderby\' => \'date\',
    \'order\' => \'DESC\',
    \'paged=\'. $paged,
));

    // this variable will contain all the posts in a associative array
    // with three levels, for every year, month and posts.

    $ordered_posts = array();

    foreach ($all_posts as $single) {

      $year  = mysql2date(\'Y\', $single->post_date);
      $month = mysql2date(\'F\', $single->post_date);

      // specifies the position of the current post
      $ordered_posts[$year][$month][] = $single;

    }

    // iterates the years
    foreach ($ordered_posts as $year => $months) { ?>
      <li>
        <h3><?php echo $year ?></h3>
        <ul class="months">
        <?php foreach ($months as $month => $posts ) { // iterates the moths ?>
          <li>
            <h3><?php printf("%s (%d)", $month, count($months[$month])) ?></h3>
            <ul class="posts">
              <?php foreach ($posts as $single ) { // iterates the posts ?>
                <li>
                  <?php echo mysql2date(\'F j\', $single->post_date) ?> <a href="<?php echo get_permalink($single->ID); ?>"><?php echo get_the_title($single->ID); ?></a>  (<?php echo $single->comment_count ?>)</li>
                </li>

              <?php } // ends foreach $posts ?>
            </ul> <!-- ul.posts -->
          </li>
        <?php } // ends foreach for $months ?>
        </ul> <!-- ul.months -->
        <?php if(function_exists(\'wp_paginate\')) {
        wp_paginate();
    }  ?>
      </li> <?php
    } // ends foreach for $ordered_posts
    ?>

    </ul><!-- ul.years -->
以下是屏幕截图:-enter image description here

1 个回复
SO网友:Lucio Coire Galibone

使用自定义get_posts() 您正在忽略$paged 这样,您将始终看到来自第一页的帖子。

根据Codex Page 如果希望在执行主查询之前对其进行更改,可以使用pre_get_posts.

function my_post_queries( $query ) {
  if (!is_admin() && $query->is_main_query()){
    $query->set(\'posts_per_page\', 10);
    $query->set(\'post_type\', array(\'news\'));
    $query->set(\'orderby\', \'date\');
    $query->set(\'order\', \'DESC\');
  }
}
add_action( \'pre_get_posts\', \'my_post_queries\' );
这样$paged var是从主查询维护的。

您还可以在hook函数中检查主查询是否在特定的归档文件或其他文件中。

结束

相关推荐

Pagination for event query

我正在使用Modern Tribe Events Calendar我的问题是分页。这是对WP\\U查询分页的错误方式,还是有其他方法可以对事件日历分页?我找到了一个tutorial 这使用了WPNavi插件,但我想使用核心wordpress函数。<?php $upcoming = new WP_Query(); $upcoming->query( array( \'post_type\'=> \'tribe_events\', \'eve

新闻档案页面上的分页工作不正常 - 小码农CODE - 行之有效找到问题解决它

新闻档案页面上的分页工作不正常

时间:2013-11-25 作者:Gaurav

我需要在新闻档案页上翻页。如果在同一页上显示所有记录,则数据正确。但如果添加分页代码,则分页值(如1,2,3,…16)正确,但如果单击第2页,则显示与第1页相同的文章标题。

    <h1 style="margin-left:10px;">News</h1>

    <ul class="years">
    <?php
    $paged = ( get_query_var( \'paged\' ) ) ? get_query_var( \'paged\' ) : 1;
$all_posts = get_posts(array(
    \'post_type\' => \'news\',
 \'posts_per_page\' => 20,
  \'orderby\' => \'date\',
    \'order\' => \'DESC\',
    \'paged=\'. $paged,
));

    // this variable will contain all the posts in a associative array
    // with three levels, for every year, month and posts.

    $ordered_posts = array();

    foreach ($all_posts as $single) {

      $year  = mysql2date(\'Y\', $single->post_date);
      $month = mysql2date(\'F\', $single->post_date);

      // specifies the position of the current post
      $ordered_posts[$year][$month][] = $single;

    }

    // iterates the years
    foreach ($ordered_posts as $year => $months) { ?>
      <li>
        <h3><?php echo $year ?></h3>
        <ul class="months">
        <?php foreach ($months as $month => $posts ) { // iterates the moths ?>
          <li>
            <h3><?php printf("%s (%d)", $month, count($months[$month])) ?></h3>
            <ul class="posts">
              <?php foreach ($posts as $single ) { // iterates the posts ?>
                <li>
                  <?php echo mysql2date(\'F j\', $single->post_date) ?> <a href="<?php echo get_permalink($single->ID); ?>"><?php echo get_the_title($single->ID); ?></a>  (<?php echo $single->comment_count ?>)</li>
                </li>

              <?php } // ends foreach $posts ?>
            </ul> <!-- ul.posts -->
          </li>
        <?php } // ends foreach for $months ?>
        </ul> <!-- ul.months -->
        <?php if(function_exists(\'wp_paginate\')) {
        wp_paginate();
    }  ?>
      </li> <?php
    } // ends foreach for $ordered_posts
    ?>

    </ul><!-- ul.years -->
以下是屏幕截图:-enter image description here

1 个回复
SO网友:Lucio Coire Galibone

使用自定义get_posts() 您正在忽略$paged 这样,您将始终看到来自第一页的帖子。

根据Codex Page 如果希望在执行主查询之前对其进行更改,可以使用pre_get_posts.

function my_post_queries( $query ) {
  if (!is_admin() && $query->is_main_query()){
    $query->set(\'posts_per_page\', 10);
    $query->set(\'post_type\', array(\'news\'));
    $query->set(\'orderby\', \'date\');
    $query->set(\'order\', \'DESC\');
  }
}
add_action( \'pre_get_posts\', \'my_post_queries\' );
这样$paged var是从主查询维护的。

您还可以在hook函数中检查主查询是否在特定的归档文件或其他文件中。

相关推荐

Count posts for pagination

我正在为一个网站分页<;上一页(页码)下一页>很简单,已经完成。但是现在我需要添加一个选择器来直接转到页面(例如:转到第7页),要这样做,我需要知道有多少页面,为此我需要计算在查询中找到了多少帖子。问题是这个网站有太多的帖子(>13.000),查询所有帖子都会减慢页面加载速度,这就像。。。10秒后页面才能加载。显然,这是不可接受的。分页解决了这个问题,因为一次只加载50或100篇文章,但我无法将它们全部计算在内。我可以在不加载的情况下统计某个查询中的帖子吗?或者我可以通过其他方式获得页数吗