[wp]SmartCustomFieldsの真偽値を含む繰り返しの入力判定

ラッピングの表示・非表示に役立つ内容。

基本的な繰り返し活用

こんな感じで使う。

<?php foreach( SCF::get('example') as $fields): ?>
    <p><?php echo $fields['example_text']; ?></p>
<?php endforeach; ?>

動作としては書いてあればそれを表示するという内容。

今は使わないけど後で使うとか、バックアップしたい場合は真偽を入れることで表示・非表示の切り替えができる。

<?php 
    foreach( SCF::get('example') as $fields): 
        if($fields['example_check']):
?>
    <p><?php echo $fields['example_text']; ?></p>
<?php
        endif;
    endforeach;
 ?>

ラッピングの表示・非表示を操作したい場合

HTMLでこういう形を組んだとする。

<h1>タイトル</h1>
<ul>
    <li><a href="">...</a></li>
    ︙
</ul>

<li>を繰り返しで出力するのだけど、問題は出力する内容がない場合。

「記事がありません」みたいな文言を出す場合もあれば、そもそも全部非表示にしたいという場合もある。

繰り返しに真偽、ラジオボタンを入れた場合、繰り返しそのものに対してemptyが使えない。使えないというか、ラジオボタンはどれかにチェックが入っている前提があるので空欄になる状況がない。

ということでこうなる。

<?php 
    $count = 0;
    foreach( SCF::get('example') as $fields):
        if($fields['example_check']):
            $count++;
        endif;
    endforeach;
    if($count != 0):
?>
<h1>タイトル</h1>
<ul>
<?php 
    foreach( SCF::get('example') as $fields): 
        if($fields['example_check']):
?>
    <li><a href="<?php echo $fields['example_url']; ?>"><?php echo $fields['example_text']; ?></a></li>
<?php
        endif;
    endforeach;
 ?>
</ul>
<?php endif; ?>

測定用に変数($count)を作って、初期値を0にする。繰り返しの中に真偽がtrueのものがあれば+1。0じゃなければ表示する。

foreachを1つ増やすことになるのであまり気持ちのいいものじゃないけど、後付することになってもそこまでの手間にならないので良しとする。処理が重複してる部分があるので気持ち悪いけども。

これの応用で、elseをつけたら「記事はありません」みたいな代替テキストを表示させることもできる。

コメント

タイトルとURLをコピーしました