当Wordpress中的特定页面显示时,我将$_SESSION['showroom']设置为"活动":
if(get_the_ID()==6470||get_the_ID()==252){
$_SESSION['showroom']='active';
}
然后,我设置了 2 个页面数组进行检查。如果显示的下一页不在其中一个数组中,则 $_SESSION['showroom'] 将更改为"非活动"。
$allowed_templates = array('template-A.php',
'template-B.php',
'template-C.php',
'template-E.php',
'template-G.php');
$allowed_ids = array(6470,252);
$template_name = get_page_template_slug();
$page_id = get_the_ID();
if(in_array($template_name,$allowed_templates)==false && in_array($page_id,$allowed_ids)==false){
$_SESSION['showroom']='inactive';
}
if 语句大部分时间都有效,但有时我的 $_SESSION['showroom'] 会更改为非活动状态,即使其中一个数组返回 true!经过几个小时的测试,我无法找到问题所在。回显 if 语句的两个部分总是给我 2 个真或 1 个真 + 1 假,但永远不会给我 2 个假:
if(in_array($template_name,$allowed_templates)==false){echo 'TFALSE';}
if(in_array($template_name,$allowed_templates)){echo 'TTRUE';}
if(in_array($page_id,$allowed_ids)==false){echo 'IFALSE';}
if(in_array($page_id,$allowed_ids)){echo 'ITRUE';}
我在这里错过了什么?
提前感谢任何帮助!
编辑:继续测试并发现以下异常:
if(in_array($template_name,$allowed_templates)==false && in_array($page_id,$allowed_ids)==false){
$_SESSION['showroom']='inactive';
echo 'SET TO INACTIVE';
}
if 语句将 $_SESSION['陈列室'] 更改为"非活动",但不回显"设置为非活动"!
这里发生了一些奇怪的事情!
问题解决了。我的代码很好。两个丢失的图像文件导致WordPress崩溃我的会话。花了10个小时才找到答案,但很高兴我找到了。感谢大家的帮助。
您可以尝试以下操作;
if(!in_array($template_name,$allowed_templates) && !in_array($page_id,$allowed_ids)){
$_SESSION['showroom']='inactive';
}
编辑:让我们尝试进一步分解它...类似于您的示例
if(!in_array($template_name,$allowed_templates){
echo "not in templates,";
}
if(!in_array($page_id,$allowed_ids)){
echo "not in ids,";
}
if(!in_array($template_name,$allowed_templates) && !in_array($page_id,$allowed_ids)){
echo "not in both'n";
}
然后看看我们是否得到一个有not in templates,not in ids,
但没有尾随not in both
这个问题纯粹是合乎逻辑的。让我们看看这个语句:
if (in_array($template_name,$allowed_templates)==false && in_array($page_id,$allowed_ids)==false)
翻译为"如果模板无效且页面无效"
这意味着需要同时满足这两个语句才能将会话标记为非活动状态。如果模板没问题,但页面无效怎么办?这绝对也应该标记为非活动。
通过将语句更改为"如果模板无效或页面无效",我们掩盖了无效的情况。因为它们中的任何一个都算作无效状态,因此,只有其中一个需要为 false 才能使所有内容都为假。(OR语句)
所以在代码方面将是
if (in_array($template_name,$allowed_templates)==false || in_array($page_id,$allowed_ids)==false)
你已经准备好了。
作为和补充。我会按照您指出的工作来构建代码。哪个更合乎逻辑。也就是说,只要应将其视为非活动状态,就将其标记为非活动状态,在所有其他情况下,将其标记为"活动"。反之亦然。