如何对子页面列表进行分页

时间:2013-12-05 作者:dedos

我使用以下代码列出当前页面的子页面。但它只输出最后5个子页面;我想让它列出所有的页面在5块与“下一个”和“上一个”链接。比如它在正常的岗位上工作。我使用的代码如下:

<?php 
$ancestors = array();
$ancestors = get_ancestors($post->ID,\'page\');
$parent = (!empty($ancestors)) ? array_pop($ancestors) : $post->ID;
if (!empty($parent)) {
  $kids = new WP_Query(
    array(
      \'post_parent\'=>$parent,
      \'post_type\' => \'page\',
      \'ignore_sticky_posts\' => true
    )
  );
  if ($kids->have_posts()) {
    while ($kids->have_posts()) {
      $kids->the_post();
      echo \'<li>\' . \'<div>\' . \'<a href="\' . get_permalink() . \'">\' . get_the_post_thumbnail() . \'</a>\' . \'<span>\' . \'<a href="\' . get_permalink() . \'">\' . get_the_title() . \'</a>\' . \'</span><br/>\';
      echo \'<div class="extrainfo">\';
      echo the_field("info_add");  
      echo \'</div>\';
      echo \'</div></li>\';
    }
  }
}
?>
所讨论的页面是:http://dedos.info/flavioc/trabalhos/

现在我想知道我是否应该使用自定义帖子类型来管理它,但现在为时已晚。任何帮助都将不胜感激,谢谢。

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

选项1:

我个人更喜欢这个,因为从长远来看,它会给你更多的选择。特别是考虑到其他涉及二次查询的设置,请查看我下面链接的其他答案。

您需要做的是,利用paged 参数WP_Query 提供。此外,您必须在此处设置一个变量$paged - 表示分页。有了这个,你可以paginate_links() 构造分页链接。

Code:

global $post;
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
$ancestors = array();
$ancestors = get_ancestors($post->ID,\'page\');
$parent = (!empty($ancestors)) ? array_pop($ancestors) : $post->ID;
if (!empty($parent)) {
    $kids = new WP_Query(
        array(
            \'post_parent\'=>$parent,
            \'post_type\' => \'page\',
            \'ignore_sticky_posts\' => true,
            \'paged\' => $paged
        )
    );
    if ($kids->have_posts()) {
        while ($kids->have_posts()) {
            $kids->the_post();
            echo \'<li>\' . \'<div>\' . \'<a href="\' . get_permalink() . \'">\' . get_the_post_thumbnail() . \'</a>\' . \'<span>\' . \'<a href="\' . get_permalink() . \'">\' . get_the_title() . \'</a>\' . \'</span><br/>\';
            echo \'<div class="extrainfo">\';
            echo the_field("info_add");  
            echo \'</div>\';
            echo \'</div></li>\';
        }
        if ( get_option(\'permalink_structure\') ) {
            $format = \'page/%#%\';
        } else {
            $format = \'&paged=%#%\';
        }
        $args = array(
            \'base\' => get_permalink( $post->post_parent ) . \'%_%\',
            \'format\' => $format,
            \'current\' => $paged,
            \'total\' => $kids->max_num_pages
        );
        echo paginate_links( $args );
        wp_reset_postdata();
    }
}
注:未测试

有关其他选项,请参阅相关文档。我最近在另一篇文章中解释了这些步骤,如果要将主查询之外显示的辅助查询分页到主查询,则必须再执行几个步骤question. 例如,如果您希望进行不同的重写,而不是页面,这意味着您需要使用不同的查询变量然后进行页面化,那么您还可以在我链接的问题上找到执行此操作所需的所有信息。

选项2:

您也可以通过这种方式进行分页。这仍取决于参数的设置paged 以及相应的变量,见上文。例如,如果您想使用wordpress提供的其他分页链接功能previous_posts_link/next_posts_link()posts_nav_link, 这更容易实现。此处的钥匙正在临时更换$wp_query 如下所示,因为默认情况下,这些函数(有关更多配置选项,请阅读文档)正在访问此对象以生成分页链接。

Code:

global $post, $wp_query;
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
$ancestors = array();
$ancestors = get_ancestors($post->ID,\'page\');
$parent = (!empty($ancestors)) ? array_pop($ancestors) : $post->ID;
if (!empty($parent)) {
    $kids = new WP_Query(
        array(
            \'post_parent\'=>$parent,
            \'post_type\' => \'page\',
            \'ignore_sticky_posts\' => true,
            \'paged\' => $paged
        )
    );
    // Put default query object in a temp variable
    $tmp_query = $wp_query;
    // Now wipe it out completely
    $wp_query = null;
    // Re-populate the global with our custom query
    $wp_query = $kids;
    if ($kids->have_posts()) {
        while ($kids->have_posts()) {
            $kids->the_post();
            echo \'<li>\' . \'<div>\' . \'<a href="\' . get_permalink() . \'">\' . get_the_post_thumbnail() . \'</a>\' . \'<span>\' . \'<a href="\' . get_permalink() . \'">\' . get_the_title() . \'</a>\' . \'</span><br/>\';
            echo \'<div class="extrainfo">\';
            echo the_field("info_add");  
            echo \'</div>\';
            echo \'</div></li>\';
        }
        posts_nav_link();
        // Restore original query object
        $wp_query = null;
        $wp_query = $tmp_query;
        wp_reset_postdata();
    }
}

结束

相关推荐

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