我正在尝试添加产品属性的属性值名称作为每个项目的类名。
例如,我有一个“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 );
}
}
按照您帖子上的代码片段,由于您只是想检索属性值,因此您可以直接从产品元键_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 ) );
}
}
} );
希望这有帮助。
对于特定定义的产品属性,以下内容将显示嵌入
<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) );
}
}
}
它应该按您的预期工作。