Smart Custom Fieldsをfunctions.phpから追加する
Smart Custom Fieldsの便利な所。
smart-cf-register-fieldsフックを使ってfunctions.php等から呼び出せるので重宝しています。
例えば、特定の投稿IDにのみの利用の場合はデフォルトでも可能ですが、
特定の固定ページの子ページのみ(特定の親を持つ子ページのみ)等の設定までできてしまうし、
環境を移す際の反映も簡単にできてしまうわけです。
Smart Custom Fields でカスタムフィールドの定義を Git で管理できるようになりました!
記述
基本的な記述
function my_register_fields( $settings, $type, $id, $meta_type ) {
$Setting = SCF::add_setting( 'カスタムフィールド用ユニークなID', 'メタボックスのタイトル' );
$Setting->add_group( 'フィールドグループ用ユニークなID', 繰り返すかをtrueかfalseで, array(
array(
'name' => 'ユニークなフィールドの名前',
'label' => 'フィールドのラベル',
'type' => 'タイプ',
),
array(
'name' => 'ユニークなフィールドの名前2',
'label' => 'フィールドのラベル2',
'type' => 'タイプ',
),
));
$settings[] = $Setting;
return $settings;
}
add_filter( 'smart-cf-register-fields', 'my_register_fields', 10, 4 );
タイプ別の記述
タイプの箇所へは、テキスト、チェックボックス等の指定を記述します。
テキスト
array(
'type' => 'text', // タイプ
'name' => 'scf-1', // 名前
'label' => 'テキストのテスト', // ラベル
'default' => 'デフォルト値', // デフォルト
'instruction' => '説明文です。', // 説明文
'notes' => 'ここに注記' // 注記
),
真偽値
array(
'type' => 'boolean', // タイプ
'name' => 'scf-2', // 名前
'label' => '真偽値のテスト', // ラベル
'default' => true, // デフォルト true or false
'true_label' => 'はい', // TRUE ラベル
'false_label' => 'いいえ', // FALSE ラベル
'instruction' => 'ここにテキスト', // 説明文
'notes' => 'ここに注記', // 注記
),
テキストエリア
array(
'type' => 'textarea', // タイプ
'name' => 'scf-3', // 名前
'label' => 'テキストエリアのテスト', // ラベル
'default' => 'デフォルトのテキスト', // デフォルト
'rows' => 5, // 行数
'instruction' => 'ここにテキスト', // 説明文
'notes' => 'ここに注記', // 注記
),
チェックボックス
array(
'type' => 'check', // タイプ
'name' => 'scf-4', // 名前
'label' => 'チェックボックスのテスト', // ラベル
'choices' => array(
'key' => 'value',
'キー' => '値',
// 'ダブルアローがない場合', // エラーになります
'選択肢1' => '値1',
'選択肢2' => '値2',
'apple' => 'りんご',
'banana' => 'バナナ',
// キー名がBoolean型の場合、ラベルがキーとなります
true => 'はい', // 取り出すと true ではなく 'はい' となります
false => 'いいえ', // 取り出すと false ではなく 'いいえ' となります
),
'check_direction' => 'horizontal', // 表示方向 vertical or horizontal
'default' => array('apple', 'banana'), // デフォルト値。連想配列キー名を入れます。
'instruction' => 'ここにテキスト', // 説明文
'notes' => 'ここに注記', // 注記
),
ラジオボタン
array(
'type' => 'radio', // タイプ
'name' => 'scf-5', // 名前
'label' => 'ラジオボタンのテスト', // ラベル
'choices' => array(
'key' => 'value',
'キー' => '値',
// 'ダブルアローがない場合', // エラーになります
'選択肢1' => '値1',
'選択肢2' => '値2',
'apple' => 'りんご',
'banana' => 'バナナ',
),
'check_direction' => 'horizontal', // 表示方向 vertical or horizontal
'default' => 'apple', // デフォルト値。
'instruction' => 'ここにテキスト', // 説明文
'notes' => 'ここに注記', // 注記
),
セレクトボックス
array(
'type' => 'select', // タイプ
'name' => 'scf-5', // 名前
'label' => 'ラジオボタンのテスト', // ラベル
'choices' => array(
'key' => 'value',
'キー' => '値',
// 'ダブルアローがない場合', // エラーになります
'選択肢1' => '値1',
'選択肢2' => '値2',
'apple' => 'りんご',
'banana' => 'バナナ',
),
'default' => 'apple', // デフォルト値。
'instruction' => 'ここにテキスト', // 説明文
'notes' => 'ここに注記', // 注記
),
ファイル
array(
'type' => 'file', // タイプ
'name' => 'scf-7', // 名前
'label' => 'ファイルのテスト', // ラベル
'notes' => 'ここに注記', // 注記
),
画像
array(
'type' => 'image', // タイプ
'name' => 'scf-8', // 名前
'size' => 'full', // プレビューサイズ full, thumbnail, medium or large
'label' => 'ファイルのテスト', // ラベル
'notes' => 'ここに注記', // 注記
),
WYSIWYGエディタ
array(
'type' => 'wysiwyg', // タイプ
'name' => 'scf-9', // 名前
'default' => 'デフォルトの内容', // default
'label' => 'WYSIWYGエディタのテスト', // ラベル
'notes' => 'ここに注記', // 注記
),
カラーピッカー
array(
'type' => 'colorpicker', // タイプ
'name' => 'scf-10', // 名前
'default' => '#937cf9', // デフォルト値をRGBで
'label' => 'カラーピッカーのテスト', // ラベル
'notes' => 'ここに注記', // 注記
),
デイトピッカー
array(
'type' => 'datepicker', // タイプ
'name' => 'scf-11', // 名前
'default' => '2018/01/01', // デフォルト値
'date_format' => 'yy/mm/dd', // 日付のフォーマット。画面とデータベースの値の両方に影響します。
'max_date' => '+100y', // デイトピッカーで表示されるカレンダーの未来の最大値
'min_date' => '-100y',
'label' => 'ファイルのテスト' // ラベル
'notes' => 'ここに注記', // 注記
),
関連記事
array(
'type' => 'relation', // タイプ
'name' => 'scf-12', // 名前
'post-type' => array( 'post', 'page' ), // 表示する投稿タイプ
'label' => 'ファイルのテスト' // ラベル
'notes' => 'ここに注記', // 注記
),
関連ターム
array(
'type' => 'taxonomy', // タイプ
'name' => 'scf-13', // 名前
'post-type' => array( 'category', 'tag' ), // 表示するタクソノミー
'label' => 'ファイルのテスト' // ラベル
'notes' => 'ここに注記', // 注記
),
例)特定の親を持つ子ページ
add_filter('smart-cf-register-fields', 'my_add_meta_box', 10, 4);
function my_add_meta_box($settings, $post_type, $post, $meta_type) {
$my_post = false;
switch($meta_type) {
case 'post':
$my_post = _hny_my_get_posts($post);
break;
case 'term':
break;
}
if($my_post) {
$settings = test_add_meta_box_test($settings, $post_type, $my_post, $meta_type);
}
return $settings;
}
function _hny_my_get_posts($my_post_id) {
$args = array(
'p' => $my_post_id,
'post_type' => 'any'
);
$my_post = get_posts($args);
if(is_array($my_post)) {
$my_post = reset($my_post);
}
return $my_post;
}
function test_add_meta_box_test($settings, $post_type, $my_post, $meta_type) {
if($meta_type == 'post' && $post_type == 'page' && $my_post->post_parent == 投稿ID) {
$Setting = SCF::add_setting('カスタムフィールド用ユニークなID', 'メタボックスのタイトル');
$Setting->add_group('フィールドグループ用ユニークなID', 繰り返すかをtrueかfalseで, array(
array(
'name' => 'ユニークなフィールドの名前',
'label' => 'フィールドのラベル',
'type' => 'タイプ',
),
array(
'name' => 'ユニークなフィールドの名前2',
'label' => 'フィールドのラベル2',
'type' => 'タイプ',
),
));
$settings[] = $Setting;
return $settings;
}
return $settings;
}
add_filter('smart-cf-register-fields', 'my_register_fields', 10, 4);
フィールドを増やしていく場合は、
$Setting->add_group
からを足していく。



