1 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊
因此,一般來說,這并不是一件大事,但我們應(yīng)該避免對(duì)數(shù)據(jù)庫進(jìn)行不必要的調(diào)用,而 WordPress 本質(zhì)上并不為我們提供這樣的功能。因此,出于性能原因,我創(chuàng)建了自己的自定義 SQL 查詢??矗?/p>
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作為第一個(gè)參數(shù)(而不是 slug),因?yàn)槲艺J(rèn)為您很可能會(huì)擁有它,并且不需要進(jìn)行數(shù)據(jù)庫調(diào)用來獲取 slug。無論哪種方式,您都可以根據(jù)自己的喜好自定義功能。我確信您會(huì)有自己的調(diào)整,就像我在找不到條件時(shí)返回 false 一樣,但您可能想用另一種方式來做。如果這對(duì)您有用,或者您有任何疑問,請(qǐng)告訴我。
更新:如果調(diào)試需要進(jìn)一步解釋。
sql 查詢由兩個(gè)子查詢組成。
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')
這會(huì)找到與當(dāng)前相關(guān)術(shù)語相關(guān)的所有帖子。它應(yīng)該與該存檔頁面的帖子 ID 匹配。單獨(dú)運(yùn)行此查詢來測(cè)試是否返回正確的帖子 ID。WHERE如果您想針對(duì)多個(gè)術(shù)語或按段等執(zhí)行此操作,則可以調(diào)整該子句。
SELECT term_id
FROM {$wpdb->prefix}_term_taxonomy
WHERE taxonomy = 'related_experience'
第二個(gè)子查詢獲取“相關(guān)體驗(yàn)”分類法(或您想要的任何輔助分類法)的所有術(shù)語。您應(yīng)該運(yùn)行此命令并驗(yàn)證“l(fā)ated_experience”的所有術(shù)語 ID 均已返回
然后,父 sql 查詢連接第一個(gè)分類中的帖子 ID,并獲取第二個(gè)分類中的所有術(shù)語,這些術(shù)語也顯示在具有第一個(gè)分類的帖子中。
- 1 回答
- 0 關(guān)注
- 130 瀏覽
添加回答
舉報(bào)