• 解決済 lg

    (@lg)


    お世話になります。
    query_postsによるデータ取得について質問があります。

    例としてカテゴリーが1~5まであるとします。
    今回ページTOPに表示を行うに辺りカテゴリー1,2,5までの表示をよていしておりました。
    しかしながら途中から3,4も場合により表示させたいと要望をいただきました。
    そこでカスタムフィールドに「hoge」といったキーワードを登録し、
    当初の1,2,5+3,4のカスタムフィールドの「hoge」有りのデータを取得したと思っています。
    しかしながらマニュアルやブログなどを参考にいくつか試してみたのですが、残念ながらうまくいきません。
    特段query_postsにこだわる必要はないのですが、良い方法などあればご教授いただければ幸いでございます。

    宜しくお願いします。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • 話が後半わからなくなってます。

    hoge 有りってなんですか?
    hoge というキーワードがカスタムフィールドにあるものを表示したいのですか?

    それとも
    カテゴリ 1,2,5 及び hogeのあるもの。

    という意味ですか?

    トピック投稿者 lg

    (@lg)

    わかりづらくてすみません。

    取ってきたいデータは大きく分けて2つです。
    1つはカテゴリー1,2,5のデータ
    もう一つはカテゴリー3,4でかつカスタムフィールドの名前に「hoge」が登録されている(値は無視)データ

    この2種類を一度に取得したいということです。

    ・1,2,5 と 3,4かつ「hoge」 は、ページングありで同じループ内に表示したいのですか?
    ・それとも、別々のループで「最新10件」のようにするのですか?
    ・hoge は、カテゴリー3,4にしか使っていないのですか?

    トピック投稿者 lg

    (@lg)

    同じループ内で表示を行います。
    ページングは必要ありません。
    最新の10件のみとして一覧表示します。

    hogeはカテゴリー3,4にしか利用しないように運用制限を設けました。
    仮に他のカテゴリーに登録されたとしても該当部でのデータ参照以外で
    利用することはないはずですので、登録されたとしても問題はないかとは思いますが。

    filter_whereで対応出来ないかと試行錯誤しています・・・

    宜しくお願いいたします。

    簡単に解決できそうだったので回答してしまいましたが、思ったより、というより僕の知識では難しかったです。filter_where は初めて聞きました…。

    下記のコードで一応実現できると思いますが、配列を統合しているので、新着順に10件表示 という部分の処理がスマートではありません。10件のために20件(10+10)の情報を取得しています。

    ※簡単なテストはしていますが、lgさんの方で検証してみてください。

    $array_a = get_posts('numberposts=10&category=1,2,5');
    $array_b = get_posts('numberposts=10&category=3,4&meta_key=hoge');
    $array_ab = array_merge_recursive($array_a, $array_b);
    
    foreach ( $array_ab as $post ) {
    	$output[$post->post_date] = '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
    }
    
    krsort($output);
    echo '<ul>';
    echo implode("\n", array_slice($output, 0, 10));
    echo '</ul>';

    知識のある方のフォローを待ったほうがいいと思います。

    トピック投稿者 lg

    (@lg)

    LVP8さん
    ありがとうございます。

    やはり2つ別々に取得が手っ取り早いですよね・・・
    若干アクセスが激しいのでなるべく処理のコストを下げれたらと思っているのですが
    ここら辺はキャッシュのプラグインなどで軽減を図るよう検討してみます。

    他にも良い方法などありましたらご投稿いただければ幸いでございます。

    ちょっと手が離せないのでヒントだけで。

    $res = $wpdb->get_results("SELECT ID, post_title, その他必要なフィールド FROM $wpdb->posts WHERE 抽出条件);
    
    foreach ($res as $val) {
    	echo $val->ID;
    	echo $val->post_title;
    }

    などがあるので、上記だとカテゴリまで拾えませんが、そのへん駆使する感じでよろしいかと。

    トピック投稿者 lg

    (@lg)

    kvexさん

    ありがとうございます。
    生のSQLでの抽出ですね。
    カテゴリーのIDやカスタムフィールドのデータはpostsテーブルとは別に定義されているようですので、joinをかけないと取ってこれそうにないですね。
    該当のデータがどこにセットされているか調べて、別途試してみます。

    とりあえず急ぎだったものでLVP8さんの方法で実装を行いました。
    こちらは無事に期待する処理を実現できました。
    ありがとうございました。

    wordpress標準の簡易取得用のメソッドだけでは複合した処理は難しいようですね。
    SQLでの処理がある程度必要になってくるのかとは思いますが、一般の方にはSQLは敷居が高く思えます。
    運用が手離れする可能性がありますので、実装としてはこのままでいこうかと思っています。

    同件はクローズにさせていただければと思います。
    LVP8さん、kvexさんどうもありがとうございました。
    助かりました。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック「query_postsでのAND/ORによる複合検索について」には新たに返信することはできません。