Ce petit bout de code va nous permettre de pouvoir avoir une vision rapide en fonction d’une plage de date de nous faire afficher le nombre de commandes effectuées sur notre site en fonction des pays de nos clients.
/************************************************************************************/
/* Statistiques des commandes par pays - CUSTOM FUNCTION WYCAN */
/************************************************************************************/
// 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(){
?>
Statistiques de commande par pays
prepare("
SELECT pm.meta_value AS country_code, COUNT(p.ID) AS order_count
FROM {$wpdb->posts} p
JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id
WHERE p.post_type = 'shop_order'
AND p.post_date BETWEEN %s AND %s
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;
if($results){
echo ' ';
echo 'Pays Nombre de commandes ';
foreach($results as $row){
$country_name = isset($countries[$row->country_code]) ? $countries[$row->country_code] : $row->country_code; // Si le code du pays n'est pas reconnu, affichez le code.
echo '' . $country_name . ' ' . $row->order_count . ' ';
}
echo '
';
}else{
echo 'Aucune commande trouvée pour cette période.
';
}
}
On peut également afficher une troisième colonne qui va nous afficher le montant total des commandes pour ce pays et nous allons demander aussi de filtrer en fonction d’un état de commande.
/************************************************************************************/
/* Statistiques des commandes par pays - CUSTOM FUNCTION WYCAN */
/************************************************************************************/
// 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'] : '';
?>
Statistiques de commande par pays
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;
if($results){
echo ' ';
echo 'Pays Nombre de commandes Montant total ';
foreach($results as $row){
$country_name = isset($countries[$row->country_code]) ? $countries[$row->country_code] : $row->country_code;
echo '' . $country_name . ' ' . $row->order_count . ' ' . wc_price($row->total_amount) . ' ';
}
echo '
';
} else {
echo 'Aucune commande trouvée pour cette période et cet état de commande.
';
}
}