ワードプレスTips

ワードプレスの使い方やカスタマイズを備忘録としてまとめています。

カスタムフィールドを使って入力フォームを追加して利用する

カスタムフィールドを使って管理画面の投稿ページで入力フォームを追加する方法とテーマ内での利用方法をまとめました。

基本的な追加方法

f:id:ryo919:20161007115043p:plain

投稿画面の上の表示オプションをクリックすると表示される

「カスタムフィールド」のチェックボックスをチェックすると

「カスタムフィールド」を追加できる入力フォームが表示されます。

f:id:ryo919:20161007115932p:plain

名前と値を入力してから「カスタムフィールドを追加」をクリックしてください。

 

テーマ内でカスタムフィールドのデータを利用する

名前「test」値「テスト」

名前「test2」値「テスト2」

と投稿した場合にテーマ内で

<?php the_meta(); ?> 

を使用すると下記のように表示されます。

◆get_post_custom

指定した記事や固定ページから、すべてのカスタムフィールドの情報を配列で取得

関数リファレンス/get post custom - WordPress Codex 日本語版

<?php $meta = get_post_custom(); ?>

 配列に格納されます。

Array
(
[_edit_last] => Array
  (
  [0] => 1
  )

[_edit_lock] => Array
  (
  [0] => 1475808515:1
  )

[test] => Array
  (
  [0] => テスト
  )

[test2] => Array
  (
  [0] => テスト2
  )

[_cmb_test_text] => Array
  (
  [0] => いいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいい
  )

)

その他

 

テンプレートタグ

特定の投稿の特定のキーからカスタムフィールドの値を取得します。

関数リファレンス/get post meta - WordPress Codex 日本語版

 

カスタムメタデータの名前・値を取得

指定した記事や固定ページから、すべてのカスタムフィールドのキーを配列で取得します。

関数リファレンス/get post custom keys - WordPress Codex 日本語版

 

1 つのキーに複数の値が割り付けられているカスタムフィールドの値を取得するのに向いています。

関数リファレンス/get post custom values - WordPress Codex 日本語版

 

追加、更新、削除

指定した投稿や固定ページへカスタムフィールドを追加します。

関数リファレンス/add post meta - WordPress Codex 日本語版

 

指定した投稿に存在するカスタムフィールドの値を更新

関数リファレンス/update post meta - WordPress Codex 日本語版

 

投稿から指定したキー(もしくはキーと値)を持つカスタムフィールドをすべて削除

関数リファレンス/delete post meta - WordPress Codex 日本語版

 

プラグインのメタボックスを利用してカスタムフィールドの代わりに使う

入力フォームをカスタムフィールドを使わずに追加できる方法です。

メタボックスだと常に投稿時に表示されているので

毎回同じ項目をカスタムフィールドで作成している場合にオススメです。

CMB2 — WordPress Plugins

プラグインをインストールできたらfuctions.phpに以下のコードを記入するとメールアドレス入力欄が作成できます。

function cmb2_text_email_metabox() {
    $cmb = new_cmb2_box( array(
        'id'           => 'cmb2_text_email_metabox',
        'title'        => 'Person Information',
        'object_types' => array( 'post' ),
    ) );
    $cmb->add_field( array(
        'name' => 'メールアドレス',
        'id'   => '_cmb2_person_email',
        'type' => 'text_email',
        'desc' => 'メールアドレスを入力してください。',
    ) );
}
add_action( 'cmb2_admin_init', 'cmb2_text_email_metabox' );

テーマ内で
$meta = get_post_custom();
を使用すると配列に格納されています。
Array
(
    [_edit_last] => Array
        (
            [0] => 1
        )

    [_edit_lock] => Array
        (
            [0] => 1475828725:1
        )

    [_cmb2_person_email] => Array
        (
            [0] => test@test.com
        )

)

サンプルフォーム

利用できる投稿タイプを指定

'object_types' => array( 'post', 'page', ), // Post type

post:記事の投稿

page:固定ページ

その他

Display Options · WebDevStudios/CMB2 Wiki · GitHub

add_action( 'cmb2_admin_init', 'cmb2_sample_metaboxes' );
/**
 * Define the metabox and field configurations.
 */
function cmb2_sample_metaboxes() {

    // Start with an underscore to hide fields from custom fields list
    $prefix = '_yourprefix_';

    /**
     * Initiate the metabox
     */
    $cmb = new_cmb2_box( array(
        'id'            => 'test_metabox',
        'title'         => __( 'Test Metabox', 'cmb2' ),
        'object_types'  => array( 'post', 'page', ), // Post type
        'context'       => 'normal',
        'priority'      => 'high',
        'show_names'    => true, // Show field names on the left
        // 'cmb_styles' => false, // false to disable the CMB stylesheet
        // 'closed'     => true, // Keep the metabox closed by default
    ) );

    // Regular text field
    $cmb->add_field( array(
        'name'       => __( 'Test Text', 'cmb2' ),
        'desc'       => __( 'field description (optional)', 'cmb2' ),
        'id'         => $prefix . 'text',
        'type'       => 'text',
        'show_on_cb' => 'cmb2_hide_if_no_cats', // function should return a bool value
        // 'sanitization_cb' => 'my_custom_sanitization', // custom sanitization callback parameter
        // 'escape_cb'       => 'my_custom_escaping',  // custom escaping callback parameter
        // 'on_front'        => false, // Optionally designate a field to wp-admin only
        // 'repeatable'      => true,
    ) );

    // URL text field
    $cmb->add_field( array(
        'name' => __( 'Website URL', 'cmb2' ),
        'desc' => __( 'field description (optional)', 'cmb2' ),
        'id'   => $prefix . 'url',
        'type' => 'text_url',
        // 'protocols' => array('http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet'), // Array of allowed protocols
        // 'repeatable' => true,
    ) );

    // Email text field
    $cmb->add_field( array(
        'name' => __( 'Test Text Email', 'cmb2' ),
        'desc' => __( 'field description (optional)', 'cmb2' ),
        'id'   => $prefix . 'email',
        'type' => 'text_email',
        // 'repeatable' => true,
    ) );

    // Add other metaboxes as needed

}
フィールドタイプ一覧
'type' =>

Field Types · WebDevStudios/CMB2 Wiki · GitHub

 

指定できるパラメータ

add_field

Field Parameters · WebDevStudios/CMB2 Wiki · GitHub

 

カスタムフィールドも検索対象にするプラグイン

通常の検索ではカスタムフィールドが検索対象でないのでプラグインを使って検索対象にする方法です。

ja.wordpress.org

Search Everythingの有効化が完了したら設定画面で「すべてのカスタムフィールドを検索」をチェックして「Save Changes」をクリックしてください。

f:id:ryo919:20161008075901p:plain