Я создал таблицу под названием 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
Кемеровские программисты php общаются здесь
1736051764
Anonymous
Я создал таблицу под названием 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
"
);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/54214295/wordpress-generate-random-unique-number-using-atomic-operation-and-update-data[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия