判断页面(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。