获取包含特定产品品牌的WooCommerce产品类别

时间:2020-05-05 20:02:38

标签: php sql wordpress woocommerce taxonomy-terms

我正在开发一个网上商店,我想要一个功能来显示包含特定品牌产品的产品类别。

我在网上商店出售衣服,然后,例如,如果您在标题菜单中选择“李维斯”品牌,那么在商店页面的侧栏中,您应该会看到包含“李维斯”品牌产品的所有产品类别。希望有道理。

我一直在寻找解决方案,但尚未成功。在网络上的某个地方,它说没有解决方案,所以我必须从头开始开发它。

如果有必要从头开始开发它,您如何最轻松地进行开发?我本人已经为Wordpress开发了一些主题,所以我知道Wordpress的工作原理。只是看不出如何解决这个问题。

有什么主意吗?

1 个答案:

答案 0 :(得分:2)

这只能通过使用WordPress WPDB类的自定义SQL查询来完成。

现在,由于有多个产品品牌插件可用于WooCommerce,根据所使用的插件,您必须调整正确的分类法:

  • product_brand for WooCommerce Brands插件(默认情况下,此处在下面的函数中)
  • yith_product_brand for YITH WooCommerce Brands插件
  • pa_brand用于自定义产品属性(自制)

在下面,您将找到一个自定义函数,该函数根据产品品牌术语 slug

返回一系列WooCommerce产品类别对象。
// The defined taxonomy here in the function $taxonomy argument is for WooCommerce Product brand plugin
function get_product_categories_from_a_product_brand( $brand_term_slug, $taxonomy = 'product_brand' ) {
    global $wpdb;

    return $wpdb->get_results( "
        SELECT t1.*
        FROM    {$wpdb->prefix}terms t1
        INNER JOIN {$wpdb->prefix}term_taxonomy tt1
            ON  t1.term_id = tt1.term_id 
        INNER JOIN {$wpdb->prefix}term_relationships tr1
            ON  tt1.term_taxonomy_id = tr1.term_taxonomy_id
        INNER JOIN {$wpdb->prefix}term_relationships tr2
            ON  tr1.object_id = tr2.object_id
        INNER JOIN {$wpdb->prefix}term_taxonomy tt2
            ON  tr2.term_taxonomy_id = tt2.term_taxonomy_id         
        INNER JOIN {$wpdb->prefix}terms t2
            ON  tt2.term_id = t2.term_id
        WHERE tt1.taxonomy = 'product_cat'
        AND tt2.taxonomy = '$taxonomy'
        AND  t2.slug = '$brand_term_slug'
    " );
}

代码进入活动子主题(或活动主题)的functions.php文件中。经过测试,可以正常工作。


任何php文件中的示例代码-显示产品品牌子弹的所有相关链接的产品类别名称:

$brand_term_slug = 'levis'; // A term slug is required (not the term id or term name)

$results = get_product_categories_from_a_product_brand( $brand_term_slug );

if( ! empty($results) ) {

    $term_names = []; // Initializing an empty array variable

    // Loop through each product category terms:
    foreach ( $results as $result ) {
        $term_id   = $result->term_id; // Term id
        $term_name = $result->slug; // Term slug
        $term_slug = $result->name; // Term name
        $taxonomy  = 'product_cat'; 

        $term_link = get_term_link( get_term( $result->term_id, $taxonomy ), $taxonomy );

        // Example: Set the linked formatted term name in an array
        $term_names[] = '<a class="'.$result->slug.'" href="'.$term_link.'">'.$result->name.'</a>';
    }   

    // Display the linked formatted terms names
    echo '<div class="brand-categories '.$brand_term_slug.'">'.implode(' ', $term_names).'</div>';
}