条件标签

条件标记可以在经典主题的模板文件中使用,以根据当前页面匹配的条件更改内容的显示。它们告诉WordPress在特定条件下显示什么代码。条件标记通常适用于PHP如果 /其他的条件语句。

代码首先检查以查看如果陈述是真是假。如果该语句为true,则执行第一组代码。如果为false,则跳过第一组代码,并跳过第二组代码(在其他的)而是执行。

例如,您可以询问用户是否已登录,然后根据结果提供不同的问候语。

如果(is_user_logged_in()):echo'欢迎,注册用户!';其他:echo“欢迎光临!”;endif;

注意这些标签与WordPress模板层次结构.

在何处使用条件标记

对于修改数据的条件标记,信息必须已经从数据库中检索到,即查询必须已经运行。如果在有数据之前使用条件标记,那么就没有什么可询问If/else语句的了。

重要的是要注意WordPress加载函数.php在查询运行之前,因此如果您只是在该文件中包含一个条件标记,它将无法工作。

实现条件标记的两种方法:

  • 将其放置在模板文件
  • 在中创建一个函数函数.php挂钩到稍后触发的操作/过滤器

适用条件

下面列出了以下每种情况条件语句被证明是正确的。可以接受参数的标签被标注。

主页面

is_home()

当显示博客主页时,此条件返回true,通常按标准的逆时间顺序显示。如果你的主页被设置为静态页面,那么这只会在你在设置>阅读中设置为“帖子页面”的页面上证明是正确的。

头版

is_front_page()

无论是设置为显示帖子还是静态页面,当显示站点的首页时,此条件都会返回true。

在以下情况下返回true:

  1. 正在显示博客主页
  2. 设置>阅读->首页显示选项设置为您的最新帖子

  1. 当设置>阅读->首页显示设置为静态页面
  2. Front Page值是当前显示的页面。

管理面板

is_admin()

当显示仪表板或管理面板时,此条件返回true。

一个帖子页面

是单个(_S)

当显示任何单个帖子(或附件,或自定义帖子类型)时,返回true。如果您在页面上,则此条件返回false。

是单一的('17');

是单个(_S)也可以通过ID和其他参数检查某些帖子。当帖子17被显示为单个帖子时,上面的例子被证明是正确的。

is_single(“爱尔兰炖菜”);

参数还包括文章标题。在这种情况下,当标题为“爱尔兰炖菜”的帖子显示为单个帖子时,这证明了这一点。

is_single(“炖牛肉”);

当Post with Post Slug“炖牛肉”显示为单个Post时,证明了这一点。

