在我的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 »' ); ?>
<?php next_posts_link('Older »') ?>
</div>
<?php wp_reset_postdata(); ?>
<?php else: ?>
<p><?php _e( 'No results' ); ?></p>
<?php endif; ?>
<?php wp_reset_query(); ?>
答案 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 »' ); ?>
<?php next_posts_link('Older »') ?>
</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>