WordPress Paginate索引页面上的自定义帖子类型

时间:2014-01-12 12:00:43

标签: php wordpress loops pagination custom-post-type

在我的WordPress模板中,我想在我的索引页面上使用自定义帖子类型分页。 以下代码的问题是,当我点击“较旧的帖子”链接时,它会重定向到/ page / 2网址,并在结果中显示404错误。

这是我的自定义帖子类型注册码:

add_action( 'init', 'create_post_type' );
function create_post_type() {
    register_post_type( 'video_news',
        array(
            'labels' => array(
                'name' => __( 'Video News' ),
                'singular_name' => __( 'Video News' )
            ),
            'public' => true,
            'taxonomies' => array('category'),
            'has_archive' => true,
            'rewrite' => array('slug' => 'videos'),
            'supports' => array( 'title', 'editor', 'comments', 'excerpt', 'custom-fields', 'thumbnail' ),
        )
    );
}

这是我的WP_Query循环代码:

<?php
global $wp_query;
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$args = array('post_type' => 'video_news', 'posts_per_page' => 5, 'paged' => $paged);
$wp_query = new WP_Query($args); ?>
<?php if ( $wp_query->have_posts() ) : ?>
<?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
    <h2><?php the_title(); ?></h2>
<?php endwhile; ?>
<div class="pagination">
    <?php previous_posts_link( 'Newer posts &raquo;' ); ?>
    <?php next_posts_link('Older &raquo;') ?>
</div>
<?php wp_reset_postdata(); ?>
<?php else:  ?>
    <p><?php _e( 'No results' ); ?></p>
<?php endif; ?>
<?php wp_reset_query(); ?>

3 个答案:

答案 0 :(得分:2)

您使用的是静态首页吗?

若是改变

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

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

如果您没有使用静态首页,则可能需要考虑使用pre_get_posts挂钩。 http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

将以下内容插入functions.php中。如果你走这条路线,就从索引模板文件中删除自定义查询。

function my_home_video_news_query( $query ) {
    if ( ! is_admin() && $query->is_main_query() ) {
        if ( $query->is_home() ) {
            $query->set( 'post_type', 'video_news' );
            $query->set( 'posts_per_page', 5 );
        }
    }
}
add_action( 'pre_get_posts', 'my_home_video_news_query' );

答案 1 :(得分:0)

对我来说很好。

您是否检查了永久链接设置?

答案 2 :(得分:0)

而不是这个

<div class="pagination">
    <?php previous_posts_link( 'Newer posts &raquo;' ); ?>
    <?php next_posts_link('Older &raquo;') ?>
</div>

使用此

<div class="pagination">
global $wp_query;

$big = 999999999; // need an unlikely integer

echo paginate_links( array(
    'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
    'format' => '?paged=%#%',
    'current' => max( 1, get_query_var('paged') ),
    'total' => $wp_query->max_num_pages
) );
</div>