我有一個自定義分類標準,我用它來串聯發佈帖子(一系列是該分類標準中的一個術語)。我想要的是在執行WordPress循環時將這些捆綁的帖子視爲特殊情況。顯示在WordPress循環中自定義分類標準的日期的最後一篇文章
只應顯示系列中的第一個帖子(具有最新日期的帖子),並且不屬於自定義分類中術語的所有其他帖子應視爲普通帖子。除了定製系列分類標準之外,還可以對帖子進行標記或分類(因此最多包含三個分類標準,包括自定義分類標準)。循環應包含固定數量的帖子(例如,在WordPress後端設置的首頁上的帖子數量)。
我對如何分組這些帖子感到茫然,部分原因是因爲所有數據都在不同的表格中,並且因爲每個條目都可以屬於多個分類法。當然,循環訪問posts數組,在MySQL調用之後丟棄系列中的舊帖子是可能的,但是在這種情況下,固定數量的帖子難以維護,而不會對數據庫進行額外的查詢。
所以我想實現一個純粹的SQL解決方案。我一直在使用posts_clauses
掛鉤進行試驗。我相信下面的這個查詢返回的是一系列中具有最高ID而不是日期的帖子,並且對數據庫徵稅很大。
$clauses['fields'] .= ", $wpdb->posts.ID AS postID, (SELECT $wpdb->terms.term_id
FROM $wpdb->posts, $wpdb->term_taxonomy, $wpdb->term_relationships, $wpdb->terms
WHERE $wpdb->posts.ID=postID
AND $wpdb->term_taxonomy.taxonomy='post-series'
AND $wpdb->term_relationships.term_taxonomy_id=$wpdb->term_taxonomy.term_taxonomy_id
AND $wpdb->posts.ID=$wpdb->term_relationships.object_id
AND $wpdb->terms.term_id=$wpdb->term_taxonomy.term_id
ORDER BY $wpdb->posts.post_date DESC
LIMIT 0,1) AS uniqueID";
$clauses['groupby'] = "IFNULL(uniqueID,$wpdb->posts.ID)";
基於上述WordPress的條款構建下面的SQL查詢:
SELECT SQL_CALC_FOUND_ROWS wp_posts.*, wp_posts.ID AS postID,
(SELECT wp_terms.term_id FROM wp_posts, wp_term_taxonomy, wp_term_relationships, wp_terms
WHERE wp_posts.ID=postID
AND wp_term_taxonomy.taxonomy='post-bundles'
AND wp_term_relationships.term_taxonomy_id=wp_term_taxonomy.term_taxonomy_id
AND wp_posts.ID=wp_term_relationships.object_id
AND wp_terms.term_id=wp_term_taxonomy.term_id
ORDER BY wp_posts.post_date DESC LIMIT 0,1)
AS uniqueID FROM wp_posts
WHERE 1=1
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')
GROUP BY IFNULL(uniqueID,wp_posts.ID)
ORDER BY wp_posts.post_date DESC
LIMIT 0, 10
我也看到this tutorial,但我不知道它適用於這種情況。
因此總結:在循環中,我只想顯示屬於自定義分類的術語的最新帖子(按post_date排序),並排除該分類中的其他帖子。該循環還包含不屬於自定義分類法的常規帖子,並且這兩種類型可能屬於多個類別並具有標籤。
是否有任何用途,如果我發佈的SQL查詢應該做的伎倆。因爲我不知道wordpress構建查詢的方式。 – Miguelo 2013-03-04 22:19:12
我認爲這將是一個很大的幫助!在WordPress中構建查詢對我來說不應該是一個問題。 – mensch 2013-03-04 22:43:42
如果您可以添加樣本記錄以及您的問題和期望結果,情況會好得多。謝謝。 – 2013-03-27 16:22:25