2026年5月28日

2026年5月28日

Meta Boxでカスタムフィールドを作る方法|rwmb_meta_boxesでの登録と表示

Meta Box は、投稿や固定ページ、カスタム投稿タイプの編集画面に独自の入力欄(カスタムフィールド)を追加するためのプラグインです。フィールドはPHPの配列で定義し、rwmb_meta_boxes フィルターに登録します。この記事では、イベント情報(会場・定員・開催形式・申込URL)を投稿に追加する例で、登録から表示までを順に説明します。

Meta Boxでできること

  • 投稿・固定ページ・カスタム投稿タイプの編集画面に入力欄を追加する
  • テキスト、数値、URL、セレクトボックス、日付、画像など多数のフィールドタイプを使う
  • 入力値を投稿のメタデータ(wp_postmeta テーブル)に保存し、テーマのテンプレートで表示する

wordpress.org で配布されている Meta Box 本体は、フィールドをコードで定義するためのフレームワークです。管理画面からフィールドを作る画面(MB Builder)は拡張機能で、2026年10月時点では、MB Builder を含む無料パッケージ「Meta Box Lite」が公式サイト(metabox.io)で配布されています。この記事では、本体だけで使えるコードでの登録方法を扱います。

ステップ1:Meta Boxをインストールする

管理画面の「プラグイン」→「新規プラグインを追加」で「Meta Box」を検索し、作者が「Meta Box」のプラグインをインストールして有効化します。WP-CLI を使える場合は次のコマンドでも同じです。

wp plugin install meta-box --activate

ステップ2:フィールドを登録する

フィールドは rwmb_meta_boxes フィルターで登録します。フィルターは登録済みのメタボックスの配列を受け取るので、そこに自分の定義を追加して返します。コードは子テーマの functions.php か、自作のプラグインに書きます(親テーマに書くと、テーマの更新で消えます)。

<?php
// 子テーマの functions.php、または自作プラグインに追加
add_filter( 'rwmb_meta_boxes', function ( $meta_boxes ) {
    $meta_boxes[] = [
        'title'      => 'イベント情報',
        'id'         => 'event_info',
        'post_types' => [ 'post' ],
        'context'    => 'normal',
        'priority'   => 'high',
        'fields'     => [
            [
                'name' => '会場',
                'id'   => 'event_venue',
                'type' => 'text',
                'desc' => '例: 〇〇市民ホール 大ホール',
            ],
            [
                'name' => '定員',
                'id'   => 'event_capacity',
                'type' => 'number',
                'min'  => 0,
            ],
            [
                'name'        => '開催形式',
                'id'          => 'event_format',
                'type'        => 'select',
                'placeholder' => '選択してください',
                'options'     => [
                    'onsite' => '会場開催',
                    'online' => 'オンライン',
                    'hybrid' => 'ハイブリッド',
                ],
            ],
            [
                'name' => '申込ページのURL',
                'id'   => 'event_url',
                'type' => 'url',
            ],
        ],
    ];

    return $meta_boxes;
} );

これで、投稿の編集画面に「イベント情報」の入力欄が表示されます。登録だけで保存処理も行われるため、add_meta_box() や save_post のコードを自分で書く必要はありません。

メタボックスの主な設定

キー 内容
title 編集画面に表示する見出し(必須)
id メタボックスの識別子。省略すると題名から作られるが、明示するのがおすすめ
post_types 表示する投稿タイプ。文字列か配列で指定(省略時は post)
context 表示位置。normal(既定)・side など。ブロックエディターで使えるのは normal と side だけ
priority high(既定)か low
autosave 自動保存の対象にするか(既定は false)
fields フィールドの定義の配列

フィールドの主な設定

キー 内容
name 入力欄のラベル
id フィールドの識別子。投稿メタのキーとしてそのまま使われる
type フィールドタイプ(text・number・url・select など)
desc 入力欄の下に出る説明

フィールドの id はメタキーになるため、他のプラグインやテーマと重ならないように、event_ のような接頭辞を付けておくと安全です。

