YAOHAIXIAO.COM

HTML(5),CSS(3),JavaScript,DOM,Ajax,JSON,Front-end technologies & Yaohaixiao

热门标签:JavaScript Performance 前端开发 前端性能优化 原创

Rss

Home » WordPress » 利用 query_posts() 函数实现 WordPress 按不同类别显示不同条数的文章

利用 query_posts() 函数实现 WordPress 按不同类别显示不同条数的文章

这两天在继续优化 BlueNight 主题,其中一个要优化的地方就是给我的 Video 分类设置不同的页面布局,以区分视频栏目和普通的文章列表页。遇到的一个问题就是希望给 Video 分类的列表页显示不同的文章条数。我想也有其他玩 WordPress 的朋友希望针对不同的分类显示不同的文章条数。这里我就把我的实现方式给大家分享一下。

query_posts() 函数就是我们实现这个功能的关键。query_posts() 函数具体的 API 使用方法我已经给出了访问链接,大家自己查看,我这里就直接介绍相关的内容。

query_posts() 函数简介

query_posts()函数是最简单的用来改变默认的 WordPress 查询的方式,但不是首选和最有效的。通常使用 query_posts()函数会出现在一个特定的URL(例如我这里的 Video 分类)。

不过值得注意的是,query_posts()虽然是只用传入的一个参数,用起来很简单。但是有时会导致 WordPress 程序进行多次数据库查询,这时候程序的执行效率可能会比较低。在使用前必须要对这个性能问题有足够的认识。

另外,如果您必须使用 query_posts(),请确保在调用 query_posts()查询完毕后,使用 wp_reset_query()重置之前的自定义查询。例如:

<?php

// The Query
query_posts( $args );

// The Loop
while ( have_posts() ) : the_post();
	echo '<li>';
	the_title();
	echo '</li>';
endwhile;

// Reset Query
wp_reset_query();

?>

保留现有的查询参数 实现不同的分类显示不同条数的文章数

如果您想保留原来的查询参数信息,用于生成当前的查询,然后添加或修改一些参数,可以使用全局变量 $query_string 结合 query_posts()调用来实现。例如,要调整默认的排序顺序,又不影响其余部分的查询字符串,就可以这么处理:

global $query_string;
query_posts($query_string.'&orderby=ASC';

以这种方式使用query_posts()的时候,参数的引用部分必须用符号(&)作为开始。

本文想实现的是根据不同的分类,在不同分类的列表页显示不同的文章数,就可以在 achive.php(没有 achive.php 的就是在 index.php) 页面这么处理了:

$category = get_category(get_query_var('cat'))->slug;

if($category=='video'){
    global $query_string;
    query_posts($query_string.'&posts_pre_page='.$videos_per_page;
    while (have_posts()) : the_post(); 
	 if (function_exists('show_post_item')) {
	     show_post_item();
	 } 
    endwhile;
}

很简单,这样的处理也不会产生多次数据库查询。这样我们就实现了在 video 分类显示指定给 Video 分类的文章数量。只是要说明的是,我这里判断的 $category=='video', 这个小写的“video” 是分类的别名(slug)。

声明:本文采用BY-NC-SA协议进行授权。转载请注明转自:利用 query_posts() 函数实现 WordPress 按不同类别显示不同条数的文章

« »

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(Spamcheck Enabled)