我已经创建了这个代码分支,这样如果永久链接设置与OR条件中的至少一个不匹配,我就可以执行“do something”分支。但是,我认为逻辑上存在一个缺陷,因为我已经将永久链接设置为/% postnamename.html,它仍然会尝试echo的真实;
我相信我需要将OR更改为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";
}
答案 0 :(得分: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"
答案 1 :(得分:4)
当你做这样的构造时:
if($a != 1 || $a != 2)
然后它将永远是真的,因为这是假的,$ a应该同时为1和2。
你的构造同样存在缺陷。
答案 2 :(得分:0)
是的,将它们切换到AND
,它应该可以正常工作。您可以改为将==
转换为!
并将{{1}}放在前面。
答案 3 :(得分:0)
使用ands,而不是ors。我自己犯了同样的错误。
答案 4 :(得分: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";
}
答案 5 :(得分:0)
正如另一个所说,使用AND
(&&
)代替OR
(||
)。如果您不熟悉Boolean logic,请简要说明:
TRUE and FALSE == FALSE
TRUE and TRUE == TRUE
FALSE or FALSE == FALSE
TRUE or FALSE == TRUE