Генерация уникального случайного числа на woocommerce_checkout_create_order_line_item на основе настраиваемого поля - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь сгенерировать уникальное случайное число для каждого элемента заказа woocommerce на основе настраиваемого поля, которое я установил для каждого продукта.

Например, настраиваемое поле $drawnumbers устанавливается равным 1000 при создании товара, и для каждого количества товара в корзине необходимо случайным образом сгенерировать число от 1 до значения $drawnumbers и установитьзначение в качестве настраиваемого поля meta_key_value для каждой позиции заказа.Я заставил корзину разделить кол-во для каждого товара как на отдельный товар.

После того, как номер был выделен для позиции заказа, мне нужно сохранить его в массиве с именем $chosennumbers, чтобы он не мог быть распределен снова.Я сделал это, добавив число в массив и используя функцию array_diff().

При тестировании он случайным образом генерирует число, но я не думаю, что он правильно хранит его в пользовательском поле $drawnumbers, так как когда я смотрю на порядок, мета-поля отображают различные числа для print_r(get_field('draw_no')); на странице одного продукта.

Код, который у меня есть, выглядит примерно так:

add_action( 'woocommerce_checkout_create_order_line_item', 'lottery_ticket_items', 20, 4 );

function lottery_ticket_items( $item, $cart_item_key, $values, $order )
{
    $numberallocated = array();
    $_p = $item->get_product();
    $product_id =  $_p->get_id();
    $drawnumbers = get_field('draw_no', $product_id);
    $qty = get_field('maximum_entries', $product_id);
    $array = range(1, $qty);
    $result = array_diff($array, $drawnumbers);
    $key = 'meta_key_value';

    foreach( $order->get_items() as $item_id => $item_product ) {
    // Get the product ID
    $number = array_rand($result, 1);
    $numberallocated[] = $number;
    $product_id = $item_product->get_product_id();
    $item->add_meta_data( $key , $number , true ); 

}              

    update_field('draw_no', $numberallocated, $product_id);

}

add_action( 'woocommerce_before_single_product_summary', 'lottery_display_tickets', 5 );

function lottery_display_tickets() {
 print_r(get_field('draw_no'));
}

Кто-нибудь знает, где я ошибаюсь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...