【问题标题】:Get last order ID from a purchased product ID in Woocommerce从 Woocommerce 中购买的产品 ID 获取最后一个订单 ID
【发布时间】:2019-02-27 12:56:09
【问题描述】:

如果客户已经购买了特定产品,如何获取该产品的订单 ID?我尝试了下面的代码,但没有奏效。提前感谢您的帮助。

<?php
 $order = new wc_get_order( $order_id );
 $order->get_id();
 echo $order->get_order_number();
?>

也试过这段代码,但没有成功。

$product_ids = array(37,53);
$order_ids = get_order_ids_from_bought_items( $product_ids );

【问题讨论】:

  • 您的输入是什么(用户 ID / 订单 ID / 产品 ID)?哪一个?
  • @mujeebu 我有产品ID

标签: php wordpress woocommerce product orders


【解决方案1】:

以下函数使用一个非常轻量级的 SQL 查询,该查询将从给定客户的已定义产品 ID 中返回最后一个订单 ID:

function get_last_order_id_from_product( $product_id, $user_id = 0 ) {
    global $wpdb;

    $customer_id = $user_id == 0 ? get_current_user_id() : $user_id;

    return $wpdb->get_var( "
        SELECT p.ID FROM {$wpdb->prefix}posts AS p
        INNER JOIN {$wpdb->prefix}postmeta AS pm ON p.ID = pm.post_id
        INNER JOIN {$wpdb->prefix}woocommerce_order_items AS woi ON p.ID = woi.order_id
        INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS woim ON woi.order_item_id = woim.order_item_id
        WHERE p.post_type = 'shop_order'
        AND pm.meta_key = '_customer_user'
        AND pm.meta_value = $customer_id
        AND woim.meta_key IN ( '_product_id', '_variation_id' )
        AND woim.meta_value = $product_id
        ORDER BY p.ID DESC  LIMIT 1
    " );
}

代码在您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

如果客户尚未购买产品,该函数将返回false

用法示例:

您将在下面设置产品 ID 37 和可选的用户 ID 153(如果您不使用函数可以获取当前用户ID的前端代码)*/

$order_id = get_last_order_id_from_product( 37, 153 );

或者对于当前用户:

$order_id = get_last_order_id_from_product( 37 );

【讨论】:

    【解决方案2】:
    function get_order_ids_from_bought_items() {
    
        $prod_arr = array('37', '53');
        $purchased = false;
    
        $customer_orders = get_posts(array(
            'numberposts' => -1,
            'post_type' => 'shop_order',
            'meta_key' => '_customer_user',
            'meta_value' => get_current_user_id(),
                ));
        foreach ($customer_orders as $order_post) {
    
    
            $order = wc_get_order($order_post->ID);
    
            foreach ($order->get_items() as $item) {
    
                $product_id = $item->get_product_id();
    
                if (in_array($product_id, $prod_arr))
                    $purchased = true;
            }
        }
    
        return $purchased; // $order_post->ID  for Order ID
    }
    

    【讨论】:

    • 如果客户购买了产品,我想要订单 ID。上面的代码会帮助获取id吗?
    • @PullataPraveen 更新答案
    • 我应该在哪里添加上面的代码?我想在自定义模板中显示订单 ID。
    • 如果您正在寻找放置特定产品时自动通知类型的系统,我会在 WooCommerce 中设置一个 webhook。将交付 URL 设置为您的脚本,该脚本在响应中搜索产品并执行您想要的任何操作。否则,如果您只是想要一个在您访问它时为您提供此信息的页面或您拥有的东西,那么上面的答案看起来很合适。
    • @PullataPraveen 您可以在 functions.php 文件中使用它,只需稍作修改,例如从您调用的位置暂停产品数组并从函数中删除 - 如果 function_exists(
    猜你喜欢
    • 2020-01-12
    • 1970-01-01
    • 2017-09-25
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多