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... ?> (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|