Query_posts语句是WordPress最实用的语句之一。 正是在query_posts的作用下,WordPress的Loop循环才能够调用并显示所有文章内容。 Query_posts的魅力在于,它可以根据你的要求,通过各种各样的方式灵活地检索并过滤日志或页面。你可以用query_posts进行简单的文章抓取,可以只抓取一篇,也可以抓取上百篇。 而说到复杂点的用法,你甚至可以利用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...?>

6. 置顶文章

WordPress在 2.7版本中引入了文章置顶功能。 这使用户选定的文章能够不受时间的排序标准,总是显示在文章列表的最上方。 实现文章置顶的标准操作是,将这些文章添加到所返回数据列表的开始部分。 你可能需要对置顶文章过滤器函数进行以下操作:

默认情况——调用最先添加的置顶文章

只调用置顶文章(适用于杂志型主题)

按正常情况调用文章,忽略文章的置顶状态

要调用所有置顶文章:

<?php$query = array( 'post__in'=>get_option('sticky_posts'));$queryObject = new WP_Query($query);// The Loop...?>

要忽略置顶文章——让所有文章按正常排序方式显示:

<?php$query = array( 'post__not_in' => get_option('sticky_posts'));$queryObject = new WP_Query($query);// The Loop...?>

7. 抓取所有文章

你可以用几种不同的方法在网站地图和存档页等需要显示所有已发布文章的地方调用所有文章。 要调用所有已发布的文章,可以使用下面的这段代码:

<?php// showposts is the traditional way of doing it, but it's now deprecated so could be removed at any time// there are still lots of themes that use showposts (including my own) so it's worth switching over as soon as you can just in case$query = 'showposts=-1';$queryObject = new WP_Query($query);// The Loop...// the new way to do it$query = 'posts_per_page=-1';$queryObject = new WP_Query($query);// The Loop...// must admit I have never tried this myself but according to the documentation it will work 10个query_posts使用技巧$query = 'nopaging=true';$queryObject = new WP_Query($query);// The Loop...?>

8. 钩子(hooks)和过滤器(filter)

Query_posts函数一个鲜有人知的功能就是,你可以用它勾入已生成的查询。 这种行为可能有些冒险,不过实用价值很高。 WordPress有一些可以用来修改查询要素的过滤器(filter)函数。根据对WordPress filter函数的介绍,可以用在文章查询和调用上的filter包括:

post_limits

应用于查询的LIMIT语句,该语句可返回日志数组

posts_distinct

允许插件将DISTINCTROW语句加入查询,该查询可返回日志数组

posts_groupby

应用于查询的GROUP BY语句,该语句可返回日志数组(通常情况下该数组为空)

posts_join_paged

应用于查询的JOIN语句。在计算出分页后,该查询返回日志列表(分页并不影响JOIN语句,因此该函数相当于posts_join)

posts_orderby

应用于查询的ORDER BY语句,该语句可返回日志数组

posts_request

在执行查询前,应用于将返回日志数组的整个SQL查询

posts_where_paged

应用于查询的WHERE语句。在计算出分页后,该查询返回日志数组(分页并不影响WHERE语句,因此该函数相当于posts_where)

posts_join

应用于查询的JOIN语句,该语句可返回日志数组 该过滤器函数与post_where函数一并为JOIN语句添加了一个数据库表。

posts_where

应用于查询的WHERE语句,该语句可返回日志数组

Query_posts参数数量极多且复杂,大多数人没有必要了解这些。但有时如果你想用数字型meta值来为一次查询排序,却发现meta值是字符串字段类型的(即,查询的顺序是1, 10, 11, 2, 23, 3,而你希望是按数字大小来排序:1,2,3,10,11,23)。 这时你可以用下面的代码达到效果:

add_filter ('posts_orderby', 'bm_featureHomeFilterOrder');function bm_featureHomeFilterOrder ($order = '') { global $wpdb; $field = $wpdb->postmeta . '.meta_value'; $order = str_replace($field, 'CAST(' . $field . ' AS UNSIGNED)', $order); return $order;}

9. 文章回转

文章回转功能使用户可以运行“WordPress循环”后重设主循环,然后再重新运行主循环。 调用文章回转也很容易。

<?php rewind_posts(); ?>

那么要使用它你需要:

<?php$query = 'posts_per_page=10';$queryObject = new WP_Query($query);// The Loop...rewind_posts();// The Loop...?>

10. 不显示某些文章(隐藏重复内容)

最后这个方法曾经在WebLogToolsCollection上出现过。 其原理是当用户在某一个页面上使用多个WordPress循环时,用代码阻止重复内容被链接。例如,当你的网站首页显示了最新发表的日志后会继续显示分类,如果隐藏重复内容,分类下将隐藏已经显示的最新发表的日志, 从而让更多内容显示在主页上。这是WebLogToolsCollection上的原始代码:

$bmIgnorePosts = array();/** * add a post id to the ignore list for future query_posts */function bm_ignorePost ($id) { if (!is_page()) { global $bmIgnorePosts; $bmIgnorePosts[] = $id; }}/** * reset the ignore list */function bm_ignorePostReset () { global $bmIgnorePosts; $bmIgnorePosts = array();}/** * remove the posts from query_posts */function bm_postStrip ($where) { global $bmIgnorePosts, $wpdb; if (count($bmIgnorePosts) > 0) { $where .= ' AND ' . $wpdb->posts . '.ID NOT IN(' . implode (',', $bmIgnorePosts) . ') '; } return $where;}add_filter ('posts_where', 'bm_postStrip');

