Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于WooCommerce签出页面中的单选按钮隐藏发货方法_Php_Jquery_Woocommerce_Checkout_Shipping - Fatal编程技术网

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