- Smart Custom Fieldsの条件分岐は、どのようにコードを書くのだろう?
- 『テキスト』や『チェック』、『繰り返し』などを使用した時の、条件分岐の書き方を知りたいな!
このような疑問にお答えします!
<目次>
『テキスト』、『テキストエリア』、『画像』の条件分岐
『テキスト』、『テキストエリア』、『画像』を使用した時の条件分岐は下記のとおり。
<!-- テキスト -->
<?php $field = SCF::get('名前'); ?>
<?php if($field): ?>
<!-- 入力がある場合 -->
<p><?php echo $field; ?></p>
<!-- / 入力がある場合 -->
<?php else: ?>
<!-- 入力がない場合 -->
<p>-</p>
<!-- / 入力がない場合 -->
<?php endif; ?>
<!-- テキストエリア -->
<?php $field = SCF::get('名前'); ?>
<?php if($field): ?>
<!-- 入力がある場合 -->
<p><?php echo nl2br($field); ?></p>
<!-- / 入力がある場合 -->
<?php else: ?>
<!-- 入力がない場合 -->
<p>-</p>
<!-- / 入力がない場合 -->
<?php endif; ?>
<!-- 画像 -->
<?php $field = SCF::get('名前'); ?>
<?php if($field): ?>
<img src="<?php echo wp_get_attachment_url($field); ?>" alt="">
<?php else: ?>
<img src="<?php echo esc_url(get_theme_file_uri('img/dummy.jpg')); ?>" alt="">
<?php endif; ?>
『チェック』の条件分岐
『チェック』を使用した時の条件分岐は下記のとおり。
<?php $fields = SCF::get('名前'); ?>
<?php if($fields): ?>
<!-- 入力がある場合 -->
<?php foreach($fields as $field): ?>
<p><?php echo $field; ?></p>
<?php endforeach; ?>
<!-- / 入力がある場合 -->
<?php else: ?>
<!-- 入力がない場合 -->
<p>-</p>
<!-- / 入力がない場合 -->
<?php endif; ?>
『ラジオボタン』と『選択』の条件分岐
『ラジオボタン』と『選択』を使用した時の条件分岐は下記のとおり。
<?php $key = SCF::get('名前'); ?>
<?php if($key == '1つ目キー'): ?>
<!-- 1つ目の値を選択した場合に表示したい内容 -->
<?php elseif($key == '2つ目キー'): ?>
<!-- 2つ目の値を選択した場合に表示したい内容 -->
<?php elseif($key == '3つ目キー'): ?>
<!-- 3つ目の値を選択した場合に表示したい内容 -->
<?php else: ?>
<!-- どの値も選択していない場合に表示したい内容 -->
<?php endif; ?>
このままですとイメージしずらいですので、『ラジオボタン』のサンプルを用意しました。
Smart Custom Fieldsの設定画面
『選択肢』の箇所ですが、今回は『キー』と『値』を分ける必要があるため、上記のように設定しております。
固定ページ(投稿ページ)の編集画面
phpの設定画面
<?php $key = SCF::get('radio'); ?>
<?php if($key == 'a'): ?>
<p>バナナを選択しました。</p>
<?php elseif($key == 'b'): ?>
<p>りんごを選択しました。</p>
<?php elseif($key == 'c'): ?>
<p>なしを選択しました。</p>
<?php else: ?>
<p>何も選択していません。</p>
<?php endif; ?>
『真偽値』の条件分岐
『真偽値』を使用した時の条件分岐は下記のとおり。
<?php $fields = SCF::get('名前'); ?>
<?php if($fields): ?>
<!-- はい(true)を選択した場合に表示したい内容 -->
<?php else: ?>
<!-- いいえ(false)を選択した場合に表示したい内容 -->
<?php endif; ?>
『繰り返し』内の『サブフィールド』の条件分岐
<?php $fields = SCF::get('グループ名'); ?>
<!-- 繰り返し -->
<?php foreach($fields as $field): ?>
<?php if($field['名前']): ?>
<!-- 入力がある場合 -->
<img src="<?php echo wp_get_attachment_url($field['名前']); ?>" alt="">
<!-- / 入力がある場合 -->
<?php else: ?>
<!-- 入力がない場合 -->
<img src="<?php echo esc_url(get_theme_file_uri('img/dummy.jpg')); ?>" alt="">
<!-- / 入力がない場合 -->
<?php endif; ?>
<?php endforeach; ?>
<!-- / 繰り返し -->
『繰り返し』の条件分岐
最後は、『繰り返し』の条件分岐です。
つまり、『繰り返し』内の『サブフィールド』が入力されているかどうかで、『繰り返し』のブロック本体を表示するかどうかの条件分岐です。
『繰り返し』内の『サブフィールド』が1つの場合は下記のとおり。
<?php $fields = SCF::get('グループ名'); ?>
<?php if($fields[0]['名前']): ?>
<!-- 繰り返し -->
<?php foreach($fields as $field): ?>
<?php if($field['名前']): ?>
<!-- 入力がある場合 -->
<img src="<?php echo wp_get_attachment_url($field['名前']); ?>" alt="">
<!-- / 入力がある場合 -->
<?php else: ?>
<!-- 入力がない場合 -->
<img src="<?php echo esc_url(get_theme_file_uri('img/dummy.jpg')); ?>" alt="">
<!-- / 入力がない場合 -->
<?php endif; ?>
<?php endforeach; ?>
<!-- / 繰り返し -->
<?php else: ?>
<p>『繰り返し』の『サブフィールド』が入力されていません。</p>
<?php endif; ?>
解説しますね!
<?php if($fields[0]['名前']): ?>
こちらは、『繰り返し』内の『サブフィールド』の1つ目の箇所が入力されているかどうかを確認しております。
イメージ画像の赤枠の箇所です。
現状の仕様ですと、他に良さそうな方法がないため、このような書き方になっております。
『繰り返し』内の『サブフィールド』が複数の場合は下記のとおり。
<?php $fields = SCF::get('グループ名'); ?>
<?php if($fields[0]['名前1'] || $fields[0]['名前2'] || $fields[0]['名前3']): ?>
<!-- 繰り返し -->
<?php foreach($fields as $field): ?>
<?php if($field['名前1']): ?>
<!-- 入力がある場合 -->
<img src="<?php echo wp_get_attachment_url($field['名前1']); ?>" alt="">
<!-- / 入力がある場合 -->
<?php else: ?>
<!-- 入力がない場合 -->
<img src="<?php echo esc_url(get_theme_file_uri('img/dummy.jpg')); ?>" alt="">
<!-- / 入力がない場合 -->
<?php endif; ?>
<!-- 『else:』は省略 -->
<?php if($field['名前2']): ?>
<h3><?php echo $field['名前2']; ?></h3>
<?php endif; ?>
<!-- 『else:』は省略 -->
<?php if($field['名前3']): ?>
<p><?php echo $field['名前3']; ?></p>
<?php endif; ?>
<?php endforeach; ?>
<!-- / 繰り返し -->
<?php else: ?>
<p>『繰り返し』の『サブフィールド』が入力されていません。</p>
<?php endif; ?>
『繰り返し』内の『サブフィールド』が複数ある場合は、シンプルに論理演算子(||)を使って記述しております。