在 wordpress 主题和插件开发中,前提推断标签(Conditional Tags)是非常重要的,经由过程前提推断标签,我们能够推断各种状况,从而运用对应的代码等。比方在顶部导航条中有一个“首页”选项,在首页的时刻须要设置成高亮,我们能够在头部导航模板文件(header.php)中运用前提推断标签 is_home() 来推断当前页面是不是是首页,然后再输出高亮的 class。
这类的前提推断标签平常会返回一个布尔值,如许我们就能够运用 if 语句推断差别的页面差别的状况而离别运用差别的代码。
一切的前提推断标签
一切的前提推断标签都邑推断某个前提是不是建立,然后返回 True 或许 False 。另外有些前提推断标签还能够运用一些参数进一步的推断,下面是一切的 wordpress 前提推断标签:
主页面(Main)
is_home()
推断当前页面是不是是博客主页面。主页面一般是显现博客内容列表的首页,然则假如你在“背景”->“设置”->“浏览”中设置了静态首页和文章索引页面的话,当接见文章索引页面是返回 True。
首页(Front)
is_front_page()
推断当前页面是不是是博客首页。首页和上面的主页面差别,首页能够是文章索引页面,也能够是你在“背景”->“设置”->“浏览”中设置的静态首页。
背景控制面板(Administration Panels)
is_admin()
推断当前页面是不是是背景的控制面板(Dashboard)。
文章页面(Single Post)
is_single()
推断当前页面是不是是一篇文章或许是附件页面或许自定义文章范例页面。注重,wordpress 中文章(Single)和页面(Page)是差别的观点。这个前提推断标签能够附加参数。
is_single( '17' )
推断当前文章是不是是 id 为 17 的文章。
is_single( 'Irish Stew' )
推断当前文章的标题是不是是 “Irish Stew”。
is_single( 'beef-stew' )
推断当前文章的别号(Slug)是不是为 “beef-stew”。
is_single( array( 17, 'beef-stew', 'Irish Stew' ) )
通报多个参数须要运用数组。上面前提推断标签推断满足 id 为 17 、别号为 beef-stew、标题为 Irish Stew 恣意一个前提文章被接见时返回 True。
is_single( array( 17, 19, 1, 11 ) )
推断多个文章的 id,用法同上。
is_single( array( 'beef-stew', 'pea-soup', 'chili' ) )
推断多个文章的别号,用法同上。
is_single( array( 'Beef Stew', 'Pea Soup', 'Chili' ) )
推断多个文章的标题,用法同上。
注重:这个函数关于通报的参数,并没法很邃晓的推断参数究竟是 id、文章标题或许是文章别号,假如参数为 17,当 id 为 17 的文章会返回 True,当 Slug 为 17 的文章也会返回 True。
置顶文章(Sticky Post)
is_sticky()
wordpress 带有置顶文章的功用,运用这个标签推断是不是为置顶文章,须要通报一个参数(一般为文章 id,用法同上)。假如不想通报参数,须要用在主轮回(Loop)中,由主轮回供应。一般的用法是在主轮回输出文章索引列表的时刻,运用 is_sticky() 推断当前文章是不是为置顶文章,然后在置顶文章的 title 前面输出 “[置顶]” 之类的标志。
文章范例(Post Type)
get_post_type()
严厉意义上,这并非一个前提推断标签,它会返回当前文章注册的文章范例,而且能够经由过程相似 if ( 'book' == get_post_type() ) ... 来完成推断文章范例的功用。
is_singular()
推断是不是满足 is_single、is_page 和 is_attachment 的恣意一个前提,满足返回 True。能够测试一切的文章范例。
post_type_exists()
推断某个文章范例是不是被注册了,须要通报一个文章范例参数。它并非测试某文章是不是属于某个文章范例。
is_post_type_hierarchical( $post_type )
假如 $post_type 在注册的时刻设置了支撑条理( hierarchical support )返回 True。比方:is_post_type_hierarchical( 'book' ) 。
is_post_type_archive()
推断是不是在任何的自定义文章范例存档页面(post type archive)。
is_post_type_archive( $post_type )
推断是不是在 $post_type 中相符前提的文章范例存档页面,$post_type 能够是一个单一的文章范例或许是一个文章范例数组。提醒:假如想要运用文章范例存档功用,须要在注册文章范例的时刻,将 has_archive 参数设置为 True。
批评相干(Comments)
is_comments_popup()
推断是不是在批评弹出框的窗口中。
comments_open()
推断批评功用是不是开启,必需用在主轮回中。
pings_open()
推断文章 ping 功用是不是开启,必需用在主轮回中。
推断页面(Page)
wordpress 中内置的有两种内容情势,一种是文章(Post)另一种是页面(Page),这里要推断的是页面,而不是指你网站的某个网页。
is_page()
推断当前页面是不是为“页面”。
is_page( 42 )
推断当前页面是不是是一个 ID 为 42 的页面。
is_page( 'About Me And Joe' )
推断当前页面是不是是一个标题为 “About Me And Joe” 的页面。
is_page( 'about-me' )
推断当前页面是不是是一一般号为 “about-me” 的页面。
is_page( array( 42, 'about-me', 'Aout Me And Joe' ) )
一次包含多种状况的推断,须要运用数组通报,用法同上。
推断内容分页
在文章和页面中,有时刻内容许多,在文章中插进去 <!--nextpage--> 标签能够将内容分离隔分红差别的页面,并经由过程对应的函数猎取分页的列表。下面的例子,能够推断当前是在第几个页面中,如许你就能够在某个页面中输出一些迥殊的信息(比方在第一个页面中,输出一个提醒)。
例子1:
<?php
$paged = $wp_query->get( 'page' );
if ( ! $paged || $paged < 2 ) {
// 这里是不带有分页或许是带有分页页面的第一页
} else {
// 这里是带有分页的其他页面。
}
?>
例子2:
<?php
$paged = get_query_var( 'page' ) ? get_query_var( 'page' ) : false;
if ( $paged === false ) {
// 这里是不带有分页或许是带有分页页面的第一页
} else {
// 这里是带有分页的其他页面。
}
?>
推断子页面(sub-Pages)
WordPress 中的页面(page)是有父子级关联的,推断是不是为子页面时,没有内置 is_subpage() 如许的函数,然则你能够运用下面的要领来推断。
要领1:
<?php
global $post; // 下面代码须要用在主轮回中,假如你在轮回外运用,须要声明全局变量 $post
if ( is_page() && $post->post_parent ) {
// 这是一个子页面
} else {
// 这不是一个子页面
}
?>
发起将下面的要领2到场你的 functions.php 文件中,下面的 is_subpage() 函数的道理与要领1相似,然则能够返回当前页面父页面的 ID 或许是 false。
要领2:
<?php
function is_subpage() {
global $post; // 猎取页面的相干信息
if ( is_page() && $post->post_parent ) { // 推断是不是有父页面
return $post->post_parent; // 假如有返回父页面的 ID
} else {
return false; // 假如没有返回 false
}
}
?>
假如你常常须要推断子页面,强烈发起运用要领2。
假如须要推断父页面是不是为某个特定的页面,能够运用要领3的代码。要领3代码会推断的越发细致,从而越发便于自定义和个性化(比方加一些图片)。
要领3:
<?php
if ( is_page( 'about' ) || '2' == $post->post_parent ) {
// 这个页面是“about”页面,或许它的父页面是“about”
$bannerimg = 'about.jpg';
} elseif ( is_page( 'learning' ) || '56' == $post->post_parent ) {
$bannerimg = 'teaching.jpg';
} elseif ( is_page( 'admissions' ) || '15' == $post->post_parent ) {
$bannerimg = 'admissions.jpg';
} else {
$bannerimg = 'home.jpg'; // 假如都不满足的话,就用这个图片
}
?>
要领4是一个函数能够让你更轻易的完成推断,只须要通报参数即可,假如正在接见对应页面,将会返回 True。
要领4:
<?php
function is_tree( $pid ) { // $pid = 通报的 ID 参数是我们愿望推断的页面 ID
global $post;
if ( is_page($pid) )
return true; // 当前正在这个页面,所以返回 True
$anc = get_post_ancestors( $post->ID );
foreach ( $anc as $ancestor ) {
if( is_page() && $ancestor == $pid ) {
return true;
}
}
return false; // 没有在当前页面,而且这个页面没有子页面
}
?>
能够将这个函数添加进 functions.php 中,挪用 is_tree( 'id' ) 就能够推断当前页面是不是是指定页面或许是这个页面的子页面。相比较要领3 is_tree( '2' ) 的功用和 is_page( 'about' ) || '2' == $post->post_parent 是一样的。
注重,假如页面乘此多于一级,那末父级页面指的是上一层页面,不是这个页面条理关联最顶层的页面。
推断页面模版(Page Template)
推断当前页面是不是由某个页面模版生成的,
is_page_template()
推断是不是运用了一个页面模版。
is_page_template( 'about.php' )
推断运用的页面模版是不是是 “about” 这个模板。注重,这个参数与其他参数差别,假如你想推断是不是是由某个页面模版宣称的,你须要将谁人页面模版的文件名填上去,包含背面的 .php 后缀。
推断分类页面(Category)
is_category()
推断当前页面是不是为分类目录或许存档(archive)页面。
is_category( '9' )
推断当前分类页面的 ID 是不是为 9。
is_category( 'Stinky Cheeses' )
推断当前分类页面的名字是不是为“Stinky Cheeses”。
is_category( 'blue-cheese' )
推断当前分类页面的别号是不是为“blue-cheese”。
is_category( array( 9, 'blue-cheese', 'Stinky cheeses' ) )
同上,你懂的。
in_category( '5' )
推断当前文章是不是属于某个特定分类目录(id 为 5),返回 True。注重,这里是 in 而不是 is,与上面的差别。
in_category( array( 1,2,3 ) )
推断当前文章是不是属于某些特定的分类目录。
推断标签页面(Tag)
is_tag()
推断当前页面是不是为标签页面。
is_tag( 'mild' )
推断当前标签页面的别号是不是为 “mild”。
is_tag( array( 'sharp', 'mild', 'extreme' ) )
推断当前标签页面的别号是不是是 “sharp”、“mild”或许“extreme”中的某个。
has_tag()
推断当前文章是不是有一个标签,必需用在主轮回中。
has_tag( 'mild' )
推断当前文章是不是有标签 “mild”。
has_tag( array( 'sharp', 'mild', 'extreme' ) )
推断当前文章是不是有数组里的那些标签。
推断自定义分类页面(Taxonomy)
自定义分类页面并非是上面的 category 那种分类页面,而是指 WordPress 分类体系页面。在 WordPress 默许内置了两种分类体系:category 和 tag,同时支撑开发者自定义分类体系。
is_tax()
推断当前页面是不是为一个分类体系的存档页面。
is_tax( 'flavor' )
推断当前页面是不是为一个名为 flavor 自定义分类的存档页面。
is_tax( 'flavor', 'mild' )
推断当前自定义分类 flavor 页面的别号是不是为 mild。
is_tax( 'flavor', array( 'sharp', 'mild', 'extreme' ) )
推断当前自定义分类 flavor 页面的页面是不是为 sharp、mild、extreme 中的一个。
has_term()
推断当前页面是不是带有自定义分类。
has_term( 'green', 'color' )
推断当前页面是不是是不是带有别号为 green 的自定义分类 color。
has_term( array( 'green', 'orange', 'blue' ), 'color' )
推断当前页面是不是是不是带有数组中的自定义分类 color。
推断作者页面(Author)
is_author()
推断当前页面是不是是一个作者存档页面。
is_author( '4' )
推断当前页面是不是为 id 为 4 的作者页面。
is_author( 'Vivian' )
推断当前存档页面是不是是 Vivian(Nickname) 的作者存档页面。
is_author( array( 4, 'john-jones', 'Vivian' ) )
推断当前存档页面是不是属于 id 为 4,或许名字为 “john-jones”、“Vivian” 的作者存档页面。
is_multi_author()
推断当前博客是不是有凌驾一个作者宣布过文章。WordPress 3.2 以上版本可用。
推断是不是为日期存档页面(Date Page)
is_date()
推断当前页面是不是为任何的按时候存档的页面。
is_year()
推断当前页面是不是为按年份存档的页面。
is_month()
推断当前页面是不是为按月份存档的页面。
is_day()
推断当前页面是不是为按日期存档的页面。
is_time()
推断当前页面是不是为根据小时、分钟、秒存档的页面。
is_new_day()
推断当前页面是不是为文章日期的新的一天,必需用在主轮回中。
推断恣意存档页面(Any Archive Page)
is_archive()
推断当前页面是不是为一个存档页面,包含:分类、标签、作者页面、日期存档页面等。
推断搜刮效果页面(Search Result Page)
is_search()
推断当前页面是不是为一个搜刮效果页面。
推断是不是为 404 页面(404 Not Found Page)
is_404()
推断当前页面是不是带有 “HTTP 404:Not Found” 毛病。
推断被分页页面(Paged Page)
is_paged()
这里的分页指的是存档页面,假如一个日记或许静态页面的内容经由过程经由过程 <!--nextpage--> 拆分红多个页面,这些不能算为 paged page
推断是不是为附件页面(Attachment)
is_attachment()
推断当前页面是不是为一个附件页面。附件页面一般为一个图片或许是一些其他文件,能够在编辑文章上传文件那边举行设置。
推断单页面、文章页面或许附件页面
is_singular()
只需 is_single()、is_page()、is_attachment() 返回 True,此函数返回 True。
is_singular( 'book' )
推断当前文章是不是属于自定义文章范例(Custom Post Types)“book”。
is_singular( array( 'newspaper', 'book' ) )
推断当前文章是不是属于数组中某个自定义文章范例。
推断定阅页面
is_feed()
推断是不是在定阅输出的页面。这个推断标签是为插件开发者供应的。
推断援用公告(Trackback)
is_trackback()
推断当前 WordPress 主题是不是开启了 Trackback 功用。这个推断标签是为开发者供应的。
推断预览页面
is_preview()
推断一篇文章是不是在预览(文章自身处于草稿状况)。
推断是不是有择要
has_excerpt()
推断当前文章是不是有择要内容。
has_excerpt( 42 )
推断文章 ID 为 42 的文章是不是有择要内容。
还能够运用下面代码来完成:
<?php
// 先猎取全局变量 $post
global $post;
if ( emptyempty( $post->post_excerpt ) ) {
// 假如文章没有择要实行这块代码
} else {
// 假如文章带有择要实行这块代码
}
?>
假如你想在文章没有择要的时刻,显现空内容:
<?php if ( ! has_excerpt() ) {
echo '';
} else {
the_excerpt();
}
推断是不是有可用的自定义导航菜单
has_nav_menu()
推断一个被注册过的自定义导航菜单是不是被指定了一个菜单。
推断是不是在主轮回中
in_the_loop()
推断是不是在主轮回内部。对开发者来讲很有效。
推断边栏是不是已激活可用
is_active_sidebar()
推断给出的边栏是不是激活(正在运用)。假如边栏(用 name、id、number 标志)正在运用,就会返回 True。
推断是不是是网站的一部分(关于多站点网站)
is_multisite()
推断当前的站点是不是是 WordPress MultiSite 的一部分。
推断是不是是主站点(关于多站点网站)
is_main_site()
推断当前站点在全部收集中,是不是是主站点。
推断网站的 Admin (关于多站点网站)
is_super_admin()
推断当前用户是不是是全部网站中的管理员。
推断插件是不是激活
is_plugin_active()
推断某个插件是不是激活正在运用。
推断子主题
is_child_theme()
推断当前是不是是一个正在运用的子主题。
推断当前主题功用
current_theme_supports()
推断当前主题的功用特征是不是存在。
运用前提推断标签的实例
下面给出一些例子,让你邃晓上面的推断标签怎样运用。
文章中的前提推断
下面的例子报告了当用户接见一篇文章的时刻怎样运用 is_single() 来显现一些特别的内容。
if ( is_single() ) {
echo 'This is just one of many fabulous entries in the ' . single_cat_title() . ' category!';
}
下面的例子引见了怎样在主轮回中运用前提推断语句。功用是在首页(index)中显现文章的择要,而在文章(single)和主页(home)中显现文章的正文内容。
if ( is_home() || is_single() ) {
the_content();
}
else {
the_excerpt();
}
同时运用多个前提推断标签
运用罕见的 PHP 操作符 就能够运用多个前提推断标签。
// 同时推断两个前提
if ( is_single() || is_page() ) ) {
// 假如当前是一篇文章或许一个页面,就实行这块代码
}
if ( is_archive() && ! is_category( 'nachos' ) ) {
// 假如当前是一个分类的存档页面(除了 nachos 分类),就实行这块代码
}
// 同时推断三个前提
if ( $query->is_main_query() && is_post_type_archive( 'products' ) && ! is_admin() ) {
// 假如当前是 main query 而且是 products 自定义文章范例的存档页面
// 同时没有效 admin 账号上岸背景,就实行这块代码
}
if ( is_post_type_archive( 'movies' ) || is_tax( 'genre' ) || is_tax( 'actor' ) ) {
// 假如当前是 Movies 的自定义文章范例存档
// 或许是 genre 分类存档页面
// 或许是 actor 分类存档页面,就实行这块代码
}

评论列表