Сохранение общей суммы заказа и электронной почты клиента в пользовательской таблице в базе данных MySQL - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь получить данные из завершенной проверки в файле functions.php woocommerce. После оформления заказа я пытаюсь сохранить сгенерированный пользователем код, адрес электронной почты, который сгенерировал заказ, и общую сумму заказа. Я не могу получить какие-либо данные из заказа, и мне не удалось найти какую-либо документацию, связанную с этим.

Данные должны быть извлечены после успешного завершения оформления заказа.

Таблица содержит код ваучера столбцов (уникальный сгенерированный код для транзакции), адрес электронной почты пользователя и общую стоимость заказа. Я не могу найти способ получить электронную почту пользователя и общую сумму заказа после оформления заказа. В запросе должен быть указан идентификатор ваучера, сгенерированный внутри функции, электронное письмо, которое должно быть взято из деталей заказа, выкуплено, которое установлено в 0, и значение, которое также должно быть взято из деталей заказа.

На странице оформления заказа в Woocommerce у меня есть внутренняя ошибка сервера и Неустранимая ошибка PHP:
Вызов функции-члена get_data() в логической форме.

add_action( 'woocommerce_email_before_order_table', 'generate_code');
function generate_code(){
    $order = wc_get_order( $order_id );    
    $order_data = $order->get_data(); // The Order data
    $order_billing_email = $order_data['billing']['email'];
    $order_total_tax = $order_data['total_tax'];

    $connection = DBLogin();

    $query = "INSERT INTO test_vouchers (voucher_id, email, redeemed, value) VALUES ('$string','$order_billing_email','0','$order_total_tax')";
}

Что я делаю не так? Как я могу решить эту ошибку?
И как я могу сохранить общую сумму заказа и электронную почту клиента в пользовательской таблице в базе данных MySQL?

1 Ответ

0 голосов
/ 07 июля 2018

Ваш вопрос не совсем понятен или недостаточно подробен. Мы не знаем, пытаетесь ли вы добавить эти данные в пользовательскую таблицу в вашей базе данных Wordpress или в другую базу данных.

Если вы пытаетесь вставить данные в пользовательскую таблицу в вашей базе данных WordPress, вы должны использовать WPDB Class (как я использую в своем ответе), если нет, вы должны использовать последний фрагмент кода.

$order_id не определен, и ваш код выдает ошибку. Также переменная $string не определена , и если это индексированный столбец, он не нужен появиться (как в первом фрагменте кода ниже).

Похоже, вы нацелены на "выполненные" заказы. Использование хука woocommerce_email_before_order_table сделает ваш код активированным несколько раз в каждом уведомлении по электронной почте. Также этот хук действительно не удобен для запуска каких-либо изменений в базе данных.

Следующий код будет активирован, когда статус заказа «завершен». Так что есть 2 случая:

1) Действуя в базе данных Wordpress для пользовательской таблицы:

add_action( 'woocommerce_order_status_completed', 'generate_code_on_order_complete', 20, 2 );
function generate_code_on_order_complete( $order_id, $order ){
    global $wpdb;

    $billing_email = $order->get_billing_email(); // Billing email
    $total_tax     = $order->get_total_tax();     // Billing email

    $wpdb->query("
        INSERT INTO test_vouchers (email, redeemed, value)
        VALUES ('$billing_email','0','$total_tax');
    ");
}

Код помещается в файл function.php активной дочерней темы (или активной темы). проверено и работает.


2) Вставка данных в другую базу данных, отличную от Wordpress (не проверено):

Вы должны заполнить следующий код, чтобы подключить базу данных к вашей внешней базе данных и вставить данные ... Помните, что $string не определено.

add_action( 'woocommerce_order_status_completed', 'generate_code_on_order_complete', 20, 2 );
function generate_code_on_order_complete( $order_id, $order ){

    $billing_email = $order->get_billing_email(); // Billing email
    $total_tax     = $order->get_total_tax();     // Billing email

    ## To be completed by you (below) ##

    $connection = DBLogin();

    $query = "INSERT INTO test_vouchers (voucher_id, email, redeemed, value) VALUES ('$string','$billing_email','0','$total_tax')";
}

Код помещается в файл function.php активной дочерней темы (или активной темы).

...