php - 在自定义表中保存 WooCommerce 订单详细信息
问题描述
我在表中创建了一个自定义数据库,order-master
我将在其中保存 WooCommerce 订单total amount
和. 为此,我编辑了文件,代码如下:shipping charges
token
paypemts.php
<?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
页面加载后立即存储数据。因此,我进行了一些更改并在页面中的按钮onclick
上创建了一个事件。Place Order
checkout.php
OnCLick 事件:
<?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>' );
?>
数据库插入():
<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
文件。
<?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 echo admin_url('admin-ajax.php?action=save_order_data');?>"
并在主题的 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; ?>., token : <?php echo $token; ?> }
。更改var myKeyVals
如下:
var myKeyVals = { amount : "<?php echo $total_amt; ?>",
ship : "<?php echo $ship; ?>",
token : "<?php echo $token; ?>" }
您需要""
在 javascript 中编写 php 代码。
希望这可以帮助。
推荐阅读
- windows - 用于从标准输入读取的 Win32 缓冲区大小
- groovy - 无法使用管道脚本在 jenkins 中发布 spotbug
- asp.net - 如何在两台不同物理分离的机器上配置 Web 服务器(IIS)和 App Server(.Net)
- php - 删除 jQuery 完整日历事件的验证问题
- javascript - 从接口导出枚举
- javascript - XMLHttpRequest() POST 请求中存储的数据在哪里?在 Node.js 服务器端阅读?
- javascript - mac中的extraResources在哪里?
- typescript - typescript redux:如何使用 typesafe-actions 减少样板文件
- c# - IQueryable 不包含 SingleOrDefault 的定义
- java - 如何使控制器方法对 Spring 中的十六进制数字敏感?