web-dev-qa-db-fra.com

Est-il possible d'ajouter des champs personnalisés à un attribut WooCommerce?

Sur Wordpress / WooCommerce, est-il possible d'ajouter des champs personnalisés à un attribut WooCommerce?

Par "attributs", je veux dire les attributs généraux et non les attributs sous produits.

S'il vous plaît, vérifiez l'image ci-dessous pour plus de détails:

 enter image description here 

Est-il possible de le faire avec le plugin ACF (Advanced Custom Fields)?

Merci!

3
David Smith

Oui c'est possible. Et il y a un guide facile ici .

Vous trouverez ci-dessous un code de travail que vous pouvez ajouter au fichier principal functions.php :

// Adds a custom rule type.
add_filter( 'acf/location/rule_types', function( $choices ){
    $choices[ __("Other",'acf') ]['wc_prod_attr'] = 'WC Product Attribute';
    return $choices;
} );

// Adds custom rule values.
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;
} );

// Matching the custom rule.
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 );

Vous obtiendrez quelque chose comme ceci sur l'écran Créer/Modifier un groupe de champs d'ACF:

enter image description here


MISE À JOUR DU 25 SEPTEMBRE 2018 (UTC)

Dans la fonction de mise en correspondance de la règle sur la page d'édition du terme, le $options['ef_taxonomy'] a été remplacé par $options['taxonomy'] - à l'époque, la clé de tableau taxonomy n'existait pas (dans mon cas) et existe maintenant, ce qui remplace la clé ef_taxonomy . Merci @JordanCarter pour avoir identifié le problème clé et @VadimH pour la modification de la réponse initiale. =)

Dans cette fonction, j'ai également ajouté la vérification if ( isset( $options['taxonomy'] ) ) pour éviter la notification "non définie" de PHP. Merci @JordanCarter pour l'avoir remarqué.

@VadimH, vous pouvez utiliser get_field( '{NAME}', 'term_{TERM ID}' ) pour récupérer (et afficher) la valeur du champ, comme suit:

$term_id = 123;
$value = get_field( 'my_field', 'term_' . $term_id );

Voir la section " Obtenir une valeur à partir de différents objets " sur la get_field() 's officielle documentation .

PS: le code complet (pas seulement get_field()) a été testé et testé pour la dernière fois sur ACF 5.7.6 et ACF PRO 5.7.3, avec WooCommerce 3.4.5.

6
Sally CJ