📅  最后修改于: 2023-12-03 15:21:51.277000             🧑  作者: Mango
在 Caldera 表单中,我们要如何让电话字段只显示特定国家呢?以下是一个简单的 PHP 代码片段,可以在实现此功能。
add_filter( 'caldera_forms_render_field', function( $field_markup, $field_id, $form_id ){
if( 'phone' === $field_id ){
$field_markup = str_replace( "<input", "<input class='caldera-field-phone'", $field_markup );
}
return $field_markup;
}, 10, 3);
// 为用户所在的国家自动添加电话区号
add_action('wp_footer', 'add_phone_area');
function add_phone_area() {
?>
<script type="text/javascript">
jQuery(function( $ ){
// 只有当电话字段和所在国家都存在时才进行操作
if( $('.caldera-field-phone').length && typeof window.geoip_country_code !== 'undefined' ) {
// 定义哪些国家只显示其本身的电话号码区号
var country_codes = [ 'US', 'CA', 'MX' ];
// 定义其他国家默认显示电话号码区号
var default_area_code = '+86';
// 如果用户属于某些指定国家,则只显示该国家的电话号码区号。
if( $.inArray( window.geoip_country_code, country_codes ) !== -1 ) {
var area_code = '+' + window.geoip_country_code.toLowerCase();
}
// 否则,显示默认电话号码区号。
else {
var area_code = default_area_code;
}
// 将自定义类名添加到电话号码区号选择器中,并根据所在国家的不同设置不同的区号
$("select[name$='[tel_prefix]'] option").addClass('caldera-only-country').each( function(){
if( $(this).val() == area_code ) {
$(this).show();
} else {
$(this).hide();
}
});
// 当用户选择不同的国家时,也需要即时更新电话号码区号
$('body').on( 'change', '.caldera-only-country', function(){
$('.caldera-field-phone').val( $(this).val() );
});
}
});
</script>
<?php
}
以上就是如何实现在 Caldera 表单电话字段中只显示特定国家的完整代码。可以根据需要自由调整特定国家(country_codes
)和默认区号(default_area_code
)。
注意:在代码中,我们使用了 wp_footer 钩子来添加 jQuery 代码。如果你的主题中已经定义了此钩子,请将此代码块添加到主题的 functions.php 文件中。