È possibile aggiungere campi personalizzati a un termine di attributo WooCommerce?

30 apr 2018, 23:44:24
Visualizzazioni: 19.9K
Voti: 6

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:

Schermata della pagina degli attributi di WooCommerce che mostra dove aggiungere campi personalizzati

È possibile farlo con il plugin ACF (Advanced Custom Fields)?

Grazie!

0
Tutte le risposte alla domanda 1
7
16

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:

Descrizione immagine qui


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.

1 mag 2018 11:43:54
Commenti

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

Vadim H Vadim H
2 set 2018 00:21:17

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

Jordan Carter Jordan Carter
19 set 2018 00:20:51

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']

Sally CJ Sally CJ
19 set 2018 05:30:22

@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'].

Sally CJ Sally CJ
19 set 2018 05:33:00

@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

Jordan Carter Jordan Carter
20 set 2018 00:20:53

@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?

Vadim H Vadim H
25 set 2018 02:20:59

@VadimH per favore controlla la risposta aggiornata. E grazie per averlo notato Jordan.

Sally CJ Sally CJ
25 set 2018 05:39:52
Mostra i restanti 2 commenti