这个分页代码有什么问题?

时间:2013-11-24 作者:Sara44

我正在尝试一种新方法来分页在类别中返回的帖子。php文件。我想一次看10篇文章的片段。文件名为类别xyz。在我改用这个方法之前,php和这个方法是有效的,尽管我使用的是showposts=200,并且它返回了该类别中的所有180篇文章。

我改变了方法,因为我使用的几个调用被弃用(例如ShowPost)或未被建议。我正在参考这篇文章的解决方案:

How to fix pagination for custom loops?

这是我的代码:

<?php
// Define custom query parameters
$custom_query_args = array( 
\'cat\' => 76, 
\'posts_per_page\' => 5
);

// Get current page and append to custom query parameters array
$custom_query_args[\'paged\'] = get_query_var( \'paged\' ) ? get_query_var( \'paged\' ) : 1;

// Instantiate custom query
$custom_query = new WP_Query( $custom_query_args );

// Pagination fix
$temp_query = $wp_query;
$wp_query   = NULL;
$wp_query   = $custom_query;

        // Output custom query loop rather than use wp_query
        if ( $custom_query->have_posts() ) : 
             while ( $custom_query->have_posts() ) : 
              $custom_query->the_post();
        // Loop output goes here
        ?>
            <div class="pcrmbimgholder">
            <a href="<?php the_permalink() ?>" rel="bookmark"><img src="<?php echo pcrmbimagegrab() ?>" alt="<?php the_title(); ?>" /></a>
            </div>
        <h2><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h2>
        <?php the_content_limit(190, ""); ?>                
                <?php $customField = get_post_custom_values("price"); 
                 if (isset($customField[0])) { 
                 echo "<strong>Price: ".$customField[0];
                 echo "   </strong>";
                } else { 
                ;
                }
                ?>  
                <?php $customField = get_post_custom_values("sku"); 
                 if (isset($customField[0])) { 
                 echo "&#124;   Stock Reference: ".$customField[0] . "&#32;&#32;&#32;";
                } else { 
                ;
                }
                ?>      
        <a class="postbutton" href="<?php the_permalink() ?>" rel="bookmark"><span>View</span></a><div class="separator"></div>     


        <?php

    endwhile;
endif;
// Reset postdata
wp_reset_postdata();

// Custom query loop pagination
previous_posts_link( \'Older Posts\' );
next_posts_link( \'Newer Posts\', $custom_query->max_num_pages );

// Reset main query object
$wp_query = NULL;
$wp_query = $temp_query;

?>
我也尝试了这一点,因为我不确定自定义查询数组中需要哪些参数:

// Define custom query parameters
$custom_query_args = array( 
\'cat\' => 76, 
\'posts_per_page\' => 5,
\'max_num_pages\' => 20,
\'paged\' => $paged,
);
分页链接转到/category/category name/page/2/,导致404错误。知道为什么吗?

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

主查询在加载模板之前运行,WordPress根据该查询的结果决定加载哪个模板。

你说你的默认值posts_per_page 设置为200,该类别中有180篇帖子,据WordPress所知,没有第2页。使用不同的每页帖子设置在模板中运行的自定义查询与主查询无关。

解决方案是在加载模板之前,通过pre_get_posts 行动这将符合你的主题functions.php 文件:

function category_posts_per_page( $query ) {
    if ( !is_admin()
        && $query->is_category()
        && $query->is_main_query() ) {
        $query->set( \'posts_per_page\', 5 );
    }
}
add_action( \'pre_get_posts\', \'category_posts_per_page\' );
然后可以在模板中运行普通循环,分页将按预期工作。另请参见is_category() 如果您想将其应用于特定的单一类别,请参阅Codex。

结束

相关推荐

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