分页不适用于wordpress自定义帖子

时间:2014-08-21 11:31:42

标签: php wordpress pagination

分页不适用于word press custom post。  我在下面尝试过这些代码,但分页并没有出现。 尝试了不同的查询但没有结果。 我是新的php和word press.i只是复制和过去的代码。 谁能帮帮我吗? 到目前为止我所做的事情都在下面。

在function.php中

/*pagination*/  

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";

}
自定义帖子查询中的

<?php
                            global $post;
                            $args = array( 'posts_per_page' => 5, 'post_type'=> 'latestnews');
                            $myposts = get_posts( $args );
                            foreach( $myposts as $post ) : setup_postdata($post); 
                        ?>
                        <div class="page_news">
                        <div class="single_page_news">
                            <h2><?php the_title(); ?><h2>
                            <p><?php the_content(); ?></p>
                        </div>
                        </div>
                        <?php endforeach; ?>

                        <?php wpbeginner_numeric_posts_nav(); ?>

请帮帮我

2 个答案:

答案 0 :(得分:0)

使用这些代码

$paged = ( get_query_var('page') ) ? get_query_var('page') :1;
$query = new WP_Query( array( 'posts_per_page' => 1,'paged' => $paged,'post_type' => 'achievements','orderby' => 'date', 'order' => 'ASC' ) );
while ( $query->have_posts() ) : $query->the_post();

ENDWHILE;

而不是

$args = array( 'posts_per_page' => 5, 'post_type'=> 'latestnews');
 $myposts = get_posts( $args );

请点击此链接 http://thenetapp.com/2014/01/how-to-list-wordpress-posts-with-pagination/

答案 1 :(得分:0)

您的分页功能仅针对默认主查询设置,而不是针对自定义查询设置。

另外,请勿使用get_posts进行分页查询。它是一个很好的功能,用于自定义查询,但一旦你需要分页它变得有点无聊。

而是使用WP_Query进行分页查询,使用起来要容易得多。

示例:

$paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) :  1;

$args = array(
   'posts_per_page' => 1,
   'paged' => $paged,
   'post_type' => 'YOUR POST TYPE'
);

$q = new WP_Query($args);

if($q->have_post()) {
   while($q->have_posts()) {
     $q->the_post();

     //YOUR LOOP

   }
  //YOUR PAGINATION
}
wp_reset_postdata();

您可以查看有关额外参数的codex。

现在,您需要将分页函数中$wp_query的每个实例更改为$q才能生效。

请注意,您不必致电$post全球

修改

根据您的评论,无需任何自定义查询即可轻松实现目标

此页面是一个存档页面,用于显示自定义帖子类型latestnews。您只需将archive-custom.php重命名为archive-latestnews.php即可。请参阅Template Hierarchy。注册帖子类型时,请确保has_archive设置为true

您也不应该在任何类型的存档页面上购买自定义查询的主查询。你可以看到它总是很麻烦。因此,请删除自定义查询并将其替换为默认查询

这就是您在存档页面中应该拥有的全部内容

if(have_post()) {
   while(have_posts()) {
     the_post();

     //YOUR LOOP

   }
  //YOUR PAGINATION
}

只需将$q的所有实例再次更改回$wp_query即可。一切都应该工作

如需了解更多信息,请查看我在WPSE上完成的this post