Web制作にちょっと役立つWebメディア

条件分岐で条件に当てはまった投稿を非表示にする

どうも、Link-Web管理人です!

 

仕事でちょっと悩んだので備忘録的に残します。

タイトルの通り、「条件分岐で条件に当てはまった投稿を非表示にさせたい」ときの方法です。

リンクマン

オイラは販売管理のカスタム投稿タイプで、「在庫のカスタムフィールドを売り切れに指定したときに、商品一覧のアーカイブから非表示にさせたい」というときに、これから紹介する方法で解決したで

 

内容

具体的なコードはこんな感じ(※実際のコードではありません!)

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<div id="post-<?php the_ID(); ?>">
  <p class="soldout">
    <?php if (get_field('soldout') == "SOLD OUT"): ?> // ※①soldoutフィールドでSOLD OUTを選択すると
    <span><?php the_field('soldout'); ?></span> // soldoutと表示されるように設定
    <?php else : ?>
    <?php endif; ?></p>
  <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('medium'); ?></a>
  <h4><?php the_title(); ?></h4>
  <table>
    // 販売商品の内容
  </table>
</div>
<?php endwhile; ?>
<?php endif; ?>

このように、元々は※①の条件で、商品画面に「soldout 」と表示させていたのですが、これを「非表示にさせる」ように変更したかったんですね。

 

解決方法

これを以下のように編集。

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php if (get_field('soldout') == "SOLD OUT") continue; ?> // ←この1行を追加!
<div id="post-<?php the_ID(); ?>">
  <p class="soldout">
    <?php if (get_field('soldout') == "SOLD OUT"): ?>
    <span><?php the_field('soldout'); ?></span>
    <?php else : ?>
    <?php endif; ?></p>
  <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('medium'); ?></a>
  <h4><?php the_title(); ?></h4>
  <table>
    // 販売商品の内容
  </table>
</div>
<?php endwhile; ?>
<?php endif; ?>

2行目のコードを追加して実現できました!

何をしているかというと、条件式に「continue」を追加して、そのあとの処理をまるっとスキップさせたような形です。

 

もうそのあとのif文は不要になるので、消してしまってOKですね。

  

リンクマン

こうやって考えると超シンプルに実現できたわ