本ページはプロモーションが含まれています

【保存版】Smart Custom Fields(SCF)の出力方法まとめ|コピペOKな実務用コード集

公開日

更新日

WordPress制作の現場で欠かせない国産のカスタムフィールドプラグイン「Smart Custom Fields(SCF)」。動作が軽く、一度設定すれば非常に便利ですが、出力用コードの書き方は意外と忘れがちですよね。

今回は、私が実務で何度も見返している「SCF出力コードの決定版」をまとめました。自分用の備忘録を兼ねたスニペット集ですので、ぜひコピペして活用してください。


1. テキスト(Text)

最も基本となるフィールドです。値がない場合に空のタグが出力されないよう、if文による条件分岐をセットで使うのが「プロの作法」です。

まずはSmart Custom Fieldsを有効化し、新規作成からフィールドを構築しましょう。今回は「固定ページ」での使用を想定し、表示条件で「固定ページ」を有効にした設定を例に解説します。

  1. タイプ:テキスト
  2. ラベル:テキスト(Text)
  3. 名前:field_name

ここで重要になるのが「名前」の項目です。これはPHP側で値を呼び出す際のIDとなるため、後から見ても役割が分かりやすい英単語(スネークケース推奨)で命名することをお勧めします。

設定が完了したら、固定ページの編集画面へ移動してフィールドが表示されているか確認しましょう。エディタの下部にフィールドが表示されていれば準備完了です。任意のテキストを入力してページを更新しましょう。

テンプレートファイル(page.phpなど)の出力したい箇所に、以下のコードを記述します。

<?php
  $text = SCF::get('field_name');
  if ( !empty($text) ) : 
    echo esc_html($text);
  endif;
?>

2. テキストエリア(Textarea):改行を有効にする

テキストエリアで入力した「改行」を反映させるには、PHPの nl2br() 関数を組み合わせます。

<?php
  $textarea = SCF::get('field_textarea');
  if ( !empty($textarea) ) :
    echo nl2br(esc_html($textarea));
  endif;
?>

3. ラジオボタン・チェックボックス

ラジオボタン(単一選択)

<?php echo esc_html(SCF::get('field_radio')); ?>

チェックボックス(複数選択)

チェックボックスは複数の値が「配列」で取得されるため、foreachを使ってループ処理を行います。

<?php
  $check_array = SCF::get('field_checkbox');
  if ( !empty($check_array) ) :
    echo '<ul class="cmn_list">';
    foreach ( $check_array as $value ) {
      echo '<li>' . esc_html($value) . '</li>';
    }
    echo '</ul>';
  endif;
?>

4. 画像(Image):src URLを安全に出力

SCFは「画像ID」を返します。このIDからURLとalt属性を取得する、保守性の高い書き方です。

<?php
  $img_id = SCF::get('field_image');
  if ( !empty($img_id) ) :
    $img_data = wp_get_attachment_image_src($img_id, 'full');
    $img_url  = $img_data[0];
    $img_alt  = get_post_meta($img_id, '_wp_attachment_image_alt', true);
?>
    <img src="<?php echo esc_url($img_url); ?>" alt="<?php echo esc_attr($img_alt); ?>">
<?php endif; ?>

5. 繰り返しフィールド(Repeat Group)

各子フィールドの「名前(キー)」を呼び出してループ処理を行います。

<?php
  $repeat_group = SCF::get('group_name'); 
  if ( !empty($repeat_group) ) :
    foreach ( $repeat_group as $fields ) :
      if ( !empty($fields['item_title']) ) :
?>
        <div class="custom_item">
          <h3><?php echo esc_html($fields['item_title']); ?></h3>
          <p><?php echo nl2br(esc_html($fields['item_text'])); ?></p>
        </div>
<?php
      endif;
    endforeach;
  endif;
?>

💡 開発メモ:デザインを崩さないためのコツ

クライアントワークでは、「入力がある時だけセクションごと表示する」という処理が非常に重要です。今回紹介した if ( !empty($var) ) をセクションを囲むタグの外側に配置することで、不要な余白や空タグの発生を防ぐことができます。

これらのスニペットをストックしておけば、次からのコーディング効率がグッと上がるはずです。他にも「この項目の書き方は?」といったリクエストがあれば、随時追記していきます!