Este posibil să adăugați câmpuri personalizate la un termen de atribut WooCommerce?

30 apr. 2018, 23:44:24
Vizualizări: 19.9K
Voturi: 6

În WordPress / WooCommerce, este posibil să adăugați câmpuri personalizate la un termen de atribut WooCommerce?

Prin "atribute" mă refer la atributele generale și nu la atributele din cadrul produselor.

Vă rog să verificați imaginea de mai jos pentru mai multe detalii:

Exemplu de atribute WooCommerce în panoul de administrare

Este posibil să faceți acest lucru cu plugin-ul ACF (Advanced Custom Fields)?

Mulțumesc!

0
Toate răspunsurile la întrebare 1
7
16

Da, este posibil. Și există un ghid simplu aici.

Mai jos este un cod funcțional pe care îl puteți adăuga în fișierul principal functions.php al temei:

// Adaugă un tip de regulă personalizată.
add_filter( 'acf/location/rule_types', function( $choices ){
    $choices[ __("Altele",'acf') ]['wc_prod_attr'] = 'Atribut Produs WC';
    return $choices;
} );

// Adaugă valori de regulă personalizate.
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;
} );

// Potrivirea regulii personalizate.
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 );

Veți obține ceva de genul acesta pe ecranul de creare/editare Grup de Câmpuri ACF:

previzualizare regulă personalizată ACF


ACTUALIZAT 25 septembrie 2018 (UTC)

În funcția pentru potrivirea regulii pe pagina de editare a termenului, $options['ef_taxonomy'] a fost schimbat în $options['taxonomy'] — pe vremea aceea, cheia de array taxonomy nu exista (în cazul meu), iar acum există, ceea ce cred că înlocuiește cheia ef_taxonomy. Mulțumesc @JordanCarter pentru observarea problemei cu cheia și @VadimH pentru editarea inițială a răspunsului. =)

În acea funcție, am adăugat și verificarea if ( isset( $options['taxonomy'] ) ) pentru a evita notificarea PHP "undefined". Mulțumesc @JordanCarter pentru observarea acestui aspect.

@VadimH, puteți folosi get_field( '{NUME}', 'term_{ID TERMEN}' ) pentru a prelua (și afișa) valoarea câmpului, astfel:

$term_id = 123;
$value = get_field( 'câmpul_meu', 'term_' . $term_id );

Consultați secțiunea "Obținerea unei valori din diferite obiecte" din documentația oficială a funcției get_field().

PS: Întregul cod (nu doar get_field()) a fost testat și verificat ultima dată pe ACF 5.7.6 și ACF PRO 5.7.3, cu WooCommerce 3.4.5.

1 mai 2018 11:43:54
Comentarii

Opțiunea WC Product Attribute nu este disponibilă în interfața utilizator (ACF Pro v.5.7.3; WC v.3.4.3)

Vadim H Vadim H
2 sept. 2018 00:21:17

Funcționează pentru mine, dar a trebuit să schimb $options['ef_taxonomy'] în $options['taxonomy'] în filtrul Matching custom rule

Jordan Carter Jordan Carter
19 sept. 2018 00:20:51

Mulțumesc @JordanCarter. Din câte îmi amintesc, acea cheie nu era disponibilă atunci. Deci pentru toți cei care citesc acest lucru, folosiți $options['taxonomy'] și nu $options['ef_taxonomy']

Sally CJ Sally CJ
19 sept. 2018 05:30:22

@VadimH Tocmai am testat codul pe ACF 5.7.6 și ACF PRO 5.7.3, cu WooCommerce 3.4.5, iar codul încă funcționează bine, cu excepția $options['ef_taxonomy'] care ar trebui să fie $options['taxonomy'].

Sally CJ Sally CJ
19 sept. 2018 05:33:00

@SallyCJ De fapt, am întâlnit un mesaj de eroare pe o pagină de produs individual, spunând că cheia "taxonomy" nu există. Am încadrat întregul cod într-o instrucțiune IF cu array_key_exists

Jordan Carter Jordan Carter
20 sept. 2018 00:20:53

@SallyCJ Ups, scuze, am uitat să lipesc codul în functions.php. Și după ce am corectat $options, acum funcționează totul, mulțumesc (tocmai am editat acest răspuns, acum este în curs de verificare). Următoarea întrebare: cum obții valoarea acelui câmp personalizat în front-end-ul site-ului?

Vadim H Vadim H
25 sept. 2018 02:20:59

@VadimH te rog verifică răspunsul actualizat. Și mulțumesc pentru observație, Jordan.

Sally CJ Sally CJ
25 sept. 2018 05:39:52
Arată celelalte 2 comentarii