Wordpress主题中的'if / elseif'和'is_active_sidebar'语句

时间:2013-02-18 14:26:33

标签: php wordpress if-statement

我有这段代码:

<?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支持论坛上的问题。

1 个答案:

答案 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; ?>">