백엔드 개발 PHP 튜토리얼 wordpress 中强大的 query_posts()函数_PHP教程

wordpress 中强大的 query_posts()函数_PHP教程

Jul 13, 2016 am 10:38 AM
query wordpress 주인 기능 질문 ~의 그것에 대해 얘기

今天说说WordPress 的主查询函数 -query_posts(),因为我正在制作的主题里面多次用到了这个函数 。

 

query_posts()查询函数决定了哪些文章出现在WordPress 主 循环(loop)中,正因为如此,query_posts函数仅用于修改主页循环(Loop),而不是在页面上生成次级循环。如果你希望在主循环外另外生 成循环,应该新建独立的WP_Query对象,用这些对象生成循环。在主循环外的循环上使用query_posts会导致主循环运行偏差,并可能在页面上 显示出你不希望看到的内容。

 

query_posts()查询函数函数接收大量参数,格式与URL中的参数格式相同(如p=4表示ID为4的文章)。下面就举例说说query_posts函数的一些常用的语法格式。

1.从博客主页上排除某些分类目录

将以下代码添加到index.php文件中,使主页显示的文章可以来自除分类3以外的任何分类。

Php代码  收藏代码
  1.   if (is_home()) {  
  2.     query_posts("cat=-3");  
  3.   }  
  4. ?>  
 

你也可以多排除几个分类。

Php代码  收藏代码
  1.   if (is_home()) {  
  2.     query_posts("cat=-1,-2,-3");  
  3.   }  
  4. ?>  
 
2.查询指定文章

用以下语句检索某篇指定文章:

Php代码  收藏代码
  1. //获取ID值为5的文章  
  2. query_posts('p=5');  
  3. ?>  
 

如果你希望在查询语句中使用Read More功能,请将全局变量$more设为0。

Php代码  收藏代码
  1. //获取ID值为5的页面  
  2. query_posts('p=5');  
  3.   
  4. global $more;  
  5. //初始化$more  
  6. $more = 0;  
  7.   
  8. //循环查询到的结果  
  9. while (have_posts()) : the_post();  
  10. the_content('Read the full post ?');  
  11. endwhile;  
  12. ?>  
 
3.检索指定页面

用以下语句检索某篇指定页面:

Php代码  收藏代码
  1. query_posts('page_id=7'); //获取页面ID为7的页面  
  2. ?>  
 

或者

Php代码  收藏代码
  1. query_posts('pagename=about');  
  2. ?>  
 

检索子页面时,需要提供子页面及其父页面的别名,用斜线隔开两者。例如:

Php代码  收藏代码
  1. query_posts('pagename=parent/child');  
  2. ?>  
 

上面都是采取 query_posts($query_string) 的形式来调用该函数,下面介绍另一种方法,用数组传递参数变量。

Php代码  收藏代码
  1. query_posts(array(  
  2.   'cat' => 22,  
  3.   'year' => $current_year,  
  4.   'monthnum' => $current_month,  
  5.   'order' => 'ASC',  
  6. ));  
 

相比字符串方式,数组形式更加形象直观,不容易出错。

下面整理一些经常要用到的参数,有些是我用过的,有些则没有,算作归纳吧。

分类参数

只显示特定分类下的文章。

  • cat —— 必须使用分类ID
  • category_name
  • category_and —— 必须使用分类ID
  • category_in —— 必须使用分类ID
  • category_not_in —— 必须使用分类ID

根据ID显示单个分类

只显示来自某一个分类目录ID(以及该分类目录下的子分类目录)的文章:

Php代码  收藏代码
  1. query_posts('cat=4');  
 

根据分类名称显示单个分类

只显示来自某一个分类名称下的文章:

Php代码  收藏代码
  1. query_posts('category_name=Staff Home');  
 

根据ID显示多个分类

显示来自若干指定分类目录ID下的文章:

Php代码  收藏代码
  1. query_posts('cat=2,6,17,38');  
 

排除某一分类中的文章

