对页面类型使用带有GET_POST的分页

时间:2014-03-06 作者:svsdnb

有没有一种方法可以在页面查询中使用分页,就像在帖子中一样?

下面是我使用的代码:

    $listingPages = get_posts( 
    array(
    \'cild_of\' => \'7\',
        \'meta_key\' => \'Type\',
        \'post_type\' => \'page\',
        \'post_status\' => \'publish\',
        \'orderby\' => \'meta_value\',
        \'order\' => \'ASC\',
    \'posts_per_page\' => \'20\',
    \'paged\' => ( get_query_var(\'paged\') ? get_query_var(\'paged\') : 1 ),
    )
);
我可以将/page/2/page/3等添加到URL中,并查看下一组20,但是当我添加分页代码时,什么都没有显示。

<?php wpbeginner_numeric_posts_nav(); ?>
下面是函数。php部分:

function wpbeginner_numeric_posts_nav() {

if( is_singular() )
    return;
global $wp_query;

/** Stop execution if there\'s only 1 page */
if( $wp_query->max_num_pages <= 1 )
    return;
$paged = get_query_var( \'paged\' ) ? absint( get_query_var( \'paged\' ) ) : 1;
$max   = intval( $wp_query->max_num_pages );

/** Add current page to the array */
if ( $paged >= 1 )
    $links[] = $paged;

/** Add the pages around the current page to the array */
if ( $paged >= 3 ) {
    $links[] = $paged - 1;
    $links[] = $paged - 2;
}

if ( ( $paged + 2 ) <= $max ) {
    $links[] = $paged + 2;
    $links[] = $paged + 1;
}
echo \'<div class="navigation"><ul>\' . "\\n";

/** Previous Post Link */
if ( get_previous_posts_link() )
    printf( \'<li>%s</li>\' . "\\n", get_previous_posts_link() );

/** Link to first page, plus ellipses if necessary */
if ( ! in_array( 1, $links ) ) {
    $class = 1 == $paged ? \' class="active"\' : \'\';
    printf( \'<li%s><a href="%s">%s</a></li>\' . "\\n", $class, esc_url( get_pagenum_link( 1 ) ), \'1\' );
    if ( ! in_array( 2, $links ) )
        echo \'<li>…</li>\';
}

/** Link to current page, plus 2 pages in either direction if necessary */
sort( $links );
foreach ( (array) $links as $link ) {
    $class = $paged == $link ? \' class="active"\' : \'\';
    printf( \'<li%s><a href="%s">%s</a></li>\' . "\\n", $class, esc_url( get_pagenum_link( $link ) ), $link );
}

/** Link to last page, plus ellipses if necessary */
if ( ! in_array( $max, $links ) ) {
    if ( ! in_array( $max - 1, $links ) )
        echo \'<li>…</li>\' . "\\n";
    $class = $paged == $max ? \' class="active"\' : \'\';
    printf( \'<li%s><a href="%s">%s</a></li>\' . "\\n", $class, esc_url( get_pagenum_link( $max ) ), $max );
}

/** Next Post Link */
if ( get_next_posts_link() )
    printf( \'<li>%s</li>\' . "\\n", get_next_posts_link() );
echo \'</ul></div>\' . "\\n";
}

2 个回复
最合适的回答,由SO网友:cybmeta 整理而成

您应该检查代码,因为您有一些句子会使分页函数返回空值。例如,下一段代码将使您退出,因为您位于页面模板中,\\u singular()返回true:

if( is_singular() )
    return;
此外,您正在使用全局$wp_query 对象,但您正在使用get_posts() 获取页面列表,而不是主查询。所以$wp_query->max_num_pages 是cero,因为主查询是针对单个页面的。因此,这段代码也可以帮助您:

global $wp_query;

/** Stop execution if there\'s only 1 page */
if( $wp_query->max_num_pages <= 1 )
    return;
删除两个代码块是不够的,因为您再次使用全局$wp_query 对象以获取最大页数:

 $max = intval( $wp_query->max_num_pages );
此外,如果将页面模板设置为博客的首页,则paged var在查询中不起作用,您应该使用page 查询变量。

我建议你再想想你想做什么。查看代码,您试图列出ID为7的页面的子页面,并对结果分页。将子页面转换为类别下的普通帖子并在标准类别模板中显示它们似乎更容易。

如果您真的需要这些项目是子页面,那么最好使用new WP_Query() 对象,而不是get_posts() 函数并获取分页函数的最大页数:

 $args =  array(
       \'cild_of\' => \'7\',
       \'meta_key\' => \'Type\',
       \'post_type\' => \'page\',
       \'post_status\' => \'publish\',
       \'orderby\' => \'meta_value\',
       \'order\' => \'ASC\',
       \'posts_per_page\' => \'20\',
       \'paged\' => ( get_query_var(\'paged\') ? get_query_var(\'paged\') : 1 ),
   );
   $query = new WP_Query($args);
   $max_num_pages = $query->max_num_pages;

   wpbeginner_numeric_posts_nav($max_num_pages);
和分页功能:

function wpbeginner_numeric_posts_nav($max_num_pages = 0) {

/** Stop execution if there\'s only 1 page */
if( $max_num_pages <= 1 )
    return;
$paged = get_query_var( \'paged\' ) ? absint( get_query_var( \'paged\' ) ) : 1;

/** Add current page to the array */
if ( $paged >= 1 )
    $links[] = $paged;

/** Add the pages around the current page to the array */
if ( $paged >= 3 ) {
    $links[] = $paged - 1;
    $links[] = $paged - 2;
}

if ( ( $paged + 2 ) <= $max_num_pages ) {
    $links[] = $paged + 2;
    $links[] = $paged + 1;
}
echo \'<div class="navigation"><ul>\' . "\\n";

/** Previous Post Link */
if ( get_previous_posts_link() )
    printf( \'<li>%s</li>\' . "\\n", get_previous_posts_link() );

/** Link to first page, plus ellipses if necessary */
if ( ! in_array( 1, $links ) ) {
    $class = 1 == $paged ? \' class="active"\' : \'\';
    printf( \'<li%s><a href="%s">%s</a></li>\' . "\\n", $class, esc_url( get_pagenum_link( 1 ) ), \'1\' );
    if ( ! in_array( 2, $links ) )
        echo \'<li>…</li>\';
}

/** Link to current page, plus 2 pages in either direction if necessary */
sort( $links );
foreach ( (array) $links as $link ) {
    $class = $paged == $link ? \' class="active"\' : \'\';
    printf( \'<li%s><a href="%s">%s</a></li>\' . "\\n", $class, esc_url( get_pagenum_link( $link ) ), $link );
}

/** Link to last page, plus ellipses if necessary */
if ( ! in_array( $max_num_pages, $links ) ) {
    if ( ! in_array( $max_num_pages - 1, $links ) )
        echo \'<li>…</li>\' . "\\n";
    $class = $paged == $max_num_pages ? \' class="active"\' : \'\';
    printf( \'<li%s><a href="%s">%s</a></li>\' . "\\n", $class, esc_url( get_pagenum_link( $max_num_pages ) ), $max_num_pages );
}

/** Next Post Link */
if ( get_next_posts_link() )
    printf( \'<li>%s</li>\' . "\\n", get_next_posts_link() );
echo \'</ul></div>\' . "\\n";
}

SO网友:s_ha_dum

这看起来像是一个辅助查询。pagedCore query var-- 也就是说,它被WordPress核心使用。该变量将在页面加载早期由主查询在普通页面加载期间由核心操作。主查询不知道您的查询在页面加载中做了什么。我很确定,您正在尝试使用一个“保留”查询变量,并且您看到了来自主查询和核心函数操作的干扰/冲突。

如果我是对的,那么解决方法是使用一个变量,而不是核心使用的变量my_paged.

结束

相关推荐

Pagination for user list

我使用get_user() 作用但我需要把结果分页。我试了很多,但没有成功。下面是代码,它没有按预期工作:$args = array( \'meta_query\' => array( array( \'key\' => \'ib_s2member_custom_fields\', \'value\' => trim($_GET[\"country\"]), \'compare\' => \