条件标记可以在经典主题的模板文件中使用,以根据当前页面匹配的条件更改内容的显示。它们告诉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:
- 正在显示博客主页和
- 设置>阅读->首页显示选项设置为您的最新帖子
或
- 当设置>阅读->首页显示设置为静态页面 和
- 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。
获取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。
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循环中处理当前帖子时。
本节指的是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版提供。
是日期(_date)
显示任何基于日期的存档页面时(即每月、每年、每天或基于时间的存档)。
是年(_year)
显示年度存档时。
是_月(_)
显示每月存档时。
是日(_D)
显示每日存档时。
是时间(_time)
显示每小时、“每分钟”或“第二次”存档时。
是_新_天()
如果根据发布日期,今天是新的一天。应该在循环内使用。
是_存档()
显示任何类型的存档页面时。类别、标签、作者和基于日期的页面都是档案的类型。
is_search()(搜索())
显示搜索结果页面存档时。
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内部使用,可供插件开发人员使用。
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页面文章作为使用PHP条件函数的示例发行()
在中编写友好消息部分。
有时,在sidebar.php等其他模板中执行的查询可能会损坏某些条件标记。例如,在header.php中,条件标记工作正常,但在主题的footer.php中不工作。技巧是将wp_reset_query放在页脚中的条件测试之前。例如:
<?php(电话)wp_reset_query();if(is_page('2')){echo“这是第2页!”;}
参考