is_single(数组(17,‘炖牛肉’,‘爱尔兰炖菜’);

当显示的单个帖子是帖子ID 17、post_name是“beef-stew”或post_title是“Irish stew”时,返回true。

is_single(数组(17,19,1,11));

当显示的单个帖子ID=17、ID=19、ID=1或ID=11时,返回true。

is_single(数组(“炖牛肉”、“豌豆汤”、“辣椒”);

当显示的单个帖子是post_name“beef-stew”、post_name”pea-soup“或post_name(辣椒)时,返回true。

is_single(数组(“炖牛肉”、“豌豆汤”、“辣椒”);

当显示的单个帖子为post_title为“炖牛肉”、post_tittle为“豌豆汤”或post_titler为“辣椒”时,返回true。

注意:此函数不区分帖子ID、帖子标题或帖子名称。如果请求帖子ID为17,则会显示一个名为“17”的帖子。大概同样适用于弹头为“17”的帖子。

单个帖子、页面或附件

is_singular()

对于任何is_single、is_page和is_attachment,返回true。它允许测试帖子类型。

粘帖

is_sticky()

如果选中当前帖子的“将此帖子粘贴到首页”复选框,则返回true。在本例中,没有给出postID参数,因此使用了Loop post的postID。

is_sticky('17');

当帖子17被认为是粘性帖子时,返回true。

A岗位类型

获取post_type()

您可以通过包括以下内容来测试当前帖子是否为特定类型获取post_type()在你的条件中。它实际上不是一个条件标记,但它返回注册职位类型当前帖子的。

if('book'==get_post_type()){…}

post_type_exists()

如果给定的发布类型是注册的发布类型,则返回true。这不会测试帖子是否是特定的post_type。注意:此函数替换了在3.0开发中短暂存在的名为is_post_type的函数。

帖子类型是分层的

is_post_type_hierarchical($post_type)

如果此$post_type在注册时设置了分层支持,则返回true。

is_post_type_hierarchical(“书本”);

如果书籍帖子类型已注册为支持分级,则返回true。

Post-Type存档

is_post_type_archive()

在任何后期类型存档上返回true。

is_post_type_archive($post_type);

如果在与$post_type匹配的帖子类型存档页面上(可以是单个帖子类型或帖子类型数组),则返回true。

要打开post-type存档,请在以下情况下使用'has_archive'=>true注册帖子类型.

任何包含帖子的页面

comments_open()

当允许在WordPress循环.

pings_open()

当允许在WordPress循环中处理当前帖子时。

A“PAGE”页面

本节指的是WordPress页面,而不是您博客中的任何通用网页,或者换句话说,指的是内置的职位类型“第页”。

is_page()

显示任何页面时。

is_page('42');

显示第42页(ID)时。

is_page(“关于我和乔”);

当页面带有标题(_T)正在播放《关于我和乔》。

is_page('about-me');

当页面带有帖子名称正在显示“关于我”的(鼻涕虫)。

is_page(数组(42,'about-me','about-me And Joe'));

当显示的页面为帖子ID=42,或帖子名称是“关于我”,或标题(_T)是《关于我和乔》。

is_page(数组(42,54,6));

当显示的页面为帖子ID=42,或帖子ID=54,或帖子ID= 6.

分页页面测试

您可以使用此代码检查是否位于Post中的第n页,或使用<!--下一页-->快速标记。例如,如果您希望仅在分为多个页面的文章的第一页上显示元数据,那么这可能很有用。

示例1
<?php(电话)$paged=$wp_query->get(“页面”);如果(!$paged||$paged<2)://这不是分页的页面(或者它只是分页页面/帖子的第一页)其他://这是一个分页页面。endif;
示例2
<?php(电话)$paged=获取查询变量(“页面”)?get_query_var('页面'):false;如果($paged==false)://这不是分页的页面(或者它只是分页页面/帖子的第一页)其他://这是一个分页页面。endif;

子页面测试

没有is_subpage()函数,但您可以使用一些代码进行测试:

<?php(电话)全球$post;//如果在回路外如果(is_page()&&$post->post_parent)://这是一个子页面其他://这不是子页面endif;

代码段1

您可以使用代码段2中的代码创建自己的is_subpage()函数。将其添加到functions.php文件中。它以与代码段1相同的方式测试父页,但如果有父页,则返回父页的ID,如果没有,则返回false。

代码段2

<?php(电话)函数is_subpage(){//加载有关此页面的详细信息。全球$邮政;//测试页面是否有父级if(is_page()&&$post->post_parent){//返回父帖子的ID返回$post->post_parent;//没有父母所以。。。}其他{// ... 这个问题的答案是错误的返回false;}}

如果您计划经常测试子页面,建议使用类似于Snippet 2中的函数,而不是使用类似Snippet1的简单测试。

为了测试页面的父级是否是特定页面,例如“About”(默认情况下页面id为pid 2),我们可以使用Snippet 3中的测试。这些测试检查我们是否正在查看有问题的页面,以及是否正在查看任何子页面。这对于设置特定于网站不同部分的变量非常有用,因此可以设置不同的横幅图像或标题。

代码段3

<?php(电话)//页面是“关于”,或者页面的父级是“关于“。if(is_page('about')||'2'==$post->post_parent){$bannerimg=“关于.jpg”;}elseif(is_page(“学习”)||'56'==$post->post_parent){$bannerimg='teaching.jpg';}elseif(is_page('admissions')||'15'==$post->post_parent){$bannerimg='admissions.jpg';//万一我们在一个非机密页面,也许是主页}其他{$bannerimg='home.jpg';}

Snippet 4是一个允许您更轻松地执行上述测试的函数。如果我们正在查看有问题的页面(因此为“About”)或其子页面之一(因此为ID为“2”的父页面),则此函数将返回true。

代码段4

将代码段4添加到functions.php文件中,并调用is_tree('id')查看当前页面是页面还是页面的子页面。在代码段3中,is_tree('2')将替换第一个if标记内的“is_page('about')||'2'==$post->post_parent”。

请注意,如果您有多个级别的页面,则父页面是直接在上面的页面,而不是位于层次结构最顶层的页面。

是页面模板

允许您确定是否在页面模板中,或者是否正在使用特定的页面模板。

is_page_template()

是否正在使用页面模板?

is_page_template(“关于.php”);

页面模板是否“关于”正在使用?注意,与其他条件不同,如果要指定特定的页面模板,则需要使用文件名,例如about.php或my_Page_Template.php。

注意:如果文件位于子目录中,则还必须包含此项。这意味着这应该是与主题相关的文件路径以及文件名,例如“page-templates/about.php”。

类别页面

是_类别(_)

显示类别存档页面时。

is_category('9');

显示类别9的存档页面时。

is_category(“臭奶酪”);

显示名称为“臭奶酪”的类别的存档页面时。

is_category(“蓝-棕”);

显示带有类别Slug“blue-cheese”的类别的存档页面时。

is_category(数组(9,'blue-cheese','Stinky cheese'));

当显示的帖子类别为term_ID 9、slug“blue-cheese”或name“臭奶酪”时,返回true。

类别内('5');

如果当前帖子位于指定的类别id中,则返回true。

in_category(数组(1,2,3));

如果当前帖子属于类别1、2或3,则返回true。

! in_category(数组(4,5,6));

如果当前帖子不在类别4、5或6中,则返回true。注意!一开始。

注意:测试时一定要检查拼写。“is”和“in”之间有很大的区别。

另请参见是_存档()类别模板.

标记页

is_tag()

显示任何标记存档页面时。

is_tag(“轻度”);

显示带有“轻度”段塞的标记的存档页面时。

is_tag(数组(“sharp”、“轻度”、“极端”);

当所显示的标记存档具有“尖锐”、“轻微”或“极端”的段塞时,返回true。

has_tag();

当前帖子有标签时。必须在循环内使用。

has_tag(“轻度”);

当当前帖子的标签为“温和”时。

has_tag(数组(“sharp”、“轻度”、“极端”);

当当前帖子在数组中有任何标记时。

另请参见是_存档()标记模板.

分类页面

is_tax()

显示任何分类归档页面时。

is_tax(“味道”);

显示风味分类的分类归档页面时。

is_tax(‘风味’,‘温和’);

当显示风味分类的存档页面时,其slug为“轻度”。

is_tax(“味道”,数组(“尖锐”,“温和”,“极端”);

当显示的风味分类存档中包含“尖锐”、“温和”或“极端”的鼻涕时,返回true。

has_term()

检查当前帖子是否包含任何给定术语。第一个参数应该是空字符串。它需要一个分类代码slug/name作为第二个参数。

has_term('绿色','颜色');

当当前帖子有来自分类法“颜色”的术语“绿色”时。

has_term(数组('green','orange','blue'),'color');

当当前帖子在数组中包含任何术语时。

另请参见是_存档().

注册分类学

分类存在()

当通过注册特定分类法时寄存器分类法().以前is_taxonomy(),在版本3.0中已弃用

作者页面

is_author()

显示任何作者页面时。

is_author(“4”);

显示作者编号(ID)4的存档页面时。

is_author(“薇薇安”);

显示昵称为“Vivian”的作者的存档页面时。

是作者(“john-jones”);

显示作者与昵称“john-jones”的存档页面时。

is_author(数组(4,'john-jones','Vivian'));

当作者的存档页面是用户ID 4、用户名“john jones”或昵称“Vivian”时。

另请参见是_存档()作者模板.

多作者网站

is_multi_author()

当一个网站有多个作者发表文章时。3.2版提供。

A日期页

是日期(_date)

显示任何基于日期的存档页面时(即每月、每年、每天或基于时间的存档)。

是年(_year)

显示年度存档时。

是_月(_)

显示每月存档时。

是日(_D)

显示每日存档时。

是时间(_time)

显示每小时、“每分钟”或“第二次”存档时。

是_新_天()

如果根据发布日期,今天是新的一天。应该在循环内使用。

任何存档页面

是_存档()

显示任何类型的存档页面时。类别、标签、作者和基于日期的页面都是档案的类型。

搜索结果页面

is_search()(搜索())

显示搜索结果页面存档时。

404未找到页面

is_404()

出现“HTTP 404:未找到”错误后显示页面时。

隐私政策页面

is_privacy_policy()

显示隐私政策页面时。

附件

是附件(_A)

显示文章或页面的附件文档时。附件是通过后期编辑器的上传实用程序上传的图像或其他文件。附件可以显示在自己的“页面”或模板上。

单页、单帖或附件

is_singular()

当以下任何一项返回true时:是单个(_S)is_page()是附件(_A).

is_singular(“书”);

查看自定义帖子类型书籍的帖子时为True。

is_singular(数组(“报纸”、“书籍”);

查看自定义帖子类型报纸或书籍的帖子时为True。

银团贷款

是馈送(_F)

当请求的站点是银团时。用户通常不使用此标签;它由WordPress内部使用,可供插件开发人员使用。

追踪

is_trackback()

当请求的站点是WordPress的Trackback引擎的钩子时。此标签通常不由用户使用;它由WordPress内部使用,可供插件开发人员使用。

A预览

is_preview()

在草稿模式下查看正在显示的单个帖子时。

有摘录

has_excert()

当当前帖子有摘录时

有异常(42)

当帖子42(ID)有摘录时。

<?php(电话)//如果您在函数global$post;中,请获取$post;if(空($post->post_excerpt)){//这篇文章没有摘录}其他{//这篇文章有摘录}

其他用途
当你需要隐藏自动显示的摘录,而只显示你文章的摘录时。

<?php(电话)if(!has_excerpt()){echo“”;}其他{_exercert();}

替换文本或代码的自动摘录。

<?php if(!has_excerpt()){//您的文本或代码}

已分配导航菜单

has_nav_menu()

注册的导航菜单位置是否分配了菜单

返回:赋值(true)或不赋值(false)

循环内部

in_the_loop()

检查您是否处于“循环中”。对于插件作者来说很有用,当你在循环中时,这个条件返回为true。

提要栏是否处于活动状态

is_active_sidebar()

检查给定的侧边栏是否处于活动状态(正在使用中)。如果侧栏(由名称、id或数字标识)正在使用中,则返回true,否则函数返回false。

网络的一部分(多站点)

是多站点(_M)

检查当前站点是否在WordPress MultiSite安装中。

主站点(多站点)

是主站点()

确定站点是否为网络中的主站点。

网络管理(多站点)

is_super_admin()

确定用户是否是网络(超级)管理员。

活动插件

is_plugin_active()

检查插件是否已激活。

儿童主题

is_child_theme()(儿童主题)

检查子主题是否正在使用。

主题支持功能

当前主题支持()

检查是否存在各种主题功能。

工作示例

下面是演示如何使用这些条件标记的工作示例。

单柱

此示例显示如何使用是单个(_S)要仅在查看单个帖子页面时显示特定内容,请执行以下操作:

<?php(电话)if(is_single()){echo“这只是众多精彩作品中的一个”。single_cat_title()。'类别!';}

另一个如何在循环中使用条件标记的示例。当这是显示单个帖子或主页时,选择在index.php中显示内容或摘录。

<?php(电话)if(is_home()||is_single()){内容();}其他{_exercert();}

当您需要在非主页的位置显示代码或元素时。

<?php if(!is_home()){//插入标记。。。}

检查多个条件

你可以使用PHP运算符在单个if语句中计算多个条件。

如果您需要检查条件组合的计算结果是true还是false,这很方便。

<?php(电话)//检查是否满足2个条件中的任何一个。if(is_single()||is_page()){//如果是一篇文章或一个页面,做一些特别的事情。}if(is_archive()&&!is_category(“nachos”){//如果它是除nachos以外的任何类别的存档页面,请做一些特别的事情。}
<?php(电话)//检查是否满足3个条件。if($query->is_main_query()&&is_post_type_archive(“产品”)&&!is_admin()){//如果它是针对产品的自定义帖子类型存档的主查询。//如果我们不是WordPress管理员,那么做一些特别的事情。}if(is_post_type_archive(“电影”)|| is_tax(“流派”)|| is_tax(“演员”)){//如果它是电影的自定义后期类型存档。//或者是流派的分类档案。//或者它是Actor的分类归档,做一些特别的事情。}

基于日期的差异

如果有人按日期浏览我们的网站,让我们用不同的颜色区分不同年份的帖子:

<?php if(have_posts()):while(have_posts()):the_post();?><h2 id=“发布-<?php the_id();?>”><a href=“<?php the_permalink();?>”rel=“bookmark”><?php the_title();?></a></h2><小><?php the_time('F jS,Y');?>通过<?php the_author();?></小><?php(电话)//我们正在显示基于日期的存档吗?if(is_date()){if(日期(“Y”)!=获取日期(“Y”){//这篇文章是前一年写的//所以让我们使用“oldentry”类设置内容的样式echo'<div class=“oldentry”>';}其他{echo'<div class=“entry”>';}}其他{echo'<div class=“entry”>';}the_content('阅读本条剩余内容»');echo“</div>”;?><?php endwhile;endif;?>结束

可变提要栏内容

此示例将根据读者当前查看的页面在侧边栏中显示不同的内容。

<div id=“sidebar”><?php(电话)//让我们生成适合所显示页面的信息。if(is_home()){//我们在主页上,所以让我们显示所有顶级类别的列表。wp_list_categories('optionall=0&sort_column=name&list=1&children=0');}elseif(is_category()){//我们正在查看单个类别视图,因此让我们显示所有类别。wp_list_categories('optionall=1&sort_column=name&list=1&childred=1&hierarchy=1');}elseif(is_single()){//我们正在查看一个页面,所以我们不要在侧边栏中显示任何内容。}elseif(is_page()){//我们正在查看一个静态页面。哪一个?if(is_page(“关于”)){//我们的关于页面。echo“这是我的主页!”;}elseif(is_page('Colophon')){echo“这是我的复印机页面,在WordPress上运行”。bloginfo(“版本”).'';}其他{//其他页面一网打尽。echo“投票给佩德罗!”;}}其他{//其他一切(档案、搜索、404等)一网打尽echo“佩德罗会保护你。”;}?></div><!--#侧栏-->

有用的404页面

这个创建错误404页面文章作为使用PHP条件函数的示例发行()在中编写友好消息部分。

有时,在sidebar.php等其他模板中执行的查询可能会损坏某些条件标记。例如,在header.php中,条件标记工作正常,但在主题的footer.php中不工作。技巧是将wp_reset_query放在页脚中的条件测试之前。例如:

<?php(电话)wp_reset_query();if(is_page('2')){echo“这是第2页!”;}

条件标记索引

函数参考

参考