我有这样一段代码
<?php
global $wp_query;
$args = array_merge( $wp_query->query_vars, array( 'post_type' => array( 'post', 'project') ) );
$wp_query = new WP_Query( $args );
if ( have_posts() ) : while ( have_posts() ) : the_post();
?>
循环之后
<?php
$permalink_structure = get_option('permalink_structure');
$format = empty( $permalink_structure ) ? '?paged=%#%' : 'page/%#%/';
echo paginate_links( array(
'base' => get_pagenum_link(1) .'%_%',
'format' => $format,
'current' => max( 1, get_query_var('paged') ),
'total' => $wp_query->max_num_pages,
'prev_text' => __('«'),
'next_text' => __('»'),
'show_all' => false,
'mid_size' => 2,
'end_size' => 1,
) );
?>
现在问题是,如果我有6个帖子和18个项目,每页3个帖子...... paginate_links 将生成(6 + 18)/ 3页,即8页...所以我点击2然后转到第2页..但是当我点击3 ...我得到错误404。 好像 paginate_links 生成所需的页面链接,但只有链接到6/3页面,如1和2。 问题是肯定的,因为添加了自定义帖子类型,但我无法理解那个问题在哪里。 可能是什么问题?
答案 0 :(得分:1)
看起来您必须更改“主查询”(您在“主查询中使用”子查询“ “)包含您的自定义帖子类型,因此您的分页链接将起作用。
您可以尝试使用pre_get_posts
挂钩
add_action( 'pre_get_posts', 'my_pre_get_posts' );
function my_pre_get_posts( $query ) {
if($query->is_main_query() && $query->is_home()){ // <-- EDIT this condition to your needs
$query->set( 'post_type', array( 'post','projects' ) );
}
}
将此代码放入当前主题目录的functions.php
文件中。
这假设您在首页上使用了分页,即
http://example.com/page/5
我们有条件$query->is_home()
来检查我们是否在首页。如果您在不同的页面上,则可以根据需要更改此条件。
ps:我认为你的方式不起作用,因为你在主题文件中这样做,而且“为时已晚”无法改变分页链接的范围。