よし、これは大きくなるぞ。多くの人が知っているように、ループ内でデータベースに複数回クエリを実行しないことをお勧めしますが、このタスクではそうしないのは非常に困難です-少なくとも私にとっては。さあ行こう。
Wordpress には、投稿の 6 つのカテゴリがあります。ページは、各カテゴリの最新の 3 つの投稿を呼び出して、それらを順番に (混在させずに) 表示する必要があります。
そのタスクを完了するには、まず DB にカテゴリを問い合わせます。次に、foreach
カテゴリ $wp_query オブジェクトを使用して、そのカテゴリ名の下にある最後の 3 つの投稿を取得するクエリを実行します。これにより、6 つのクエリが作成されます。カテゴリは変更される可能性があり、もちろん、コードを変更するたびに呼び出されることは望ましくありません。
$wpdb を使用して 1 回限りの MySQL (5.5) クエリを使用して、これらすべての投稿と変数を取得しようとしました。
SELECT
DISTINCT $wpdb->posts.ID,
$wpdb->posts.post_title,
$wpdb->posts.post_excerpt,
$wpdb->posts.comment_count,
$wpdb->posts.guid,
$wpdb->posts.post_status,
$wpdb->posts.post_name,
$wpdb->posts.post_date,
$wpdb->posts.post_type,
$wpdb->terms.slug
FROM (
SELECT
$wpdb->posts.ID,
$wpdb->posts.post_title,
$wpdb->posts.post_excerpt,
$wpdb->posts.comment_count,
$wpdb->posts.guid,
$wpdb->posts.post_status,
$wpdb->posts.post_name,
$wpdb->posts.post_date,
$wpdb->posts.post_type,
$wpdb->terms.slug,
@num := if(@group = $wpdb->terms.slug, @num + 1, 1) as row_number,
@group := $wpdb->terms.slug
FROM $wpdb->posts
LEFT JOIN $wpdb->term_relationships
ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy
ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
LEFT JOIN $wpdb->terms
ON($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
ORDER BY $wpdb->terms.slug ASC, $wpdb->posts.post_date DESC
) as $wpdb->posts
LEFT JOIN $wpdb->term_relationships
ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy
ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
LEFT JOIN $wpdb->terms
ON($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
WHERE $wpdb->posts.post_type = 'site_type'
AND $wpdb->posts.post_status = 'publish'
AND $wpdb->term_taxonomy.taxonomy = 'site_category'
AND $wpdb->terms.slug IN ('cars', 'planes', 'motorcycles', '4x4', 'bicycles', 'jetpacks')
AND row_number <= 5
ORDER BY $wpdb->terms.slug ASC, $wpdb->posts.post_date DESC
LIMIT $total
その後、結果の配列をに応じて分割しslug
ます。その結果が問題です。
PHPMyAdmin では、このクエリを実行row_number
し、合計しません。すべての行が値 1 を取得します。これにより、すべての「X slug の下の投稿のグループ」に制限がなくなり、機能しなくなりrow_number <= 5
ます。カスタム ページでは、最初のカテゴリ (7 件の投稿) に 3 件以上が表示されます。