かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

WordPress CMB2でデフォルトのページテンプレートだけにカスタムフィールドを付けたい


コードベースでWordPressのカスタムフィールドを作成できる CMB2 を愛用しています。
( 以前 Custom-Metaboxes-and-Fields-for-WordPress だったものが CMB2 という名前になり開発されています。 )

デフォルトテンプレートの固定ページにのみカスタムフィールドを作成する

テーマのテンプレートを使用していない「デフォルトテンプレート」のままの固定ページにのみ、CMB2でカスタムフィールドを作成する場合は下記のように指定をすればOK

  1. カスタムフィールドを表示する投稿タイプの設定 object_typespage にする
  2. show_on オプションで ['key' => 'page-template', 'value' => 'default'] とページテンプレートのデフォルトと指定

EX:

<?php // function.php

if( file_exists(  __PLUGINS__ . '/cmb2/init.php' ) ){
  require_once( __PLUGINS__ . '/cmb2/init.php' );
  add_filter( 'cmb2_admin_init', 'add_my_custom_metaboxes' );
}

function add_my_custom_metaboxes() {
  // Page (default template)
  $prefix = '_page_';
  $cmb_page = new_cmb2_box([
    'id'           => 'page_title',
    'title'        => 'ページタイトル',
    'object_types' => ['page'],
    'show_on'      => [
      'key'   => 'page-template',
      // 'default' を指定するのがポイント!
      'value' => 'default',
    ],
    'context'      => 'side',
    'priority'     => 'default',
    'show_names'   => false,
  ]);
  $cmb_page->add_field([
    'name'   => 'page_top_title',
    'id'     => $prefix . 'top_title',
    'type'   => 'text',
    'attributes' => [
      'placeholder' => 'ページタイトルを入力してください',
    ],
  ]);
}

👇 f:id:kikiki-kiki:20170701225158p:plain
こんな感じに、簡単に「デフォルトテンプレートの固定ページ」にのみカスタムフィールドを作成することができました!

特定のテンプレートの固定ページにカスタムフィールドを作成する場合は、show_onvalueをテンプレートファイル名にするだけ。
フォルダに入れている場合は、<フォルダ名>/<テンプレートファイル名>.php とすればOKです。

CMB2とっても簡単にカスタムフィールドが作成できるので ネ申 !!


エンジニアのためのWordPress開発入門 (Engineer's Library)

エンジニアのためのWordPress開発入門 (Engineer's Library)