列出当前分类存档的类别

https://img1.mukewang.com/64fabee30001030f10840421.jpg

这是我的网站:http ://bmi.brownsmedicalimaging.com/product-category/c-arm/

我创建了一个名为“产品”的自定义帖子类型。然后我创建了 2 个自定义分类法:类别和制造商。例如,如果我正在查看上面的“C 型臂”类别页面,它会显示该类别的 2 篇帖子。我怎样才能让它显示该类别的制造商列表?现在它只输出我定义的所有制造商。这是我的代码:


add_shortcode( 'my_cat_list', 'my_list_categories_shortcode' );

/**

 * this function outputs your category list where you

 * use the [my_cat_list] shortcode.

 */

function my_list_categories_shortcode() {

    $args = array( 

        'echo' =>   false,

        'taxonomy'   =>     'product-manufacturer',

        'title_li' => '',

    );

    return wp_list_categories( $args ); 

}


皈依舞
浏览 87回答 1
1回答

肥皂起泡泡

因此,一般来说,这并不是一件大事,但我们应该避免对数据库进行不必要的调用,而 WordPress 本质上并不为我们提供这样的功能。因此,出于性能原因,我创建了自己的自定义 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作为第一个参数(而不是 slug),因为我认为您很可能会拥有它,并且不需要进行数据库调用来获取 slug。无论哪种方式,您都可以根据自己的喜好自定义功能。我确信您会有自己的调整,就像我在找不到条件时返回 false 一样,但您可能想用另一种方式来做。如果这对您有用,或者您有任何疑问,请告诉我。更新:如果调试需要进一步解释。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如果您想针对多个术语或按段等执行此操作,则可以调整该子句。SELECT term_idFROM {$wpdb->prefix}_term_taxonomyWHERE taxonomy = 'related_experience'第二个子查询获取“相关体验”分类法(或您想要的任何辅助分类法)的所有术语。您应该运行此命令并验证“lated_experience”的所有术语 ID 均已返回然后,父 sql 查询连接第一个分类中的帖子 ID,并获取第二个分类中的所有术语,这些术语也显示在具有第一个分类的帖子中。
打开App,查看更多内容
随时随地看视频慕课网APP