将WooCommerce订单详细信息保存在自定义表中 [英] Save WooCommerce Order details in custom table

查看:54
本文介绍了将WooCommerce订单详细信息保存在自定义表中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经在表 order-master 中创建了一个自定义数据库,其中将保存WooCommerce订单总金额运输费用令牌.为此,我编辑了 paypemts.php 文件,代码如下:

I have created a custom database in table order-master in which I will save WooCommerce order total amount, shipping charges and token. For this, I have edited paypemts.php file, code is below:

<?php
include_once($_SERVER['DOCUMENT_ROOT'].'/canadiapharma.com/wp-config.php' );
global $woocommerce;
global $wpdb;
echo '<h3>Custom Calculation :</h3>';
$amount_2 = $woocommerce->cart->get_cart_total();
$ship_raw = floatval( preg_replace( '#[^\d.]#', '', $woocommerce->cart->get_cart_shipping_total() ) );
$ship = $ship_raw - 3600;
echo '<strong>Shipping :</strong>';
echo $ship; 
$nano=WC()->cart->cart_contents_total;
echo '<br>';
$total_amt = $nano+$ship;
echo '<strong>Total :</strong>';
echo $total_amt;
echo '<br>';
$salt = 'dAta_EnC!=';
$token_raw = base64_encode($total_amt. $salt);
$token = preg_replace(sprintf('/=/', $salt), '', $token_raw);
echo '<strong>Token :</strong>';
echo $token;
$wpdb->query("INSERT INTO order_master (payment_amt, ship, token) VALUES ('$total_amt', '$ship', '$token')"  );
?>

此代码可以正常工作,并将数据存储到数据库中.但它会在 checkout.php 页面加载后立即存储数据.因此,我进行了一些更改,并在 checkout.php 页面的 Place Order 按钮上创建了 onclick 事件.

This code works fine and stores the data to the database. But it stores the data as soon as the checkout.php page loads. So, I made some changes and created an onclick event on Place Order button in checkout.php page.

OnCLick事件:

OnCLick Event:

<?php echo apply_filters( 'woocommerce_order_button_html', '<button type="submit" class="button alt" name="woocommerce_checkout_place_order" id="place_order" value="' . esc_attr( $order_button_text ) . '" data-value="' . esc_attr( $order_button_text ) . '" onclick="dbinsert()">' . esc_html( $order_button_text ) . '</button>' ); 
        ?>

dbinsert():

dbinsert():

<script>
        function dbinsert() {
            var myKeyVals = { amount : <?php echo $total_amt; ?>., ship : <?php echo $ship; ?>., token : <?php echo $token; ?> }

            var saveData = $.ajax({
                        type: 'POST',
                        url: "savedata.php",
                        data: myKeyVals,
                        dataType: "text",
                        success: function(dbinsert) { alert("Save Complete") }
            });
            saveData.error(function() { alert("Something went wrong"); });
                    }
        </script>

onclick 事件执行得很好,但是不知道为什么数据没有进入数据库.以下是我的 savedata.php 文件.

onclick event executes perfectly but doesn't know why data is not going into the database. Below is my savedata.php file.

<?php
global $wpdb;
$total_amt = $_POST['amount'];
$ship = $_POST['ship'];
$token = $_POST['token'];
$stmt = $wpdb->query("INSERT INTO order_master (payment_amt, ship, token) VALUES ('$total_amt', '$ship', '$token')"  );
$stmt->bindparam('payment_amt', $total_amt);
$stmt->bindparam('ship', $ship);
$stmt->bindparam('token', $token);
if($stmt->execute())
{
  $res="Data Inserted Successfully:";
  echo json_encode($res);
}
else {
  $error="Not Inserted,Some Probelm occur.";
  echo json_encode($error);
}
?>

请帮助我解决此问题.

推荐答案

尝试通过将ajax url url:"savedata.php",更改为 url:<?php echoadmin_url('admin-ajax.php?action = save_order_data');?>"并在主题的function.php中添加以下代码

Try by changing your ajax url url: "savedata.php", to url: "<?php echo admin_url('admin-ajax.php?action=save_order_data');?>" and add below code in your theme's function.php

add_action('wp_ajax_nopriv_save_order_data', 'save_order_data');
add_action('wp_ajax_save_order_data', 'save_order_data');
function save_order_data() {
     global $wpdb;
     $total_amt = $_POST['amount'];
     $ship = $_POST['ship'];
     $token = $_POST['token'];
     $stmt = $wpdb->query("INSERT INTO order_master (payment_amt, ship, token) VALUES ('$total_amt', '$ship', '$token')"  );
     $result = $wpdb->query($wpdb->prepare($stmt));

     if($result)
     {
         $res="Data Inserted Successfully:";
         echo json_encode($res);
     }
     else {
         $error="Not Inserted,Some Probelm occur.";
         echo json_encode($error);
     }
}

已更新: var myKeyVals = {amount:<?php echo $ total_amt;?>.,ship:<?php echo $ ship;?>.,令牌:<?php echo $ token;?>} .更改您的 var myKeyVals 如下:

var myKeyVals = { amount : "<?php echo $total_amt; ?>", 
                  ship : "<?php echo $ship; ?>", 
                  token : "<?php echo $token; ?>" }

您需要在javascript中的" 中编写php代码.

You need to write php code in "" in javascript.

希望这会有所帮助.

这篇关于将WooCommerce订单详细信息保存在自定义表中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