Statistiques des commandes WooCommerce par pays

Ce code va vous permettre de créer un sous menu pour avoir des statistiques sur les ventes réalisées en fonction des pays.

En effet, vous allez pouvoir filter en fonction d’une plage de date spécifique et obtenir un tableau qui indiquera le nombre de commandes réalisées, le montant & les pays associés.

Pour faire fonctionner le plugin, il suffit d’enregistrer le code ci-dessous puis le compresser et l’envoyer dans votre site WordPress.

				
					<?php
/*
Plugin Name: WooCommerce Orders Statistics by Country
Description: Adds a submenu under WooCommerce that displays sales statistics by country
Version: 1.0
Author: <a href="https://josselynjayant.fr">Josselyn jayant</a> & <a href="https://wycan.fr">WYCAN</a>
*/

// Ajout du sous-menu dans le menu de WooCommerce
add_action('admin_menu', 'custom_order_stats_submenu');

function custom_order_stats_submenu(){
    add_submenu_page('woocommerce', 'Stats par pays', 'Stats par pays', 'manage_options', 'custom-order-stats', 'custom_order_stats_page');
}

function custom_order_stats_page(){
    $order_statuses = wc_get_order_statuses();
    $selected_status = isset($_POST['order_status']) ? $_POST['order_status'] : '';

    ?>
    <div class="wrap">
        <h2>Statistiques de commande par pays</h2>
        
        <form method="post" action="">
            <label for="start_date">Date de début: </label>
            <input type="date" name="start_date" required>
            
            <label for="end_date">Date de fin: </label>
            <input type="date" name="end_date" required>

            <label for="order_status">État de commande: </label>
            <select name="order_status">
                <option value="all" <?= $selected_status === 'all' ? 'selected' : ''; ?>>Toutes</option>
                <?php
                foreach($order_statuses as $status => $name){
                    echo '<option value="' . esc_attr($status) . '"' . selected($selected_status, $status, false) . '>' . esc_html($name) . '</option>';
                }
                ?>
            </select>
            
            <input type="submit" value="Obtenir les statistiques">
        </form>
        
        <?php
        if(isset($_POST['start_date']) && isset($_POST['end_date'])){
            display_order_stats($_POST['start_date'], $_POST['end_date'], $_POST['order_status']);
        }
        ?>
    </div>
    <?php
}

function display_order_stats($start_date, $end_date, $order_status){
    global $wpdb;

    $status_condition = '';
    if($order_status !== 'all') {
        $status_condition = $wpdb->prepare(" AND p.post_status = %s ", $order_status);
    }

    $sql = $wpdb->prepare("
        SELECT pm.meta_value AS country_code, 
               COUNT(p.ID) AS order_count,
               SUM(meta_total.meta_value) AS total_amount
        FROM {$wpdb->posts} p 
        JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id 
        LEFT JOIN {$wpdb->postmeta} meta_total ON p.ID = meta_total.post_id AND meta_total.meta_key = '_order_total'
        WHERE p.post_type = 'shop_order' 
        AND p.post_date BETWEEN %s AND %s " . 
        $status_condition . "
        AND pm.meta_key = '_billing_country' 
        GROUP BY pm.meta_value
        ORDER BY order_count DESC", $start_date, $end_date);
    
    $results = $wpdb->get_results($sql);
    $countries = WC()->countries->countries;

    $grand_total = 0; // Variable pour accumuler le montant total
    $total_orders = 0; // Variable pour accumuler le nombre total de commandes

    if($results){
        echo '<table border="1">';
        echo '<tr><th>Pays</th><th>Nombre de commandes</th><th>Montant total</th></tr>';
        foreach($results as $row){
            $country_name = isset($countries[$row->country_code]) ? $countries[$row->country_code] : $row->country_code;
            $grand_total += floatval($row->total_amount); // Ajouter le montant au total global
            $total_orders += intval($row->order_count); // Ajouter le nombre de commandes au total global
            echo '<tr><td>' . $country_name . '</td><td>' . $row->order_count . '</td><td>' . wc_price($row->total_amount) . '</td></tr>';
        }
        echo '</table>';
        // Affichage du montant total accumulé
        echo '<p><strong>Montant total pour la période sélectionnée : </strong>' . wc_price($grand_total) . '</p>';
        // Affichage du nombre total de commandes accumulé
        echo '<p><strong>Nombre total de commandes pour la période sélectionnée : </strong>' . $total_orders . '</p>';
    } else {
        echo '<p>Aucune commande trouvée pour cette période et cet état de commande.</p>';
    }
}
				
			
Envie de laisser un commentaire ?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Tu veux voir d'autres bouts de code ?

Afficher le poids total des produits dans le panier et commande

Ce code va nous permettre d'afficher le poids total des produits dans la page panier et commande de WooCommerce

ID de CSS personnalisé pour Elementor nested tabs

Ce script nous permettra d'exécuter une URL directement vers un onglet Elementor

Statistiques des commandes WooCommerce par pays

Ce plugin vous permet d'afficher rapidement les volumes de vente en fonction des pays.

Créer un menu déroulant d’une liste de Custom Post Type

Ce code va nous permettre d'afficher un menu déroulant qui liste tous les CPT présents dans notre ACF

Filtrer le nombre de commandes par pays

Mettre en place un sous menu qui nous permet de filtrer une plage de date et afficher le nombre de commandes en fonction des pays.

Incrémenter le prix en fonction de la quantité d’un produit

Ce code vous permettra de faire grossir le prix total de la fiche produit en fonction de la quantité selectionnée
ON DISCUTE ?

Une question sur WordPress ?
Un projet web à faire sous traiter par un freelance ?
Je suis votre homme !