問題描述

我有很多用途,但我想知道最有效的做法是做一個昂貴的操作。

作為一個例子,我會用一個商店。

鑑於:

  • 產品品牌分類

  • 產品組分類法

  • 產品型別

  • 上述分類法的歸檔模板

在產品型別歸檔中顯示品牌選單的最有效率,最有效的方法是什麼,品牌檔案中顯示產品型別,但僅顯示適用於該組中的帖子的條款。

例如,如果我在產品組’womens’,它會顯示左側的品牌,但只顯示在’womens’ 產品組中的產品指定的品牌。例如。品牌 「花式婦女服裝公司」 將展示,但不是 「曼利男士曼利有限公司」 。

我需要一個通用的答案,雖然我很高興使用服裝產品的例子,我知道如何用蠻力的貪婪演演算法來做到這一點,但這是非常浪費的,我對這個解決方案不感興趣將每個頁面的載入增加幾秒鐘,並將 DB 中的所有帖子全部載入到該程式中

編輯:示例 2:

皮卡丘是一個黃色的小寵物,黃色的標籤,但皮卡丘也是電動小寵物,所以它是型別分類學的電子標籤。在黃色標籤檔案中,我將如何顯示黃色的小寵物型別?例如所有的草小寵物都是綠色的,意味著在黃色的檔案中不會有一個草選單項,但會有綠色的 (是的,我知道有沒有綠色的草小寵物)

最佳解決方案

為了概括這一點,檢索具有特定分類學術語 B 的職位的所有分類術語 A 的問題。

雖然這不是不可能在幾個步驟和大量的迴圈透過職位 (這將確實是低效率),我認為透過 SQL 是有道理的效率。

我粗暴的接受它是:

/**
 * Get all terms of $tax_to taxonomy that posts in $term_from of $tax_from have.
 *
 * @param string $tax_from  taxonomy name
 * @param string $term_from term slug
 * @param string $tax_to    taxonomy name
 *
 * @return array|WP_Error
 */
function get_intersected_terms( $tax_from, $term_from, $tax_to ) {

    global $wpdb;

    $term_from = get_term_by( 'slug', $term_from, $tax_from );

    $query = "
    SELECT term_id FROM {$wpdb->term_taxonomy} WHERE taxonomy = '{$tax_to}' AND term_taxonomy_id IN (
        SELECT term_taxonomy_id FROM {$wpdb->term_relationships} WHERE object_id IN (
            SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id = {$term_from->term_taxonomy_id}
        )
    )
    ";

    $term_ids = $wpdb->get_col( $query );

    if( empty( $term_ids) )
        return array();

    return get_terms( $tax_to, array( 'include' => $term_ids ) );
}

// example
var_dump( get_intersected_terms( 'category', 'cat-a', 'post_tag' ) );

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。