显示除某一分类文章外的所有文章,被排除的分类ID以减号(’-')作为前缀。

Php代码  收藏代码
  1. query_posts('cat=-3');  
 

以上代码删除ID为3的分类中的文章。

 

处理多个分类

显示隶属于多个分类的文章。下面的代码可展示同时属于分类2和分类6的文章:

Php代码  收藏代码
  1. query_posts(array('category__and' => array(2,6)));  
 

如果希望显示分类2或分类6中的文章,可以使用上面介绍的cat,也可以使用category_in函数 (注意这里不会显示分类下子分类中的文章) :

Php代码  收藏代码
  1. query_posts(array('category__in' => array(2,6)));  
 

可以用下面这种方式排除多个分类中的文章:

Php代码  收藏代码
  1. query_posts(array('category__not_in' => array(2,6)));  
 

标签参数

显示特定标签下的文章。

  • tag —— 必须使用标签ID
  • tag_id —— 必须使用标签ID
  • tag_and —— 必须使用标签ID
  • tag_in —— 必须使用标签ID
  • tag_not_in —— 必须使用标签ID
  • tag_slug_and ——必须使用标签ID
  • tag_slug_in ——必须使用标签ID

 

获取某一标签中的文章

Php代码  收藏代码
  1. query_posts('tag=cooking');  
 

获取若干标签中任一标签中的文章

Php代码  收藏代码
  1. query_posts('tag=bread+baking+recipe');  
 

多个标签

显示同时属于ID为37和47的标签下的文章:

Php代码  收藏代码
  1. query_posts(array('tag__and' => array(37,47));  
 

若要显示ID为为37或47的标签下的文章,可以使用tag参数,也可以用tag_in:

Php代码  收藏代码
  1. query_posts(array('tag__in' => array(37,47));  
 

显示的文章既不属于标签37,也不属于标签47:

Php代码  收藏代码
  1. query_posts(array('tag__not_in' => array(37,47));  
 

tag_slug_in与tag_slug_and工作方式几乎一致,不同之处在于相匹配的别名不同。

 

作者参数

你也可以根据作者来选择文章。

  • author=3
  • author=-3 ——排除ID为3的作者所发表的文章
  • author_name=Harriet

注意:author_name运行在user_nicename字段上,同时author运行在author id字段上。

显示ID为1的作者所发表的所有页面,以标题顺序排列页面,页面列表上方无置顶文章:

Php代码  收藏代码
  1. query_posts('caller_get_posts=1&author=1&post_type=page&post_status=publish&orderby=title&order=ASC');  
 

文章&页面参数

检索单篇文章或页面。

  • ‘p’ => 27 —— 通过文章ID显示该文章
  • ‘name’ => ‘about-my-life’ —— 对某篇文章的查询,查询中含有文章别名
  • ‘page_id’ => 7 —— 对ID为7的页面的查询
  • ‘pagename’ => ‘about’ —— 注意,这不是页面标题,而是页面路径
  • 用’posts_per_page’ => 1 – use ‘posts_per_page’ => 3 展示3篇文章。用’posts_per_page’ => -1展示所有文章
  • ‘showposts’ => 1 – use ‘showposts’ => 3 展示3篇文章。用’showposts’ => -1展示所有文章。已弃用。
  • ‘post__in’ => array(5,12,2,14,7) —— 指定希望检索的文章ID
  • ‘post__not_in’ => array(6,2,8) ——排除不希望检索的文章ID
  • ‘post_type’ => ‘page’ ——返回页面;默认值为post;可用值包括any, attachment, page, post或revision。any可检索到除修订版外的所有页面类型。
  • ‘post_status’ => ‘publish’ —— 返回已发布页面。可用值还包括pending, draft, future, private, trash。关于inherit请见get_children。trash状态新增于WordPress  2.9。
  • ‘post_parent’ => 93 —— 返回页面93的子页面。

 

置顶文章参数

置顶文章功能引入于WordPress 2.7。在查询中,被设为“置顶”的文章会显示在其它文章之前,除非该文章已经被caller_get_posts=1 参数排除。

  • array(‘post__in’=>get_option(‘sticky_posts’)) —— 返回所有置顶文章的数组
  • caller_get_posts=1 —— 排除返回的文章上方的置顶文章,但在返回文章列表时,以自然顺序将曾经置顶的文章安插在列表中。

 

返回第一篇置顶文章

Php代码  收藏代码
  1. $sticky=get_option('sticky_posts') ;  
  2. query_posts('p=' . $sticky[0]);  
 

Php代码  收藏代码
  1. $args = array(  
  2. 'posts_per_page' => 1,  
  3. 'post__in' => get_option('sticky_posts'),  
  4. 'caller_get_posts' => 1  
  5. );  
  6. query_posts($args);  
 

注意:第二种方法只能返回最新发表的置顶文章;若当前无置顶文章,返回最新发表文章。

 

返回第一篇置顶文章;若无,则不返回任何内容

Php代码  收藏代码
  1. $sticky = get_option('sticky_posts');  
  2. $args = array(  
  3. 'posts_per_page' => 1,  
  4. 'post__in' => $sticky,  
  5. 'caller_get_posts' => 1  
  6. );  
  7. query_posts($args);  
  8. if($sticky[0]) {  
  9. // insert here your stuff...  
  10. }  
 

从查询中排除所有置顶文章

Php代码  收藏代码
  1. query_posts(array("post__not_in" =>get_option("sticky_posts")));  
 

返回某一分类下所有文章,但不在文章列表上方显示置顶文章。所有设为“置顶”的文章以正常顺序(如日期顺序)显示

Php代码  收藏代码
  1. query_posts('caller_get_posts=1&posts_per_page=3&cat=6');  
 

返回某一分类下所有文章,完全不显示置顶文章,保留分页

Php代码  收藏代码
  1.   $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;  
  2.   $sticky=get_option('sticky_posts');  
  3.   $args=array(  
  4.     'cat'=>3,  
  5.     'caller_get_posts'=>1,  
  6.     'post__not_in' => $sticky,  
  7.     'paged'=>$paged,  
  8.   );  
  9.   query_posts($args);  
  10. ?>  
 

时间参数

检索特定时间段内发表的文章。

  • hour= -hour (时,-范围从0到23)
  • minute= – minute (分,-范围从0到60)
  • second= – second (秒,-范围从0到60)
  • day= – day of the month (日,-范围从1到31)
  • monthnum= – month number (月,-范围从1到12)
  • year= – 4 digit year (年,如2009)
  • w= – week of the year(一年中的第几周,-范围从0到53),使用 MySQL WEEK command Mode=1命令

 

返回最近发表的文章

Php代码  收藏代码
  1. $today = getdate();    
  2. query_posts('year=' .$today["year"] .'&monthnum=' .$today["mon"] .'&day=' .$today["mday"] );  
 

返回12月20日发表的文章

Php代码  收藏代码
  1. query_posts(monthnum=12&day=20' );  
 

返回2009年3月1日到3月15日之间发表的文章

Php代码  收藏代码
  1.   //based on Austin Matzko's code from wp-hackers email list  
  2.   function filter_where($where = '') {  
  3.     //posts for March 1 to March 15, 2009  
  4.     $where .= " AND post_date >= '2009-03-01' AND post_date 
  5.     return $where;  
  6.   }  
  7.   add_filter('posts_where', 'filter_where');  
  8.   query_posts($query_string);  
  9. ?>  
 

返回最近30天内发表的文章

Php代码  收藏代码
  1.   //based on Austin Matzko's code from wp-hackers email list  
  2.   function filter_where($where = '') {  
  3.     //posts in the last 30 days  
  4.     $where .= " AND post_date > '" . date('Y-m-d', strtotime('-30 days')) . "'";  
  5.     return $where;  
  6.   }  
  7.   add_filter('posts_where', 'filter_where');  
  8.   query_posts($query_string);  
  9. ?>  
 

返回过去30天到过去60天内发表的文章

Php代码  收藏代码
  1.   //based on Austin Matzko's code from wp-hackers email list  
  2.   function filter_where($where = '') {  
  3.     //posts 30 to 60 days old  
  4.     $where .= " AND post_date >= '" . date('Y-m-d', strtotime('-60 days')) . "'" . " AND post_date 
  5.     return $where;  
  6.   }  
  7.   add_filter('posts_where', 'filter_where');  
  8.   query_posts($query_string);  
  9. ?>  
 

分页参数

  • paged=2 ——显示点击“较早的日志”链接后出现在第二页中的文章
  • posts_per_page=10 —— 每页所显示的文章数量;若值为-1,显示所有文章。
  • order=ASC —— 按时间顺序显示文章,若值为DESC则按逆向时间顺序显示文章(默认)

 

offset(偏移)参数

通过offset参数,你可以移除或忽略正常情况下被查询集中的一篇或多篇初始文章。

以下显示最近一篇文章之后的5篇文章:

Php代码  收藏代码
  1. query_posts('posts_per_page=5&offset=1');  
 

排序参数

  • orderby=author
  • orderby=date
  • orderby=category ——注意:该参数不能用于WordPress 2.8,可能已经被废止
  • orderby=title
  • orderby=modified
  • orderby=menu_order
  • orderby=parent
  • orderby=ID
  • orderby=rand
  • orderby=meta_value —— meta_key=some value语句也应出现在查询参数中
  • orderby=none – no order —— (新增于 WP 2.8)
  • orderby=comment_count ——(新增于 WP 2.9)

 

顺序参数

决定以升序或降序排列排序参数

  • order=ASC —— 升序,从最低值到最高值
  • order=DESC —— 降序,从最高值到最低值

 

自定义字段参数

根据自定义关键字或值检索文章(或页面)。

  • meta_key=
  • metavalue=
  • meta_compare= —— 用以测试metavalue=的操作符,默认值为 ‘=’,其它可能的值包括’!=’、 ‘>’、’>=’、 ‘

返回关键字为 ‘color’ 且值为’blue’的文章:

Php代码  收藏代码
  1. query_posts('meta_key=color&metavalue=blue');  
 

返回自定义字段关键字为’color’的文章,无论自定义字段值为何:

Php代码  收藏代码
  1. query_posts('meta_key=color');  
 

返回自定义字段值为’color’的文章,无论关键字为何:

Php代码  收藏代码
  1. query_posts('metavalue=color');  
 

返回自定义字段值为’green’的页面,无论自定义字段关键字为何:

Php代码  收藏代码
  1. query_posts('post_type=page&metavalue=green');  
 

返回自定义关键字为’color’、自定义字段值不为’blue’的文章和页面:

Php代码  收藏代码
  1. query_posts('post_type=any&meta_key=color&meta_compare=!=&metavalue=blue');  
 

返回自定义字段关键字为’miles’、自定义字段值小于等于22的文章。注意,字段值99会被看做大于字段值100,因为数据是以字符串形式而不是数字形式存储的。

query_posts(&#39;meta_key=miles&meta_compare=<=&metavalue=22&#39;);
로그인 후 복사

 

联合参数

你可能已经从上面有些例子中看出来了,可以用&符号连接不同参数,如:

Php代码  收藏代码
  1. uery_posts('cat=3&year=2004');  
 

显示主页上、当前月份发表的、隶属于分类13下的文章:

Php代码  收藏代码
  1. if (is_home()) {  
  2.   query_posts($query_string . '&cat=13&monthnum=' . date('n',current_time('timestamp')));  
  3. }  
 

在WP 2.3中,以下参数联合会返回同时属于分类1和分类3的两篇文章,以文章标题降序排列:

Php代码  收藏代码
  1. query_posts(array('category__and'=>array(1,3),'posts_per_page'=>2,'orderby'=>title,'order'=>DESC));  
 

在WP 2.3和WP 2.5中,以下参数联合本应返回属于分类1且带有“apples”标签的文章:

Php代码  收藏代码
  1. query_posts('cat=1&tag=apples');  
 

但由于一个bug,代码没能显示出正常结果。有一个解决办法:利用+号查找多个标签:

Php代码  收藏代码
  1. query_posts('cat=1&tag=apples+apples');  
 

这就显示出我们希望显示的结果了。

 

使用技巧

设置>阅读中的“博客页面最多显示”参数会影响你的查询结果,要覆盖设置>阅读中的设置,需要在标签中添加’posts_per_page’ 参数。例如:

Php代码  收藏代码
  1. query_posts('category_name=The Category Name&posts_per_page=-1');  //returns ALL from the category  
 

 

注意:query_posts函数会改写并取代页面的主查询。为谨慎起见,请不要将query_posts用作其它用途。

 

 

来源: http://www.zuluo.net/2012/2012-01/wordpress-query_posts.html

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/735067.htmlTechArticle今天说说WordPress的主查询函数-query_posts(),因为我正在制作的主题里面多次用到了这个函数。 query_posts()查询函数决定了哪些文章出现在Wo...
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP 대 Flutter: 모바일 개발을 위한 최고의 선택 PHP 대 Flutter: 모바일 개발을 위한 최고의 선택 May 06, 2024 pm 10:45 PM

PHP와 Flutter는 모바일 개발에 널리 사용되는 기술입니다. Flutter는 크로스 플랫폼 기능, 성능 및 사용자 인터페이스가 뛰어나며 고성능, 크로스 플랫폼 및 맞춤형 UI가 필요한 애플리케이션에 적합합니다. PHP는 성능이 낮고 크로스 플랫폼이 아닌 서버 측 애플리케이션에 적합합니다.

golang 함수에서 새 함수를 동적으로 생성하기 위한 팁 golang 함수에서 새 함수를 동적으로 생성하기 위한 팁 Apr 25, 2024 pm 02:39 PM

Go 언어는 클로저와 리플렉션이라는 두 가지 동적 함수 생성 기술을 제공합니다. 클로저는 클로저 범위 내의 변수에 대한 액세스를 허용하며 리플렉션은 FuncOf 함수를 사용하여 새 함수를 생성할 수 있습니다. 이러한 기술은 HTTP 라우터를 사용자 정의하고 고도로 사용자 정의 가능한 시스템을 구현하며 플러그 가능한 구성 요소를 구축하는 데 유용합니다.

C++ 함수 이름 지정 시 매개변수 순서에 대한 고려 사항 C++ 함수 이름 지정 시 매개변수 순서에 대한 고려 사항 Apr 24, 2024 pm 04:21 PM

C++ 함수 이름 지정에서는 가독성을 높이고 오류를 줄이며 리팩토링을 용이하게 하기 위해 매개변수 순서를 고려하는 것이 중요합니다. 일반적인 매개변수 순서 규칙에는 작업-객체, 개체-작업, 의미론적 의미 및 표준 라이브러리 준수가 포함됩니다. 최적의 순서는 함수의 목적, 매개변수 유형, 잠재적인 혼동 및 언어 규칙에 따라 달라집니다.

Java로 효율적이고 유지 관리 가능한 함수를 작성하는 방법은 무엇입니까? Java로 효율적이고 유지 관리 가능한 함수를 작성하는 방법은 무엇입니까? Apr 24, 2024 am 11:33 AM

효율적이고 유지 관리 가능한 Java 함수를 작성하는 핵심은 단순함을 유지하는 것입니다. 의미 있는 이름을 사용하세요. 특별한 상황을 처리합니다. 적절한 가시성을 사용하십시오.

Excel 함수 수식의 전체 모음 Excel 함수 수식의 전체 모음 May 07, 2024 pm 12:04 PM

1. SUM 함수는 열이나 셀 그룹의 숫자를 합하는 데 사용됩니다(예: =SUM(A1:J10)). 2. AVERAGE 함수는 열이나 셀 그룹에 있는 숫자의 평균을 계산하는 데 사용됩니다(예: =AVERAGE(A1:A10)). 3. COUNT 함수, 열이나 셀 그룹의 숫자나 텍스트 수를 세는 데 사용됩니다. 예: =COUNT(A1:A10) 4. IF 함수, 지정된 조건을 기반으로 논리적 판단을 내리고 결과를 반환하는 데 사용됩니다. 해당 결과.

C++ 함수 기본 매개변수와 가변 매개변수의 장단점 비교 C++ 함수 기본 매개변수와 가변 매개변수의 장단점 비교 Apr 21, 2024 am 10:21 AM

C++ 함수에서 기본 매개변수의 장점에는 호출 단순화, 가독성 향상, 오류 방지 등이 있습니다. 단점은 제한된 유연성과 명명 제한입니다. 가변 매개변수의 장점에는 무제한의 유연성과 동적 바인딩이 포함됩니다. 단점은 더 큰 복잡성, 암시적 유형 변환 및 디버깅의 어려움을 포함합니다.

C++ 함수 예외 고급: 사용자 정의된 오류 처리 C++ 함수 예외 고급: 사용자 정의된 오류 처리 May 01, 2024 pm 06:39 PM

C++의 예외 처리는 특정 오류 메시지, 상황별 정보를 제공하고 오류 유형에 따라 사용자 지정 작업을 수행하는 사용자 지정 예외 클래스를 통해 향상될 수 있습니다. 특정 오류 정보를 제공하려면 std::Exception에서 상속된 예외 클래스를 정의하세요. 사용자 정의 예외를 발생시키려면 throw 키워드를 사용하십시오. try-catch 블록에서 Dynamic_cast를 사용하여 발견된 예외를 사용자 지정 예외 유형으로 변환합니다. 실제 경우 open_file 함수는 FileNotFoundException 예외를 발생시킵니다. 예외를 포착하고 처리하면 보다 구체적인 오류 메시지가 제공될 수 있습니다.

사용자 정의 PHP 함수와 사전 정의된 함수의 차이점은 무엇입니까? 사용자 정의 PHP 함수와 사전 정의된 함수의 차이점은 무엇입니까? Apr 22, 2024 pm 02:21 PM

사용자 정의 PHP 함수와 사전 정의된 함수의 차이점은 다음과 같습니다. 범위: 사용자 정의 함수는 정의 범위로 제한되는 반면, 사전 정의된 함수는 스크립트 전체에서 액세스할 수 있습니다. 정의 방법: 사용자 정의 함수는 function 키워드를 사용하여 정의되는 반면, 사전 정의된 함수는 PHP 커널에 의해 정의됩니다. 매개변수 전달: 사용자 정의 함수는 매개변수를 수신하지만 사전 정의된 함수에는 매개변수가 필요하지 않을 수 있습니다. 확장성: 필요에 따라 사용자 정의 함수를 생성할 수 있으며 사전 정의된 함수는 내장되어 있어 수정할 수 없습니다.

See all articles