Termini degli attributi del prodotto separati da virgole se sono disponibili più valori
In WooCommerce, sto attualmente creando una funzione che riprenderà alcuni attributi del prodotto nella pagina del negozio. Vorrei separarli con virgole se sono disponibili più valori di attributo, ma non so come.
Il mio codice:
add_action('woocommerce_after_shop_loop_item_title', 'TitleVariations', 10);
function TitleVariations()
{
global $product; $colormonth = $product->get_attribute('color-month'); $finish = $product->get_attribute('finish'); $design = $product->get_attribute('design'); echo '<span class="variation-display">'; echo __($colormonth, 'woocommerce');
echo __($finish, 'woocommerce'); echo __($crossdesign, 'woocommerce');
echo '</span>';
}
Risposte
Il metodo WC_Product get_attribute()
fornisce una stringa di valori separati da virgole quando è presente più di un valore ... È inoltre necessario verificare che ogni attributo diverso abbia in elenco un termine ...
Per ottenere il nome dell'etichetta dell'attributo del prodotto, puoi utilizzare wc_attribute_label()
la funzione dell'attributo del prodotto.
1). Se desideri ottenere ogni attributo del prodotto con il nome dell'etichetta e il valore dei termini (ogni attributo diverso in una riga), utilizzerai invece quanto segue.
Questo codice gestisce anche attributi di prodotto personalizzati :
add_action('woocommerce_after_shop_loop_item_title', 'display_loop_product_attributtes', 10);
function display_loop_product_attributtes()
{
global $product; // Here define your product attribute names (slugs) $attribute_names = array('color-month', 'finish', 'design');
$attributes = array(); // Initializing // Loop Through product attributes array foreach( $attribute_names as $attribute_name ) { if( taxonomy_exists( 'pa_' . $attribute_name ) ) {
$attribute = 'pa_' . $attribute_name; // Custom taxonomy
} else {
$attribute = $attribute_name; // Custom attribute (not a taxonomy)
}
$values_str = $product->get_attribute($attribute); if ( $values_str ) {
$attributes[] = '<strong>' . wc_attribute_label($attribute) . ':</strong> ' . $values_str; } } // Output product attribute label / values pairs (one by line) if( ! empty( $attributes ) ) {
echo '<span class="variation-display">' . implode( '<br>', $attributes ) . '</span>';
}
}
2). Ma se desideri ottenere tutti i termini degli attributi di prodotto come una stringa separata da virgole, il tuo codice sarà simile a Visualizza attributi di prodotto specifici sotto il titolo del prodotto nelle pagine dell'archivio di Woocommerce .
Quindi per il tuo codice:
add_action('woocommerce_after_shop_loop_item_title', 'display_loop_product_attributtes', 10);
function display_loop_product_attributtes()
{
global $product;
$color_month = $product->get_attribute('color-month');
$finish = $product->get_attribute('finish');
$design = $product->get_attribute('design');
$attributes = array(); // Initializing if ( $color_month ) {
$attributes[] = $color_month;
}
if ( $finish ) { $attributes[] = $finish; } if ( $design ) {
$attributes[] = $design;
}
// Output product attribute values
if( ! empty( $attributes ) ) { echo '<span class="variation-display">' . implode( ', ', $attributes ) . '</span>';
}
}
Il codice va nel file functions.php del tema figlio attivo (o tema attivo). Dovrebbe funzionare.
Raccogli i tuoi valori su array e poi su implode
questo array:
$values = [ __($colormonth, 'woocommerce'),
__($finish, 'woocommerce'), __($crossdesign, 'woocommerce'),
];
// if some values returned by `__()` are empty strings,
// you can filter your array so as to remove them
$values = array_filter($values);
echo '<span class="variation-display">';
echo implode(', ', $values);
echo '</span>';