你未必知道的query_posts使用技巧

Query_posts语句是WordPress最实用的语句之一。 正是在query_posts的作用下,WordPress的Loop循环才能够调用并显示所有文章内容。 Query_posts的魅力在于,它可以根据你的要求,通过各种各样的方式灵活地检索并过滤日志或页面。

你可以用query_posts进行简单的文章抓取,可以只抓取一篇,也可以抓取上百篇。 而说到复杂点的用法,你甚至可以利用query_posts来查询某一分类目录下某个作者发表的、带有某个标签的特定数量文章….

WordPress中文手册上有对query_posts函数的介绍,不过下面要介绍的是一些更详细更有趣的用法。

1.注意事项
首先要注意的是,使用query_posts的最好方法….就是不要用它。 Query_posts中说到: query_posts函数仅用于修改主页循环(Loop),而不是一种在页面上生成次级循环的手段。如果你希望在主循环外另外生成循环,应该新建独立的WP_Query对象,用这些对象生成循环。在主循环外的循环上使用query_posts会导致主循环运行偏差,并可能在页面上显示出你不希望看到的内容。

最恰当的方法是使用query查询类。

<?php
$query = 'posts_per_page=10';
$queryObject = new WP_Query($query);
// The Loop...
if ($queryObject->have_posts())
{ while ($queryObject->have_posts())
{ $queryObject->the_post(); the_title(); the_content();
} } ?>

2. 不同调用方法
传统的文章调用方法是以查询字符串形式传递query_posts参数(如variable1=value1&variable2=value2&...),不过后来有了新方法——用数组来设置查询参数。

<?php
// GOOD
// select 10 posts from category 1
$query = 'posts_per_page=10&cat=1';
$queryObject = new WP_Query($query);
// The Loop...
// BETTER
$query = array ( 'posts_per_page' => 10,'cat' => 1 );
$queryObject = new WP_Query($query);
// The Loop...
?>当然,使用哪种方法完全由个人习惯决定,不过我认为用数组更为方便,原因如下:

便于阅读
可以利用if语句更轻松地给数组添加条件,以动态生成查询
一些查询参数(某些使用频率较低的参数,如分类参数和标签参数)需要被传递数组
你可以将函数调用以参数的形式传递

3. 关于日志顺序
默认情况下WordPress日志是按日期顺序排列的,这也是大多数人的需求,不过如果能更改默认的排列顺序那就更好了。 例如你可以随意调用几篇日志,让它们显示在侧边栏。 WordPress 2.9引入了以评论的数量多寡给文章排序的功能,这样就可以更方便地向访客显示最受欢迎的文章….不过这里为了使用query_posts,我们假设一下不使用WordPress的这个功能。

<?php
// select posts ordered by comment_count
$query = 'orderby=comment_count';
$queryObject = new WP_Query($query);
// The Loop...
?>

4. Meta值
Post meta函数的实用性也很强, 我们可以利用下面的代码来显示最受欢迎的文章:

<?php
// grab posts by post count ordered in descending order
(most votes first)
$query = 'meta_key=vote_count&orderby=meta_value&order=DESC';
$queryObject = new WP_Query($query);
// The Loop...
?>

5. 日志? 页面? 附件?
你可以按文章类型调用自己想要的日志、页面或附件。 对附件的调用可能是最有趣但同时被使用频率也是最低的一个。 利用下面的代码(与上文中提到的顺序参数),你就可以根据自己的喜好在网站上显示各种媒体文件了:

<?php
// grab 1 random attachment
$query = 'post_type=attachment&orderby=rand&posts_per_page=1';
$queryObject = new WP_Query($query);
// The Loop...
?>

相关文章

我想将wordpress的默认接口路由改掉,愿意是默认的带一个 wp...
wordpress自定义分类法之后,我看到链接都自动在后面添加了一...
事情是这样的,我用 get_post_type 函数创建了一个自定义分类...
最近网站莫名其妙的被顶上了,过一个多小时,就注册一个账号...
最近服务器要到期了,就想着把网站转移到另外一台服务器,本...
今天在写wordpress的接口,然后碰到个奇怪的问题,怎么访问都...