È possibile aggiungere campi personalizzati a un termine di attributo WooCommerce?
Su Wordpress / WooCommerce
, è possibile aggiungere campi personalizzati a un termine di attributo di WooCommerce
?
Con "attributi" intendo gli attributi generali e non gli attributi sotto i prodotti.
Per favore, controlla l'immagine qui sotto per maggiori dettagli:
È possibile farlo con il plugin ACF
(Advanced Custom Fields)?
Grazie!
Sì, è possibile. E c'è una guida semplice qui.
Di seguito è riportato un codice funzionante che puoi aggiungere al file principale functions.php del tema:
// Aggiunge un tipo di regola personalizzata.
add_filter( 'acf/location/rule_types', function( $choices ){
$choices[ __("Altro",'acf') ]['wc_prod_attr'] = 'Attributo Prodotto WC';
return $choices;
} );
// Aggiunge valori di regola personalizzati.
add_filter( 'acf/location/rule_values/wc_prod_attr', function( $choices ){
foreach ( wc_get_attribute_taxonomies() as $attr ) {
$pa_name = wc_attribute_taxonomy_name( $attr->attribute_name );
$choices[ $pa_name ] = $attr->attribute_label;
}
return $choices;
} );
// Abbina la regola personalizzata.
add_filter( 'acf/location/rule_match/wc_prod_attr', function( $match, $rule, $options ){
if ( isset( $options['taxonomy'] ) ) {
if ( '==' === $rule['operator'] ) {
$match = $rule['value'] === $options['taxonomy'];
} elseif ( '!=' === $rule['operator'] ) {
$match = $rule['value'] !== $options['taxonomy'];
}
}
return $match;
}, 10, 3 );
Otterrai qualcosa come questo nella schermata di creazione/modifica del Gruppo di Campi di ACF:
AGGIORNATO 25 Settembre 2018 (UTC)
Nella funzione per abbinare la regola nella pagina di modifica del termine, $options['ef_taxonomy']
è stato cambiato in $options['taxonomy']
— a quel tempo, la chiave dell'array taxonomy
non esisteva (nel mio caso), e ora esiste, il che penso sostituisca la chiave ef_taxonomy
. Grazie @JordanCarter per aver notato il problema della chiave, e @VadimH per la modifica iniziale della risposta. =)
In quella funzione, ho anche aggiunto il controllo if ( isset( $options['taxonomy'] ) )
per evitare il messaggio "undefined" di PHP. Grazie a @JordanCarter per averlo notato.
@VadimH, puoi usare get_field( '{NOME}', 'term_{ID TERMINE}' )
per recuperare (e visualizzare) il valore del campo, in questo modo:
$term_id = 123;
$value = get_field( 'mio_campo', 'term_' . $term_id );
Vedi la sezione "Ottieni un valore da oggetti diversi" nella documentazione ufficiale di get_field()
.
PS: L'intero codice (non solo il get_field()
) è stato testato per l'ultima volta su ACF 5.7.6 e ACF PRO 5.7.3, con WooCommerce 3.4.5.

L'opzione WC Product Attribute non è presente nell'interfaccia utente (ACF Pro v.5.7.3; WC v.3.4.3)

Questo funziona per me, tranne per il fatto che ho dovuto cambiare $options['ef_taxonomy'] in $options['taxonomy'] nel filtro Matching custom rule

Grazie @JordanCarter. Per quanto mi ricordi, quella chiave non era disponibile all'epoca. Quindi, per chiunque legga questo, usa $options['taxonomy']
e non $options['ef_taxonomy']

@VadimH Ho appena testato il codice su ACF 5.7.6 e ACF PRO 5.7.3, con WooCommerce 3.4.5, e il codice funziona ancora bene, tranne per $options['ef_taxonomy']
che dovrebbe essere $options['taxonomy']
.

@SallyCJ In realtà, ho incontrato un messaggio di errore in una pagina prodotto singola, che diceva che la chiave "taxonomy" non esiste. Ho racchiuso l'intero blocco in un'istruzione IF con array_key_exists

@SallyCJ ops, scusa, ho dimenticato di incollare il codice in functions.php. Dopo aver corretto le $options, ora funziona tutto, grazie (ho appena modificato questa risposta, è in fase di revisione). Prossima domanda: come si ottiene il valore di quel campo personalizzato nel front-end del sito?
