1

我有这个代码:

<?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' 而不是 '&&' 和 '||' 和一大堆其他变体,但没有任何效果。

如果有人可以帮助我或至少让我朝着正确的方向前进,我将不胜感激。

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

4

1 回答 1

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; ?>">
于 2013-02-18T14:38:39.490 回答