Php 海关;“条款和条件”;购物车页面中的接受复选框

Php 海关;“条款和条件”;购物车页面中的接受复选框,php,jquery,wordpress,woocommerce,cart,Php,Jquery,Wordpress,Woocommerce,Cart,工作在小家庭项目,并希望添加复选标记选项贝娄“继续结帐”按钮到购物车页面到我的Woocommerce网站。我找到了这个函数,即添加该选项: add_action( 'woocommerce_after_cart', 'bbloomer_add_checkout_privacy_policy', 9 ); function bbloomer_add_checkout_privacy_policy() { woocommerce_form_field( 'privacy_policy',

工作在小家庭项目,并希望添加复选标记选项贝娄“继续结帐”按钮到购物车页面到我的Woocommerce网站。我找到了这个函数,即添加该选项:

    add_action( 'woocommerce_after_cart', 'bbloomer_add_checkout_privacy_policy', 9 );

function bbloomer_add_checkout_privacy_policy() {

woocommerce_form_field( 'privacy_policy', array(
    'type'          => 'checkbox',
    'class'         => array('form-row privacy'),
    'label_class'   => array('woocommerce-form__label woocommerce-form__label-for-checkbox checkbox'),
    'input_class'   => array('woocommerce-form__input woocommerce-form__input-checkbox input-checkbox'),
    'required'      => true,
    'label'         => 'By proceeding, you are agreeing to our <a href="/termsandconditions">Terms and Conditions</a>',
)); 

}

// Show notice if customer does not tick

add_action( 'woocommerce_proceed_to_checkout', 'bbloomer_not_approved_privacy' );

function bbloomer_not_approved_privacy() {
    if ( ! (int) isset( $_POST['privacy_policy'] ) ) {
        wc_add_notice( __( 'Please acknowledge the Terms and Conditions' ), 'error' );
    }
}  
add_action('woocommerce_后加购物车','bbloomer_添加_结帐_隐私_政策',9);
功能bbloomer\u添加\u签出\u隐私\u策略(){
woocommerce\u表单\u字段('privacy\u policy',数组(
'键入'=>'复选框',
'class'=>array('form-row privacy'),
'label\u class'=>数组('woocmerce-form\uuuu label-woocmerce-form\uuuu label-for-checkbox复选框'),
'input\u class'=>数组('woocommerce-form\uuuu input-woocommerce-form\uuuuu input-checkbox输入复选框'),
“必需”=>true,
'标签'=>'继续,即表示您同意我们的',
)); 
}
//如果客户未勾选,则显示通知
添加操作(“woocommerce”继续“至”结帐“,”bbloomer“未经”批准“隐私”);
功能bbloomer\u未经批准\u隐私(){
如果(!(int)设置($_POST['privacy_policy'])){
wc_添加_通知(_uuu(‘请确认条款和条件’),‘错误’);
}
}  
但这个功能似乎有点不太好,因为无论是否选中,客户都可以进入结帐页面。我想确保只有选中复选框的客户才能继续结账。相反,警告信息将显示在顶部


有人能告诉我这个函数哪里出了问题,或者给我指出一些可行的解决方案吗?提前谢谢。这是我之前发布的此功能的当前外观。

以下代码将在您的隐私策略复选框的购物车页面中工作使用强制jQuery代码使其工作,因为“继续结帐”按钮仅链接到结帐页面,而不提交任何数据

代码将禁用启动按钮:

当复选框未选中时,它使用“Sweet alert 2”JS消息来显示按钮点击时的错误消息:

完整代码:

add_action( 'woocommerce_proceed_to_checkout', 'cart_privacy_policy_checkbox', 5 );
function cart_privacy_policy_checkbox() {

    woocommerce_form_field( 'privacy_policy', array(
        'type'          => 'checkbox',
        'class'         => array('form-row privacy'),
        'label_class'   => array('woocommerce-form__label woocommerce-form__label-for-checkbox checkbox'),
        'input_class'   => array('woocommerce-form__input woocommerce-form__input-checkbox input-checkbox'),
        'required'      => true,
        'label'         => sprintf( __( "I've read and accept the %s", "woocommerce" ),
                           '<a href="privacy-policy">'.__( "Privacy Policy", "woocommerce" ).'</a>' ),
    ));

    // jQuery code start below
    ?>
    <script src="https://unpkg.com/sweetalert2@8.8.1/dist/sweetalert2.all.min.js"></script>
    <script src="https://unpkg.com/promise-polyfill@8.1.0/dist/polyfill.min.js"></script>
    <script type="text/javascript">
    jQuery( function($){
        var a = '.checkout-button',     b = '#privacy_policy',
        c = '<?php echo wc_get_checkout_url(); ?>',     d = 'disabled';

        // Set disable button state
        $(a).addClass(d).prop('href', '#');

        // Woocommerce Ajax cart events
        $('body').on('updated_cart_totals removed_from_cart', function(){
            if( ! ( $(a).hasClass(d) && $(b).prop('checked') ) ){
                $(a).addClass(d).prop('href', '#');
            }
        })

        // On button click event
        $('body').on('click', a, function(e){
            if( ! $(b).prop('checked') ) {
                // Disable "Proceed to checkout" button
                e.preventDefault();
                // disabling button state
                if( ! $(a).hasClass(d) ){
                    $(a).addClass(d).prop('href', '#');
                }
                // Sweet alert 2
                swal({
                    title:  '<?php _e("Pricacy Policy", "woocommerce"); ?>',
                    text:   '<?php _e("Please acknowledge the privacy policy Terms and Conditions", "woocommerce"); ?>',
                    type:   'error',
                    timer:  3500,
                    showConfirmButton: false
                });
            }
        });

        // On checkbox change event
        $(b).change(function(){
            if($(this).prop('checked')){
                if( $(a).hasClass(d) ){
                    $(a).removeClass(d).prop('href', c);
                }
            } else {
                if( ! $(a).hasClass(d) ){
                    $(a).addClass(d).prop('href', '#');
                }
            }
        });
    });
    </script>
    <?php
}
add_action('woocommerce_procedu_to_checkout','cart_privacy_policy_checkbox',5);
功能购物车\u隐私\u策略\u复选框(){
woocommerce\u表单\u字段('privacy\u policy',数组(
'键入'=>'复选框',
'class'=>array('form-row privacy'),
'label\u class'=>数组('woocmerce-form\uuuu label-woocmerce-form\uuuu label-for-checkbox复选框'),
'input\u class'=>数组('woocommerce-form\uuuu input-woocommerce-form\uuuuu input-checkbox输入复选框'),
“必需”=>true,
'label'=>sprintf(_uu(“我已经阅读并接受了%s”,“woocommerce”),
'' ),
));
//jQuery代码从下面开始
?>
jQuery(函数($){
变量a='.checkout button',b='#隐私"策略',
c='',d='禁用';
//设置禁用按钮状态
$(a).addClass(d).prop('href','#');
//Woocommerce Ajax购物车事件
$('body')。在('updated\u cart\u totals removed\u from\u cart',function()上{
如果(!($(a).hasClass(d)和&$(b).prop('checked')){
$(a).addClass(d).prop('href','#');
}
})
//点击按钮事件
$('body')。在('click',a,function(e)上{
如果(!$(b).prop('checked')){
//禁用“继续结帐”按钮
e、 预防默认值();
//禁用按钮状态
如果(!$(a).hasClass(d)){
$(a).addClass(d).prop('href','#');
}
//甜蜜警报2
游泳({
标题:“”,
文本:“”,
键入:“错误”,
计时器:3500,
showconfixton:false
});
}
});
//关于复选框更改事件
$(b).更改(函数(){
if($(this.prop('checked')){
如果($(a).hasClass(d)){
$(a).removeClass(d).prop('href',c);
}
}否则{
如果(!$(a).hasClass(d)){
$(a).addClass(d).prop('href','#');
}
}
});
});

非常感谢这段代码

它对我来说很有效,除了通过ajax更新购物车时,例如删除项目时

在这种情况下,除非我刷新页面,否则该复选框将不再启用“继续签出”按钮。我最终发现:

将以下代码段添加到标题,以便在从购物车中删除项目后重新加载购物车页面

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript">
    jQuery( document.body ).on( 'updated_cart_totals', function () {
    location.reload( true );
} );
</script>

jQuery(document.body).on('updated\u cart\u totals',函数(){
位置。重新加载(true);
} );

只是一个简单的猜测……添加“必选”类。一些主题使用它来生成必填字段。否则应该会有帮助。你能以asnwer的身份发布完整的代码吗?这样我就可以接受了吗?对不起,任务召唤。如果你想为你完成它,就按照Loic的答案去做。他知道他的东西,所以我不会争辩,我很想这么说。@Dorothinhridgz刚刚将计时器延迟更新为一个较小的值(3500毫秒,而不是10000毫秒)。注意:更新购物车时重新加载页面的jquery代码片段只有在我将其放在页面“标题”中时才在桌面上工作。我将其添加到“内容”之后,使其在移动和桌面上都能工作。