2010-04-01 89 views
0

我已经创建了这个代码分支,以便如果永久链接设置不至少与其中一个OR条件匹配,我可以执行“做某事”分支。但是,我相信逻辑中存在一个缺陷,因为我已经为/%postname%.html设置了永久链接,并且它仍然尝试echo的真实性;这种条件下的逻辑缺陷是什么?

我相信我需要将ORs更改为AND,对吗?

if (get_option('permalink_structure') !== "/%postname%/" || 
      get_option('my_permalinks') !== "/%postname%/" || 
    get_option('permalink_structure') !== "/%postname%.html" || 
      get_option('my_permalinks') !== "/%postname%.html")) 
{ 
//do something 
    echo "true"; 
} 
+1

在一行中超过200个字符? – 2010-04-01 18:24:55

回答

4

您正在测试:

if(get_option('permalink_structure') !== "/%postname%/" 

而且您的永久链接是/%postname%.html - 这意味着它不是"/%postname%/"

因此,该条件的第一部分是true,而你进入if块 - 其他人甚至没有评估。


我想你想要的是使用&&,而不是||

if(get_option('permalink_structure') !== "/%postname%/" 
    && get_option('my_permalinks') !=="/%postname%/" 
    && get_option('permalink_structure') !== "/%postname%.html" 
    && get_option('my_permalinks') !=="/%postname%.html")) 
{ 
//do something 
    echo "true"; 
} 

这将意味着:

  • 如果永久不"/%postname%/"
  • 和永久不"/%postname%/"
  • 和固定链接不是"/%postname%.html"
  • 和永久不"/%postname%.html"
  • 然后,回声真正
0

是的,将它们切换到AND它应该工作。您可以将其转换为==,并将!放在前面。

4

当你做这样的结构:

if($a != 1 || $a != 2) 

那么它将永远是正确的,因为这是错误的$ a应同时为1和2。

你的构造有类似的缺陷。

0

使用ands,而不是ors。我自己犯了同样的错误。

0
if !(get_option('permalink_structure') == "/%postname%/" || 
      get_option('my_permalinks') == "/%postname%/" || 
    get_option('permalink_structure') == "/%postname%.html" || 
      get_option('my_permalinks') == "/%postname%.html")) 
{ 
    echo "true"; 
} 
+0

这是有效的语法? – 2010-04-01 18:36:12

0

至于说其他,使用AND&&),而不是OR||)。如果您不熟悉Boolean logic,这里简称:

TRUE and FALSE == FALSE 
TRUE and TRUE == TRUE 

FALSE or FALSE == FALSE 
TRUE or FALSE == TRUE