我正在使用复选框字段在WooCommerce应答代码中添加/删除自定义费用,该代码在我的店铺中运行良好,以设置折扣(负费用)。
但我想使用输入字段设置费用金额。我的目标是通过num/text输入字段中输入的值来减少购买总量。我不想使用复选框,我想使用输入或数字来确定费用金额。
可能吗?我该怎么做?
要启用在WooCommerce中设置自定义折扣的结账输入文本字段,只需进行以下更改:
// Display an input text field after billing fields
add_action( 'woocommerce_after_checkout_billing_form', 'add_custom_checkout_text_field', 20 );
function add_custom_checkout_text_field(){
woocommerce_form_field( 'custom_discount', array(
'type' => 'text',
'label' => __('Add a discount amount'),
'class' => array( 'form-row-wide' ),
), WC()->session->get('custom_discount') );
}
// Remove "(optional)" label on checkbox field
add_filter( 'woocommerce_form_field' , 'remove_order_comments_optional_fields_label', 10, 4 );
function remove_order_comments_optional_fields_label( $field, $key, $args, $value ) {
// Only on checkout page for Order notes field
if( 'custom_discount' === $key && is_checkout() ) {
$optional = ' <span class="optional">(' . esc_html__( 'optional', 'woocommerce' ) . ')</span>';
$field = str_replace( $optional, '', $field );
}
return $field;
}
// Ajax / jQuery script
add_action( 'wp_footer', 'custom_discount_script' );
function custom_discount_script() {
// On checkoutpage
if( ( is_checkout() && ! is_wc_endpoint_url() ) ) :
?>
<script type="text/javascript">
jQuery( function($){
if (typeof woocommerce_params === 'undefined')
return false;
$(document.body).on('input change', 'input[name=custom_discount]', function(){
$.ajax({
type: 'POST',
url: woocommerce_params.ajax_url,
data: {
'action': 'custom_discount',
'custom_discount': $(this).val(),
},
success: function (result) {
$('body').trigger('update_checkout');
console.log(result);
},
});
});
});
</script>
<?php
endif;
}
// Get the ajax request and set value to WC session
add_action( 'wp_ajax_custom_discount', 'get_ajax_custom_discount' );
add_action( 'wp_ajax_nopriv_custom_discount', 'get_ajax_custom_discount' );
function get_ajax_custom_discount() {
if ( isset($_POST['custom_discount']) ) {
$discount = $_POST['custom_discount'] ? floatval($_POST['custom_discount']) : '';
WC()->session->set('custom_discount', $discount );
// echo WC()->session->get('custom_discount');
}
die();
}
// Add / Remove a custom discount
add_action( 'woocommerce_cart_calculate_fees', 'add_remove_custom_discount', 10, 1 );
function add_remove_custom_discount( $cart ) {
// Only on checkout
if ( ( is_admin() && ! defined( 'DOING_AJAX' ) ) || is_cart() )
return;
$discount = (float) WC()->session->get('custom_discount');
if( $discount > 0 ) {
$cart->add_fee( __( 'Custom Discount', 'woocommerce'), -$discount );
}
}
// Reset WC Session custom discount variable
add_action( 'woocommerce_checkout_order_created', 'reset_wc_session_custom_discount_variable' );
function reset_wc_session_custom_discount_variable( $order ) {
if ( WC()->session->__isset('custom_discount') ) {
WC()->session->__unset('custom_discount');
}
}
代码进入活动子主题(或活动主题)的functions.php文件。测试和工作。
通常,折扣是从产品的正常销售价格中扣除的金额或百分比。 这是以低价或低价出售产品的方式。 您可以指定产品的折扣,如以下步骤中所定义 - Step 1 - 转到“ Store ,然后单击“ Configuration 。 Step 2 - 点击管理税率和类型的Taxes链接。 Step 3 - 转到TAX TYPES选项卡,然后单击Add a tax type链接。 Step 4 - 税收类型对税率
限时折扣 限时折扣:设置商品限时折扣。通过限时折扣,商家可以选定一款或多款商品,在一段时间内以指定的折扣出售。以更优的价格吸引消费者,产生更多的销量。 一、添加限时折扣: 点击添加限时折扣 添加活动名称、活动有效期(开始日期和结束日期)、价格保留方式(抹去角和分或者抹去分)、选择商品(选择参与活动的商品)、在下方列表可看到添加的活动商品具体信息(商品名称、价格、库存、折扣和删除)。 添加成功后在后
问题内容: 我正在尝试在用户输入时在Swift的文本字段中格式化货币输入。 到目前为止,我只能在用户完成输入后才能成功格式化它: 但是,我希望在用户输入货币后立即对其进行格式化。当我尝试在TextField操作“ Edited Changed”或“ Value Changed”上执行此操作时,我只能输入1个数字(如果输入8,则变为$ 8.00),但是一旦输入第二个数字,所有内容将变为$ 0.00,
您好,我有一个关于woocommerce中自定义结账字段的问题。我在结帐表单中创建了一个自定义字段,一切都很顺利。该字段包含客户卡号。我还设法将字段值(第一次输入时)保存在wp usermeta中,这样它就不会只与订单一起出现,而是与客户详细信息一起保存。 现在我想做以下几点。一旦注册客户返回商店,进入结帐表单,新字段(如果不是empyt)将自动显示,而不是每次都要求客户插入他们的卡号。 我添加到
向结账表单添加WooCommerce自定义结账字段,可以使用插件WooCommerce checkout manager或者filter:woocommerce_checkout_fields,本文介绍的方法非上述两种,而是使用woocommerce_form_field()函数在订单备注之后添加自定义结账字段,并将字段显示在订单详情、订单邮件和后台中的方法。 2021年10月更新:WooComm
WooCommerce自定义结账字段的插件有Custom Checkout Fields for WooCommerce等,如果你想要更多的自由,就用代码来解决吧。本文介绍一种用代码来自定义WooCommerce结账字段的方法。 WooCommerce自定义结账字段代码 代码单独保存一个文件引入,或直接放到子主题的functions.php中,第二种方式请将 defined('WPINC') or