我正在尝试一种新方法来分页在类别中返回的帖子。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 "| Stock Reference: ".$customField[0] . "   ";
} 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错误。知道为什么吗?
最合适的回答,由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。