2017-05-03 19 views
3

以下のコードは、Wordpressのメンバーが男性か女性かをチェックし、これに基づいて特定のコードを表示しています。私は以下のコードを最適化しようとしています。これは、コードブロック全体を2つにする必要がないようにするためです。これは、コードの場合はACFの最初の部分を条件付きでチェックするだけです?どうすればこれを達成できますか?複数のPHP ifステートメント

現在のコードは正しく動作していますが、重複したコードが多数表示されます。以下の試行はうまくいかず、<? endif; ?>タグと混同しているようですか?

CURRENT

<?php if ($memberGender == "male") : ?> 
<section> 
    <?php if(have_rows('accordion_section_boys')): ?> 
    <?php while(have_rows('accordion_section_boys')): the_row(); ?> 

    <div class="accordion-section"> 
     BOY SPECIFIC CONTENT 
    </div> 
    <?php endwhile; ?> 
    <?php endif; ?> 
</section> 
<?php endif; ?> 

<?php if ($memberGender == "female") : ?> 
<section> 
    <?php if(have_rows('accordion_section_boys')): ?> 
    <?php while(have_rows('accordion_section_boys')): the_row(); ?> 

    <div class="accordion-section"> 
     GIRL SPECIFIC CONTENT 
    </div> 
    <?php endwhile; ?> 
    <?php endif; ?> 
</section> 
<?php endif; ?> 

ATTEMPT

<section> 
    <?php if ($memberGender == "male") : ?> 
     <?php if(have_rows('accordion_section_boys')): ?> 
     <?php while(have_rows('accordion_section_boys')): the_row(); ?> 
    <?php endif; ?> 

    <?php if ($memberGender == "female") : ?> 
     <?php if(have_rows('accordion_section_girls')): ?> 
     <?php while(have_rows('accordion_section_girls')): the_row(); ?> 
    <?php endif; ?> 

    <div class="accordion-section"> 
     GENDER SPECIFIC CONTENT (BOY OR GIRL) 
    </div> 
    <?php endwhile; ?> 
    <?php endif; ?> 
</section> 
<?php endif; ?> 
+0

のように、あなたの試みは唯一、1 'endwhile'を持っているが良いサインではありません。 –

+0

あなたの新しいコードではどんな結果が得られますか? – Scriptman

+0

両方のセクションに2つのifと1つのendifがあります。そして2つのwhilesは1つだけ終わり。だから、あなたはいつも男性のコンテンツを取得しますが、女性のコンテンツは取得しません。 – aynber

答えて

1
<section> 
    <?php if ($memberGender == "male") : ?> 
     <?php $val = 'accordion_section_boys';?> 
    <?php endif; ?> 
    <?php if ($memberGender == "female") : ?> 
     <?php $val = 'accordion_section_girls';?> 
    <?php endif; ?> 
    <?php if(have_rows($val)): ?> 
    <?php while(have_rows($val)): the_row(); ?> 

     <div class="accordion-section"> 
      BOY SPECIFIC CONTENT 
     </div> 
    <?php endwhile; ?> 
    <?php endif; ?> 
<section> 
+1

パーフェクト - ありがとう!私はこれを正しい答えとしてマークしました。質問をアップアップしてください。 –

+0

@ dungey_140もし2番目の場合はelseを使うのが良いでしょう。 '$ memberGender'が男性と女性に等しくなければ、この答えは問題を引き起こす可能性があります。また、この単純なことのために '<?php'を開いたり閉じたりする必要があるのはなぜですか?この場合は必要ありません。コードを読みにくくしてデバッグするのが難しくなります。 – ICE

0

私のようなものを示唆している:あなたは、コードに気付いた場合、私はテンプレートを使用するためにあなたに言った

<?php 

$genders = array(
    'male' => 'accordion_section_boys', 
    'female' => 'accordion_section_girls', 
); 

foreach ($genders as $gender => $rows_id) { 

     while(have_rows($rows_id)) { 

      // Here use a template to print the content, by name them like "template-male" and "template-female" 
      include 'template-' . $gender . '.php'; 

     } 

} 

?> 

をHTMLを表示するので、あなたはc動的にそれらを呼び出すと内容は次のようになります。

<section> 
    <div class="accordion-section"> 
     CONTENT 
    </div> 
</section> 
0

彼らは同じ構造を持っているので、あなたがこのような何か行うことができます。

<?php 

    if ($memberGender == 'male' || $memberGender == 'female'){ 

     $indicator = ($memberGender == 'male')? 'boys' : 'girls'; 

     if(have_rows('accordion_section_'.$indicator)){ 
      while(have_rows('accordion_section_'.$indicator)){ 
       the_row(); 
      } 
     } 
    } 
?> 
関連する問題