在WooCommerce结账页面上,我添加了一个客户必须输入才能结账的额外字段。
我想在woocommerce\u cart\u calculate\u fees操作挂钩中访问此字段的值。
通过使用woocommerce,我尝试了几种方法-
/* WooCommerce Add Extra Fees */
add_action( 'woocommerce_cart_calculate_fees','endo_handling_fee' );
function endo_handling_fee() {
global $woocommerce, $post;
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Get the order ID
$order = new WC_Order($post->ID);
// to escape # from order id
$order_id = trim(str_replace('#', '', $order->get_order_number()));
// Here is where I want to get the field value
$orderFee = get_post_meta( $order_id, 'decedents_name_field', true );
}
找到不需要AJAX的解决方案:字段值存储在:WC()中-
在我的情况下,我必须增加2%的付款费用(第二次付款及以上);
我在账单文件中添加了一个自定义字段,注意使用类update\u totals\u on\u change触发购物车重新计算以添加费用。
function number_of_payments_select($fields ){
//print_b($checkout);
$cartTotal=WC()->cart->get_cart_contents_total();
//echo $cartTotal;
$paymentsArray=array();
for ($i=1; $i<=12 ;$i++){
$paymentsArray[strval($i)]= $i.' Payments(amount to pay: '.($cartTotal/$i+$cartTotal/$i*($i-1)*1.02).'currency)';
}
$fields ['billing_number_of_payments']= array(
'type' => 'select',
'class' => array('number_of_payments form-row-wide update_totals_on_change'),
'label' => 'Number of payments',
'required' => true,
'options' => $paymentsArray);
return $fields;
}
add_action( 'woocommerce_billing_fields', 'number_of_payments_select', 10, 1 );
然后我通过解析(WC()-
function add_payments_fee(){
if (is_admin() && !defined('DOING_AJAX')) {
return;
}
parse_str (WC()->checkout()->get_value('post_data'),$post_data);
$number_of_payments=$post_data['billing_number_of_payments'];
if ($number_of_payments>1) {
$cartTotal=WC()->cart->get_cart_contents_total();
$payment_fee=$cartTotal/$number_of_payments*($number_of_payments-1)*0.02;
WC()->cart->add_fee('fee', $payment_fee);
}
}
add_action('woocommerce_cart_calculate_fees','add_payments_fee');
我遇到了同样的问题。如果购物车中的产品少于一定数量,并且用户想要送货,则需要支付送货费(我的自定义字段)。我最终解决这个问题的方法是通过AJAX将数据发送到服务器,如下所示:
jQuery("select#delivery_pickup_field").change(function(e) {
var data = {
action: 'woocommerce_delivery_fee',
security: wc_checkout_params.apply_delivery_nonce,
delivery_option: this.value
};
jQuery.ajax({
type: 'POST',
url: wc_checkout_params.ajax_url,
data: data,
success: function (code) {
if (code === '0') {
jQuery('body').trigger('update_checkout');
}
console.log(code);
},
dataType: 'html'
});
return false;
});
然后获取该数据并将其放入会话变量中
// Give server access to status of delivery select
add_action('wp_ajax_woocommerce_delivery_fee', 'ajax_add_delivery_fee', 10);
add_action('wp_ajax_nopriv_woocommerce_delivery_fee', 'ajax_add_delivery_fee', 10);
function ajax_add_delivery_fee() {
if(isset($_POST['delivery_option'])) {
session_start();
$_SESSION['delivery_option'] = $_POST['delivery_option'];
return 1;
}
return 0;
}
从那里,您的服务器现在可以访问自定义字段的任何值。
// Adding delivery fee if fewer than 6 items is in cart
add_action( 'woocommerce_cart_calculate_fees', 'minimum_delivery_fee' );
function minimum_delivery_fee($instance) {
global $woocommerce;
@session_start();
$order_meta = $_SESSION['delivery_option'];
if(($woocommerce->cart->cart_contents_count < 6) && ($order_meta == 'delivery')) {
$woocommerce->cart->add_fee( __('Delivery Fee', 'woocommerce'), 15 );
}
}
正如helgatheviking指出的,订单还没有提交,也不存在。我能看到您获取所需数据的唯一方法是通过AJAX将其发送到服务器。
如果这令人困惑,请查看我使用的源代码以获取更多信息。
我想在WooCommerce结帐页面中添加自定义字段,但用于选定的产品。 例如,如果客户的购物车中只有产品A,则此自定义字段应显示在WooCommerce签出页面中 我在函数中使用以下代码。php添加自定义字段:
我正在使用WooCommerce REST API(http://WooCommerce.github.io/woocommerce-rest-api-docs/#introduction),并使用下面的示例在结帐页面中添加了一个新字段(shipping_phone): https://docs.woocommerce.com/document/tutorial-customising-check
我试图从Firebase Firestore中检索一个字段,并将其放入一个自定义对象中。我成功地从代码上传了自定义对象,没有任何问题,但是当我试图从Firestore读取和访问对象列表时,我一直得到以下错误: SelfMadeQuestion类如下所示: 这就是我试图做的,以便从Firebase中读取自拍问题列表: 由于可以将自定义对象上载到firebase并且工作正常,我想知道是否有任何方法可以
我在印度使用进行在线支付, 我想要一个像账单地址这样的自定义字段应该存储在razorpay帐户和结帐表中。我知道,它将自定义数据存储到razorpay帐户,但我没有得到任何链接来设置结帐表单中的这些字段。 我的代码: 所以,我的问题是,如何在razorpay结账表单中获取所有字段?
问题内容: 我在尝试使用 JasperReports 从Java生成报告时遇到问题,但出现错误。 堆栈跟踪: 问题答案: 你的豆长什么样?导致此错误的一个可能原因是您没有该字段的吸气剂。吸气剂必须遵守Java标准格式,因此您认为我愿意。吸气剂也必须是。
为什么我不能从Woocommerce签出字段中检索数据,以便在订单处理时更新订阅数据? 我想根据客户结帐时的频率请求更新下一个续订日期。这是我的密码: 1) 设置签出字段: 2) 更新订单元数据。这将在客户订单上创建两个自定义字段,并更新订阅上的计费间隔: 3) 更新续约日期 对于最后一部分,我可以使用我选择的虚拟日期更新续约日期(例如:,但当我试图让它读取字段时,它会恢复为默认值。 这是我尝试过