詳しい話は記事タイトルから離れてしまうので要約すると、、、
ACFは基本的には field_name で運用できます。
get_field( 'zip_code' );
など。
しかし、少し込み入った使い方をしたい時 field_key でないと完全な動作が得られない事があります。
update_field( 'field_12a3b45c678d9' )
update_field なんかはいい例です(field_name で行った時と動作が変わります)
そんな時、なんとかして field_key を取得したいんですがなかなかスマートな方法が有りません。
また、この記事を書くことになる前、ACFのフォーラムやStackTraceを探しましたが、けっこう古い情報でどれも動作しませんでした。
バージョンによって有効な方法が変わったのかもしれません。。
という事で、2017年10月現在、Version 4.4.12 (ACF PRO 5.3.6.1)にて、有効な field_key の取得方法はコチラです。
function get_acf_key($field_name) { global $wpdb; $sql = "SELECT `post_name` FROM {$wpdb->posts} WHERE `post_excerpt` = '{$field_name}'; "; $field_key = $wpdb->get_var($sql); if ( is_null($field_key) ) { $field_key = $field_name; } return $field_key; }
使い方
update_field( get_acf_key( 'zip_code' ), $value, $post_id );万が一 field_key が見つかった場合は、渡された field_name をそのまま返すので、そのまま必要な箇所にぶち込んで使えます。
と思ったけど、複数ヒットしちゃったら配列返るからヤバイねw
解説
ご覧の通り、近年稀に見るSQLべた書きです。(おおよその事はWP_Queryで解決しちゃうからね〜)ポイントは、 post_excerpt を検索していること。
管理画面で作成したACFのカスタムフィールドは、管理用の投稿タイプ acf-field に、1ポスト1フィールドという形で保存されます。
その際、ラベルは title に、field_name は post_excerpt に、そして field_key は post_name に割り当てられ、保存されます。
なので、 post_excerpt を field_name の値で検索し、 post_excerpt をセレクトすればOKと!
しかしまぁ面倒くさい話です。
公式もこれくらいメソッド化しといてよね〜
0 件のコメント:
コメントを投稿
OpenIDからもお気軽にどうぞ!