Wordpress – Generieren Sie eine zufällige eindeutige Zahl mithilfe einer atomaren Operation und aktualisieren Sie die DaPhp

PHP-Programmierer chatten hier
Guest
 Wordpress – Generieren Sie eine zufällige eindeutige Zahl mithilfe einer atomaren Operation und aktualisieren Sie die Da

Post by Guest »

Ich habe eine Tabelle namens wp_tickets erstellt, die eine Reihe von Ticketnummern enthält, die aus einem benutzerdefinierten Feldsatz in meinem WordPress-Beitrag generiert wurden. Die Spalten in der Tabelle sind „id“, „ticket_id“, „lottery_id“ und „used“.

Ich versuche, eine zufällige, eindeutige Nummer zu generieren, wenn ein Kunde die Produkte auf meiner Website kauft.

Zum Beispiel, wenn ein Kunde fünf gleiche Produkte bestellt. Es muss 5 zufällige eindeutige Zahlen basierend auf dem im Produktmetafeld festgelegten Feld „maximum_entries“ generieren und diese Zahlen dann in der Tabelle „wp_tickets“ als „verwendet“ markieren.

Ich muss dafür sorgen, dass es sich um einen atomaren Vorgang handelt, damit Kunden nicht die gleiche Nummer haben können, wenn sie gleichzeitig bestellen.

Bisher habe ich eine Funktion erstellt, die über den Hook woocommerce_order_status_processing aufgerufen werden kann, der jedes Produkt im Warenkorb durchläuft und die Produktmenge abruft. Ich habe dann die Range-Funktion verwendet, um dies in ein Array von Zahlen umzuwandeln, bevor ich array_rand aufrufe.

Ich verwende dann $ticketallocated in meiner $wpdb-Aktualisierungsfunktion.

Das Problem, das ich habe, ist, dass, wenn die generierte Nummer in der Tabelle bereits als „verwendet“ markiert ist, sie nicht nach oben zurückspringt und es erneut versucht. Ich muss irgendwie eine if/else-Anweisung einrichten, sodass, wenn die generierte Zufallszahl 5 ist und in der Datenbank bereits eine 5 als „verwendet“ vorhanden ist, eine andere Zahl versucht wird.

Code: Select all

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
"
);

}

}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post