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 }; ?>

これは、私が開発しているワードプレスのテーマの一部です。サイドバーがアクティブかどうかに応じて、さまざまなクラスが表示されるはずです。サイドバーがアクティブな場合は 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')) { ?>

'elseif' なしで別々の if ステートメントを試し、'&&' と '||' の代わりに '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');

ここで、問題は 2 番目の状態にあります。サイドバーのいずれかが非アクティブかどうかを確認しており、いずれかまたは両方がアクティブである場合、3 番目の状態は評価されません。

そう:

(!$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 に答える