カスタムフィールド 値の取得・表示およびフィールドのカスタマイズ: WordPress


カスタムフィールドの取得・表示およびカスタマイズの覚書。

カスタムフィールドを格納するテーブル

カスタムフィールドの値はpostmetaテーブル[1]に格納される。

postmetaテーブルの構造(フィールド)

  • meta_id
  • post_id
  • meta_key[2]
  • meta_value

データの取得

the_meta()関数/post_custom(‘キー’)関数

the_meta関数は引数を指定せずループ内で使用する。登録済みのキー・値をulでマークアップし表示する。

<?php the_meta(); ?>
<ul class="post-meta">
    <li><span class="post-meta-key">key2:</span> 値2</li>
    <li><span class="post-meta-key">key1:</span> 値1</li>
</ul>

post_custom(‘キー’)関数

post_custom関数は引数に指定したキーに対応する値を文字列(または配列)として返す。

// key1に設定した値の表示
<?php if(have_posts()) : while(have_posts()) : the_post(); ?>
     <?php echo post_custom('key1'); ?>
<?php endwhile; endif; ?>

» カスタムフィールドの指定したキーの値だけ表示する方法 | btmup Blog

get_post_meta()関数

get_post_meta関数は投稿IDとキーを指定し値を取得する。get_post_meta($post_id, $key, $single)関数は3つの引数をとりループ内・ループ外の両方で使用できる。

  • $post_id → 取得するカスタムフィールド値の投稿ID
  • $key → カスタムフィールドのキー名
  • $single → 同じ名前のキーが複数ある場合に最初の値のみ返すか全ての値を返すかを設定する。
    TRUEは最初の値のみを文字列として返す。
    FALSEは全ての値を配列として返す。

指定したキーが存在しないときは空文字を返す

例:記事ID=1に設定されたキー=key1の値を取り出す(key1は重複して登録していないと仮定する)。

<?php echo get_post_meta('1’,'key1', true); ?>

例:全ての記事にキーを設定しておりテーマのループ内で呼び出す。

<?php echo get_post_meta($post->ID, ‘key1’, true); ?>

同じ名前のキーが複数ある場合に$singleにFALSEした結果は配列 Arrayを返す。そのためforeachなどのループを用いて各要素を表示する処理が必要になる。

カスタムフィールドのカスタマイズ

function.phpでカスタムフィールドをカスタマイズすることがでる。

add_meta_box

» 関数リファレンス/add meta box – WordPress Codex 日本語版

// カスタムフィールド
    add_action('admin_menu', 'example_meta_box');
    add_action('save_post', 'example_meta_update');

    function example_meta_box($post){
        add_meta_box('example_meta', 'カスタマイズの例', 'example_meta_callback', 'post', 'normal', 'high');
    }
    function example_meta_callback($post, $box){
        // カスタムフィールドの値を取得
        $field1 = get_post_meta($post->ID, 'field1', true);
        $field2 = get_post_meta($post->ID, 'field2', true);
        //
        echo wp_nonce_field('example_meta', 'my_meta_nonce');
        // 入力域
        echo 'フィールド1 : <input type="text" name="field1" value="' . $field1 . '" /><br />';
        echo 'フィールド2 : <input type="text" name="field2" value="' . $field2 . '" />';
    }
    // 保存処理用コールバック関数
    function example_meta_update($post_id){
        if (!wp_verify_nonce( $_POST['my_meta_nonce'], 'example_meta')) {
            return $post_id;
        }
        if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
            return $post_id;
        }
        if ('post' == $_POST['post_type']) {
            if(!current_user_can('edit_post', $post_id)) {
                return $post_id;
            }
        } else {
            return $post_id;
        }
        $field1 = $_POST['field1'];
        $field2 = $_POST['field2'];
        if(isset($field1)) {
            update_post_meta($post_id, 'field1', $field1);
        }
        if(isset($field2)) {
            update_post_meta($post_id, 'field2', $field2);
        }
    }

カスタムフィールドの値の更新・削除・追加

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

この関数はまず、$post_id で ID を指定した投稿に $meta_key を持つカスタムフィールドが存在することを確認します。もし存在しなければ代わりに add_post_meta($post_id, $meta_key, $meta_value) を実行し、その結果(常に true)を返します。

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

» 関数リファレンス/wp nonce field – WordPress Codex 日本語版
» 関数リファレンス/wp verify nonce – WordPress Codex 日本語版

1. デフォルトはプリフィックスwpがついてwp_postmetaとなる。
2. 同じ投稿・ページ内でキーは重複してよい。

コメント

Trackbacks

  1. […] https://findxfine.com/programming/wp/995551883.html この情報との関連記事 […]

    ピンバックbyワープレ速報 – Wordpress Navi - » WordPressのカスタムフィールド値の取得・表示などに関するカスタマイズ方法 — 2011-09-04 @ 9:05 AM

  2. […] FindxFine […]

    ピンバックbypostmetaについて | ネットアンサー備忘録 — 2016-03-10 @ 8:31 PM


コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。