2017-10-04 6 views
1

J'ai besoin d'une requête qui me renvoie tous les utilisateurs avec des commandes approuvées.Obtenir tous les ordres payés par les clients WooCommerce avec une requête SQL

J'ai du mal à trouver où dans la base de données c'est stocké. J'ai trouvé seulement post_status 'wc-complete', mais je ne pense pas que ce soit la bonne information.

SELECT a.post_status, b.meta_value FROM wp_posts a, wp_postmeta b 
    WHERE a.ID = b.post_id 
    AND a.post_type = 'shop_order' 
    AND a.post_status = 'wc-completed' 

Répondre

1

Utilisation de « terminé » l'état des commandes pour les commandes payées est correct

est ici une fonction personnalisée avec une requête SQL, que la sortie de la volonté d'un tableau en forme d'ID de l'utilisateur avec leurs commandes complétées (payé/accepté):

function completed_orders_ids_by_costumer_id(){ 

    global $wpdb; 

    $query = $wpdb->get_results(" 

     SELECT pm.meta_value AS user_id, pm.post_id AS order_id 
     FROM {$wpdb->prefix}postmeta AS pm 
     LEFT JOIN {$wpdb->prefix}posts AS p 
     ON pm.post_id = p.ID 
     WHERE p.post_type = 'shop_order' 
     AND p.post_status = 'wc-completed' 
     AND pm.meta_key = '_customer_user' 
     ORDER BY pm.meta_value ASC, pm.post_id DESC 
    "); 

    // We format the array by user ID 
    foreach($query as $result) 
     $results[$result->user_id][] = $result->order_id; 

    return $results; 
} 

code va dans le fichier function.php de votre thème enfant actif (ou le thème) ou encore dans un fichier de plug-in.

Testé et fonctionne.


Exemple d'utilisationjuste pour un test pour voir les données en sortie brutes

echo '<pre>'; print_r(completed_orders_ids_by_costumer_id()); echo '</pre>'; 

Vous obtiendrez quelque chose comme:

Array 
(
    [9] => Array 
     (
      [0] => 505 
      [0] => 497 
     ) 

    [12] => Array 
     (
      [0] => 626 
      [1] => 584 
      [2] => 483 
     ) 

    [15] => Array 
     (
      [0] => 614 
      [1] => 598 
     ) 

    [17] => Array 
     (
      [0] => 634 
     ) 

    …/… and so on … 

) 

maintenant à wp_postmeta tableau vous aussi quelques autres clés méta liées à commandes payées que vous pouvez utiliser:
'_paid_date'
'_date_paid'
'_date_completed'
'_completed_date'

Mais le ciblage "terminé" l'état des commandes est juste bien

U chanter que d'autres énumérés clés meta, vous pouvez faire votre requête SQL (qui peut remplacer notre première requête dans la fonction):

$query = $wpdb->get_results(" 
    SELECT DISTINCT pm.meta_value AS user_id, pm.post_id AS order_id 
    FROM {$wpdb->prefix}postmeta AS pm 
    LEFT JOIN {$wpdb->prefix}posts AS p 
    ON pm.post_id = p.ID 
    LEFT JOIN {$wpdb->prefix}postmeta AS pm2 
    ON p.ID = pm2.post_id 
    WHERE p.post_type = 'shop_order' 
    AND pm.meta_key = '_customer_user' 
    AND pm2.meta_key IN ('_paid_date', '_paid_date', '_date_completed', '_completed_date') 
    AND pm2.meta_value != '' 
    ORDER BY pm.meta_value ASC, pm.post_id DESC 
"); 

testé et fonctionne aussi ...