試しにやってみて発見したのですが、add_option、add_post_meta、add_user_metaで追加できるメタデータやカスタムフィールドはテキストだけでなく配列をそのまま書き込むことができました。
1 2 3 4 5 6 7 |
//配列をそのままadd_option //get_optionで呼び出すと配列のまま取得できます $arr = array( 'hoge' => 'aaa', 'fuga' => 'bbb' ); add_option('pageOption',$arr); |
親子関係を持った配列でもadd_option、add_post_meta、add_user_metaで追加し、get_optionなどでその親子関係を保ったまま取得することができます。カスタムフィールドは親子関係が持てないことが悩みだったのですが(私が知らないだけかもしれませんが)、その問題も解決しそうです。
複雑な階層の配列もそのまま書き込むことができるようなので、カスタムフィールドをさらに便利に使うことができそうです。
ADs
楽天やYahoo!のWebAPIよりデータを取得して表示するようなサイトの場合、アクセスのたびにAPIからデータを取得すると
・APIの制限を超えてしまいデータが取得できなくなる
・遅い
という問題があります。WebAPIは1秒間に○回以内しかアクセスしてはいけないという制限がある場合が多く、閲覧者が少なかったとしてもあっという間に制限に引っ掛かりアクセスできなくなってしまいます。
そこでAPIから得られた検索結果やその検索結果から生成する記事配列($postをループさせるやつ)をカスタムフィールドなどに保存しておき、APIへアクセスすることなく記事ループを実装します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//カスタムフィールドに記事配列(ここでは$posts)そのものを保持し、高速化を図る //記事の配列が存在しない場合はget_postsで取得する if($post->someQuery){ $posts = $post->someQuery; //「someQuery」というカスタムフィールドに$postsの中身がそのまま入っている } else { $arg = array( 'post__in' => array(1,2,5,10,23), //実際はこのpost__inの配列をWebAPIなどで取得することになるでしょう 'orderby' => 'post__in' ); $posts = get_posts($arg); add_post_meta($post->ID,'someQuery',$posts,true); } foreach ( $my_posts as $post ){ //いつものループ } |
一度カスタムフィールドが生成されると更新されないため、更新が必要な場合は日付であったり時間などを基準としてupdate_post_metaで再取得する必要があります。
ADs
コメントはまだありません。