Cheatsheet

Ajouter des champs aux produits

Laisser un commentaire

Comme pour les pages et les posts, il est possible d’ajouter des champs aux produits. Cela permet de mettre en avant des informations que vous ne souhaitez pas mettre dans la description : délai de livraison…

Par ailleurs, le fait de pouvoir isolser cette information dans le modèle de données permet également d’effectuer des opérations comme filtrer les produits d’après cette information.

Ajouter un champ général

Pour ajouter un champ global, le plus simple reste d’utiliser un plugin de champs personnalisés, tel qu’ACF. Cependant, rien ne vous oblige à utiliser un plugin.

Champs personnalisés fiche produit
J'utilise ici les champs personalisés pour ajouter un slogan et la garantie
// Ajout des champs "sous-titre" & garantie
add_action('woocommerce_product_options_general_product_data', function () {
    woocommerce_wp_text_input([
        'id' => '_subtitle',
        'label' => 'Sous-titre',
        'placeholder' => 'Phrase d’accroche…'
    ]);

    woocommerce_wp_text_input([
        'id' => '_guarantee',
        'label' => 'Garantie pour',
        'placeholder' => '10 ans, à vie…'
    ]);
});

// Enregistrement des données des champs à la sauvegarde
add_action('woocommerce_process_product_meta', function ($post_id) {
    $subtitle = !empty($_POST['_subtitle']) ? $_POST['_subtitle'] : null;
    $guarantee = !empty($_POST['_guarantee']) ? $_POST['_guarantee'] : null;

    update_post_meta($post_id, '_subtitle', esc_attr($subtitle));
    update_post_meta($post_id, '_guarantee', esc_attr($guarantee));
});

Dans vos templates en front, vous récupérez la donnée en tant que post_meta (vous feriez la même chose avec ACF).

$subtitle = get_post_meta($product->get_id(), '_subtitle', true);

Ajouter des champs aux variations produits

ACF ne pourra ici pas vous aider car il ne permet pas d’ajouter de nouveaux champs aux variations. Si vos besoins sont complexes, je vous recommande WooCommerce Custom Fields Variations. Ce plugin offre tous les types de champs (textarea, select, checkbox…), permet d’en ajouter autant que vous le souhaitez et de les grouper par thème.

Vous pouvez également coder le tout via le functions.php. C’est ce que je fais en général si je n’ai que de simples besoins.

// Ajout du champ pour chaque variation
add_action('woocommerce_variation_options_pricing', function ($loop, $variation_data, $variation) {
    woocommerce_wp_text_input([
        'id' => 'delivery_time[' . $loop . ']',
        'wrapper_class' => 'form-row',
        'label' => 'Livraison',
        'value' => get_post_meta($variation->ID, 'delivery_time', true)
    ]);
}, 10, 3);

// Sauvegarde des info lors de la sauvegarde des variations
add_action('woocommerce_save_product_variation', function ($variation_id, $i) {
    $delivery_time = $_POST['delivery_time'][$i];

    if (isset($delivery_time)) update_post_meta($variation_id, 'delivery_time', esc_attr($delivery_time));
}, 10, 2);

// Récupération de la donnée pour affichage du back
add_filter('woocommerce_available_variation', function ($variations) {
    $variations['delivery_time'] = get_post_meta($variations['variation_id'], 'delivery_time', true);
    return $variations;
});

Par la suite, vous récupérez vos nouvelles variations comme n’importe quelle propriété des variations.

foreach ($product->get_available_variations() as $variation) {
    $delivery = $variation['delivery_time'];
}

Commentaires

Rejoignez la discussion !

Vous pouvez utiliser Markdown pour les liens [ancre de lien](url), la mise en *italique* et en **gras**. Enfin pour le code, vous pouvez utiliser la syntaxe `inline` et la syntaxe bloc

```
ceci est un bloc
de code
```