最近不少小伙伴都开始制作属于自己的wordpress模板了,初次制作wordpress模板肯定会遇到不少问题比如需要在特定页面执行特定代码或者是在特定的页面输出一段文字或样式,这里就将所有wordpress条件判断函数都挪列出来,所有的条件判断标签都会判断某个条件是否成立,然后返回 True 或者 False 。此外有些条件判断标签还可以使用一些参数进一步的判断,下面是所有的 WordPress 条件判断标签:


is_home()

判断当前页面是否为首页如果是当前页面是首页则会返回true,但是你在后台设置了首页静态页面作为首页的话则会返回false。


is_front_page()

这个函数和上面的is_home()函数的作用也一样,唯一不同的就是就算你设置了静态页面为首页也恢返回true。


is_single()

该函数用来判断当前页面是否为文章页面或者自定义文章类型页面,并且该页面是可以附加参数的,下面那是示例代码:


//判断当前文章是否是 id 为 17 的文章。
is_single( '17' )
//判断当前文章的标题是否是 “Irish Stew”。
is_single( 'Irish Stew' )
//判断当前文章的别名(Slug)是否为 “beef-stew”。
is_single( 'beef-stew' )
//传递多个参数需要使用数组。上面条件判断标签判断满足 id 为 17 、别名为 beef-stew、标题为 Irish Stew 任意一个条件文章被访问时返回 True。
is_single( array( 17, 'beef-stew', 'Irish Stew' ) )
//判断多个文章的 id,用法同上。
is_single( array( 17, 19, 1, 11 ) )
//判断多个文章的别名,用法同上。
is_single( array( 'beef-stew', 'pea-soup', 'chili' ) )
//判断多个文章的标题,用法同上。
is_single( array( 'Beef Stew', 'Pea Soup', 'Chili' ) )

注意:这个函数对于传递的参数,并无法很明确的判断参数究竟是 id、文章标题或者是文章别名,如果参数为 17,当 id 为 17 的文章会返回 True,当 Slug 为 17 的文章也会返回 True。


is_sticky()

判断当前文章是否为置顶文章,也可以传递参数,大体的使用方法和is_single()函数一样。


is_singular()

判断是否满足 is_single、is_page 和 is_attachment 的任意一个条件,满足返回 True。可以用来判断任意类型的文章页面。


is_post_type_archive()

判断是否为存档页面(时间存档页、标签、分类、自定义分类),当然也可以加上一些参数比如post_tag,category来限制当前的存档页类型。


comments_open()

判断评论功能是否开启,必须用在循环中。


pings_open()

判断文章 ping 功能是否开启,必须用在主循环中。


is_page()

判断当前是否为页面类型文章,用法和is_single一致。


is_category()

判断当前页面是否为分类目录,以下是部分代码示例:


//判断当前分类页面的 ID 是否为 9。
is_category( '9' )
//判断当前分类页面的名字是否为“Stinky Cheeses”。
is_category( 'Stinky Cheeses' )
//判断当前分类页面的别名是否为“blue-cheese”。
is_category( 'blue-cheese' )
//用数组 传递参数,在前面的is_single里面讲过,作用类似。
is_category( array( 9, 'blue-cheese', 'Stinky cheeses' ) )

in_category(73)

判断当前文章是否属于某个特定分类目录(id 为 73),返回 True。注意,这里是 in 而不是 is,与上面的不同,用法和is_category类似。


is_tag()

判断当前页面是否为标签页面,当然可以传递参数,和is_category用法一致。


has_tag()

判断当前文章是否有一个标签,必须用在循环中。


is_tax()

判断当前页面是否为一个自定义分类的存档页面,下面那是用法示例:


//判断当前页面是否为一个名为 flavor 自定义分类的存档页面。
is_tax( 'flavor' )
//判断当前自定义分类 flavor 页面的别名是否为 mild。
is_tax( 'flavor', 'mild' )
//判断当前自定义分类 flavor 页面的页面是否为 sharp、mild、extreme 中的一个。
is_tax( 'flavor', array( 'sharp', 'mild', 'extreme' ) )

和is_category、is_tag用法不同请勿混淆。


has_term()

判断当前页面是否带有自定义分类。


//判断当前页面是否是否带有别名为 green 的自定义分类 color。
has_term( 'green', 'color' )
//判断当前页面是否是否带有数组中的自定义分类 color
has_term( array( 'green', 'orange', 'blue' ), 'color' )

is_author()

判断当前页面是否是一个作者存档页面,用法示例:


//判断当前页面是否为 id 为 4 的作者页面。
is_author( '4' )
//判断当前存档页面是否是 Vivian(Nickname) 的作者存档页面。
is_author( 'Vivian' )
//判断当前存档页面是否属于 id 为 4,或者名字为 “john-jones”、“Vivian” 的作者存档页面。
is_author( array( 4, 'john-jones', 'Vivian' ) )

is_date()

判断当前页面是否为任何的按时间存档的页面。


is_year()

判断当前页面是否为按年份存档的页面。


is_month()

判断当前页面是否为按月份存档的页面。


is_day()

判断当前页面是否为按日期存档的页面。


is_time()

判断当前页面是否为按照小时、分钟、秒存档的页面。


is_new_day()

判断当前页面是否为当天文章的时间存档页。


is_archive()

判断当前页面是否为一个存档页面,包括:分类、标签、作者页面、日期存档页面等。


is_search()

判断当前页面是否为一个搜索结果页面。


is_404()

判断当前页面是否为404页面


is_paged()

判断当前页面是否为分页。


is_attachment()

判断当前页面是否为附件页。


is_feed()

判断是否在订阅页面。


is_trackback()

判断trackback是否开启。


is_preview()

判断一篇文章是否在预览状态(文章本身处于草稿状态)。


has_excerpt()

判断当前文章是否有摘要内容。


in_the_loop()

判断是否在主循环内部。

如果发现一些判断失效了可能是循环未注销造成的全局变量错乱问题,可以使用以下函数来注销循环:


//使用WP_Query创建多个循环是使用,不接受任何参数,恢复$post全局变量的数据
wp_reset_postdata();
//使用query_posts()自定义循环时使用,不接受任何参数,不仅恢复$post全局变量,还会销毁之前的查询
wp_reset_query();
//需要重用同一个页面的查询结果时使用
rewind_posts();

实例:


$random_post = new WP_query();
$random_post->query('cat=3&showposts=1&orderby=rand');
while ($random_post->have_posts()) : $random_post->the_post();
<a href="<?php the_permalink() ?>" title="<?php the_title(); ?>">
    <img src="<?php echo get_post_meta($random_post->ID, 'featured', true); ?>">
</a>
endwhile;
wp_reset_postdata();

<?php query_posts('posts_per_page=3');
if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
<?php endwhile; endif; ?>
<?php wp_reset_query(); ?>

if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
<?php endwhile; endif; ?>
<?php rewind_posts(); ?>
<?php while (have_posts()) : the_post(); ?>
<?php the_content(); ?>
<?php endwhile; ?>