Я создал таблицу под названием wp_tickets, которая содержит диапазон номеров билетов, сгенерированных из настраиваемого поля, установленного в моем сообщении Wordpress. Столбцы в таблице: «id», «ticket_id», «lottery_id» и «used».
Я пытаюсь сгенерировать случайный уникальный номер, когда клиент покупает товары на моем веб-сайте.
Например, если клиент заказывает пять одинаковых товаров. Ему необходимо сгенерировать 5 случайных уникальных чисел на основе поля, установленного в метаполе продукта, «maximum_entries», а затем пометить эти числа как «используемые» в таблице wp_tickets.
Мне нужно, чтобы это была атомарная операция, чтобы клиенты не могли иметь одно и то же количество, если они заказывают одновременно.
На данный момент я создал функцию, которая будет вызываться на хуке woocommerce_order_status_processing, который проходит через каждый продукт в корзине и получает количество продукта. Затем я использовал функцию диапазона, чтобы превратить это значение в массив чисел, прежде чем вызывать array_rand.
Затем я использую $ticketallocated в своей функции обновления $wpdb.
У меня проблема в том, что если генерируемое число уже помечено в таблице как «используемое», то оно не возвращается к началу и не повторяет попытку. Мне нужно каким-то образом настроить оператор if/else, чтобы, если генерируемое случайное число равно 5, а в базе данных уже есть 5 как «использованное», тогда оно попытается использовать другое число.
add_action('acf/save_post', 'my_acf_save_post', 20);
function my_acf_save_post( $post_id ) {
global $wpdb;
$qty = get_field('maximum_entries');
$array = range(1, $qty);
foreach ($array as $ticket) {
$wpdb->insert('wp_tickets', array(
'ticket_number' => $ticket,
'lottery_id' => $post_id,
));
}
}
add_action( 'woocommerce_order_status_processing', 'ektgn_meta_to_line_item', 20, 4 );
function ektgn_meta_to_line_item( $order_id )
{
$order = wc_get_order($order_id);
foreach( $order->get_items() as $item_id => $item_product ) {
global $wpdb;
$product_id = $item_product->get_product_id();
$qty = get_field('maximum_entries', $product_id, true);
$ticketOptions = range(1, $qty);
$ticketAllocated = array_rand($ticketOptions, 1);
$wpdb->query(
"
UPDATE wp_tickets
SET used = 1
WHERE ticket_number= ".$ticketAllocated." AND lottery_id = ".$product_id." AND used = 0
"
);
}
}
Подробнее здесь: https://stackoverflow.com/questions/542 ... pdate-data
Wordpress — генерировать случайное уникальное число, используя атомарную операцию, и обновлять базу данных ⇐ Php
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как генерировать уникальное случайное число каждый раз в цикле в Python?
Anonymous » » в форуме Python - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Рассматривает ли gcc расслабленную атомарную операцию как ограждение компилятора?
Anonymous » » в форуме C++ - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Генерировать случайное число между тремя определенными значениями С++ [дубликат]
Anonymous » » в форуме C++ - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-