Как написать цикл foreach, который проверяет, сколько раз пользователь покупал определенный товар в Woocommerce? - PullRequest
0 голосов
/ 20 сентября 2019

Я использую этот код для создания iframe, если клиент купил продукт 13372, и он отлично работает:

<?php
// Get the current user data:
$user = wp_get_current_user();
$user_id = $user->ID; // Get the user ID
$customer_email = $user->user_email; // Get the user email
// OR
// $customer_email = get_user_meta( $user->ID, 'billing_email', true ); // Get the user billing email

// The conditional function (example)
// IMPORTANT: $product_id argument need to be defined
$product_id = 13372;
if( wc_customer_bought_product( $customer_email, $user_id, $product_id ) ) {
    echo "You have additional listings!"; 
    //iFrame goes here 
} else {
    echo "You have no additional listings.";
}
?>

Теперь мне нужно изменить это, чтобы проверить, сколько раз пользователь купил идентификатор продукта13372 и выведите такое количество фреймов.Если купили 3 раза, выведите 3 кадра.Я предполагаю цикл foreach, но то, что я пробовал, не работает.Я следовал за этим сообщением: Как проверить, сколько раз продукт был куплен клиентом

Но пример, который мне ничего не возвращает, не знаю почему!

1 Ответ

0 голосов
/ 22 сентября 2019

Пожалуйста, попробуйте следующее.Мы просматриваем каждый завершенный заказ магазина определенного клиента и помещаем все идентификаторы приобретенных продуктов в массив.Затем мы перебираем этот массив, чтобы увидеть, сколько раз появляется конкретный идентификатор.Мы сохраняем это значение в переменной $count, которая используется для определения, сколько раз выводить iframe.

Я прокомментировал код и сделал имена функций и переменных как можно более понятными.

<?php
function so58032512_get_product_purchase_quantity( $product_id ) {
    // Array to hold ids of all products purchased by customer
    $product_ids = [];

    // Get all customer orders
    $customer_orders = get_posts( array(
        'numberposts' => - 1,
        'meta_key'    => '_customer_user',
        'meta_value'  => get_current_user_id(),
        'post_type'   => 'shop_order', // WC orders post type
        'post_status' => 'wc-completed' // Only orders with status "completed"
    ) );

    // Loop through each of this customer's order
    foreach ( $customer_orders as $customer_order ) {
        $order = wc_get_order( $customer_order );
        $items = $order->get_items();

        // Loop through each product in order and add its ID to $product_ids array
        foreach ( $items as $item ) {
            $id = $item['product_id'];
            array_push( $product_ids, $id );
        }
    }

    // Variable to count times an ID exists in the $product_ids array
    $count = 0;

    // Loop through all of the IDs in our $product_ids array
    foreach ( $product_ids as $key => $value ) {
        // Every time the ID that we're checking against appears in the array
        if ( $value == $product_id ) {
            // Increment our counter
            $count ++;
        }
    }

    // Return the counter value that represents the number of times the
    // customer bought a product with our passed in ID ($product_id)
    return $count;
}

// Get the current user data:
$user           = wp_get_current_user();
$user_id        = $user->ID; // Get the user ID
$customer_email = $user->user_email; // Get the user email

// IMPORTANT: $product_id argument need to be defined
$product_id = 13372;
if ( wc_customer_bought_product( $customer_email, $user_id, $product_id ) ) {
    $x = 1;
    $number_of_iframes_to_show = so58032512_get_product_purchase_quantity( $product_id );
    echo 'The customer bought product with ID ' . $product_id . ' ' . $number_of_iframes_to_show . ' time(s).<br>';
    while ( $x <= $number_of_iframes_to_show ) {
        echo "<br>Here's an iframe!<br>";
        $x ++;
    }
} else {
    echo "You have no additional listings.";
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...