水曜以外もどうでしょう

北海道発。食べ歩きの記録グルメ情報や北海道の見どころなどをメモ替わりに書いています。

PREV | PAGE-SELECT | NEXT

≫ EDIT

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
応援宜しくお願いします。ポチ↓↓
fC2ブログランキング にほんブログ村 グルメブログ 北海道食べ歩きへ 人気ブログランキングへ


| スポンサー広告 | --:-- | comments(-)| trackbacks(-)| TOP↑

≫ EDIT

Advanced Custom Fieldsでセレクトボックスで値とラベルを取得する

WordPressのAdvanced Custom Fieldsのセレクトボックスで

下記のように記述すると、値とラベルの両方を制御することができます。
red : 赤
blue : 青

と記載がある。

the_fieldやget_fieldで取り出せるのは、左側の「red」や「blue」の方なんですよね・・。

the_field('fild_name');

これで、「赤」や「青」の方を取り出したいという話です。
この場合、redやblueが値で、赤や青をラベルというのかな?

さて、参考ページ。
参考ページ)
https://ja.forums.wordpress.org/topic/25364

参考ページのままなんですが、下記の方法でラベル側が取り出せる。

$field = get_field_object('field_name');
$value = get_field('field_name');
$label = $field['choices'][ $value ];

ただ・・・・
私の環境では、投稿(post)ではなくユーザー情報にカスタムフィールドを追加していました。
そんな訳で、同じコードを書いても
なんか、できないなー、できないなー、DBの仕様が変わったか?
と思っていました。

私の場合、author.phpを書き換える案件だったのですが、
かなり試行錯誤した結果、ユーザー情報の場合下記のコードで実現できた。
$uid = $author;
$field = get_field_object('field_name', 'user_' . $uid);
$value = get_field('field_name', 'user_' . $uid);
$label = $field['choices'][ $value ];

$authorには、http://examples.com/?author=2
などで指定したユーザID(例では2)が入っている。

get_fieldの方にユーザIDを引数で渡すことは既にわかってやっていたのに、get_field_objectでもおんなじことをやれば良かったんだよね。時間をかけてお馬鹿さんです。


これが、うまくいかなかったもんだから、自分で関数まで作ってしまった。
あまり美しくないし結局使わなかったのだが。
wp_postから、post_type=acfのpostを取り出し、post_titleで検索する。
post_titleはAdvanced Custom Fieldsで自分で付けたフィールドグループ名ですね。
それで、ACFのpost_idを取得。
それから、ACFのpost_idを使って、wp_postmetaからセレクトボックスの情報をとりだす。
一応貼っておこう。

★関数側

function get_acf_field( $group, $name ) {
    $target_field = array();
    $found_posts = get_posts( array('post_type'=>'acf') );
    foreach( $found_posts as $p ) {
        if( $p->post_title == $group ) {
            $acf_id = $p->ID;
            break;
        }
    }
    if( $acf_id ) {
        $fields = get_post_meta($acf_id);
        foreach( $fields as $f ) {
            $meta = unserialize($f[0]);
            if( $meta['name'] == $name ) {
                $target_field = $meta;
                break;        
            }
        }
    }
    return $target_field;
}


★利用側
フィールドグループ名とフィールド名を渡す

$field = get_acf_field('group_name', 'field_name');
$value = get_field('field_name', 'user_' . $uid);
echo $field['choices'][$value];



ちなみに、下記の書き方で、コロンの左右に半角スペースが必要なんです。これ間違うとちゃんと入りません。
red : 赤
blue : 青
スポンサーサイト
応援宜しくお願いします。ポチ↓↓
fC2ブログランキング にほんブログ村 グルメブログ 北海道食べ歩きへ 人気ブログランキングへ


| 未分類 | 21:29 | comments:0| trackbacks:0| TOP↑

COMMENT















非公開コメント

TRACKBACK URL

http://vmemo.blog36.fc2.com/tb.php/697-0e19bb3a

TRACKBACK

PREV | PAGE-SELECT | NEXT

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。