久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

在 Woocommerce 結帳頁面中顯示一個添加費用的復選

Display a checkbox that add a fee in Woocommerce checkout page(在 Woocommerce 結帳頁面中顯示一個添加費用的復選框)
本文介紹了在 Woocommerce 結帳頁面中顯示一個添加費用的復選框的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

在 Woocommerce 結帳頁面中,我嘗試在結帳頁面上添加一個復選框

In Woocommerce checkout page, I'am trying to add a check box on checkout page

我參考了這些文章

woocommerce 自定義結帳字段以添加訂單費用阿賈克斯

添加/刪除自定義費用的復選框字段在 WooCommerce 中

添加結帳復選框字段在 Woocommerce 中啟用百分比費用

add_action( 'woocommerce_review_order_before_order_total', 'checkout_shipping_form_packing_addition', 20 );
function checkout_shipping_form_packing_addition( ){
echo '<tr class="packing-select"><th>';
woocommerce_form_field( 'add_gift_box', array(
    'type'          => 'checkbox',
    'class'         => array('add_gift_box form-row-wide'),
    'label'         => __('H? tr? cài ??t'),
    'placeholder'   => __(''),
    ));
echo '</th><td>';}

add_action( 'wp_footer', 'woocommerce_add_gift_box' );
function woocommerce_add_gift_box() {
if (is_checkout()) {
?>
<script type="text/javascript">
jQuery( document ).ready(function( $ ) {
    $('#add_gift_box').click(function(){
        jQuery('body').trigger('update_checkout');
    });
});
</script>
<?php
}}
add_action( 'woocommerce_cart_calculate_fees', 'woo_add_cart_fee' );
function woo_add_cart_fee( $cart ){
    if ( ! $_POST || ( is_admin() && ! is_ajax() ) ) {
    return;
}

if ( isset( $_POST['post_data'] ) ) {
    parse_str( $_POST['post_data'], $post_data );
} else {
    $post_data = $_POST; // fallback for final checkout (non-ajax)
}

if (isset($post_data['add_gift_box'])) {
    $sl = WC()->cart->get_cart_contents_count();
    $extracost = 50000 * $sl; // not sure why you used intval($_POST['state']) ?
    WC()->cart->add_fee( 'H? tr? cài ??t x '.$sl.'', $extracost );
}}
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( 'add_gift_box' === $key && is_checkout() ) {
    $optional = '&nbsp;<span class="optional">(' . esc_html__( 'optional', 'woocommerce' ) . ')</span>';
    $field = str_replace( $optional, '', $field );
}
return $field;
}

它不像我想要的那樣工作.我做錯了什么?

It does not work as I would like. What I am doing wrong?

感謝任何幫助.

推薦答案

您確實需要將 Wordpress Ajax 與 WC_sessions 結合使用,以使其像 "添加在 Woocommerce 中啟用百分比費用的結帳復選框字段" answer線程.

You really need to use Wordpress Ajax with WC_sessions to make it work like in "Add a checkout checkbox field that enable a percentage fee in Woocommerce" answer thread.

這是您重新訪問的代碼:

Here is your revisited code:

// Display the custom checkbow field in checkout
add_action( 'woocommerce_review_order_before_order_total', 'fee_installment_checkbox_field', 20 );
function fee_installment_checkbox_field(){
    echo '<tr class="packing-select"><th>';

    woocommerce_form_field( 'installment_fee', array(
        'type'          => 'checkbox',
        'class'         => array('installment-fee form-row-wide'),
        'label'         => __('Support installation'),
        'placeholder'   => __(''),
    ), WC()->session->get('installment_fee') ? '1' : '' );

    echo '</th><td>';
}

// jQuery - Ajax script
add_action( 'wp_footer', 'checkout_fee_script' );
function checkout_fee_script() {
    // Only on Checkout
    if( is_checkout() && ! is_wc_endpoint_url() ) :

    if( WC()->session->__isset('installment_fee') )
        WC()->session->__unset('installment_fee')
    ?>
    <script type="text/javascript">
    jQuery( function($){
        if (typeof wc_checkout_params === 'undefined')
            return false;

        $('form.checkout').on('change', 'input[name=installment_fee]', function(){
            var fee = $(this).prop('checked') === true ? '1' : '';

            $.ajax({
                type: 'POST',
                url: wc_checkout_params.ajax_url,
                data: {
                    'action': 'installment_fee',
                    'installment_fee': fee,
                },
                success: function (result) {
                    $('body').trigger('update_checkout');
                },
            });
        });
    });
    </script>
    <?php
    endif;
}

