Получить идентификатор последнего заказа из идентификатора купленного продукта в Woocommerce - PullRequest
0 голосов
/ 27 февраля 2019

Как получить идентификатор заказа конкретного товара, если покупатель приобрел товар?Я попробовал приведенный ниже код, но не сработал.Заранее спасибо за помощь.

<?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 );

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Следующая функция использует очень легкий SQL-запрос, который возвращает идентификатор последнего заказа из определенного идентификатора продукта для данного клиента:

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.

Примеры использования:

Здесь ниже вы установите Идентификатор продукта 37 и, опционально, идентификатор пользователя 153 (если выне используйте код для внешнего интерфейса, где функция может получить идентификатор текущего пользователя) * /

$order_id = get_last_order_id_from_product( 37, 153 );

или для текущего пользователя:

$order_id = get_last_order_id_from_product( 37 );
0 голосов
/ 27 февраля 2019
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
}
...