を必要と電話以外を作るために働いている次のコードを、試してみましたそして、顧客が特定の国を選択した場合のみ必要課金電話を作るためにPHPのビット、:
// Making the billing phone field not required (by default)
add_filter('woocommerce_billing_fields', 'filter_billing_phone_field', 10, 1);
function filter_billing_phone_field($fields) {
$fields['billing_phone']['required'] = false;
return $fields;
}
// Real time country selection actions
add_action('woocommerce_after_order_notes', 'custom_checkout_scripts_and_fields', 10, 1);
function custom_checkout_scripts_and_fields($checkout) {
$required = esc_attr__('required', 'woocommerce');
// HERE set the countries codes (2 capital letters) in this array:
$countries = array('UK', 'BE', 'GE', 'IT', 'ES');
// Hidden field for the phone number validation
echo '<input type="hidden" name="billing_phone_check" id="billing_phone_check" value="0">';
$countries_str = "'".implode("', '", $countries)."'"; // Formatting countries for jQuery
?>
<script type="text/javascript">
(function($){
var required = '<abbr class="required" title="<?php echo $required; ?>">*</abbr>',
countries = [<?php echo $countries_str; ?>],
location = $('#billing_country option:selected').val(),
phoneCheck = 'input#billing_phone_check';
function actionRequire(actionToDo='yes', selector=''){
if (actionToDo == 'yes') {
$(selector).addClass("validate-required");
$(selector+' label').append(required);
} else {
$(selector).removeClass("validate-required");
$(selector+' label > .required').remove();
}
$(selector).removeClass("woocommerce-validated");
$(selector).removeClass("woocommerce-invalid woocommerce-invalid-required-field");
}
// Default value when loading
actionRequire('no','#billing_phone_field');
if($.inArray(location, countries) >= 0 && $(phoneCheck).val() == '0'){
actionRequire('yes','#billing_phone_field');
$(phoneCheck).val('1');
}
// Live value
$('form.checkout').on('change', '#billing_country', function(){
var location = $('#billing_country option:selected').val();
if ($.inArray(location, countries) >= 0 && $(phoneCheck).val() == 0) {
actionRequire('yes','#billing_phone_field');
$(phoneCheck).val('1');
} else if ($(phoneCheck).val() == 1) {
actionRequire('no','#billing_phone_field');
$(phoneCheck).val('0');
}
});
})(jQuery);
</script>
<?php
}
// Phone number validation, when it's visible
add_action('woocommerce_checkout_process', 'billing_phone_field_process');
function billing_phone_field_process() {
// Check if set, if its not set add an error.
if (! $_POST['billing_phone'] && $_POST['billing_phone_check'] == '1')
wc_add_notice(__('Please enter a number phone.'), 'error');
}
コードは、任意のプラグインファイルでも、あなたのアクティブな子テーマ(またはテーマ)のfunction.phpファイルになりますか。
テスト済みで動作します。
偉大な答え、それは素晴らしいです! –