Woocommerce 选中另一个自定义字段(复选框)后,动态显示并使自定义签出字段成为必需字段

Woocommerce 选中另一个自定义字段(复选框)后,动态显示并使自定义签出字段成为必需字段,woocommerce,hook-woocommerce,Woocommerce,Hook Woocommerce,我现在正在寻找一段时间来实现我描述的标题 这是我正在使用的代码,用于我的子主题的functions.php文件: //--------------------add custom fields to billing section-------------------------------------------- add_filter( 'woocommerce_checkout_fields' , 'display_checkbox_and_new_checkout_field', 20

我现在正在寻找一段时间来实现我描述的标题

这是我正在使用的代码,用于我的子主题的functions.php文件:

//--------------------add custom fields to billing section--------------------------------------------
add_filter( 'woocommerce_checkout_fields' , 'display_checkbox_and_new_checkout_field', 20 );
  
function display_checkbox_and_new_checkout_field( $fields ) {
  
$fields['billing']['checkbox_trigger'] = array(
    'type'      => 'checkbox',
    'label'     => __('Επιθυμώ Τιμολόγιο', 'woocommerce'),
    'class'     => array('form-row-wide'),
    'clear'     => true
);   
    
$fields['billing']['afm_field'] = array(
    'label'     => __('ΑΦΜ Εταιρείας', 'woocommerce'),
    'placeholder'   => _x('καταχωρείστε το ΑΦΜ σας...', 'placeholder', 'woocommerce'),
    //'required' => true,
    'class'     => array('form-row-wide'),
    'clear'     => true
);
  
return $fields;
  
}


//toggle feature for the custom field that I need to make required after checkbox is clicked

add_action( 'woocommerce_after_checkout_form', 'conditionally_hide_show_new_field', 9999 );
  
function conditionally_hide_show_new_field() {
    
  wc_enqueue_js( "
      jQuery('input#checkbox_trigger').change(function(){
           
         if (! this.checked) {
            // HIDE IF NOT CHECKED
            jQuery('#afm_field_field').hide();
            jQuery('#afm_field_field').removeClass('validate-required');
         } else {
            // SHOW IF CHECKED
            jQuery('#afm_field_field').show();
            jQuery('#afm_field_field').addClass('validate-required');
         }
           
      }).change();
  ");
       
}
我也尝试过以下方法,但似乎不起作用:

add_filter( 'woocommerce_checkout_process' , 'if_checked_make_afm_required', 20 );
  
function if_checked_make_afm_required() {
    
    $step = WC()->session->get( 'post_data' );
    
    if ( isset($step['checkbox_trigger']) ) {
        $fields['billing']['afm_field']['required'] = true;
    } else {
        $fields['billing']['afm_field']['required'] = false;
    }
  
}

如果这里有人能帮忙,我将不胜感激。提前谢谢

这个问题+答案与您所寻找的@7uc1f3r非常接近,链接的答案似乎缺少设置动态打开/关闭所需签出字段的解决方案。我也对这方面的最佳答案感兴趣。目前只能想到js/ajax解决方案。也许还有一些更地道的方式?@ViktorBorítás你们中的许多人忘记了,并不是你们在这里找到的每个答案都是你们自己问题的现成解决方案。这里的答案可以作为进一步发展的参考。如果你自己不能做到这一点,你可以雇佣一个developer@7uc1f3r无意冒犯,我只是指出,这个问题只有部分答案。第二部分(这一部分似乎比较棘手,显然在线资源很少或为0)尚未在此处得到回答/讨论,以揭示最佳实践。@7uc1f3r非常感谢您的回答。我说的是你在这里发布的第一条评论。我在那里找到了答案,这对我来说非常有效<代码>添加操作('woocommerce\u checkout\u process'、'afm\u validation');函数afm_validation(){if(isset($_POST['checkbox_trigger'])和isset($_POST['afm_field'])和empty($_POST['afm_field']){wc add_notice(uuuu(“请填写您的afm”),“error”);}这是代码中帮助我解决问题的部分。我进行了测试,工作得很好。又来了!