在 WooCommerce 中获取附加到产品的所有 "active" 属性分类法?

Get all "active" attributes taxonomies attached to products in WooCommerce?

我想获取附加到产品的所有 "active" 属性列表,

因此,如果该属性存在,但不附加到任何产品,则不会显示。

我可以像这样将所有属性显示为下拉列表:

$attributes =  wc_get_attribute_taxonomies();

if($attributes) {
    echo '<select name="all-attributes" id="all-attributes">';
    foreach ( $attributes as $attribute ) {
        echo '<option value="' . $attribute->attribute_name . '">' . $attribute->attribute_label . '</option>';
    }
    echo '</select>';
}

但是通过这种方式我得到了所有属性,甚至没有附加非活动属性。

如何在 WooCommerce 中获取附加到产品的所有 活动 产品属性分类法?

要获得所有活动产品属性分类法(至少附加到产品)您将需要一个自定义简单sql 查询如下 (嵌入在 php 函数中):

function wc_get_active_attribute_taxonomies() {
    global $wpdb;

    return $wpdb->get_results( "
        SELECT DISTINCT  wat.*, tt.taxonomy
        FROM {$wpdb->prefix}woocommerce_attribute_taxonomies wat
        INNER JOIN {$wpdb->prefix}term_taxonomy tt
            ON tt.taxonomy = CONCAT('pa_', wat.attribute_name)
        INNER JOIN {$wpdb->prefix}term_relationships tr
            ON tt.term_taxonomy_id = tr.term_taxonomy_id
        WHERE tt.count > 0
    " );
}

代码进入您的活动子主题(或活动主题)的 functions.php 文件。已测试并有效。


用法 (根据您的代码):

只需替换:

$attributes = wc_get_attribute_taxonomies();

作者:

$attributes = wc_get_active_attribute_taxonomies();

Note: This query output, includes additionally the "taxonomy" argument.