カスタム投稿タイプって何?(その2)

日々の学習お疲れ様です!
今回はカスタム投稿タイプと相性抜群のプラグイン「ACF(Advanced Custom Fields)」についてご紹介します。


1. はじめに:投稿タイプだけでは足りない?

カスタム投稿タイプを導入すると、情報の整理はしやすくなりますが、
入力フィールドが「タイトル+本文」だけでは物足りない…という場面も出てきます。

そこで活用したいのがACFです。


2. ACF(Advanced Custom Fields)とは?

ACFは、投稿画面に自由な入力欄(フィールド)を追加できるプラグインです。

  • テキスト
  • 画像
  • セレクト(選択肢)
  • チェックボックス
  • 繰り返しフィールド(PRO版)

3. ACF導入のメリット

  • 知識のない方が運用更新できるよう、入力個所を設けられる。
  • テーマの表示も整いやすく、保守性UP

5. フィールドの作成

管理画面左メニュー「ACF」→「フィールドグループ」→「新規追加」

以下に飲食店サイトを例とした場合の作成方法を記述します。

  • フィールドグループ名:「季節限定メニュー」
  • フィールドタイプ:「テキスト」
  • フィールドラベル:「季節限定メニューを入力してください」
  • フィールド名:「season_menu」
  • 設定>ルールは、デフォルトのままとします。

同様に、商品画像・説明文・金額のフィールドも作成しました。

  • フィールドタイプ:画像、フィールドラベル:商品画像を選択、フィールド名:seasonMenu_img
  • フィールドタイプ:テキストエリア、フィールドラベル:メニューの詳細や説明を入力、フィールド名:seasonMenu_detail
  • フィールドタイプ:テキスト、フィールドラベル:金額を半角数字で入力、フィールド名:seasonMenu_price

変更内容を保存すると、投稿編集ページに入力エリアが出現します。▼

ですが!!
ここに値を入力しただけでは、プレビューには何も表示されません。


6. 出力する方法

ここでコードスニペット系のプラグインを使用します。
私は最近、「WPCode Lite」を使用しています。

<?php get_field('seasonMenu_img');?>
<?php the_field('seasonMenu_name');?>

このような記述で、フィールドに入力された値を呼び出す必要があります。

呼び出した値をどこに表示させたいのか指定し、HTMLの形式で出力するためには、PHPで下記のように記述します。
あくまで一例です。(今回使用しているテーマは「Astra」です。)

// 本文の末尾に ACF の値を差し込む
add_filter( 'the_content', function( $content ) {

  // 単一投稿本文/メインクエリのみ
  if ( ! is_singular('post') || ! in_the_loop() || ! is_main_query() ) {
    return $content;
  }

  // ACFの取得
  $name   = get_field('seasonMenu_name');
  $price  = get_field('seasonMenu_price');
  $img    = get_field('seasonMenu_img');
  $detail = get_field('seasonMenu_detail');

  // 何もなければそのまま返す
  if ( ! $name && ! $price && ! $img && ! $detail ) {
    return $content;
  }

  // 出力HTML(必要に応じてマークアップ調整)
  ob_start(); ?>
  <section class="season-menu mt-6">
    <?php if ($name): ?>
      <h3 class="season-menu__title"><?php echo esc_html($name); ?></h3>
    <?php endif; ?>

    <?php if ($price): ?>
      <p class="season-menu__price"><?php echo esc_html( $price ); ?>円</p>
    <?php endif; ?>

    <?php if ($img): ?>
      <?php echo wp_get_attachment_image( $img['ID'], 'large', false, [ 'alt' => $img['alt'] ] ); ?>
    <?php endif; ?>

    <?php if ($detail): ?>
      <div class="season-menu__detail"><?php echo wpautop( esc_html($detail) ); ?></div>
    <?php endif; ?>
  </section>
  <?php
  $acf_html = ob_get_clean();

  // 末尾に追加(先頭に出したい場合は $acf_html . $content にする)
  return $content . $acf_html;
});

ではあらためて、投稿編集ページに値を入力、プレビューで確認してみましょう。

7. まとめ

もちろんCSSを使って見た目を整えることができます。
これで、メニュー紹介ページのテンプレートができました。

このようにテンプレート化して納品すれば、クライアントでも簡単に記事更新できるつくりになります。
カスタム投稿タイプと併用することで、カスタム投稿タイプごとにテンプレートの作成も可能!
是非活用してください!!

コメントする

上部へスクロール