自定义帖子类型归档分页对woo canvas子主题不起作用

时间:2015-05-19 19:28:49

标签: php wordpress canvas pagination

我正在为woo canvas构建一个子主题,我正努力让我的分页工作在我的存档页面上,以获得一个名为book的新自定义帖子类型。

帖子类型注册码如下:

$args = array(
    'labels'             => $labels,
    'public'             => true,
    'publicly_queryable' => true,
    'show_ui'            => true,
    'show_in_menu'       => true,
    'query_var'          => true,
    'rewrite'            => array( 'slug' => 'book' ),
    'capability_type'    => 'post',
    'has_archive'        => true,
    'hierarchical'       => false,
    'menu_position'      => null,
    'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
    );

register_post_type( 'book', $args );

位于我的函数文件中并且工作正常。

我的archive-book.php中有以下代码,它显示了分页链接,但每当我导航到被分页的页面时,就会给我一个404错误,例如 - http://localhost/wp/book/page/2/

<?php

global $wp_query, $woo_options, $paged, $page, $post;
?>
<?php get_header(); ?>
<?php

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;

$args = array(
    'post_type' => 'book',
    'paged' => $paged,
    'posts_per_page' => 3
    );
$query = new WP_Query( $args );
while ( $query->have_posts() ) { $query->the_post(); ?>
<?php echo the_title(); ?>
<?php } ?>
<?php 
woo_pagenav( $query );
wp_reset_query();
get_footer(); ?>

我已将永久链接设置为“帖子名称”,并在选中帖子名称和默认永久链接的情况下多次刷新永久链接。

1 个答案:

答案 0 :(得分:1)

第二页不存在,因此永远不会加载您的存档模板。每页的默认帖子数将在初始查询中使用,在此条件下,帖子没有第二页。

如果您在自定义查询下有5个图书帖子,则第一页将显示3,第二页2.在每页的默认帖子数(10)下,所有5个将显示在第一页上,并且会有不需要页面2.然后WordPress加载404模板。

您需要使用pre_get_posts挂钩来修改主查询。

示例:

/**
 * Change the number of posts per page on the book archive.
 *
 * @param object $query
 */
function wpse_modify_book_archive_query( $query ) {

    // Only apply to the main loop on the frontend.
    if ( is_admin() || ! $query->is_main_query() {
        return false;
    } 

    // Check we're viewing the book archives.
    if ( $query->is_post_type_archive( 'book' ) ) {
        $query->set( 'posts_per_page', 3 );
    }
}
add_action( 'pre_get_posts', 'wpse_modify_book_archive_query' );