私は以下の(単なるサンプル)カテゴリ階層を持つブログのデザインに取り組んでいます。
PARENT
|
|------------------------------------------------|
Food Fashion
| |
|---------------------| |---------------------|
European Asian European Asian
| | | |
|---------| |-----------| |--------| |--------|
Italian French Chinese Japanese Italian French Chinese Japanese
ホームページで、私のクライアントはレベル4の子供全員の最後の3つの投稿を表示したいと思います。
私の最初の試みはこのようなものでした:
$allPosts = new WP_Query('cat=20, 21, 24, 22, 23, 25, 75, 84, 79, 85, 83, 96, 95, 97, 65, 68, 107, 48, 49&showposts=100&order=ASC');
デバッグプラグインによると、ページ上で18のクエリが呼び出されましたが、カテゴリに2000の投稿がある場合、この行で取得される100の投稿はすべて同じカテゴリから取得されるため.
したがって、私はこのように呼び出しを分割しました。
$italianFood = new WP_Query('cat=20&showposts=3&order=DESC');
$italianFashion = new WP_Query('cat=21&showposts=3&order=DESC');
$frenchFood = new WP_Query('cat=24&showposts=3&order=DESC');
$frenchFashion = new WP_Query('cat=22&showposts=3&order=DESC');
これは機能しますが、すべてのカテゴリを呼び出した後、データベースへのクエリ呼び出しの数は260まで増えました。
私はプラグインでページをキャッシュするつもりですが、私が欲しいものを達成するために本当に260回以上のDB呼び出しを起動する必要がありますか?
あなた自身のクエリを書くこともできます。そのように、それはカテゴリごとに一つのクエリです:
global $wpdb;
$query = '
SELECT wpp1.*
FROM ' . $wpdb->posts . ' AS wpp1
LEFT JOIN ' . $wpdb->term_relationships . ' AS wptr1 ON wptr1.object_id = wpp1.ID
WHERE post_type = %s
AND post_status = %s
AND wptr1.term_taxonomy_id = %d
ORDER BY wpp1.post_date DESC
LIMIT %d
';
$query = $wpdb->prepare(
$query,
// Args: post type, post status, term taxonomy ID, number of posts
'post', 'publish', 80, 3
);
$posts = $wpdb->get_results(
$query,
ARRAY_A
);