我试图在我的category.php文件中使用分页来显示类别的帖子,但是当我点击“旧帖子”按钮时,我得到了一个404。下面是我当前用于查询的代码:
<?php
// Get ID of category we're currently looking at
$cat = get_cat_id( single_cat_title("",false) );
query_posts(array(
'posts_per_page'=>25,
'cat' => $cat,
'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 )
));
if(have_posts()):
?>我使用的固定链接结构是/%category%/%postname%/
我读到有一个bug,如果"posts_per_page“设置为小于默认值,会给你留下一个404错误,但这似乎不是问题所在。在我的设置中,默认值是20。
有什么想法吗?这是固定链接设置的问题吗?/category-name/page/2不应该和/blog-page/page/2一样工作吗?
如果我尝试访问这样的类别,我也会得到一个404 : /category/cat-name或/blog-page/category/cat-name
谢谢!
发布于 2015-12-31 04:57:46
这听起来与我的经历非常相似(在我的子主题中,当在category.php中使用分页时,自定义固定链接%category%%postname%导致404,但只在第2页)。
我发现这个解决方案工作得很好:http://www.bamboosolutions.co.uk/fix-404-errors-wordpress-pagination/
为了总结解决方案,我在我的子functions.php文件中添加了以下代码:
function custom_pre_get_posts( $query ) {
if( $query->is_main_query() && !$query->is_feed() && !is_admin() && is_category()) {
$query->set( 'paged', str_replace( '/', '', get_query_var( 'page' ) ) ); } }
add_action('pre_get_posts','custom_pre_get_posts');
function custom_request($query_string ) {
if( isset( $query_string['page'] ) ) {
if( ''!=$query_string['page'] ) {
if( isset( $query_string['name'] ) ) { unset( $query_string['name'] ); } } } return $query_string; }
add_filter('request', 'custom_request');我花了太多时间阅读关于这个错误的不同原因和解决方案,在我的情况下,它是WP没有请求正确的自定义类别。这个修复节省了我很多时间!
发布于 2017-01-11 17:08:51
我也有同样的问题,Lauren的解决方案帮了我。我的问题是,使用此代码时,当前页面并未更改,而是卡在了第一页。
在functions.php中,我添加了以下代码:
function custom_pre_get_posts($query)
{
if ($query->is_main_query() && !$query->is_feed() && !is_admin() && is_category()) {
$query->set('page_val', get_query_var('paged'));
$query->set('paged', 0);
}
}
add_action('pre_get_posts', 'custom_pre_get_posts');在类别模板(category.php)中,我使用了以下代码:
$paged = (get_query_var('page_val') ? get_query_var('page_val') : 1);
$query = new WP_Query(array(
'posts_per_page' => 3,
'cat' => $cat,
'orderby' => 'date',
'paged' => $paged,
'order' => 'DESC'));对于分页,我像这样修改了这段代码。希望我的解决方案能有所帮助:
$big = 999999999;
echo paginate_links(array(
'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
'format' => '/page/%#%',
'current' => max(1, $paged),
'prev_text' => __('Previous Page'),
'next_text' => __('Next Page'),
'show_all' => true,
'total' => $query->max_num_pages
));发布于 2015-05-08 04:14:14
我会先试着切换到WP_Query,它的分页问题比较少。
https://codex.wordpress.org/Function_Reference/query_posts
query_posts()修改页面主查询的方式过于简单且存在问题,只需将其替换为查询的新实例即可。它的效率很低(重新运行SQL查询),并且在某些情况下会完全失败(特别是在处理帖子分页时)。
$cat = get_cat_id( single_cat_title("",false) );
$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
$the_query = new WP_Query
(
array
(
'posts_per_page'=>25,
'cat' => $cat,
'paged' => $paged
),
);
if ($the_query->have_posts()) : ?>如果这不起作用,试着将你的固定链接结构改为帖子ID,看看这是否会改变它。如果这些都不起作用,请将$cat设置为您知道存在的类别(并且有26个帖子),并确保这不是导致问题的原因。
希望这能有所帮助。
https://stackoverflow.com/questions/30108550
复制相似问题