Sur de nombreux sites e-commerce, il est possible de saisir un message personnalisé dans les commandes qui sera imprimé par le fournisseur et ajouté au colis. C’est notamment très utilisé au moment des fêtes, lorsque les commandes sont destinées à être des cadeaux. Par défaut, WooCommerce n’inclut pas de possibilité de laisser un message personnalisé dans les commandes cadeau. Il y a le champ “notes de commande”, mais bien souvent les clients ne pensent pas à l’utiliser pour cela. Je vous propose donc un petit plugin léger qui va permettre de :

  • Ajouter une case à cocher “Commande cadeau” dans le processus de commande
  • Si cochée, cette option dévoile un champ de saisie masqué par défaut
  • Le client peut saisir son message personnalisé
  • Côté backoffice, l’administrateur voit le message dans les données de la commande
  • Un bouton “Imprimer” ouvre le message en PDF dans un nouvel onglet du navigateur et permet son impression.

Message personnalisé dans les commandes : captures d'écran

Case à cocher côté commande client
Message cadeau côté backoffice
Message cadeau : PDF à imprimer

Le code du plugin "Commande cadeau"

				
					<?php
/*
Plugin Name: Message Cadeau
Description: Permet aux clients d'ajouter un message cadeau personnalisé à leur commande et d'imprimer ce message depuis le backoffice.
Version: 1.0
Author: WP-CODES
* Author URI: https://wp-codes.fr
*/

!defined('ABSPATH') && exit;

function mc_add_inline_admin_css() {
    // Vérifie si on est sur la page de commande WooCommerce
    if (isset($_GET['page']) && $_GET['page'] === 'wc-orders' && isset($_GET['action']) && $_GET['action'] === 'edit') {
        echo '<style>
            .select2.select2-container.select2-container--default {
                margin-bottom: 20px!important; /* Ajuste la valeur si nécessaire */
            }
        </style>';
    }
}
add_action('admin_head', 'mc_add_inline_admin_css');


// Ajout de la case à cocher et du champ texte sur la page du formulaire client
function mc_add_gift_message_field() {
    echo '<div class="mc-gift-message">';
	echo '<h3 style="padding: 15px 0 15px 0;font-size: 1.2rem;"><span class="ez-toc-section" id="_echo_Est-ce_pour_un_cadeau"></span>';
    echo '<label><input type="checkbox" id="is_gift" name="is_gift" /> Est-ce pour un cadeau ?<span class="ez-toc-section-end"></span></h3></label>';
	echo '</h3>';
    echo '<textarea id="gift_message" name="gift_message" style="display:none;" placeholder="Saisissez votre message ici..." rows="4" cols="50"></textarea>';
    echo '</div>';
    ?>
    <script>
    document.getElementById('is_gift').addEventListener('change', function() {
        document.getElementById('gift_message').style.display = this.checked ? 'block' : 'none';
    });
    </script>
    <?php
}
add_action('woocommerce_after_checkout_billing_form', 'mc_add_gift_message_field');

// Enregistrement du message cadeau dans la commande
function mc_save_gift_message($order_id) {
    if (isset($_POST['gift_message']) && !empty($_POST['gift_message'])) {
        $gift_message = sanitize_textarea_field($_POST['gift_message']);
        if (!empty($gift_message)) {
            update_post_meta($order_id, '_gift_message', $gift_message);
        }
    }
}
add_action('woocommerce_checkout_update_order_meta', 'mc_save_gift_message');

// Affichage du message dans le backoffice et ajout du bouton "Imprimer"
function mc_display_gift_message_in_admin($order) {
    $gift_message = get_post_meta($order->get_id(), '_gift_message', true);
    if ($gift_message) {
        echo '<h3 class="mc-gift-message-heading">Message Cadeau</h3>';
        echo '<p>' . nl2br(esc_html($gift_message)) . '</p>';
        echo '<a href="' . admin_url('admin-ajax.php?action=mc_print_gift_message&order_id=' . $order->get_id()) . '" target="_blank" class="button">Imprimer</a>';
    }
}
add_action('woocommerce_admin_order_data_after_order_details', 'mc_display_gift_message_in_admin');

// Génération du PDF et impression
function mc_print_gift_message() {
    if (isset($_GET['order_id'])) {
        $order_id = intval($_GET['order_id']);
        $gift_message = get_post_meta($order_id, '_gift_message', true);

        if ($gift_message) {
			$order = wc_get_order($order_id);
            $prenom_billing_client = $order->get_billing_first_name();
            $nom_billing_client = $order->get_billing_last_name();

            require_once(plugin_dir_path(__FILE__) . 'tcpdf/tcpdf.php');
            $pdf = new TCPDF();
            $pdf->AddPage();
            $pdf->SetFont('helvetica', '', 12);
            $header_message = '<h1>' . esc_html($prenom_billing_client) . ' ' . esc_html($nom_billing_client) . ' vous adresse un message</h1>';
            $pdf->writeHTML($header_message . '<p>' . nl2br(esc_html($gift_message)) . '</p>', true, false, true, false, '');
            $pdf->Output('message_cadeau.pdf', 'I');
            exit;
        }
    }
}
add_action('wp_ajax_mc_print_gift_message', 'mc_print_gift_message');
add_action('wp_ajax_nopriv_mc_print_gift_message', 'mc_print_gift_message');

				
			

La librairie TCPDF

Pour permettre à l’administrateur d’imprimer le message personnalisé de la commande, le plugin a besoin de la librairie TCPDF. Vous pouvez la télécharger sur leur GitHub et placer un dossier tcpdf (attention de respecter la casse)au même niveau que votre fichier message-cadeau.php. 

Il est primordial d’installer le dossier tcpdf à la racine du plugin, sinon il y aura un plantage et vous ne pourrez pas l’activer. Vous pouvez également télécharger le plugin complet grâce au bouton ci-dessous, la librairie TCPDF est incluse.

Télécharger le plugin "message-cadeau"

Laisser un commentaire