web-dev-qa-db-ja.com

どこにwordpressデータベースに配置されたwoocommerce注文

とても簡単な質問があります。しかし、それは私をたくさん悩ませます。

WordPress woo-commerce website。より正確には誰でも私に教えてくれます。 WC_Orderクラスなどのwoocommerceクラスを使用せずに配送先住所を取得できますか?カスタムデータベースクエリを使用して手動でそのデータを取得する必要がありますが、データベースで注文とそれに関連するすべてを見つけることができませんか?データベースはwp-postsテーブルにポストとしてありますが、残りはどこにありますか(配送先住所、請求先住所など)?誰も混乱させないでください。

宜しくお願いします、

MAK

20
MAK

注文はカスタム投稿タイプ(CPT)であるため、wp_postsテーブルに保存されます。 post_typeフィールドで「shop_order」を検索すると、SQLはすべての注文を取得します。

次に、post_idが注文投稿のIDと一致するすべてのレコードをwp_postmetaテーブルで検索する必要があります。 wp_postmetaテーブルのフィールドには、配送先住所と請求先住所全体が含まれます。

28
select
    p.ID as order_id,
    p.post_date,
    max( CASE WHEN pm.meta_key = '_billing_email' and p.ID = pm.post_id THEN pm.meta_value END ) as billing_email,
    max( CASE WHEN pm.meta_key = '_billing_first_name' and p.ID = pm.post_id THEN pm.meta_value END ) as _billing_first_name,
    max( CASE WHEN pm.meta_key = '_billing_last_name' and p.ID = pm.post_id THEN pm.meta_value END ) as _billing_last_name,
    max( CASE WHEN pm.meta_key = '_billing_address_1' and p.ID = pm.post_id THEN pm.meta_value END ) as _billing_address_1,
    max( CASE WHEN pm.meta_key = '_billing_address_2' and p.ID = pm.post_id THEN pm.meta_value END ) as _billing_address_2,
    max( CASE WHEN pm.meta_key = '_billing_city' and p.ID = pm.post_id THEN pm.meta_value END ) as _billing_city,
    max( CASE WHEN pm.meta_key = '_billing_state' and p.ID = pm.post_id THEN pm.meta_value END ) as _billing_state,
    max( CASE WHEN pm.meta_key = '_billing_postcode' and p.ID = pm.post_id THEN pm.meta_value END ) as _billing_postcode,
    max( CASE WHEN pm.meta_key = '_shipping_first_name' and p.ID = pm.post_id THEN pm.meta_value END ) as _shipping_first_name,
    max( CASE WHEN pm.meta_key = '_shipping_last_name' and p.ID = pm.post_id THEN pm.meta_value END ) as _shipping_last_name,
    max( CASE WHEN pm.meta_key = '_shipping_address_1' and p.ID = pm.post_id THEN pm.meta_value END ) as _shipping_address_1,
    max( CASE WHEN pm.meta_key = '_shipping_address_2' and p.ID = pm.post_id THEN pm.meta_value END ) as _shipping_address_2,
    max( CASE WHEN pm.meta_key = '_shipping_city' and p.ID = pm.post_id THEN pm.meta_value END ) as _shipping_city,
    max( CASE WHEN pm.meta_key = '_shipping_state' and p.ID = pm.post_id THEN pm.meta_value END ) as _shipping_state,
    max( CASE WHEN pm.meta_key = '_shipping_postcode' and p.ID = pm.post_id THEN pm.meta_value END ) as _shipping_postcode,
    max( CASE WHEN pm.meta_key = '_order_total' and p.ID = pm.post_id THEN pm.meta_value END ) as order_total,
    max( CASE WHEN pm.meta_key = '_order_tax' and p.ID = pm.post_id THEN pm.meta_value END ) as order_tax,
    max( CASE WHEN pm.meta_key = '_paid_date' and p.ID = pm.post_id THEN pm.meta_value END ) as paid_date,
    ( select group_concat( order_item_name separator '|' ) from wp_woocommerce_order_items where order_id = p.ID ) as order_items
from
    wp_posts p 
    join wp_postmeta pm on p.ID = pm.post_id
    join wp_woocommerce_order_items oi on p.ID = oi.order_id
where
    post_type = 'shop_order' and
    post_date BETWEEN '2015-01-01' AND '2015-07-08' and
    post_status = 'wc-completed' and
    oi.order_item_name = 'Product Name'
group by
    p.ID

ソース ここ

7
Fahad Uddin

また、注文データはwoocommerce_order_itemsおよびwoocommerce_order_itemmetaテーブルに保存されます(WooCommerce> 2.5の場合)これらのテーブルには、顧客が実際に購入した製品に関するものが含まれています。

Shop_order投稿エントリには、woocommerce_order_itemsのorder_idと一致するpost_idがあります。 woocommerce_order_itemsのorder_item_idは、woocommerce.order_itemmetaのorder_item_idと一致します。

7
gunnerman

このクエリはあなたを助けることができるはずです。独自のDBのDBプレフィックスを変更するだけです。

SELECT * 
FROM 
  adolfoma_comoconq_wp470.wpkn_postmeta 
  INNER JOIN 
  adolfoma_comoconq_wp470.wpkn_posts 
  ON adolfoma_comoconq_wp470.wpkn_posts.ID=adolfoma_comoconq_wp470.wpkn_postmeta.post_id 
where adolfoma_comoconq_wp470.wpkn_posts.post_type ="shop_order";

書いたばかりで、メール、請求先住所、名前、購入金額などを見ることができます。正確なアイテムと金額が表示されなかったので、追加のクエリが必要な場合があります。

2

Woocommerceの注文はカスタムの投稿タイプであり、wp_postsに保存されていることを確認できます。

WooCommerceの注文は「カスタムポスト」であり、「post_type」->「shop_order」の下の「wp_posts」に保存されます。

sQLクエリで製造指図を選択する場合は、次のようなことができます。

global $wpdb;
$results = $wpdb->get_results( "SELECT * FROM $wpdb->posts WHERE post_type = 'shop_order'", ARRAY_A );
1
Nitesh Gour