在 Woocommerce 中添加特定产品属性术语 slug 作为 CSS 类

问题描述 投票:0回答:2

我正在尝试添加产品属性的属性值名称作为每个项目的类名。

例如,我有一个“Mood”属性,值名称为“Happy”、“Chill”、“Energized”、“Focused”和“Sleepy”。我只需要将每个属性值名称包装在 span 标记中,然后添加单个类,如下所示:

Mood: <span class="attribute-chill">Chill</span> <span class="attribute-sleepy">Sleepy</span>

这是我显示属性的代码,但我只需要添加 css 类。

add_action( 'woocommerce_after_shop_loop_item_title', 'display_applications_attribute_pa_mood', 5 );
    
    function display_applications_attribute_pa_mood() {
        global $product;
    
        $mood = $product->get_attribute('pa_mood');
        
        if ( $mood ) {
            printf('<span class="attribute-mood">%1$s</span>', $mood );
        }
}
php wordpress woocommerce product taxonomy-terms
2个回答
0
投票

按照您帖子上的代码片段,由于您只是想检索属性值,因此您可以直接从产品元键_product_attributes收集值。请查看以下代码片段,看看是否有帮助。

add_action( 'woocommerce_after_shop_loop_item_title', function() {

     global $product;

     $product_id = $product->get_id();
     $attributes = get_post_meta( $product_id, '_product_attributes', true );
     $attributes = $attributes ? maybe_unserialize( $attributes ) : [];

     foreach ( $attributes as $name => $attribute ) {
        $attribute_value = isset( $attribute[ 'value' ] ) ? $attribute[ 'value' ] : '';
        $attribute_values = $attribute_value ? explode( '|', $attribute_value ) : [];

        foreach ( $attribute_values as $value ) {
            echo sprintf( "<span class='attribute-%s'>%s</span>", sanitize_key( $value ), trim( $value ) );
        }
    }
} );

希望这有帮助。


0
投票

对于特定定义的产品属性,以下内容将显示嵌入

<span>
标签中的每个术语名称以及正确的所需类属性值:

add_action( 'woocommerce_after_shop_loop_item_title', 'display_applications_attribute_pa_mood', 5 );
function display_applications_attribute_pa_mood() {
    global $product;

    // Define your desired product attribute taxonomies to be displayed
    $attribute_taxonomies = array('pa_mood', 'pa_potency'); 

    // Loop through defined taxonomies
    foreach ( $attribute_taxonomies as $taxonomy ) {
        // Get term names coma separated  string
        $term_names = $product->get_attribute($taxonomy);
        
        if ( $term_names ) {
            $output_terms = array(); // Initialize

            // Loop through term names
            foreach ( explode(', ', $term_names) as $term_name ) {
                $output_terms[] = sprintf( '<span class="attribute-%s">%s</span>', 
                    sanitize_title($term_name), $term_name );
            }
            printf( '<div><strong>%s:</strong> %s</div>', 
                wc_attribute_label($taxonomy), implode(' ', $output_terms) );
        }
    }
}

它应该按您的预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.