ステップ3:テンプレートで値を表示する

保存した値は rwmb_meta() で取り出します。第1引数がフィールドの id、第3引数を省略すると現在の投稿が対象です。次のコードは single.php などのループ内で使う例です。

<?php
// single.php などのループ内(Meta Box が無効のときは何も出さない)
if ( function_exists( 'rwmb_meta' ) ) :
    $venue    = rwmb_meta( 'event_venue' );
    $capacity = rwmb_meta( 'event_capacity' );
    $format   = rwmb_meta( 'event_format' );
    $url      = rwmb_meta( 'event_url' );
    ?>
    <dl class="event-info">
        <?php if ( $venue ) : ?>
            <dt>会場</dt>
            <dd><?php echo esc_html( $venue ); ?></dd>
        <?php endif; ?>

        <?php if ( '' !== (string) $capacity ) : ?>
            <dt>定員</dt>
            <dd><?php echo esc_html( number_format( (int) $capacity ) ); ?>名</dd>
        <?php endif; ?>

        <?php if ( $format ) : ?>
            <dt>開催形式</dt>
            <dd><?php rwmb_the_value( 'event_format' ); ?></dd>
        <?php endif; ?>

        <?php if ( $url ) : ?>
            <dt>申込</dt>
            <dd><a href="<?php echo esc_url( $url ); ?>">申込ページを開く</a></dd>
        <?php endif; ?>
    </dl>
<?php endif; ?>

ポイントは次の3つです。

  • セレクトボックスの場合、rwmb_meta() が返すのは保存された値(online など)です。ラベル(「オンライン」)を表示したいときは rwmb_the_value() を使います。rwmb_the_value() は既定で値をそのまま出力します
  • 出力するときは esc_html()・esc_url() でエスケープします
  • function_exists( 'rwmb_meta' ) で囲んでおくと、Meta Box を停止したときにテンプレートが致命的エラーで止まるのを防げます

プラグインに依存しない読み出し方

テキストや数値のような単一の値は、フィールドの id をメタキーとして wp_postmeta に保存されます。そのため、WordPress標準の get_post_meta() でも読み出せます。

<?php
// プラグインに依存しない読み出し(単一値のフィールド向け)
$venue = get_post_meta( get_the_ID(), 'event_venue', true );
if ( $venue ) {
    echo '<p>会場: ' . esc_html( $venue ) . '</p>';
}

ただし、複数選択や複製(clone)を有効にしたフィールドは保存形式が変わるため、rwmb_meta() で読み出すほうが確実です。

うまくいかないときの確認点

  • 入力欄が表示されない:編集画面の表示設定(ブロックエディターでは右上の「︙」から開く「設定」)で、メタボックスが非表示にされていないかを確認します。post_types に対象の投稿タイプが入っているかも確認します
  • ブロックエディターで表示位置が変わらない:context に after_title などを指定しても、ブロックエディターでは normal(本文の下)か side(サイドバー)にしか表示されません
  • 値が表示されない:テンプレートの rwmb_meta() に渡している id が、登録したフィールドの id と一致しているかを確認します

注意点

  • フィールドの id を後から変えると、保存済みの値は古いメタキーに残ったまま読み出せなくなります。運用を始める前に名前を決めておきます
  • フィールドを大量に作ると、編集画面が重くなり、入力の手間も増えます。テンプレートで実際に使う項目だけに絞ります
  • 本番サイトで試す前に、ステージング環境やローカル環境で表示と保存を確認しておくと安全です

まとめ

  • Meta Box 本体はフィールドをコードで定義するフレームワーク。rwmb_meta_boxes フィルターに配列を追加して返すと、入力欄と保存処理が用意される
  • 値は rwmb_meta() で取り出し、セレクトボックスのラベルは rwmb_the_value() で表示する。出力時はエスケープする
  • 単一値のフィールドは get_post_meta() でも読める。id は接頭辞付きで、運用開始後は変えない

関連記事

お気軽にご相談ください

お見積りへ お問い合わせへ
▲