• 検索する際に、指定した複数のテーブルから情報を取得しようとしております。
    以下のコードでSQL文を発行しhave_posts()や標準のページネーションを使えるよう
    にするために、$wp_queryに取得した情報を格納する事は可能でしょうか。

    $result = $wpdb->get_results($serchsql);
    while ( have_posts() ) : the_post();
      get_template_part( 'content', get_post_format() );
    endwhile;

    初心者PGの為、説明が分かりづらいとは思いますが、ご回答の程よろしくお願い致します。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • できません。

    $wp_query は、WP_Query クラスのインスタンスなので、簡単に言うと、

    $wp_query = new WP_Query($arguments);

    というように作られています(最終的に内部で $wpdb が使われます)。一方、$wpdb->get_results() の戻り値はただの PHP オブジェクト、または、配列(オプションによって変更できます)なので、$wp_query に存在する変数やメソッドがそっくり抜けています。

    もし、どうしても、実現したい、というなら、

    class my_WP_Query extends WP_Query

    のように、自前のクラスを新設すれば、似たようなことがきます。詳細は、Class Reference/WP Query および、wp-includes/query.php の中身をご覧ください。

    おそらく100件までいくと厳しいと思いますが
    検索結果の件数が50件やそこらというのであれば
    $resultからpost_idを抜き出したものをwp_queryのpost__in句で指定して
    取得しなおしてやれば希望のような動作は可能です。

    $result = $wpdb->get_results($serchsql);
    foreach($result as $post) : setup_postdata($post);
       get_template_part( 'content', get_post_format() );
    endforeach;

    このようにする場合でもやはり標準のページネーションはできません。
    どうしても標準のを使いたいということであれば、上2件の内容でやるしかないと思います。

    ただ、$resultsに欲しい投稿が全て入っているということになるので
    (どうしても共通のテンプレートを使用しなければいけないのでなければ)
    自前でページネーションさせるということは可能です。

    特に難しいことでもなく
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    で現在のページ番号。
    $total = count($results);
    で全体のページ番号。
    あとは$resultsをforeachではなくfor文で回すようにしてやれば
    自前で何とか出来ると思います。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「検索する際にSQL文を発行し実行する方法」には新たに返信することはできません。