- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 WooCommerce 后端,我为电话客户手动创建订单,然后向他们发送“客户付款页面”链接,以便他们完成付款。
在那个页面(“order-pay”,模板 templates/checkout/form-pay.php),我添加了以下代码来显示billing form:
<h3><?php _e( 'Billing details', 'woocommerce' ); ?></h3>
<?php do_action( 'woocommerce_before_checkout_billing_form', $order ); ?>
<div class="woocommerce-billing-fields__field-wrapper">
<?php
$fields = WC()->checkout->get_checkout_fields( 'billing' );
foreach ( $fields as $key => $field ) {
$field_name = $key;
if ( is_callable( array( $order, 'get_' . $field_name ) ) ) {
$field['value'] = $order->{"get_$field_name"}( 'edit' );
} else {
$field['value'] = $order->get_meta( '_' . $field_name );
}
woocommerce_form_field( $key, $field, $field['value'] );
}
?>
</div>
<?php do_action( 'woocommerce_after_checkout_billing_form', $order ); ?>
我希望客户能够编辑他们的账单信息(姓名、电子邮件、电话、地址)并在付款时保存。这是在“常规”结帐页面上使用以下行完成的,但不适用于订单支付端点。
$('body').trigger('update_checkout');
我如何在付款时验证和保存这些字段的值(覆盖现有的账单信息)?
最佳答案
这是一个多步骤的解决方案,但它一直对我有效。
确保您已将 form-pay.php 文件复制到您的子主题 (yourtheme/woocommerce/checkout/form-pay.php),这样您就不会在更新时丢失所有工作。
在您的 form-pay.php 的顶部,在 defined( 'ABSPATH' ) || 之后添加以下两行代码退出;
$tempateURL = get_stylesheet_directory_uri();
$orderID = wc_get_order_id_by_order_key($_GET["key"]);
接下来,您将在 order_review 表单中添加您的账单字段。我在关闭表之后但在付款字段之前添加了我的。
<h3><?php _e( 'Billing details', 'woocommerce' ); ?></h3>
<?php do_action( 'woocommerce_before_checkout_billing_form', $order ); ?>
<div class="woocommerce-billing-fields__field-wrapper">
<?php
$fields = WC()->checkout->get_checkout_fields( 'billing' );
foreach ( $fields as $key => $field ) {
$field_name = $key;
if ( is_callable( array( $order, 'get_' . $field_name ) ) ) {
$field['value'] = $order->{"get_$field_name"}( 'edit' );
} else {
$field['value'] = $order->get_meta( '_' . $field_name );
}
woocommerce_form_field( $key, $field, $field['value'] );
}
?>
</div>
然后在关闭之后创建一个“下一步”按钮 ?> 但在结算明细关闭之前,如下所示:
<div class="my-button">
<input type="button" id="update-billing" class="button-next" value="Next">
</div>
它看起来像这样:
<h3><?php _e( 'Billing details', 'woocommerce' ); ?></h3>
<?php do_action( 'woocommerce_before_checkout_billing_form', $order ); ?>
<div class="woocommerce-billing-fields__field-wrapper">
<?php
$fields = WC()->checkout->get_checkout_fields( 'billing' );
foreach ( $fields as $key => $field ) {
$field_name = $key;
if ( is_callable( array( $order, 'get_' . $field_name ) ) ) {
$field['value'] = $order->{"get_$field_name"}( 'edit' );
} else {
$field['value'] = $order->get_meta( '_' . $field_name );
}
woocommerce_form_field( $key, $field, $field['value'] );
}
?>
<div class="my-button">
<input type="button" id="update-billing" class="button-next" value="Next">
</div>
</div>
我在子主题中创建了一个 js 文件夹,并创建了一个名为 custom-jquery.js 的文件。我使用以下代码在我的 functions.php 中加入了新的 js 文件:
add_action( 'wp_enqueue_scripts', 'my_enqueue_assets' );
function my_enqueue_assets() {
wp_enqueue_script( 'my-jquery', get_stylesheet_directory_uri() . '/js/custom-jquery.js',"", false, false );
}
然后我在 js 文件夹中创建了一个名为 woo-functions 的文件夹,并创建了一个名为 update-cart.php 的文件
然后我写了下面的代码:
<?php
require_once(rtrim($_SERVER['DOCUMENT_ROOT'], '/') . '/wp-load.php');
print_r($_POST);
$orderID = $_POST["orderID"];
$firstName = $_POST["firstName"];
$lastName = $_POST["lastName"];
$billingCompany = $_POST["billingCompany"];
$billingAddress_1 = $_POST["billingAddress_1"];
$billing_city = $_POST["billing_city"];
$billing_state = $_POST["billing_state"];
$billing_postcode = $_POST["billing_postcode"];
$billing_phone = $_POST["billing_phone"];
$billing_email = $_POST["billing_email"];
update_post_meta( $orderID, '_billing_first_name', $firstName );
update_post_meta( $orderID, '_billing_last_name', $lastName );
update_post_meta( $orderID, '_billing_company', $billingCompany );
update_post_meta( $orderID, '_billing_address_1', $billingAddress_1 );
update_post_meta( $orderID, '_billing_city', $billing_city );
update_post_meta( $orderID, '_billing_state', $billing_state );
update_post_meta( $orderID, '_billing_postcode', $billing_postcode );
update_post_meta( $orderID, '_billing_phone', $billing_phone );
update_post_meta( $orderID, '_billing_email', $billing_email );
echo $firstName;
?>
然后,我在我的 custom-jquery.js 文件中编写了以下 jquery,以便在单击我创建的“下一步”按钮时更新信息。
jQuery(document).ready(function($) {
$("#update-billing").on("click", function(e){
var stylesheetURL = $("#order_review").attr("data-theme-url");
var orderID = $("#order_review").attr("data-order-id");
var firstName = $("#billing_first_name").val();
var lastName = $("#billing_last_name").val();
var billingCompany = $("#billing_company").val();
var billingAddress_1 = $("#billing_address_1").val();
var billing_city = $("#billing_city").val();
var billing_state = $("#billing_state").val();
var billing_postcode = $("#billing_postcode").val();
var billing_phone = $("#billing_phone").val();
var billing_email = $("#billing_email").val();
console.log(firstName);
$.ajax({
method: "POST",
url: stylesheetURL + "/js/woo-functions/update-cart.php",
data: {
orderID: orderID,
firstName: firstName,
lastName: lastName,
billingCompany: billingCompany,
billingCountry: "US",
billingAddress_1: billingAddress_1,
billing_city: billing_city,
billing_state: billing_state,
billing_postcode: billing_postcode,
billing_phone: billing_phone,
billing_email: billing_email
}
})
.done(function( msg ) {
console.log(msg);
$(".page-id-10 table.shop_table, .page-id-10 .the-payment-fields").slideToggle();
$(".woocommerce-billing-fields__field-wrapper").slideToggle();
});
});
我还添加了一个 .slideToggle 函数来在单击“下一步”按钮时隐藏帐单字段。 Woocommerce 动态地将信息添加到结帐页面,您的正常结帐页面将具有相同的页码。如果您不将 slideToggle 函数目标设置为唯一类,它将影响您的正常结帐页面。因此,我在 form-pay.php 文件中的 div id“payment”中添加了一类“.the-payment-fields”。
<div id="payment" class="the-payment-fields">
当客户点击“下一步”按钮时,它会将数据保存到他们的个人资料中,您可以在订单上看到账单信息。
希望这对您有所帮助!
关于php - 在 Woocommerce 的订单支付页面上询问并保存账单信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54950662/
在哪里可以找到有关退款状态的信息? 对于“取消”和“失败”,没关系。但是“已捕获”、“已授权”、“暂停”和“待处理”之间有什么区别。支付宝是什么意思? 谢谢 最佳答案 以下是 Paypal 付款状态列
我想问问是否有人知道无需用户交互即可进行 PayPal 付款的可能性。我目前正在开展一个项目,我们希望在用户无需登录 PayPal 的情况下按需进行 PayPal 付款。 我发现的是: 做引用交易 定
我无法找到 PayPal 提供的关于它如何处理 webhook 以进行支付的文档。付款是否与付款一样对待,以便完成的付款将启动付款完成的 webhook?一般来说,付款和支出是否通过网络 Hook 相
我有一个表单,人们可以在其中以固定金额订购一件商品。以下是步骤: 客户填写表格 客户点击提交并进入评论页面,他可以在其中检查他的输入 在评论表单中应该有一个使用 paypal 支付的按钮(带有自己的设
用了微信sdk各种痛苦,感觉比qq sdk调用麻烦多了,回调过于麻烦,还必须要在指定包名下的actvity进行回调,所以我在这里写一篇博客,有这个需求的朋友可以借鉴一下,以后自己别的项目有用到也有个
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: How to set Azure Max Spending Limit or Cost CAP $ amount?
我正在尝试将 Stripe 集成到 Symfony2 项目上,我在他们的文档中看到的唯一付款方式是“用卡付款”按钮 https://stripe.com/docs/checkout它在我的项目上创建了
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: How to set Azure Max Spending Limit or Cost CAP $ amount?
我想使用 firebase 作为服务器并向 stripe 发送付款请求。我在服务器端的经验为零,所以我正在寻找一种简单的方法来实现这一目标。此帖Is it possible to integrate
我在这里使用自适应 Paypal 支付控制台:https://apigee.com/console/paypal向人们付款。我无法找到一种方法在不授予他们许可的情况下向个人汇款(来 self )。我希
我一直坚持使用 OpenCart 的 PayPal 标准付款,但尚未找到解决方案。 我做了什么: 在 sandbox.paypal.com 上创建了企业帐户 设置以下网络首选项: 自动返回(指定 UR
我想在我的 WPF 应用程序中通过 PayPal 进行购物付款。我想为用户生成一个链接,但不知道如何通知应用程序已接受付款。是否唯一的解决方案将是服务器,它会检查付款是否已被接受并且应用程序会不时轮询
PayPal PayOut REST API 没有记录它的局限性。什么是: 每次付款的最大收款人数? 每次付款的最高金额? 每个收件人的最大金额? 注意: 我查看了在线文档和 paypal 论坛 (
我是 web 开发的新手,我需要做的是创建一个表单,用户可以在其中输入一些东西到一个字段中,让我们暂时称之为名称......然后当他们去 paypal 时,他们会捐赠 1 美元(预定)然后从支付给 P
我正在尝试将 PayPal 集成到我的应用程序中并了解 PayPal SDK 的工作原理我正在使用示例应用程序。我知道在用户按下“购买”按钮后,我需要将授权响应发送到我的服务器以验证付款。问题是我找不
在我的 oscar 应用程序中,django 需要自适应并行 oscar 支付程序。 谁能告诉我如何将 Adaptive Parallel Paypal 方法集成到 Normal Paypal 中。我
您好,我正在开发用于 NFC 支付的安卓应用程序。 Android 设置中有一个选项可以使用打开的应用程序而不是默认应用程序。例如,当我将默认应用程序设置为 Android Pay 并在付款前打开我的
我构建了一个使用命名空间和 PSR-0 自动加载的 PHP 应用程序。在尝试实现 Stripe库,我发现它似乎无法加载类,因为它们没有命名空间。如果我手动包含文件,有没有办法不自动加载? // Get
有人成功地将 Adyen 支付插件集成到 iOS 应用程序中吗? 我到了它向用户显示付款选项的地步,但选择其中一个选项没有任何作用。我希望它会转到表单以捕获卡的详细信息,但事实并非如此。 如有任何帮助
我正在与 Stripe Payment Gateway 集成——API 的最新版本。 除了“client_reference_id”没有传递给 webhook 或事务(没有出现在日志中)之外,这一切都
我是一名优秀的程序员,十分优秀!