5ucms论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 10929|回复: 1
打印 上一主题 下一主题

[钩子/函数] query_posts()函数 wp_reset_query()函数

[复制链接]

670

主题

785

帖子

8343

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8343
跳转到指定楼层
楼主
发表于 2021-5-29 09:33:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
制作wordpress主题的时候经常会用到query_posts()函数,通过它可以实现各种特殊的要求,如获得特定的文章日志、排除某一分类等即query_posts() 函数可以用来控制在主循环(Loop)中显示特定的日志。可能很多人对主循环不太理解,那么就举个栗子吧:

首页、存档页的这些文章都是在主循环中的。在不使用query_posts()函数控制的情况,首页、存档页等都是按照文章的发布时间列出你博客上所有已发布的文章,而如果你想控制哪些文章可以显示,哪些文章不显示,文章按照什么样的方法排序等,那么你就要用到query_posts()函数了。

使用此函数要做的就是在index.php或者其他模板文件中查找if (have_posts())或while (have_posts()),在前面添加query_posts函数即可。不过以上方式可能会导致首页无法分页,可以将query_posts函数改成这样的行式,详细代码如下

  1. <?php
  2. $args = array(
  3.     'cat' => 1,
  4.     'category_name' => 'wpfunc'
  5. );
  6. $args = array_merge($args, $wp_query->query); //这一行代码是必须的,不然不能分页
  7. query_posts($args);
  8. if( have_posts() ){
  9.     while( have_posts() ){
  10.         //获取下一篇文章的信息,并且将信息存入全局变量 $post 中
  11.         the_post();
  12.         }
  13. }?>
复制代码



语法结构

  1. <?php query_posts(‘cat=4′); ?> //只设置一个循环条件,显示类别ID为4的文章

  2. <?php query_posts(array(
  3.     'cat' => 1,
  4.     'category_name' => wpfunc
  5.     )
  6. );
  7. ?>
  8. //设置多个循环条件
复制代码


参数
cat:根据ID显示类别,多个分类用英文逗号隔开,ID前加负号’-‘表示排除该分类
category_name:根据别名显示类别,输出属于某个类别名的文章
tag:显示与某个标签相关的文章,输出某个标签的文章
posts_per_page:显示的文章数目,-1这个值,会显示所有的文章
author_name:根据作者显示文章数目
showposts:显示的文章数量
order:按时间顺序显示文章,包括ASC 和DESC(默认)
post_type:根据文章形式来显示文章


实例

cat

用法:
  1. <?php query_posts(‘cat=4′); ?>
复制代码

category_name

用法:
  1. <?php query_posts(‘category_name=wpfunc’); ?>
复制代码

tag

用法:
  1. <?php query_posts(‘tag=wordpress’); ?>
复制代码


//获得拥有任何这样的标签的文章(可以是拥有一个标签也可以是多个标签同时拥有)
  1. <?php query_posts(‘tag=wordpress,php’); ?>
复制代码


//获取拥有这三个标签的文章
  1. <?php query_posts(‘tag=wordpress+php+mysql’);  ?>
复制代码


//设定每页显示数量,默认是10,posts_per_page:
  1. <?php query_posts(‘posts_per_page=10’);  ?>
复制代码


//按作者名显示author_name:
  1. <?php query_posts(‘author_name=许小珂’);  ?>
复制代码


//排序方式 orderby
  1. orderby=author
  2. orderby=date
  3. orderby=category
  4. orderby=title
  5. orderby=modified
  6. orderby=modified
  7. orderby=menu_order
  8. orderby=parent
  9. orderby=ID
复制代码


//显示指定ID的内容 showposts
  1. <?php query_posts(‘showposts=5’);  ?>
复制代码



使用该函数后,要以wp_reset_query()函数结束
回复

使用道具 举报

670

主题

785

帖子

8343

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8343
沙发
 楼主| 发表于 2021-5-29 09:33:54 | 只看该作者
wp_reset_query()函数

开发wordpress主题经常会用到的wp_reset_query()函数,该函数使用在循环loop中,其作用是重置查询数据,一般与query_posts()配对出现,wprdpress强大的query_posts()函数设置loop的调用条件时,在语句结束必须使用wp_reset_query()函数清除查询数据,否则可能对该页面另外的数据调用结果产生影响,如无法正常调用,调用出错等;很多新手制作wordpress主题时,往往因为没有添加wp_reset_query()而出现各种问题。

  1. <?php
  2. $args = array(
  3.     // query_posts参数,具体参数可以参加官方文档
  4.     'cat' => 1,
  5.     'category_name' => 'wpfunc'
  6. );
  7. $args = array_merge($args, $wp_query->query); //这一行代码是必须的,不然不能分页
  8. query_posts($args);
  9. if( have_posts() ){
  10.     while( have_posts() ){
  11.         //获取下一篇文章的信息,并且将信息存入全局变量 $post 中
  12.         the_post();
  13.         }
  14. }
  15. wp_reset_query();
  16. ?>
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|5ucms.com

GMT+8, 2025-8-13 20:55 , Processed in 0.062500 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表