Pagination throws 404

时间:2011-07-03 作者:Cyril

显示自定义帖子类型时,我的分页遇到一些问题。我想显示9篇文章,然后显示数字分页。这是可行的,一些链接是用(对我来说)正确的URL生成的:http://mywebsite/tutorial/page/2http://mywebsite/tutorial/taxonomy/page/2 但它总是在404页上完成。

欢迎您提出任何想法,以下是我的代码,如果您发现任何问题:)

提前谢谢。

西里尔

<?php
    $args = array(
        \'post_type\' => \'tutorial\',
        \'paged\' => ((get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1),
        \'posts_per_page\' => 9
    );
    query_posts($args);
?>

[MAIN LOOP]

<?php numeric_pagination(); ?>
以下是numeric\\u pagination()函数(在web上找到,在其他网站上工作…):

function numeric_pagination($pages = \'\', $range = 2) {
global $paged;
$showitems = ($range * 2) + 1;
if(empty($paged)) $paged = 1;
if($pages == \'\') {
    global $wp_query;
    $pages = $wp_query->max_num_pages;
        if(!$pages) {
            $pages = 1;
        }
}   

if(1 != $pages) {
    echo \'<div class="numeric-pagination"><p>\';
    if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo \'<a href="\'.get_pagenum_link(1).\'">&laquo;</a>\';
    if($paged > 1 && $showitems < $pages) echo \'<a href="\'.get_pagenum_link($paged - 1).\'">&lsaquo;</a>\';

    for ($i=1; $i <= $pages; $i++) {
        if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems )) {
            echo ($paged == $i)? \'<span class="current">\'.$i.\'</span>\':\'<a href="\'.get_pagenum_link($i).\'" class="inactive" >\'.$i.\'</a>\';
        }
    }

    if ($paged < $pages && $showitems < $pages) echo \'<a href="\'.get_pagenum_link($paged + 1).\'">&rsaquo;</a>\';  
    if ($paged < $pages-1 &&  $paged+$range-1 < $pages && $showitems < $pages) echo \'<a href="\'.get_pagenum_link($pages).\'">&raquo;</a>\';
    echo \'</p></div>\';
}
}

我的自定义帖子类型和分类法可能有问题,因此我也给出了相应的代码:

/* POST TYPE */

add_action(\'init\',\'create_tutorials_post_type\');
function create_tutorials_post_type() {
    // Labels
    $labels = array(
        \'name\' => \'Tutorials\',
        \'singular_name\' => \'Tutorial\',
        \'add_new\' => \'Add new\',
        \'add_new_item\' => \'Add new tutorial\',
        \'edit_item\' => \'Edit\',
        \'new_item\' => \'New tutorial\',
        \'view_item\' => \'View tutorial\',
        \'search_items\' => \'Search tutorial\',
        \'not_found\' =>  \'No tutorial found\',
        \'not_found_in_trash\' => \'No tutorial found in trash\', 
        \'parent_item_colon\' => \'\',
        \'menu_name\' => \'Tutorials\'
    );
    // Arguments
    $args = array(
        \'labels\' => $labels,
        \'public\' => true,
        \'publicly_queryable\' => true,
        \'show_ui\' => true, 
        \'show_in_menu\' => true, 
        \'query_var\' => true,
        \'rewrite\' => true,
        \'capability_type\' => \'post\',
        \'has_archive\' => true, 
        \'hierarchical\' => false,
        \'menu_position\' => null,
        \'supports\' => array(\'title\',\'editor\',\'author\',\'thumbnail\',\'excerpt\',\'comments\')
    );
    // Register post type
    register_post_type(\'tutorial\',$args);
}

/* TAXONOMY */

add_action(\'init\',\'create_tutorials_taxonomies\');
function create_tutorials_taxonomies() {
    // Labels
    $labels = array(
        \'name\' => \'Tutorial types\',
        \'singular_name\' => \'Tutorial type\',
        \'search_items\' => \'Search a type\',
        \'all_items\' => \'All types\',
        \'parent_item\' => \'Parent type\',
        \'parent_item_colon\' => \'Parent type:\',
        \'edit_item\' => \'Edit type\', 
        \'update_item\' => \'Update type\',
        \'add_new_item\' => \'Add new type\',
        \'new_item_name\' => \'New tutorial type\',
        \'menu_name\' => \'Types\'
    );
    // Arguments
    $args =  array(
        \'hierarchical\' => true,
        \'labels\' => $labels,
        \'show_ui\' => true,
        \'query_var\' => true,
        \'rewrite\' => array(\'slug\' => \'tutorials\', \'hierarchical\' => true)
    );
    // Register taxonomy
    register_taxonomy(\'tutorial_type\',array(\'tutorial\'),$args);
}

5 个回复
SO网友:Bohdan Hdal

在wordpress设置中将预定义的posts\\u per\\u页面更改为最小值,或将下面的代码添加到函数中。php。Wordpress使用默认参数。例如:10。如果您在query\\u posts或WP\\u query中的设置看起来像“posts\\u per\\u page=>2”,并且自定义帖子类型中的帖子数量少于10,则在单击to/page/2后,您将重定向到第404页。

此代码用于函数。用于解决问题的php:

if( !is_admin() ){  
    add_action( \'pre_get_posts\',  \'set_per_page\'  );
}
function set_per_page( $query ) {
    global $wp_the_query;
    if($query->is_post_type_archive(\'tutorial\')&&($query === $wp_the_query)){
    $query->set( \'posts_per_page\', 1);
    }
  return $query;
}

SO网友:Dale-Anthony

嘿,我也有类似的问题。

问题是WordPress默认设置为每页显示10篇帖子,这与我的查询冲突(限制为2篇帖子)为了解决问题,我将WordPress设置(管理仪表板中的设置/读取)更改为1。

SO网友:Dave Romsey

我会用paginate_links() 为此:

global $wp_query;

$big = 999999999; // need an unlikely integer

echo paginate_links( array(
    \'base\' => str_replace( $big, \'%#%\', get_pagenum_link( $big ) ),
    \'format\' => \'?paged=%#%\',
    \'current\' => max( 1, get_query_var(\'paged\') ),
    \'total\' => $wp_query->max_num_pages
) );
这是上面链接的codex文章中最新也是最伟大的例子。只要有机会,通常最好利用核心功能。

SO网友:Maciej Kuś

我通过使用parse\\u query filter解决了这个问题。有关详细信息,请查看此处:Fix custom query pagination without changing site-wide posts-per-page settings

SO网友:DevWeasle

我知道这是一个很老的问题,但如果有人遇到这个问题,请尝试以下方法:

将php代码中的“posts\\u per\\u page=x”设置为与管理区域中的读取设置相同的值。因此,如果“posts\\u per\\u page=3”,阅读设置“博客页面最多显示”也应设置为3。

结束

相关推荐

Encoding Method for URLs?

WordPress是否有一种编码URL的方法或API,类似于在URL中使用标题时生成部分URL的方式?我正在编写一个生成URL的插件,并希望使用与其他所有插件相同的方法。例如,我在标题中键入“这是我的博客文章”,然后生成“这是我的博客文章”。