以下のコードを使用して、5つのWordpressサイトの投稿をクエリし、それらを配列にマージし、日付順に並べ替えて表示します。
//SITE 1
$mydb = new wpdb('xxxx','xxxx','xxxx','localhost');
if($mydb) {
$query1 = $mydb->get_results("SELECT * FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish'", OBJECT);
}
$mydb->flush();
//SITE 2
$mydb = new wpdb('xxxx','xxxx','xxxx','localhost');
if($mydb) {
$query2 = $mydb->get_results("SELECT * FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish'", OBJECT);
}
$mydb->flush();
//SITE 3
$mydb = new wpdb('xxxx','xxxx','xxxx','localhost');
if($mydb) {
$query3 = $mydb->get_results("SELECT * FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish'", OBJECT);
}
$mydb->flush();
//SITE 4
$mydb = new wpdb('xxxx','xxxx','xxxx','localhost');
if($mydb) {
$query4 = $mydb->get_results("SELECT * FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish'", OBJECT);
}
$mydb->flush();
//SITE 5
$mydb = new wpdb('xxxx','xxxx','xxxx','localhost');
if($mydb) {
$query5 = $mydb->get_results("SELECT * FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish'", OBJECT);
}
$mydb->flush();
//MERGE ARRAYS
$allsitearrays = array_merge($query1, $query2, $query3, $query4, $query5);
//SORT BY DATE
function cmp($a, $b) {
if ($a->post_date == $b->post_date) {
return 0;
} else {
return $a->post_date < $b->post_date ? 1 : -1; // reverse order
}
}
usort($allsitearrays, 'cmp');
//OUTPUT
if ( $allsitearrays ):
global $post;
foreach($allsitearrays as $post) {
//OUTPUT HERE
}
endif;
この方法では投稿のおすすめ画像を取得できないことを除けば、これは非常にうまく機能しています。私はwp_get_attachment_image_src
のようなネイティブ関数を使用することはできません、そして各ポストがポストメタを試みるためにループに入っている間にDBに再度問い合わせることは最終的にはやり過ぎで、多すぎるクエリがあるのです。
最初のクエリでクエリしている投稿のpostmetaを取得する方法はありますか。それとも、あまり多くのクエリを作成しないようにするために使用できる方法はありますか。
これは、postmetaテーブルを結合して_wp_attached_file
メタ値を取得することによって、投稿の投稿メタを取得する方法の1つです。
これを試して:
$mydb->get_results( select a.*, thumb.meta_value
from wp_posts a
left join (select b.post_id, c.meta_value
from wp_postmeta b, wp_postmeta c
where b.meta_key = '_thumbnail_id'
and b.meta_value = c.post_id
and c.meta_key = '_wp_attached_file') as thumb
on thumb.post_id = a.ID
where a.post_type = 'post'
and a.post_status = 'publish', OBJECT );