当前位置: 首页 > 知识库问答 >
问题:

在WooCommerce中设置折扣的结账输入文本字段

齐文栋
2023-03-14

我正在使用复选框字段在WooCommerce应答代码中添加/删除自定义费用,该代码在我的店铺中运行良好,以设置折扣(负费用)。

但我想使用输入字段设置费用金额。我的目标是通过num/text输入字段中输入的值来减少购买总量。我不想使用复选框,我想使用输入或数字来确定费用金额。

可能吗?我该怎么做?

共有1个答案

郑星雨
2023-03-14

要启用在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 = '&nbsp;<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