// Get Ajax request and saving to WC session
add_action( 'wp_ajax_installment_fee', 'get_installment_fee' );
add_action( 'wp_ajax_nopriv_installment_fee', 'get_installment_fee' );
function get_installment_fee() {
    if ( isset($_POST['installment_fee']) ) {
        WC()->session->set('installment_fee', ($_POST['installment_fee'] ? true : false) );
    }
    die();
}


// Add a custom calculated fee conditionally
add_action( 'woocommerce_cart_calculate_fees', 'set_installment_fee' );
function set_installment_fee( $cart ){
    if ( is_admin() && ! defined('DOING_AJAX') || ! is_checkout() )
        return;

    if ( did_action('woocommerce_cart_calculate_fees') >= 2 )
        return;

    if ( 1 == WC()->session->get('installment_fee') ) {
        $items_count = WC()->cart->get_cart_contents_count();
        $fee_label   = sprintf( __( "Support installation %s %s" ), '&times;', $items_count );
        $fee_amount  = 50000 * $items_count;
        WC()->cart->add_fee( $fee_label, $fee_amount );
    }
}

add_filter( 'woocommerce_form_field' , 'remove_optional_txt_from_installment_checkbox', 10, 4 );
function remove_optional_txt_from_installment_checkbox( $field, $key, $args, $value ) {
    // Only on checkout page for Order notes field
    if( 'installment_fee' === $key && is_checkout() ) {
        $optional = '&nbsp;<span class="optional">(' . esc_html__( 'optional', 'woocommerce' ) . ')</span>';
        $field = str_replace( $optional, '', $field );
    }
    return $field;
}

代碼位于活動子主題(或活動主題)的 functions.php 文件中.已在 Woocommerce 3.6.5 版和店面主題上進行測試和工作.

Code goes in functions.php file of your active child theme (or active theme). Tested and works on Woocommerce version 3.6.5 with Storefront theme.

這篇關于在 Woocommerce 結帳頁面中顯示一個添加費用的復選框的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Cannot use #39;Object as class name as it is reserved Cake 2.2.x(不能使用 Object 作為類名,因為它是保留的 Cake 2.2.x)
Session is lost after an OAuth redirect(OAuth 重定向后會話丟失)
Pagination Sort in Cakephp 3.x(Cakephp 3.x 中的分頁排序)
CakePHP Shared core for multiple apps(CakePHP 多個應用程序的共享核心)
Login [ Auth-gt;identify() ] always false on CakePHP 3(在 CakePHP 3 上登錄 [ Auth-identify() ] 始終為 false)
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 87 bytes)(致命錯誤:允許的內存大小為 134217728 字節已用盡(嘗試分配 87 字節))
主站蜘蛛池模板: 性视频一区 | 久久精品国产99国产 | 蜜桃视频在线观看免费视频网站www | 一区视频在线免费观看 | 欧美精品在欧美一区二区少妇 | 黄网免费看| 成人精品一区二区户外勾搭野战 | 国产成人一区二区三区精 | 黄色一级片视频 | 九九99精品 | 黄视频网址 | 一级国产精品一级国产精品片 | 国产一区二区高清在线 | 日本在线视频一区二区 | 国产亚洲欧美日韩精品一区二区三区 | 在线91 | 日韩av在线免费 | 久久99精品国产 | 亚洲精品乱 | 请别相信他免费喜剧电影在线观看 | 亚洲二区在线 | 天堂在线免费视频 | 麻豆va| 在线视频亚洲 | 中文字幕 在线观看 | 国产精品精品视频一区二区三区 | 男女免费视频网站 | 日本天天操 | 亚洲性综合网 | 久久99精品久久久 | 99re| 精品在线观看一区 | 国产精品久久久久久久久久久免费看 | 欧美精品一区二区在线观看 | 亚洲欧美高清 | 亚洲国产精品一区二区三区 | 久久精品毛片 | 欧美婷婷 | 欧洲一区在线观看 | 在线视频一区二区 | 久久噜噜噜精品国产亚洲综合 |