1 回答

TA貢獻1829條經(jīng)驗 獲得超6個贊
因此,一般來說,這并不是一件大事,但我們應該避免對數(shù)據(jù)庫進行不必要的調(diào)用,而 WordPress 本質(zhì)上并不為我們提供這樣的功能。因此,出于性能原因,我創(chuàng)建了自己的自定義 SQL 查詢。看:
function get_related_list_categories ($term_taxonomy_id, $related_taxonomy)
{
global $wpdb;
$sql = "SELECT DISTINCT(term_taxonomy_id)
FROM {$wpdb->prefix}term_relationships
WHERE object_id IN (
SELECT DISTINCT(p.ID)
FROM {$wpdb->prefix}posts AS p LEFT JOIN {$wpdb->prefix}term_relationships AS tr ON (p.ID = tr.object_id)
WHERE tr.term_taxonomy_id IN ({$term_taxonomy_id}) AND p.post_type = '{$post_type}' AND (p.post_status = 'publish')
) AND term_taxonomy_id IN (
SELECT term_id FROM {$wpdb->prefix}term_taxonomy WHERE taxonomy = '{$related_taxonomy}'
)";
if (empty($term_ids = $wpdb->get_col($sql))) {
return FALSE;
}
return $wp_list_categories(['include' => $term_ids, 'taxonomy' => $related_taxonomy, 'echo' => false, 'title_li' => '',]);
}
get_related_list_categories($product_category_id, 'product-manufacturer');
再次,我選擇product_category_id作為第一個參數(shù)(而不是 slug),因為我認為您很可能會擁有它,并且不需要進行數(shù)據(jù)庫調(diào)用來獲取 slug。無論哪種方式,您都可以根據(jù)自己的喜好自定義功能。我確信您會有自己的調(diào)整,就像我在找不到條件時返回 false 一樣,但您可能想用另一種方式來做。如果這對您有用,或者您有任何疑問,請告訴我。
更新:如果調(diào)試需要進一步解釋。
sql 查詢由兩個子查詢組成。
SELECT DISTINCT(p.ID)
FROM {$wpdb->prefix}_posts as p
LEFT JOIN {$wpdb->prefix}_term_relationships as tr ON (p.ID = tr.object_id)
WHERE tr.term_taxonomy_id IN ({$term_taxonomy_id})
AND p.post_type = '{$post_type}'
AND (p.post_status = 'publish')
這會找到與當前相關術語相關的所有帖子。它應該與該存檔頁面的帖子 ID 匹配。單獨運行此查詢來測試是否返回正確的帖子 ID。WHERE如果您想針對多個術語或按段等執(zhí)行此操作,則可以調(diào)整該子句。
SELECT term_id
FROM {$wpdb->prefix}_term_taxonomy
WHERE taxonomy = 'related_experience'
第二個子查詢獲取“相關體驗”分類法(或您想要的任何輔助分類法)的所有術語。您應該運行此命令并驗證“l(fā)ated_experience”的所有術語 ID 均已返回
然后,父 sql 查詢連接第一個分類中的帖子 ID,并獲取第二個分類中的所有術語,這些術語也顯示在具有第一個分類的帖子中。
- 1 回答
- 0 關注
- 115 瀏覽
添加回答
舉報