下面是改进后的:

<?php// set the query$query = 'posts_per_page=10';// loop 1 - display most recent 10 posts$queryObject = new WP_Query($query);if ($queryObject->have_posts()) { while ($queryObject->have_posts()) { bm_ignorePost($queryPost->post->ID); $queryObject->the_post(); the_title(); the_content(); }}// loop 2 - same query, get the next 10 posts$queryObject = new WP_Query($query);if ($queryObject->have_posts()) { while ($queryObject->have_posts()) { bm_ignorePost($queryPost->post->ID); $queryObject->the_post(); the_title(); the_content(); }}?>

  • 由 主机教程网 https://xyy1.com 首发表于 主机教程网 https://2bcd.com/

  • 原文链接:https://2bcd.com/67050.html

10个WordPress的query_posts语句使用技巧相关推荐

  1. wordpress使用query_posts()函数获取指定文章

    wordpress使用query_posts()函数获取指定文章 1.利用query_posts()函数 query_posts()是wordpress用来显示内容的最容易的方法之一,它可以通过各种灵 ...

  2. 10款WordPress的插件让你的网站的移动体验

    随着科技的不断发展,需要改变营销策略的一个企业就变得非常重要.你不能指望用你的营销工具来留住你的客户.智能手机和平板电脑已经改变了消费者的行为方式.现在,人们甚至不想去他们的电脑或笔记本电脑,以检查产 ...

  3. 10大申请攻略+套磁技巧助你完胜美研申请

    摘要:很多美国研究生申请的小伙伴对于申请过程其实并不是很清楚,甚至对于套磁这个最重要的环节也不甚了解!今天就带着大家一起来看看美国研究生申请的10大申请攻略+套磁技巧助你完胜美研申请 1.一般录取比例 ...

  4. python if else break_Python的for和break循环结构中使用else语句的技巧

    在Python中的while或者for循环之后还可以有else子句,作用是for循环中if条件一直不满足,则最后就执行else语句. for i in range(5): if i == 1: pri ...

  5. 资源宝分享wordpress主题后门检测清理技巧

    资源宝分享wordpress主题后门检测清理技巧 更多文章查看资源宝博客:www.httple.net 但是对于wordpress漏洞并不是所有人都很了解,往往在网站运营过程中没能注意网站的安全. 网 ...

  6. c语言while语句1阶层加到10阶层,用C++编程:1的阶层加到10的阶层,使用For语句,还有While和Do While语句编程!!...

    用C++编程:1的阶层加到10的阶层,使用For语句,还有While和Do While语句编程!! 來源:互聯網  2009-08-15 20:20:09  評論 分類: 電腦/網絡 >> ...

  7. 10款WordPress头像插件

    http://paranimage.com/10-wordpress-plugins-for-avatar/ 多试试:多试试-计算机技术与软件 10款WordPress头像插件 要让你的访客或留言者感 ...

  8. 10个绕过反病毒的恶意用户技巧

    原文:https://blog.netspi.com/10-evil-user-tricks-for-bypassing-anti-virus/ 介绍 译者注:很多不通顺的语句改掉了,还有反病毒解决方 ...

  9. wordpress汉化技巧_保护您的WordPress网站的6个技巧

    wordpress汉化技巧 WordPress已经为超过30%的互联网提供支持,是世界上增长最快的内容管理系统(CMS),不难看出为什么. 通过编码和插件可以提供大量的自定义功能,一流的SEO以及博客 ...

最新文章

  1. 机器学习基础专题:样本选择
  2. 你给需求文档,AI就能帮你开发安卓App
  3. python3 执行系统命令
  4. java数据结构实验一顺序表,java数据结构实验代码之升序顺序表
  5. [洛谷P1040] 加分二叉树
  6. 迷失的毕业生——小余答疑(一)
  7. 字符串p型编码(信息学奥赛一本通-T1145)
  8. Linux系统基本概念
  9. linux编程之指针
  10. js基础代码大全_关于前端业务代码的一些见解
  11. 【Java程序设计】Java基础类库简介
  12. 记录一次使用Aliyun OSS 存图片
  13. 冲量在线荣获STIF2021国际科创节2021年度技术先锋奖
  14. 阿里互联互通再下一城,开放生态缔造新的产业蓝海?
  15. U盘无法格式化(提示U盘文件系统变为了RAW格式)【一般应用】
  16. 设置RecyclerView某Item背景色
  17. python VS matlab: reshape/max/matrix index等方法比较
  18. iPhone的全新创意 变身成收音机
  19. 如何用大学生身份申请GitHub学生包,免费使用github copilot
  20. 阿翔编程学-WebService介绍及使用

热门文章

  1. ISIC数据集下载(问题解决)
  2. windows Android SDK工具安装
  3. Linux下的进程控制原语【pid_t,fork,exec,wait,waitpid,getpid,kill,pasue,sleep,signal】
  4. redis分布式集群数据库搭建
  5. ICASSP2023论文解读|如何检测会议记录中的待办事项?
  6. 零点工作室暑假集训(AtCoder--ABC248)
  7. 数学是知识,哲学是智慧
  8. android ui的几个概念:px,dip(dp),sp,dpi,分辨率等
  9. 在Linux中修改打开文件数量和进程数量限制的3种方法
  10. DMotion - 基于DOTS的动画框架和状态机