Trouble with conditional tags

时间:2014-07-23 作者:Lee Marrett

除了博客页面和归档页面之外,我还想在每个页面上运行一些代码。

如果我使用

<?php if ( !is_home() )  { ?>
该代码没有正确显示在博客页面上。

如果我使用

<?php if ( !is_page(\'archive\') )  { ?>
代码未正确显示在存档页面上。

但如果我使用

<?php if ( !is_home() || !is_page(\'archive\') )  { ?>
代码错误地显示在两个页面上。

有什么建议我做错了什么吗?

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

抄本是要使用的,应该是你的第一站。上有一个完整的页面conditional tags

要排除存档页,请使用is_archive().

EDIT 1

Mark有一个有效点。我不太了解你,也不太了解我自己:-)

您的问题是使用||&& 操作员

这是你的密码

 if ( !is_home() || !is_page(\'archive\') )
好的。如果您不在主页上,也不在存档页上,则两者都返回true,表示同意,

 true || true
因此,您的代码按其应该的方式执行。例如,现在我们在主页上,因此检查我们是否在主页上返回false,出现以下情况

false || true
与您的想法不同,您的代码应该执行。这不是代码中的缺陷,而是|| 操作员工作。只有一个true触发并执行您的代码。当您处于存档页面时,也会发生同样的情况。

这个&& 操作员这样处理您的代码

 if ( !is_home() && !is_page(\'archive\') )
如果不在主页上,也不在存档页上,则两者都返回true,代码将执行。

现在,当您在主页或归档页中的任何一个上时,一个返回true,另一个返回false。你的代码还会执行吗。简单的答案是NO

对于&& 操作员触发,所有条件must return true. 只有一个false会使代码无法执行。

我希望这有意义

**编辑2**

根据您的评论

顺便说一下!(is_home() || is_page(\'archive\')) 与相同!is_home() || !is_page(\'archive\') ?

不,不是。你需要了解(!) **operator! 任何变量或条件之前的含义与之后的含义相反。所以!is_page() 在简单的英语中,意思是“如果我们不在一页上”,其中is_page() 翻译为“如果我们在一页上”

所以,回顾一下我在编辑1中解释的内容,让我们看看逻辑。我会缩写is_page( \'archive\' ) 只是is_page()

!(is_home() || is_page(\'archive\'))
在主页和归档页以外的任何其他页面上,!is_home() 返回true,并且is_page() 返回false,执行代码

true || false
在主页上,!is_home 返回false,因为我们位于主页上。is_page() 返回false,因为我们不在同一页上。

false || false
因此您的代码不会执行。现在进入存档页面。is_page() 将返回true,而!is_home() 也将返回true

true || true
所以你还是吃饱了。您的代码仍在存档页上执行。

我想把这个留给你。不要重新发明轮子。逻辑已经存在。去检查我的答案中提供的链接。你should 正在使用&& 而不是||, 不管你怎么看,句号

结束

相关推荐