Este posibil să adăugați câmpuri personalizate la un termen de atribut WooCommerce?
Î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:
Este posibil să faceți acest lucru cu plugin-ul ACF
(Advanced Custom Fields)?
Mulțumesc!
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:
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.

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

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

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

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

@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

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