WooCommerce品牌分类术语列表中的下拉选择器


WooCommerce Brand taxonomy terms list in a dropdown selector

我不希望使用任何插件来完成这个任务,因为我最近经历了一个类似的项目,打破了一个网站的冲突。所以我希望从基础开始创建这个功能。

我需要在产品类别页面上有一个下拉列表,以便按品牌选择产品。下拉列表将显示所有品牌。当您选择一个时,网站只显示分配给该品牌的那些产品。我们不需要使用内置的下拉菜单,可以按新鲜度、价格、受欢迎程度等进行查看。

使用WooCommerce 'Brands 分类法,我已经建立了我的品牌,并为每个产品分配了一个品牌

我可以用下面的代码查看所有品牌及其属性的数组:

$brands = get_terms('brand');
print_r($brands);

输出如下:

阵列(

[0] =比;WP_Term Object ([term_id] =>[name] =>Imari Sometsuke[蛞蝓]=>Imari-sometsuke [term_group] =>0 [term_taxonomy_id] =>[分类法]=>品牌[description] =>(父)=比;0 [count] =>1 [filter] =>生)

[1] =比;WP_Term Object ([term_id] =>[name] =>库塔尼[蛞蝓]=>库塔尼[term_group] =>0 [term_taxonomy_id] =>[分类]=>品牌[description] =>(父)=比;0 [count] =>2 [filter] =>生)

[2] =比;WP_Term Object ([term_id] =>[name] =>谷谷Shoza[蛞蝓]=>Kutani-shoza [term_group] =>0 [term_taxonomy_id] =>[分类法]=>品牌[description] =>(父)=比;0 [count] =>4 [filter] =>生)

[3] =比;WP_Term Object ([term_id] =>[name] =>谷谷德栗[蛞蝓]=>Kutani-tokkuri [term_group] =>0 [term_taxonomy_id] =>[分类法]=>品牌[description] =>(父)=比;0 [count] =>2 [filter] =>生)

[5] =比;WP_Term Object ([term_id] =>[name] =>西川Sukenobu [slug] =>nishiawa -sukenobu [term_group] =>0 [term_taxonomy_id] =>[分类法]=>品牌[description] =>(父)=比;0 [count] =>1 [filter] =>生)

[6] =比;WP_Term Object ([term_id] =>[name] =>伊藤新绥[蛞蝓]=>Shinsui-ito [term_group] =>0 [term_taxonomy_id] =>[分类法]=>品牌[description] =>(父)=比;0 [count] =>2 [filter] =>生)

[7] =比;WP_Term Object ([term_id] =>[name] =>浅野武二[蛞蝓]=>浅野武[term_group] =>0 [term_taxonomy_id] =>[分类法]=>品牌[description] =>(父)=比;0 [count] =>2 [filter] =>生)

[8] =比;WP_Term Object ([term_id] =>[name] =>田家斋[鼻涕虫]=>Toshusai-sharaku [term_group] =>0 [term_taxonomy_id] =>[分类法]=>品牌[description] =>(父)=比;0 [count] =>3 [filter] =>生)

)

如何构建下拉(选择)列表来创建这个?我想象它的框架是这样的,我已经开始了:

<?php
$brands = get_terms('brand');
//print_r($brands);
?>
<select name="orderby" class="orderby">
    <?php foreach ( $brands as ??? ) : ?>
        <option value="<?php echo esc_attr( $??? ); ?>" <?php selected( $orderby, $??? ); ?>><?php echo esc_html( $??? ); ?></option>
    <?php endforeach; ?>
</select>

可以看到,它是一个术语对象数组(WP_Term Object),并且必须在循环中对该术语的每个属性使用对象语法,如下所示:

<?php
    $brands = get_terms( 'brand', array(
        'orderby'  => 'name'  // orderby arguments ('name', 'slug','term_group', 'term_id', 'id', 'description')
    ) );
    //print_r($brands);
?>
<select name="orderby" class="orderby">
    <?php
        foreach ( $brands as $key => $brand ) :
            $brand_id = $brand->term_id;
            $brand_name = $brand->name;
            $brand_slug = $brand->slug;
            $brand_term_group = $brand->term_group;
            $brand_term_taxonomy = $brand->term_taxonomy_id;
            $brand_taxonomy = $brand->taxonomy;
            $brand_description = $brand->description;
            $brand_parent = $brand->parent;
            $brand_count = $brand->count;
            $brand_filter = $brand->filter;
            $number = $key+1;
            $option = 'option-' . $number;
    ?>
        <option value="<?php echo $option; ?>"><?php echo $brand->name; ?></option>
    <?php endforeach; ?>
</select>

这段代码经过测试,可以正常工作

在新版本的WooCommerce中,terms的前缀为pa_,因此brand已被pa_brand

所取代

最新版本的工作代码将是

<?php $brands = get_terms('pa_brand', ['orderby' => 'name']); ?> 
<select name="orderby" class="orderby">
    <?php
    if (!empty($brands) && !is_wp_error($brands)):
        foreach ($brands as $brand) :
            ?>
            <option value="<?= $brand->term_id; ?>">
                <?= $brand->name; ?>
            </option>
            <?php
        endforeach;
    endif;
    ?>
</select>

参考:https://developer.wordpress.org/reference/functions/get_terms/