[英]Show additional information depending on shipping selected
我想在选择特定运输方式时显示附加信息/订单备注。
我有多个运输选项,在选择特定的选项时,我需要用户在注释中提供不同的地址,请参阅下面的图像:
这些是可用的运输选项:
我想展示这个(它必须是必填字段)
我已经看到这个答案,其中一个复选框用于在结帐页面上显示/隐藏订单注释:
通过执行以下操作:
add_filter( 'woocommerce_checkout_fields', 'custom_checkout_order_notes' );
function custom_checkout_order_notes( $fields ) {
$fields['order']['order_comments']['class'][] = 'off';
return $fields;
}
add_action( 'woocommerce_before_order_notes', 'checkout_checkbox_show_hide_order_notes' );
function checkout_checkbox_show_hide_order_notes( $fields ) {
$target_id = 'order_comments';
?>
<style> p#<?php echo $target_id; ?>_field.off { display:none;}</style>
<script type="text/javascript">
jQuery(function($){
var a = 'input#checkbox_trigger', b = '#<?php echo $target_id; ?>_field';
$(b).hide('fast');
$(a).change(function(){
if( $(b).hasClass('off') ) {
$(b).removeClass('off');
}
if ( $(this).prop('checked') ) {
$(b).show('fast');
} else {
$(b).hide('fast', function(){
$(b+' input').val('');
});
}
});
});
</script>
<?php
woocommerce_form_field( 'checkbox_trigger', array(
'type' => 'checkbox',
'label' => __('Add a note to your order?', 'woocommerce'),
'class' => array('form-row-wide'),
'clear' => true,
), false );
}
但这不是我上面描述的想要的。
任何帮助将不胜感激。
我想到了。 我添加了评论以帮助未来的读者。
add_action( 'woocommerce_billing_fields','woocommerce_check_if_shipping_changed' );
function woocommerce_check_if_shipping_changed() {
global $woocommerce;
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Get the selected shipping method
$chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
$chosen_shipping = $chosen_methods[0];
// Check if it is one of the two I want to show "Aditional Information" for (using their ID's)
// I used developer tools to get their ID's
if ($chosen_shipping == 'wbs:6:5977f58e_postnet_to_postnet' || $chosen_shipping == 'wbs:6:014e3dff_pudo_locker') {
if ($chosen_shipping == 'wbs:6:014e3dff_pudo_locker'){
// Change additional notes label to : Pudo Locker Address:
add_filter('woocommerce_checkout_fields', 'make_order_label_pudo', 9999, 1);
}
if ($chosen_shipping == 'wbs:6:5977f58e_postnet_to_postnet'){
// Change additional notes label to : PostNet Address:
add_filter('woocommerce_checkout_fields', 'make_order_label_postnet', 9999, 1);
}
// Show order notes
add_filter( 'woocommerce_enable_order_notes_field', '__return_true', 9999 );
// Make order notes required
add_filter('woocommerce_checkout_fields', 'make_order_notes_required_field', 9999, 1);
}else{
// Hide order notes
add_filter( 'woocommerce_enable_order_notes_field', '__return_false', 9999 );
// Make order notes not a requirement
add_filter('woocommerce_checkout_fields', 'make_order_notes_not_required_field', 9999, 1);
}
}
function make_order_label_pudo( $fields ) {
$fields['order']['order_comments']['label'] = 'Pudo Locker Address:';
return $fields;
}
function make_order_label_postnet( $fields ) {
$fields['order']['order_comments']['label'] = 'PostNet Address:';
return $fields;
}
function make_order_notes_required_field( $fields ) {
$fields['order']['order_comments']['required'] = true;
return $fields;
}
function make_order_notes_not_required_field( $fields ) {
$fields['order']['order_comments']['required'] = false;
return $fields;
}
// The page needs to be refreshed of the changes to apply
add_action( 'wp_footer', 'checkout_shipping_refresh' );
function checkout_shipping_refresh() {
if ( is_checkout() && ! is_wc_endpoint_url() ) :
?><script type="text/javascript">
jQuery( function($){
let isRefreshPage = false;
$('form.checkout').on('change','input[name^="shipping_method"]',function() {
const val = $( this ).val();
isRefreshPage = true;
});
$('body').on('updated_checkout', function(){
if (isRefreshPage) {
location.reload();
}
});
});
</script>
<?php
endif;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.