2 votes

Obtenir le nombre de commandes par produit chaque jour dans Woocommerce

Je souhaite obtenir le tableau qui représente deux colonnes : la date de la commande et le nombre de commandes en fonction de l'ID du produit et de l'état de la commande. Je dois donc obtenir le nombre de commandes créées dans une plage de dates donnée par le produit (par ID) avec un statut donné, par exemple, en attente.

J'ai essayé de combiner plusieurs codes

SELECT DISTINCT count(p.ID) FROM wp_posts as p
WHERE p.post_type = 'shop_order' AND p.post_date BETWEEN '2021-01-01' AND '2021-01-21'
AND p.post_status IN ('wc-on-hold')

et

SELECT order_items.order_id
FROM wp_woocommerce_order_items as order_items
LEFT JOIN wp_woocommerce_order_itemmeta as order_item_meta ON order_items.order_item_id = order_item_meta.order_item_id
LEFT JOIN wp_posts AS posts ON order_items.order_id = posts.ID
WHERE posts.post_type = 'shop_order'
AND posts.post_status IN ('wc-on-hold')
AND order_items.order_item_type = 'line_item'
AND order_item_meta.meta_key = '_product_id'
AND order_item_meta.meta_value = '585'

mais je n'arrive pas à obtenir le résultat que je souhaite.

Je cherche une solution. Vous avez des suggestions ?

2voto

LoicTheAztec Points 72349

La fonction suivante utilise WordPress WPDB va créer une requête SQL personnalisée pour obtenir le nombre de commandes sur la base d'un identifiant de produit spécifique, pour un statut de commande spécifique et pour un jour donné :

get_order_count_by( $product_id, $status, $day )
    global $wpdb;

    $date_from = date( 'Y-m-d H:i:s', strtotime( $day ) );
    $date_to   = date( 'Y-m-d H:i:s', strtotime( $day . ' + 1 day' ) );

    return $wpdb->get_var( $wpdb->prepare("
        SELECT DISTINCT count(o.ID)
        FROM {$wpdb->prefix}posts o
        INNER JOIN {$wpdb->prefix}woocommerce_order_items oi
            ON o.ID = oi.order_id
        INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta oim
            ON oi.order_item_id = oim.order_item_id
        WHERE o.post_status = '%s'
            AND o.post_date >= '%s'
            AND o.post_date < '%s'
            AND oim.meta_key IN ('_product_id','_variation_id')
            AND oim.meta_value = %d
    ", $status, $date_from, $date_to, $product_id ) );
}

Le code est placé dans le fichier functions.php du thème enfant actif (ou du thème actif). Testé et fonctionne.

EXEMPLE D'UTILISATION :

<?php echo '<span class="orders_count">' . get_order_count_by( 37, 'wc-processing', '2021-01-10' ) . '<span>'; ?>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X