我已经在购物车页面添加了一些复选框,让客户有机会在他们的订单中添加额外的项目.
这是基于Custom checkbox that adds a fee in WooCommerce cart page个应答代码.
最后一个复选框需要加倍的产品价格(它正在做的),但摊位增加的价格需要加倍(成为GB 20).
选中相关框的购物车页面:
/*------------------------------------*\
Add to cart page
\*------------------------------------*/
add_action( 'woocommerce_before_cart_totals', 'add_extras_title', 20 );
function add_extras_title(){
if( current_user_can( 'stallholder') ) {
echo '<table><tr class="installment-section">
<h3>'.__("Add Extras").'</h3></tr></table>';
} else {
// Do Nothing
}
}
/* Add Stall */
// Display the checkout field in cart page totals section
add_action( 'woocommerce_before_cart_totals', 'display_priority_fee_checkbox_field', 20 );
function display_priority_fee_checkbox_field(){
if( current_user_can( 'stallholder') ) {
echo '<table cellspacing="0" class="shop_table shop_table_responsive"><tr class="installment-section">
<th>'.__("Add Stall").'</th><td>';
woocommerce_form_field( 'priority_fee', array(
'type' => 'checkbox',
'class' => array('form-row-wide'),
'label' => __(' £10.00'),
), WC()->session->get('priority_fee') ? '1' : '' );
echo '</td></tr>';
} else {
// Do Nothing
}
}
// Remove "(optional)" text from the field
add_filter( 'woocommerce_form_field' , 'remove_optional_txt_from_priority_fee_checkbox', 10, 4 );
function remove_optional_txt_from_priority_fee_checkbox( $field, $key, $args, $value ) {
// Only on checkout page for Order notes field
if( 'priority_fee' === $key ) {
$optional = ' <span class="optional">(' . esc_html__( 'optional', 'woocommerce' ) . ')</span>';
$field = str_replace( $optional, '', $field );
}
return $field;
}
// jQuery :: Ajax script
add_action( 'wp_footer', 'priority_fee_js_script' );
function priority_fee_js_script() {
// On Order received page, remove the wc session variable if it exist
if ( is_wc_endpoint_url('order-received')
&& WC()->session->__isset('priority_fee') ) :
WC()->session->__unset('priority_fee');
// On Cart page: jQuert script
elseif ( is_cart() ) :
?>
<script type="text/javascript">
jQuery( function($){
if (typeof woocommerce_params === 'undefined')
return false;
var c = 'input[name=priority_fee]';
$(document.body).on( 'click change', c, function(){
console.log('click');
var fee = $(c).is(':checked') ? '1' : '';
$.ajax({
type: 'POST',
url: woocommerce_params.ajax_url,
data: {
'action': 'priority_fee',
'priority_fee': fee,
},
success: function (response) {
setTimeout(function(){
$(document.body).trigger('added_to_cart');
}, 500);
},
});
});
});
</script>
<?php
endif;
}
// Get Ajax request and saving to WC session
add_action( 'wp_ajax_priority_fee', 'priority_fee_ajax_receiver' );
add_action( 'wp_ajax_nopriv_priority_fee', 'priority_fee_ajax_receiver' );
function priority_fee_ajax_receiver() {
if ( isset($_POST['priority_fee']) ) {
$priority_fee = $_POST['priority_fee'] ? true : false;
// Set to a WC Session variable
WC()->session->set('priority_fee', $priority_fee );
echo $priority_fee ? '1' : '0';
die();
}
}
// Add a custom calculated fee conditionally
add_action( 'woocommerce_cart_calculate_fees', 'set_priority_fee' );
function set_priority_fee( $cart ){
if ( is_admin() && ! defined('DOING_AJAX') )
return;
if ( WC()->session->get('priority_fee') && isset($_GET['double_pitch']) && $_GET['double_pitch'] == "1") {
$stall = $cart->get_cart_contents_count();
$fee_label = sprintf( __( "Stall Added" ) );
$fee_amount = 20 * $item_count;
$cart->add_fee( $fee_label, $fee_amount, true );
}
if ( WC()->session->get('priority_fee') ) {
$item_count = $cart->get_cart_contents_count();
$fee_label = sprintf( __( "Stall Added" ) );
$fee_amount = 10 * $item_count;
$cart->add_fee( $fee_label, $fee_amount, true );
}
}
/* Add Power */
// Display the checkout field in cart page totals section
add_action( 'woocommerce_before_cart_totals', 'display_power_checkbox_field', 20 );
function display_power_checkbox_field(){
if( current_user_can( 'stallholder') && current_user_can('hot_food') ) {
echo '<tr class="installment-section">
<th>'.__("Add Power").'</th><td>';
woocommerce_form_field( 'power_16', array(
'type' => 'checkbox',
'class' => array('form-row-wide'),
'label' => __(' £10.00 (16v Supply)'),
), WC()->session->get('power_16') ? '1' : '' );
woocommerce_form_field( 'power_32', array(
'type' => 'checkbox',
'class' => array('form-row-wide'),
'label' => __(' £20.00 (32v Supply)'),
), WC()->session->get('power_32') ? '1' : '' );
echo '</td></tr>';
}
else {
// Do Nothing
}
}
// Remove "(optional)" text from the field
add_filter( 'woocommerce_form_field' , 'remove_optional_txt_from_power_checkbox', 10, 4 );
function remove_optional_txt_from_power_checkbox( $field, $key, $args, $value ) {
// Only on checkout page for Order notes field
if( 'power_16' === $key ) {
$optional = ' <span class="optional">(' . esc_html__( 'optional', 'woocommerce' ) . ')</span>';
$field = str_replace( $optional, '', $field );
}
if( 'power_32' === $key ) {
$optional = ' <span class="optional">(' . esc_html__( 'optional', 'woocommerce' ) . ')</span>';
$field = str_replace( $optional, '', $field );
}
return $field;
}
// jQuery :: Ajax script
add_action( 'wp_footer', 'power_js_script' );
function power_js_script() {
// On Order received page, remove the wc session variable if it exist
if ( is_wc_endpoint_url('order-received')
&& WC()->session->__isset('power_16') ) :
WC()->session->__unset('power_16');
elseif ( is_wc_endpoint_url('order-received')
&& WC()->session->__isset('power_32') ) :
WC()->session->__unset('power_32');
// On Cart page: jQuert script
elseif ( is_cart() ) :
?>
<script type="text/javascript">
jQuery( function($){
if (typeof woocommerce_params === 'undefined')
return false;
var c = 'input[name=power_16]';
$(document.body).on( 'click change', c, function(){
console.log('click');
var fee = $(c).is(':checked') ? '1' : '';
$.ajax({
type: 'POST',
url: woocommerce_params.ajax_url,
data: {
'action': 'power_16',
'power_16': fee,
},
success: function (response) {
setTimeout(function(){
$(document.body).trigger('added_to_cart');
}, 500);
},
});
});
});
</script>
<script type="text/javascript">
jQuery( function($){
if (typeof woocommerce_params === 'undefined')
return false;
var c = 'input[name=power_32]';
$(document.body).on( 'click change', c, function(){
console.log('click');
var fee = $(c).is(':checked') ? '1' : '';
$.ajax({
type: 'POST',
url: woocommerce_params.ajax_url,
data: {
'action': 'power_32',
'power_32': fee,
},
success: function (response) {
setTimeout(function(){
$(document.body).trigger('added_to_cart');
}, 500);
},
});
});
});
</script>
<?php
endif;
}
// Get Ajax request and saving to WC session
add_action( 'wp_ajax_power_16', 'power_16_ajax_receiver' );
add_action( 'wp_ajax_nopriv_power_16', 'power_16_ajax_receiver' );
function power_16_ajax_receiver() {
if ( isset($_POST['power_16']) ) {
$power_16 = $_POST['power_16'] ? true : false;
// Set to a WC Session variable
WC()->session->set('power_16', $power_16 );
echo $power_16 ? '1' : '0';
die();
}
}
add_action( 'wp_ajax_power_32', 'power_32_ajax_receiver' );
add_action( 'wp_ajax_nopriv_power_32', 'power_32_ajax_receiver' );
function power_32_ajax_receiver() {
if ( isset($_POST['power_32']) ) {
$power_32 = $_POST['power_32'] ? true : false;
// Set to a WC Session variable
WC()->session->set('power_32', $power_32 );
echo $power_32 ? '1' : '0';
die();
}
}
// Add a custom calculated fee conditionally
add_action( 'woocommerce_cart_calculate_fees', 'set_power' );
function set_power( $cart ){
if ( is_admin() && ! defined('DOING_AJAX') )
return;
if ( WC()->session->get('power_16') ) {
$item_count = $cart->get_cart_contents_count();
$fee_label = sprintf( __( "16v Supply Added" ) );
$fee_amount = 10 * $item_count;
$cart->add_fee( $fee_label, $fee_amount, true );
}
if ( WC()->session->get('power_32') ) {
$item_count = $cart->get_cart_contents_count();
$fee_label = sprintf( __( "32v Supply Added" ) );
$fee_amount = 20 * $item_count;
$cart->add_fee( $fee_label, $fee_amount, true );
}
}
/* Double Pitch*/
// Display the checkout field in cart page totals section
add_action( 'woocommerce_before_cart_totals', 'display_double_pitch_checkbox_field', 20 );
function display_double_pitch_checkbox_field(){
if( current_user_can( 'stallholder') ) {
echo '<tr class="installment-section">
<th>'.__("Double Pitch").'</th><td>';
woocommerce_form_field( 'double_pitch', array(
'type' => 'checkbox',
'class' => array('form-row-wide'),
'label' => __(' x2'),
), WC()->session->get('double_pitch') ? '1' : '' );
echo '</td></tr></table>';
} else {
// Do Nothing
}
}
// Remove "(optional)" text from the field
add_filter( 'woocommerce_form_field' , 'remove_optional_txt_from_double_pitch_checkbox', 10, 4 );
function remove_optional_txt_from_double_pitch_checkbox( $field, $key, $args, $value ) {
// Only on checkout page for Order notes field
if( 'double_pitch' === $key ) {
$optional = ' <span class="optional">(' . esc_html__( 'optional', 'woocommerce' ) . ')</span>';
$field = str_replace( $optional, '', $field );
}
return $field;
}
// jQuery :: Ajax script
add_action( 'wp_footer', 'double_pitch_js_script' );
function double_pitch_js_script() {
// On Order received page, remove the wc session variable if it exist
if ( is_wc_endpoint_url('order-received')
&& WC()->session->__isset('double_pitch') ) :
WC()->session->__unset('double_pitch');
// On Cart page: jQuert script
elseif ( is_cart() ) :
?>
<script type="text/javascript">
jQuery( function($){
if (typeof woocommerce_params === 'undefined')
return false;
var c = 'input[name=double_pitch]';
$(document.body).on( 'click change', c, function(){
console.log('click');
var fee = $(c).is(':checked') ? '1' : '';
$.ajax({
type: 'POST',
url: woocommerce_params.ajax_url,
data: {
'action': 'double_pitch',
'double_pitch': fee,
},
success: function (response) {
setTimeout(function(){
$(document.body).trigger('added_to_cart');
}, 500);
},
});
});
});
</script>
<?php
endif;
}
// Get Ajax request and saving to WC session
add_action( 'wp_ajax_double_pitch', 'double_pitch_ajax_receiver' );
add_action( 'wp_ajax_nopriv_double_pitch', 'double_pitch_ajax_receiver' );
function double_pitch_ajax_receiver() {
if ( isset($_POST['double_pitch']) ) {
$double_pitch = $_POST['double_pitch'] ? true : false;
// Set to a WC Session variable
WC()->session->set('double_pitch', $double_pitch );
echo $double_pitch ? '1' : '0';
die();
}
}
// Add a custom calculated fee conditionally
add_action( 'woocommerce_cart_calculate_fees', 'set_double_pitch' );
function set_double_pitch( $cart ){
if ( is_admin() && ! defined('DOING_AJAX') )
return;
if ( WC()->session->get('double_pitch') ) {
$item_count = WC()->cart->cart_contents_total;
$fee_label = __( "Double Pitch" ) ;
$fee_amount = 1 * $item_count;
$cart->add_fee( $fee_label, $fee_amount, true );
}
}
我试过很多不同的方法,但都弄不明白.
我需要做的是,当勾选‘双螺距’时,添加到x2(GB 20)的档位,如果没有选中,则返回到GB 10.
谢谢