WordPressのsingle.phpに、特定のカスタムフィールド値を持つ別の記事を呼び出したいのです。
概要は次の通りです。
- 「メンバー」というカスタム投稿タイプ中に、各人の情報が記事として保存されています。
- 各記事には「管理ID」というカスタムフィールドがあります。WPの記事IDとは別です。
- single.phpの中で、別のメンバーを表す管理IDの配列があります(これは現在表示しているメンバーの情報から生成)。
- 管理IDの配列のうち冒頭5人だけの記事内容(例えば氏名など)を、現在のページに呼び出したいのです。
下記のコードを作成しました。
これでも、いちおう目当ての表示にはなるのですが、猛烈に遅いのです。
もっとスマートな書き方があるのかもしれませんが、カスタムフィールド値で該当を探し出す、という方法は、これしか見つけられませんでした。
「showposts」を1にしながら一回ごとにquery_postsをやってるあたりが無駄なのかなあ…という気はするのですが、他に方法が思い当たりません。
ちなみに、管理IDは該当者(記事)がない場合もありうるので、管理IDの配列をあらかじめ短くしておくことはできません。【←追記】
無駄のない書き方、高速に動作する書き方があればご教示をお願いしたく、質問申し上げます。
何卒よろしくお願い申し上げます。
PHP
1// 管理IDの配列 2$adminIdArr = array('A-1234','B-5678','A-9101','A-1121','B-3141','A-5161','B-7181','B-9202','A-1222'); 3 4$count = 0; 5foreach ($adminIdArr as $adminId) { 6 $args = array( 7 'post_type' => array('member'), // カスタム投稿タイプの「メンバー」から 8 'showposts' => 1, // ループにつき一人 9 'meta_query' => array( 10 array( 11 'key' => '管理ID', // カスタムフィールドの管理IDの一致する人で 12 'value' => $adminId, // 管理ID配列要素のIDに一致する人の 13 'compare'=>'=' 14 ) 15 ) 16 ); 17 query_posts($args); 18 19 if(have_posts()){ 20 the_post(); 21 echo esc_html(post_custom('氏名')); // 氏名を表示 22 $count++; 23 } 24 if($count > 4){ // 5人表示したらおしまい 25 break; 26 } 27}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/13 09:37