【问题标题】:where is a woocommerce order placed in wordpress databasewordpress 数据库中的 woocommerce 订单在哪里
【发布时间】:2014-06-01 06:26:13
【问题描述】:

从 WordPress woo-commerce 网站放置订单后,订单及其中的所有内容都存储在数据库中的什么位置?更准确地说,如何在不使用 WC_Order 类之类的 woocommerce 类的情况下获取我的送货地址?我的意思是我需要通过我的自定义数据库查询手动获取该数据,但我在我的数据库中找不到订单和与之相关的所有内容?我知道订单作为 wp-posts 表中的帖子存储在数据库中,但其余部分在哪里,即送货地址账单地址等?

【问题讨论】:

  • 另外更好的办法是在本地安装插件并挖掘到WP数据库。
  • 来自@Amiya 的链接“WooCommerce 2.x,订单存储在 post 表、postmeta 表、woocommerce_order_items 和 woocommerce_order_itemmeta 表中。订单的各个部分存储在不同的表中”

标签: wordpress woocommerce


【解决方案1】:

订单是自定义帖子类型 (CPT),因此它们存储在 wp_posts 表中。如果您在 post_type 字段中搜索“shop_order”,SQL 将检索所有订单。

然后,您必须在 wp_postmeta 表中搜索所有 post_id 与订单帖子的 id 匹配的记录。然后,您将在 wp_postmeta 表中找到的字段包括整个送货地址和帐单地址。

【讨论】:

    【解决方案2】:
    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
    

    来源here

    【讨论】:

      【解决方案3】:

      此外,订单数据将存储在 woocommerce_order_items 和 woocommerce_order_itemmeta 表中(我相信对于 WooCommerce > 2.5)这些表包含与客户购买的实际产品有关的内容。

      shop_order 帖子条目的 post_id 与 woocommerce_order_items 中的 order_id 匹配。 woocommerce_order_items 中的 order_item_id 与 woocommerce.order_itemmeta 中的 order_item_id 匹配。

      【讨论】:

        【解决方案4】:

        我可以确认 woocommerce 订单是自定义帖子类型,因此它们存储在 wp_posts 中。

        WooCommerce 订单是“自定义帖子”,它们存储在“post_type”下的“wp_posts”中 -> “”shop_order”

        如果您想使用 sql 查询选择商店订单,您可以执行以下操作。

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

        【讨论】:

          【解决方案5】:

          这个查询应该能帮到你。您只需要更改您自己的数据库的数据库前缀:

          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";
          

          我刚刚写了,我可以看到电子邮件、帐单地址、姓名、购买金额等。我没有看到确切的项目和金额,可能需要额外查询。

          【讨论】:

            猜你喜欢
            • 2023-04-07
            • 1970-01-01
            • 2012-10-31
            • 1970-01-01
            • 1970-01-01
            • 2014-09-25
            • 1970-01-01
            • 1970-01-01
            • 2014-06-04
            相关资源
            最近更新 更多