Mysql
 sql >> Base de données >  >> RDS >> Mysql

Insérer des valeurs dans un tableau personnalisé une fois la commande passée dans Woocommerce

Dans votre code il y a des choses étranges comme 'order_id' => $email cela devrait être la valeur de l'ID de commande et non l'e-mail… Aussi $customer_id= $order->id; qui n'est PAS l'identifiant de l'utilisateur client, mais l'identifiant de la commande, et $email1= $order->id; qui n'est pas utilisé et qui est faux… */

<?php

#-------------------- code begins below -------------------------#

add_action( 'woocommerce_order_status_completed', 'my_function' );
function my_function($order_id) {
    global $wpdb;

    // Getting the order (object type)
    $order = wc_get_order( $order_id );

    // Getting order items
    $items = $order->get_items(); 
    $total_items_qty = 0;

    // Iterating through each item (here we do it on first only)
    foreach ( $items as $item ) {
        $total_items_qty += $item["qty"];
    }

    // Here are the correct way to get some values:
    $customer_id           = $order->customer_user;
    $billing_email         = $order->billing_email;
    $complete_billing_name = $order->billing_first_name . ' ' . $order->billing_last_name;

    // Getting the user data (if needed)
    $user_data             = get_userdata( $customer_id );
    $customer_login_name   = $user_data->user_login;
    $customer_login_email  = $user_data->user_email;

    // "$wpdb->prefix" will prepend your table prefix
    $table_name =  $wpdb->prefix."license_table";

    // This array is not correct (as explained above)
    $data = array( 
        'username'          => $customer_login_name,
        'order_id'          => $order_id,
        'number_of_cameras' => $total_items_qty,
        'boolean'           => 'false',
    );

    $wpdb->insert( $table_name, $data );

}

#-------------------- code end -------------------------#

?>

De plus, ce qui est étrange, c'est que vous pouvez avoir plusieurs articles (produits) dans une commande et que votre tableau ne peut pas gérer cela, car vous devriez également avoir besoin d'une ligne par article…