Php 基于WooCommerce签出页面中的单选按钮隐藏发货方法
我在结帐页面上放了一个单选按钮,上面有下面的代码Php 基于WooCommerce签出页面中的单选按钮隐藏发货方法,php,jquery,woocommerce,checkout,shipping,Php,Jquery,Woocommerce,Checkout,Shipping,我在结帐页面上放了一个单选按钮,上面有下面的代码 add_action( 'woocommerce_before_checkout_shipping_form', 'custom_shipping_radio_button', 10, 1 ); function custom_shipping_radio_button( $checkout ) { woocommerce_form_field( 'shipping_type', array( 'type' =>
add_action( 'woocommerce_before_checkout_shipping_form', 'custom_shipping_radio_button', 10, 1 );
function custom_shipping_radio_button( $checkout ) {
woocommerce_form_field( 'shipping_type', array(
'type' => 'radio',
'class' => array( 'form-row-wide' ),
'label' => __('收件方式 *'),
'options' => array(
'shipping_1' => __('全家店到店'),
'shipping_2' => __('指定地址'),
'shipping_3' => __('自行取貨'),
),
), $checkout->get_value( 'shipping_type' ) );
}
我想隐藏基于装运方式的选项。例如,如果客户选择本地取货,选项、配送1和配送2将消失。我搜索了一些信息,并试图制作如下代码
add_action( 'woocommerce_after_checkout_form', 'hide_shipping_type' );
function hide_shipping_type( $available_gateways ) {
global $woocommerce;
$chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
$chosen_shipping_no_ajax = $chosen_methods[0];
if ( 0 === strpos( $chosen_shipping_no_ajax, 'local_pickup' ) ) {
?>
<script type="text/javascript">
jQuery('#shipping_type_shipping_1,#shipping_type_shipping_2').fadeOut();
</script>
<?php
}
?>
<script type="text/javascript">
jQuery('form.checkout').on('change','input[name^="shipping_method"]',function() {
var val = jQuery( this ).val();
if (val.match("^local_pickup")) {
jQuery('#shipping_type_shipping_1,#shipping_type_shipping_2').fadeOut();
} else {
jQuery('#shipping_type_shipping_1,#shipping_type_shipping_2').fadeIn();
}
});
</script>
<?php
}
add_action('woocommerce_-after_-checkout_-form','hide_-shipping_-type');
函数隐藏\u传送\u类型($available\u gateways){
全球商业;
$selected_methods=WC()->session->get('selected_shipping_methods');
$selected_shipping_no_ajax=$selected_methods[0];
如果(0==STRPO($selected\u shipping\u no\u ajax,'local\u pickup')){
?>
jQuery(“#shipping_type_shipping_1,#shipping_type_shipping_2”).fadeOut();
jQuery('form.checkout')。关于('change','input[name^=“shipping_method”]”,函数(){
var val=jQuery(this.val();
如果(val.match(“^local_皮卡”)){
jQuery(“#shipping_type_shipping_1,#shipping_type_shipping_2”).fadeOut();
}否则{
jQuery(“#shipping_type_shipping_1,#shipping_type_shipping_2”).fadeIn();
}
});
jQuery(函数($){
$(“输入[name=shipping\u type]”)。在(“更改”,函数()上{
如果($(“#装运_类型_装运_1”)为(“:选中”)){
$(“#添加家庭成员,#配送(名字)字段,#配送(姓氏)字段,#配送(城市)字段,#配送(公司)字段,#配送(方法)统一费率9,标签[for='shipping(配送)方法(统一费率9'))。fadeIn();
}否则{
$(“#添加家庭成员,#配送(名字)字段,#配送(姓氏)字段,#配送(城市)字段,#配送(公司)字段,#配送(方法)统一费率9,标签[for='shipping(方法)统一费率9'])。淡出();
}
如果($(“#装运_类型_装运_2”)为(“:选中”)){
$(“#运输#邮政编码(字段#运输)地址(1)字段#运输(方法)统一费率10#运输(方法)统一费率11#运输(方法)统一费率12,标签[运输(方法)统一费率11],标签[运输(方法)统一费率10])];
}否则{
$(“#运输#邮政编码(字段#运输)地址(1)字段#运输(方法)统一费率10#运输(方法)统一费率11#运输(方法)统一费率12,标签[运输(方法)统一费率11],标签[运输(方法)统一费率10])];
}
如果($(“#装运类型(装运类型)是(“:选中的”){$(“#装运地址(装运地址)字段,#装运方法(装运方式)本地(装运方式)(装运类型)(装运类型)装运类型(装运类型)装运类型(装运类型)装运类型)装运类型);
}否则{
$(“#发货地址#2#字段,#发货方法#0#本地#8,标签[for='shipping#u方法#0#本地#8'])。淡出();
}
});
});
您可以将所有代码合并到第一个函数中,它也可以工作。现在您需要在开始时添加jQuery
ready()
函数
在您的案例中使用label[for=“shipping\u type\u shipping\u 1”]
和label[for=“shipping\u type\u shipping\u 2”]
将
标记与“for”
属性一起定位是非常简单和容易的
我在一个独特的钩子函数中重新访问并压缩了您的代码:
add_action( 'woocommerce_before_checkout_shipping_form', 'custom_shipping_radio_buttons', 10, 1 );
function custom_shipping_radio_buttons( $checkout ) {
woocommerce_form_field( 'shipping_type', array(
'type' => 'radio',
'class' => array( 'form-row-wide' ),
'label' => __('收件方式 *'),
'options' => array(
'shipping_1' => __('全家店到店'),
'shipping_2' => __('指定地址'),
'shipping_3' => __('自行取貨'),
),
), $checkout->get_value( 'shipping_type' ) );
$chosen_shipping_methods = WC()->session->get( 'chosen_shipping_methods' )[0];
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
var a = 'shipping_type_shipping_',
b = 'label[for="'+a+'1"],label[for="'+a+'2"],#'+a+'1,#'+a+'2';
<?php if ( 0 === strpos( $chosen_shipping_methods, 'local_pickup' ) ): ?>
$(b).fadeOut(); // Once DOM is loaded
<?php endif; ?>
// On live "change event
$('form.checkout').on('change','input[name^="shipping_method"]',function() {
var c = $(this).val();
if ( c.match('^local_pickup') )
$(b).fadeOut();
else
$(b).fadeIn();
});
});
</script>
<?php
}
已测试并正常工作。我尝试将其他选项的代码添加到您的代码中。但是,它无法正常工作
$chosen_shipping_methods_2 = WC()->session->get( 'chosen_shipping_methods' )[0];
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
var d = 'shipping_type_shipping_',
e ='label[for="'+d+'2"],label[for="'+d+'3"],#'+d+'2,#'+d+'3';
<?php if ( 0 === strpos( $chosen_shipping_methods_2, 'flat_rate:9' ) ): ?>
$(e).fadeOut(); // Once DOM is loaded
<?php endif; ?>
// On live "change event
$('form.checkout').on('change','input[name^="shipping_method"]',function() {
var f = $(this).val();
if ( f.match('^flat_rate:9') )
$(e).fadeOut();
else
$(e).fadeIn();
});
});
</script>
<?php
$chosen_shipping_methods_3 = WC()->session->get( 'chosen_shipping_methods' )[0];
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
var g = 'shipping_type_shipping_',
h = 'label[for="'+g+'1"],label[for="'+g+'3"],#'+g+'1,#'+g+'3';
<?php if ( 0 === strpos( $chosen_shipping_methods_3, 'flat_rate:10', 'flat_rate:11', 'flat_rate:12' ) ): ?>
$(h).fadeOut(); // Once DOM is loaded
<?php endif; ?>
// On live "change event
$('form.checkout').on('change','input[name^="shipping_method"]',function() {
var i = $(this).val();
if ( i.match('^flat_rate:10', '^flat_rate:11', '^flat_rate:12') )
$(h).fadeOut();
else
$(h).fadeIn();
});
});
</script>
<?php
$selected\u shipping\u methods\u 2=WC()->session->get('selected\u shipping\u methods')[0];
?>
jQuery(文档).ready(函数($){
var d='运输类型运输',
e='label[for=“”+d+'2]”,label[for=“”+d+'3]”,#“+d+'2,#“+d+'3”;
$(e).fadeOut();//加载DOM后
//关于现场“变革事件”
$('form.checkout')。关于('change','input[name^=“shipping_method”]”,函数(){
var f=$(this.val();
如果(f.匹配(“^flat\u rate:9”))
$(e).淡出();
其他的
$(e).fadeIn();
});
});
jQuery(文档).ready(函数($){
var g='运输类型运输',
h='label[for=“”+g+'1“],label[for=“”+g+'3“],#“+g+'1,#“+g+'3”;
$(h).fadeOut();//加载DOM后
//关于现场“变革事件”
$('form.checkout')。on('change','input[name^=“shipping\u method”]、function(){
var i=$(this.val();
如果(i.匹配(“^flat”费率:10“,“^flat”费率:11“,“^flat”费率:12”))
$(h).淡出();
其他的
$(h.fadeIn();
});
});
抱歉,回复太晚。代码工作得很好。非常感谢。我正在尝试为其他选项添加代码。我想为选项添加代码。我尝试将代码编写为您的代码。但是,它无法顺利工作。我不确定问题出在何处。请查看下面的代码谢谢您的帮助。它可以在本地选择上工作另外,我有了一个新的想法,在购物车页面中取消发货方式,在结账页面中根据发货类型单选按钮隐藏发货方式。我更新了我的问题,如上所述。
add_action( 'woocommerce_before_checkout_shipping_form', 'custom_shipping_radio_buttons', 10, 1 );
function custom_shipping_radio_buttons( $checkout ) {
woocommerce_form_field( 'shipping_type', array(
'type' => 'radio',
'class' => array( 'form-row-wide' ),
'label' => __('收件方式 *'),
'options' => array(
'shipping_1' => __('全家店到店'),
'shipping_2' => __('指定地址'),
'shipping_3' => __('自行取貨'),
),
), $checkout->get_value( 'shipping_type' ) );
// HERE below define your shipping "flat rates" method IDs in the array
$other_method_ids = array( 'flat_rate:09', 'flat_rate:10', 'flat_rate:11', 'flat_rate:12' );
$local_pickup = 'local_pickup';
// Get the chosen shipping method
$chosen_shipping = WC()->session->get( 'chosen_shipping_methods' )[0];
// Get the chosen shipping method ID
$chosen_shipping_expl = explode( ':', $chosen_shipping );
$chosen_method_id = $chosen_shipping_expl[0];
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
var a = 'shipping_type_shipping_',
b = 'label[for="'+a+'1"],label[for="'+a+'2"],#'+a+'1,#'+a+'2',
c = <?php echo json_encode( $other_method_ids ); ?>; // array of shipping methods ids
// Once DOM is loaded
<?php if ( $chosen_method_id === $local_pickup || in_array( $chosen_shipping, $other_method_ids) ): ?>
$(b).fadeOut();
<?php endif; ?>
// On live "change event
$('form.checkout').on('change','input[name^="shipping_method"]',function() {
var d = $(this).val();
console.log(e);
if ( e.match('^local_pickup') || $.inArray(d, c) !== -1 )
$(b).fadeOut();
else
$(b).fadeIn();
});
});
</script>
<?php
}
$chosen_shipping_methods_2 = WC()->session->get( 'chosen_shipping_methods' )[0];
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
var d = 'shipping_type_shipping_',
e ='label[for="'+d+'2"],label[for="'+d+'3"],#'+d+'2,#'+d+'3';
<?php if ( 0 === strpos( $chosen_shipping_methods_2, 'flat_rate:9' ) ): ?>
$(e).fadeOut(); // Once DOM is loaded
<?php endif; ?>
// On live "change event
$('form.checkout').on('change','input[name^="shipping_method"]',function() {
var f = $(this).val();
if ( f.match('^flat_rate:9') )
$(e).fadeOut();
else
$(e).fadeIn();
});
});
</script>
<?php
$chosen_shipping_methods_3 = WC()->session->get( 'chosen_shipping_methods' )[0];
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
var g = 'shipping_type_shipping_',
h = 'label[for="'+g+'1"],label[for="'+g+'3"],#'+g+'1,#'+g+'3';
<?php if ( 0 === strpos( $chosen_shipping_methods_3, 'flat_rate:10', 'flat_rate:11', 'flat_rate:12' ) ): ?>
$(h).fadeOut(); // Once DOM is loaded
<?php endif; ?>
// On live "change event
$('form.checkout').on('change','input[name^="shipping_method"]',function() {
var i = $(this).val();
if ( i.match('^flat_rate:10', '^flat_rate:11', '^flat_rate:12') )
$(h).fadeOut();
else
$(h).fadeIn();
});
});
</script>
<?php