wordpress中自定义查询后分页

         wordpress主循环会按照url中的page这个参数来自动分页数据,但是如果你的page值超出了主循环拥有的数据量,就会被定义到404页面去。在自己的页面写的代码也不会被加载。

       想要自己的页面接收到page参数,就要在加载404页面之前跳转到自己的页面去。

      在template-loader.php里,加载模板之前会有一个筛选行为,我们可以在这上面做文章。下面是template-loader.php里的几行代码,看看就可以了,不要改动。

	if ( $template = apply_filters( 'template_include', $template ) )
		include( $template );
	return;

       在自己主题的functions.php 里 ,给template_include加一个函数‘’change404ToCategory”(这里是我自己定义的函数名,各位可以随意定),下面是代码:
add_filter('template_include','change404ToCategory');

function change404ToCategory($template){//exit();
	global $wp_query;
	$wp_query->is_category = true;
	$wp_query->is_404 = false;
	if(is_category('xxxx')){
            $template = get_category_template();
	}
	return $template;
}

我是要定义到category页面,所以把$wp_query里的is_category变为true(之前因为没有查询到posts数据,被定义为false了);is_404改成false(如果是true,在获取body的class时会被加上一个404error); is_category(xxxx)我只需要在xxxx的category里用自定义的分页。

$template = get_category_template();

这一句就是获取分页模板了,获取其他模板请参考template-loader.php;

最后return。

在自己的category-xxxx里加上

	global $paged;
	query_posts(array( paged'=>$paged,"showposts" => 20));
$paged 就是你传过去的页码了, 传的时候是page,不过会被wp改成paged,查询的时候paged对应global 后的$paged,showposts对应每页显示的文章数量,再加上你需要的其他参数,就可以完成自定义分页了。当然,分页css需要你自己写。

你可能感兴趣的:(wordpress)