【问题标题】:Pagination Doesn't work with wordpress custom post分页不适用于 wordpress 自定义帖子
【发布时间】:2014-10-15 00:33:54
【问题描述】:

分页不适用于 word press 自定义帖子。 我在下面尝试了这些代码,但没有出现分页。 尝试了不同的查询,但没有结果。 我是 php 和 word press 的新手。我只是复制和过去的代码。 谁能帮帮我吗? 到目前为止我所做的如下。

在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(); ?>

请帮帮我

【问题讨论】:

    标签: php wordpress pagination


    【解决方案1】:

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

    另外,不要将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 global

    编辑

    在您的 cmets 中,有一种更简单的方法可以实现您的目标,而无需任何自定义查询

    此页面是一个存档页面,旨在显示您的自定义帖子类型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。那么一切都应该正常

    有关更多信息,您必须查看this post我在 WPSE 上完成的操作

    【讨论】:

    • 请更具体。还没有结果是什么意思。你有任何错误吗?你打开调试了吗?
    • 谢谢彼得。实际上分页显示,但是当我点击第二页时它不起作用
    • 不工作,你的意思是你得到一个404页面还是你在页面时一遍又一遍地得到相同的帖子?
    • 另外,您确定将所有$wp_query 更改为$q。这是一个普通页面,还是明确设置为首页
    • 谢谢彼得。它显示 404 not found
    【解决方案2】:

    使用这些代码

    $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();
    

    结束;

    而不是

    $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/

    【讨论】:

    • 感谢 Yatendra。我应该使用该代码而不是哪个代码?
    • 永远不要使用query_posts。从不
    • 抱歉,这不起作用。它显示的是默认帖子,而不是自定义帖子。我使用的代码低于 3, 'paged' => $paged, 'post_type'=>'latestnews' ); $myposts = get_posts($args); foreach( $myposts as $post ) : setup_postdata($post); ?>

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多