我有这段代码:
<?php if ( is_active_sidebar('lt') && is_active_sidebar('rt')) { ?>
<div class="grid_6 eqh">
<?php } elseif ( !is_active_sidebar('lt') || !is_active_sidebar('rt')) { ?>
<div class="grid_9 eqh">
<?php } elseif ( !is_active_sidebar('lt') && !is_active_sidebar('rt')) { ?>
<div class="grid_12 eqh">
<?php }; ?>
这是我正在开发的wordpress主题的一部分。根据侧边栏是否有效,它应该显示不同的类别。如果侧边栏处于活动状态,我从wp获得的响应是1,如果不是,则返回NULL。如果'lt'侧边栏处于活动状态,但是'rt'不是,它会覆盖'grid_9'div,如果没有侧边栏处于活动状态,它会显示'grid_12'div,但是如果'rt'侧边栏处于非活动状态并且'lt'处于活动状态,它仍然显示'grid_6'div。如果我删除第一个if语句:
<?php if ( is_active_sidebar('lt') && is_active_sidebar('rt')) { ?>
它不会显示任何div。
我已经尝试过每一个想到的组合,我把它分开了:
<?php } elseif ( !is_active_sidebar('lt') || !is_active_sidebar('rt')) { ?>
声明在2个不同的声明中,尝试使用单独的if语句而不使用'elseif',尝试使用'AND'和'OR'而不是'&amp;&amp;'和'||'以及其他一系列变化,但没有任何效果。
如果有人能帮助我,或者至少让我朝着正确的方向前进,我会非常感激。
按照@ one-trick-pony的建议,代码现在是:
<?php
$ltActive = is_active_sidebar('lt');
$rtActive = is_active_sidebar('rt');
if($ltActive && $rtActive){
$class = 'grid_6';
}elseif(!$ltActive && !$rtActive){
$class = 'grid_12';
}else{
$class = 'grid_9'; // <==
}
?>
<div class="<?php echo $class; ?> eqh">
php代码正常运行,但似乎WP中的is_active_sidebar()
函数存在错误,但他们忽略了我在WP支持论坛上的问题。
答案 0 :(得分:0)
首先,将返回结果放入变量中(它会加快处理速度):
$ltActive = is_active_sidebar('lt');
$rtActive = is_active_sidebar('rt');
现在,问题在于你的第二个条件 - 你正在检查是否有任何侧边栏处于非活动状态,如果其中一个或两个都没有,则第三个条件永远不会被评估。
所以:
(!$ltActive && !$rtActive)
必须先行:
(!$ltActive || !$rtActive)
(最后一个条件没有必要,你可以离开else{...}
)
好的,这是代码:
if($ltActive && $rtActive){
$class = 'class when both sidebars are active';
}else(!$ltActive && !$rtActive){
$class = 'class when both sidebars are inactive';
}else{
$class = 'class when only one of the sidebars is active (either one)';
}
?>
<div class="<?= $class; ?>">