web-dev-qa-db-ja.com

2つの新しいWP_Query($ variable)をマージできますか?

私はマルチサイトネットワークを運営しており、swith_to_blog()を使用したSQLクエリを設定しました。投稿を照会します。

私は新しいWP_Query内でクエリを宣言し、実際にそのクエリを別のクエリとマージすることができる方法はありますか?

基本的に私がこれをすれば:

$number1 = new WP_Query($multisitequery);

私はそれをマージすることができます:

$number2 = new WP_Query($normalquery);

$normalqueryは、ページごとのページ区切り、抜粋、タイトルなどの設定をポートフォリオのショートコードに保持します。

新しい$multisiteクエリからのクエリされた投稿を含めたいと思います。

これは達成できますか?まったく新しいショートコード設定を作成しないようにしたいだけです。

事前に感謝します。ロリー

EDIT ========

私が持っているものは:

$portfolio = array();
$portfolio = $settings;

さらに私のポートフォリオ関数 "すべての$ settings ['オプション']"の後に私は持っています:

$portfolio_query = new WP_Query( $portfolio );

$portfolio_queryはページテンプレートのループを使用します。

私はこのように追加のクエリを追加したいです。

global $wpdb, $blog_id, $post;

$blogs = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM wp_blogs ORDER BY blog_id" ) );

$globalcontainer = array();

foreach ($blogs as $blog){

   switch_to_blog($blog->blog_id);

   $globalquery = query_posts($args);

   $globalcontainer = array_merge( $globalcontainer, $globalquery );

   restore_current_blog();
}

ここで$globalcontainerwp_query();にマージする配列になると思います。

だからあなたが答えたものを船上に持っていくと、理論的には私は簡単にできる:

$mergedqueryargs = array_merge($portfolio , $globalcontainer);
$portfolio_query = new WP_query($mergedqueryargs);

それは正しいですか?

第二に、array_merge配列キーの上書きについて.....上書きをやめたいのですが?

8
Rory Rothon

引数をマージするだけではうまくいきません。結果のposts配列とpost_countカウントをマージする必要があります。これは私のために働く:

//setup your queries as you already do
$query1 = new WP_Query($args_for_query1);
$query2 = new WP_Query($args_for_query2);

//create new empty query and populate it with the other two
$wp_query = new WP_Query();
$wp_query->posts = array_merge( $query1->posts, $query2->posts );

//populate post_count count for the loop to work correctly
$wp_query->post_count = $query1->post_count + $query2->post_count;
23
guidod

私は一般的にそれらのID配列をマージして3番目のクエリを作ります。クエリの最初のセットを安く保つために、私はこのようにfieldsパラメータを使ってそれらのIDを返すだけです:

//setup your queries with extra parameter fields => ids
$query1 = new WP_Query(array('fields' => 'ids','other_parameters' => 'etc'));
$query2 = new WP_Query(array('fields' => 'ids','other_parameters'=>'etc'));

//now you got post IDs in $query->posts
$allTheIDs = array_merge($query1->posts,$query2->posts);

//new query, using post__in parameter
$finalQuery = new WP_Query(array('post__in' => $allTheIDs));

お役に立てれば

---編集---

私の答えの後、元の質問はマルチサイトの詳細のために編集されます。マルチサイトポストマージの場合、これは機能しません。

14
Bora Yalcin

あなたがこれを持っているのであれば:

$number1 = new WP_Query($multisitequery);

$number2 = new WP_Query($normalquery);

私はあなたが以前にどこかでこれらを定義すると思いますか?

$multisitequery = array();
$normalquery = array();

...その場合、2つのクエリをマージするには、それらをarray_merge()に渡す前に、 new WP_Query() 2つの配列だけを結合します。

$merged_query_args = array_merge( $normalquery, $multisitequery );

$merged_query = new WP_Query( $merged_query_args );

順番はarray_merge()呼び出しで重要です。両方が同じ配列キーを持つ場合、2番目の配列は最初の配列を上書きします。

3
Chip Bennett