Я пытаюсь сгенерировать уникальное случайное число для каждого элемента заказа 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'));
}
Кто-нибудь знает, где я ошибаюсь?