私はマルチサイトネットワークを運営しており、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();
}
ここで$globalcontainer
はwp_query();
にマージする配列になると思います。
だからあなたが答えたものを船上に持っていくと、理論的には私は簡単にできる:
$mergedqueryargs = array_merge($portfolio , $globalcontainer);
$portfolio_query = new WP_query($mergedqueryargs);
それは正しいですか?
第二に、array_merge配列キーの上書きについて.....上書きをやめたいのですが?
引数をマージするだけではうまくいきません。結果の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;
私は一般的にそれらの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));
お役に立てれば
---編集---
私の答えの後、元の質問はマルチサイトの詳細のために編集されます。マルチサイトポストマージの場合、これは機能しません。
あなたがこれを持っているのであれば:
$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番目の配列は最初の配列を上書きします。