【企业主题制作热身篇:query_posts函数】
WP的函数有许多,之所以要特别讲这个函数是因为许多地方都要用到它,制作企业主题时输出CMS风格的文章列表时也要用到它,例如下面这种效果:
通过本贴的教程大家也可以制作出这种效果,用WP做CMS完全有可能
query_posts()函数放在主循环之前,具体用法如下:
【query_posts()函数的参数】
分类参数:
只显示特定分类下的文章。
cat :分类ID,如果是负数,则为不显示该分类文章;如果为正数,则只显示该分类文章。
category_name:分类名称
category__and:多个分类ID
category__in: 分类ID,只显示该分类文章,子分类的都不显示。
category__not_in :分类ID,不显示该分类的文章。
标签参数:
显示特定标签下的文章。
tag:标签ID,如果是负数,则为不显示该标签下文章;如果为正数,则只显示该标签下的文章。
tag_id:标签ID
tag__and:多个标签ID
tag__in:标签ID,只显示该标签下的文章。
tag__not_in:标签ID,不显示该标签下的文章。
tag_slug__and:多个标签别名
tag_slug__in:标签别名
作者参数:
你也可以根据作者来选择文章。
author:作者ID,如果是负数,则为不显示该作者下文章;如果为正数,则只显示该作者下的文章。
author_name:作者昵称
文章与页面参数:
检索单篇文章或页面。
p:根据文章ID显示文章
name:根据文章别名显示文章
page_id:页面ID
pagename:页面别名
posts_per_page:文章显示数量,-1为全部
showposts:指定多少个文章后开始翻页,不指定该参数则读取后台设置→阅读设置→博客页面至多显示
post__in:指定希望检索的文章ID
post__not_in:排除不希望检索的文章ID
post_type:页面类型,默认值为post;可用值包括any、attachment、page、post或revision。any可检索到除修订版外的所有页面类型。
post_status:可用值有publish、pending、draft、future、private、trash。最常用的是publish,用来限制私密文章。
post_parent:返回指定ID文章的子页面。
置顶文章参数:
post__in:如果值为get_option(‘sticky_posts’)时,则返回所有置顶文章的数组
返回第一篇置顶文章:
$args = array(
'posts_per_page' => 1,
'post__in' => get_option('sticky_posts'),
'caller_get_posts' => 1
);
query_posts($args);
时间参数:
检索特定时间段内发表的文章。
hour:小时,范围从0到23
minute:分钟,范围从0到60
second:秒,范围从0到60
day:日,范围从1到31
monthnum:月,范围从1到12
year:年,如2012
w:一年中的第几周,范围从0到53
offset(偏移)参数:
排除Loop循环中出现的第一篇文章,以下显示最近一篇文章之后的5篇文章:
query_posts('posts_per_page=5&offset=1');
排序参数:
orderby=author 按作者排序
orderby=date 按日期排序
orderby=title 按名称排序
orderby=modified 按修改时间排序
orderby=ID 按ID排序
orderby=rand 随机排序
orderby=comment_count 按评论数排序
order=ASC 升序,从最低值到最高值
order=DESC 降序,从最高值到最低值
自定义字段参数:
根据自定义关键字或值检索文章(或页面)。
meta_key=
meta_value=
meta_compare= 用以测试meta_value=的操作符,默认值为 ‘=’,其它可用的值包括’!=’、 ‘>’、’>=’、 ‘<’或 ‘<=’ 。
返回关键字为 ‘color’ 且值为’blue’的文章:
query_posts('meta_key=color&meta_value=blue');
返回自定义字段关键字为’color’的文章,无论自定义字段值为何:
query_posts('meta_key=color');
【query_posts()函数用法】
在Loop循环(前面说的主循环)之前插入以下代码:
$args = array(
'category__in' => 2,
);
query_posts($args);
$args数组中可以根据自己的需要指定任意数量的参数,这样主循环里就会按照你的要求输出文章。
如果需要分页功能,在数组之前必须加入代码:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
【实现本楼图片中的效果一般不使用query_posts函数】
query_posts()函数仅用于修改主页循环(例如分类页中的循环),而不是一种在页面上生成次级循环的手段(例如本楼图片中的效果)。如果你希望在主循环外另外生成循环,应该新建独立的WP_Query对象,用这些对象生成循环。在主循环外的循环上使用query_posts()会导致主循环运行偏差,并可能在页面上显示出你不希望看到的内容。
【WP_Query()函数】
WP_Query()函数可以用在主循环之外,并创建自己的Loop,WP_Query()函数的参数与query_posts()函数一样,具体用法如下:
首先创建一个变量,我们以显示最新发表的10个文章为例:
$recentPosts = new WP_Query();
$recentPosts->query('showposts=10');
while循环中我们这样调用:
<?php while ($recentPosts->have_posts()) : $recentPosts->the_post(); ?>
【重置循环】
使用query_posts()函数来设置Loop循环的查询条件,必须使用wp_reset_query()函数来重置query,否则就有可能造成后面的循环运行偏差。
wp_reset_query()函数一般添加到主循环的末尾。
WP的函数有许多,之所以要特别讲这个函数是因为许多地方都要用到它,制作企业主题时输出CMS风格的文章列表时也要用到它,例如下面这种效果:
通过本贴的教程大家也可以制作出这种效果,用WP做CMS完全有可能
query_posts()函数放在主循环之前,具体用法如下:
【query_posts()函数的参数】
分类参数:
只显示特定分类下的文章。
cat :分类ID,如果是负数,则为不显示该分类文章;如果为正数,则只显示该分类文章。
category_name:分类名称
category__and:多个分类ID
category__in: 分类ID,只显示该分类文章,子分类的都不显示。
category__not_in :分类ID,不显示该分类的文章。
标签参数:
显示特定标签下的文章。
tag:标签ID,如果是负数,则为不显示该标签下文章;如果为正数,则只显示该标签下的文章。
tag_id:标签ID
tag__and:多个标签ID
tag__in:标签ID,只显示该标签下的文章。
tag__not_in:标签ID,不显示该标签下的文章。
tag_slug__and:多个标签别名
tag_slug__in:标签别名
作者参数:
你也可以根据作者来选择文章。
author:作者ID,如果是负数,则为不显示该作者下文章;如果为正数,则只显示该作者下的文章。
author_name:作者昵称
文章与页面参数:
检索单篇文章或页面。
p:根据文章ID显示文章
name:根据文章别名显示文章
page_id:页面ID
pagename:页面别名
posts_per_page:文章显示数量,-1为全部
showposts:指定多少个文章后开始翻页,不指定该参数则读取后台设置→阅读设置→博客页面至多显示
post__in:指定希望检索的文章ID
post__not_in:排除不希望检索的文章ID
post_type:页面类型,默认值为post;可用值包括any、attachment、page、post或revision。any可检索到除修订版外的所有页面类型。
post_status:可用值有publish、pending、draft、future、private、trash。最常用的是publish,用来限制私密文章。
post_parent:返回指定ID文章的子页面。
置顶文章参数:
post__in:如果值为get_option(‘sticky_posts’)时,则返回所有置顶文章的数组
返回第一篇置顶文章:
$args = array(
'posts_per_page' => 1,
'post__in' => get_option('sticky_posts'),
'caller_get_posts' => 1
);
query_posts($args);
时间参数:
检索特定时间段内发表的文章。
hour:小时,范围从0到23
minute:分钟,范围从0到60
second:秒,范围从0到60
day:日,范围从1到31
monthnum:月,范围从1到12
year:年,如2012
w:一年中的第几周,范围从0到53
offset(偏移)参数:
排除Loop循环中出现的第一篇文章,以下显示最近一篇文章之后的5篇文章:
query_posts('posts_per_page=5&offset=1');
排序参数:
orderby=author 按作者排序
orderby=date 按日期排序
orderby=title 按名称排序
orderby=modified 按修改时间排序
orderby=ID 按ID排序
orderby=rand 随机排序
orderby=comment_count 按评论数排序
order=ASC 升序,从最低值到最高值
order=DESC 降序,从最高值到最低值
自定义字段参数:
根据自定义关键字或值检索文章(或页面)。
meta_key=
meta_value=
meta_compare= 用以测试meta_value=的操作符,默认值为 ‘=’,其它可用的值包括’!=’、 ‘>’、’>=’、 ‘<’或 ‘<=’ 。
返回关键字为 ‘color’ 且值为’blue’的文章:
query_posts('meta_key=color&meta_value=blue');
返回自定义字段关键字为’color’的文章,无论自定义字段值为何:
query_posts('meta_key=color');
【query_posts()函数用法】
在Loop循环(前面说的主循环)之前插入以下代码:
$args = array(
'category__in' => 2,
);
query_posts($args);
$args数组中可以根据自己的需要指定任意数量的参数,这样主循环里就会按照你的要求输出文章。
如果需要分页功能,在数组之前必须加入代码:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
【实现本楼图片中的效果一般不使用query_posts函数】
query_posts()函数仅用于修改主页循环(例如分类页中的循环),而不是一种在页面上生成次级循环的手段(例如本楼图片中的效果)。如果你希望在主循环外另外生成循环,应该新建独立的WP_Query对象,用这些对象生成循环。在主循环外的循环上使用query_posts()会导致主循环运行偏差,并可能在页面上显示出你不希望看到的内容。
【WP_Query()函数】
WP_Query()函数可以用在主循环之外,并创建自己的Loop,WP_Query()函数的参数与query_posts()函数一样,具体用法如下:
首先创建一个变量,我们以显示最新发表的10个文章为例:
$recentPosts = new WP_Query();
$recentPosts->query('showposts=10');
while循环中我们这样调用:
<?php while ($recentPosts->have_posts()) : $recentPosts->the_post(); ?>
【重置循环】
使用query_posts()函数来设置Loop循环的查询条件,必须使用wp_reset_query()函数来重置query,否则就有可能造成后面的循环运行偏差。
wp_reset_query()函数一般添加到主循环的末尾。