本文介绍如何在Bricks Builder 表单实现自动获取国家,通过一段 PHP 代码和 hidden 字段可以轻松实现。我将附上我的代码和实现过程。
1、向网站添加一段 PHP 代码
你可以使用代码工具添加,我使用的 WPCode 添加的一段 PHP 代码。建议使用代码插件添加,不要直接去改网站源代码。

PHP 代码如下:
/**
* 给 Brcks 表单自动填访客国家。Hidden 字段 Value 填 {visitor_country}(或 {visitor_country_cn} 中文名 / {visitor_country_code} ISO 代码)即可:脚本按访客 IP 推断国家并自动填入(ipwho.is,免费无需 key,失败自动重试两次),填后加 readonly 防篡改;长时间无结果会清空字面量,避免 {visitor_country} 原样进邮件/入库。提交后该值作为普通字段进入邮件占位符({{字段ID}} / {{all_fields}})与提交记录(form_data)。附服务端标签层:{visitor_country} 等标签在支持动态数据解析的站点亦可直接服务端填值。
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // 禁止直接访问。
}
// ---------------------------------------------------------------------------
// 1) 把标签暴露给 Bricks 动态数据选择器(picker)
// ---------------------------------------------------------------------------
add_filter( 'bricks/dynamic_tags_list', function ( $tags ) {
$tags[] = [
'name' => '{visitor_country}',
'label' => '访客国家(按 IP 推断)',
'group' => 'Geo (IP)',
];
$tags[] = [
'name' => '{visitor_country_code}',
'label' => '访客国家代码(按 IP 推断,如 CN / US)',
'group' => 'Geo (IP)',
];
$tags[] = [
'name' => '{visitor_country_cn}',
'label' => '访客国家(中文名,按 IP 推断)',
'group' => 'Geo (IP)',
];
return $tags;
} );
// ---------------------------------------------------------------------------
// 2) 服务端标签解析层(可选:站点字段值支持动态数据解析时,直接服务端填值)
// ---------------------------------------------------------------------------
// Bricks 自带渲染器注册在 priority 10,这里用 20 只接管它没认领的标签。
add_filter( 'bricks/dynamic_data/render_tag', function ( $value, $post, $context ) {
// Bricks 解析完内置标签后会把值继续传过本过滤器,图片/相册等内置标签的
// 值可能是数组——非字符串一律原样放行,避免 "Array to string conversion"。
if ( ! is_string( $value ) ) {
return $value;
}
$raw = trim( $value );
if ( '' === $raw ) {
return $value;
}
// 未知标签通常以 "{tag:modifier}" 或 "{tag @fallback:'…'}" 形式到达。
if ( '{' === substr( $raw, 0, 1 ) && '}' === substr( $raw, -1 ) ) {
$raw = trim( substr( $raw, 1, -1 ) );
}
$tag = preg_split( '/[:@\s]/', $raw )[0] ?? '';
if ( ! in_array( $tag, [ 'visitor_country', 'visitor_country_code', 'visitor_country_cn' ], true ) ) {
return $value; // 不是我们的标签,原样放行。
}
$geo = bfgc_geo_lookup();
if ( 'visitor_country' === $tag ) {
return $geo['country'];
}
if ( 'visitor_country_code' === $tag ) {
return $geo['code'];
}
return bfgc_country_cn( $geo['code'] ); // visitor_country_cn
}, 20, 3 );
// ---------------------------------------------------------------------------
// 3) 主填充层(JS):按访客 IP 推断国家 → 填入国家字段
// 纯前端调用 ipwho.is,字段类型不限(text/hidden 均可),与全页缓存兼容。
// ---------------------------------------------------------------------------
add_action( 'wp_footer', 'bfgc_footer_geo_js' );
function bfgc_footer_geo_js() {
echo <<<'JS'
<script>
(function () {
// ISO 国家代码 → 中文名(visitor_country_cn 字段用;API 只回英文名,这里本地翻译)
var C2CN = {
'AD':'安道尔','AE':'阿联酋','AF':'阿富汗','AG':'安提瓜和巴布达','AI':'安圭拉','AL':'阿尔巴尼亚','AM':'亚美尼亚','AO':'安哥拉','AR':'阿根廷','AS':'美属萨摩亚','AT':'奥地利','AU':'澳大利亚','AW':'阿鲁巴','AX':'奥兰群岛','AZ':'阿塞拜疆','BA':'波斯尼亚和黑塞哥维那','BB':'巴巴多斯','BD':'孟加拉国','BE':'比利时','BF':'布基纳法索','BG':'保加利亚','BH':'巴林','BI':'布隆迪','BJ':'贝宁','BL':'圣巴泰勒米','BM':'百慕大','BN':'文莱','BO':'玻利维亚','BQ':'荷兰加勒比区','BR':'巴西','BS':'巴哈马','BT':'不丹','BV':'布韦岛','BW':'博茨瓦纳','BY':'白俄罗斯','BZ':'伯利兹','CA':'加拿大','CC':'科科斯群岛','CD':'刚果民主共和国','CF':'中非共和国','CG':'刚果共和国','CH':'瑞士','CI':'科特迪瓦','CK':'库克群岛','CL':'智利','CM':'喀麦隆','CN':'中国','CO':'哥伦比亚','CR':'哥斯达黎加','CU':'古巴','CV':'佛得角','CW':'库拉索','CX':'圣诞岛','CY':'塞浦路斯','CZ':'捷克','DE':'德国','DJ':'吉布提','DK':'丹麦','DM':'多米尼克','DO':'多米尼加共和国','DZ':'阿尔及利亚','EC':'厄瓜多尔','EE':'爱沙尼亚','EG':'埃及','EH':'西撒哈拉','ER':'厄立特里亚','ES':'西班牙','ET':'埃塞俄比亚','FI':'芬兰','FJ':'斐济','FK':'福克兰群岛','FM':'密克罗尼西亚','FO':'法罗群岛','FR':'法国','GA':'加蓬','GB':'英国','GD':'格林纳达','GE':'格鲁吉亚','GF':'法属圭亚那','GG':'根西岛','GH':'加纳','GI':'直布罗陀','GL':'格陵兰','GM':'冈比亚','GN':'几内亚','GP':'瓜德罗普','GQ':'赤道几内亚','GR':'希腊','GS':'南乔治亚和南桑威奇群岛','GT':'危地马拉','GU':'关岛','GW':'几内亚比绍','GY':'圭亚那','HK':'中国香港','HM':'赫德岛和麦克唐纳群岛','HN':'洪都拉斯','HR':'克罗地亚','HT':'海地','HU':'匈牙利','ID':'印度尼西亚','IE':'爱尔兰','IL':'以色列','IM':'马恩岛','IN':'印度','IO':'英属印度洋领地','IQ':'伊拉克','IR':'伊朗','IS':'冰岛','IT':'意大利','JE':'泽西岛','JM':'牙买加','JO':'约旦','JP':'日本','KE':'肯尼亚','KG':'吉尔吉斯斯坦','KH':'柬埔寨','KI':'基里巴斯','KM':'科摩罗','KN':'圣基茨和尼维斯','KP':'朝鲜','KR':'韩国','KW':'科威特','KY':'开曼群岛','KZ':'哈萨克斯坦','LA':'老挝','LB':'黎巴嫩','LC':'圣卢西亚','LI':'列支敦士登','LK':'斯里兰卡','LR':'利比里亚','LS':'莱索托','LT':'立陶宛','LU':'卢森堡','LV':'拉脱维亚','LY':'利比亚','MA':'摩洛哥','MC':'摩纳哥','MD':'摩尔多瓦','ME':'黑山','MF':'法属圣马丁','MG':'马达加斯加','MH':'马绍尔群岛','MK':'北马其顿','ML':'马里','MM':'缅甸','MN':'蒙古','MO':'中国澳门','MP':'北马里亚纳群岛','MQ':'马提尼克','MR':'毛里塔尼亚','MS':'蒙特塞拉特','MT':'马耳他','MU':'毛里求斯','MV':'马尔代夫','MW':'马拉维','MX':'墨西哥','MY':'马来西亚','MZ':'莫桑比克','NA':'纳米比亚','NC':'新喀里多尼亚','NE':'尼日尔','NF':'诺福克岛','NG':'尼日利亚','NI':'尼加拉瓜','NL':'荷兰','NO':'挪威','NP':'尼泊尔','NR':'瑙鲁','NU':'纽埃','NZ':'新西兰','OM':'阿曼','PA':'巴拿马','PE':'秘鲁','PF':'法属波利尼西亚','PG':'巴布亚新几内亚','PH':'菲律宾','PK':'巴基斯坦','PL':'波兰','PM':'圣皮埃尔和密克隆','PN':'皮特凯恩群岛','PR':'波多黎各','PS':'巴勒斯坦','PT':'葡萄牙','PW':'帕劳','PY':'巴拉圭','QA':'卡塔尔','RE':'留尼汪','RO':'罗马尼亚','RS':'塞尔维亚','RU':'俄罗斯','RW':'卢旺达','SA':'沙特阿拉伯','SB':'所罗门群岛','SC':'塞舌尔','SD':'苏丹','SE':'瑞典','SG':'新加坡','SH':'圣赫勒拿','SI':'斯洛文尼亚','SJ':'斯瓦尔巴和扬马延','SK':'斯洛伐克','SL':'塞拉利昂','SM':'圣马力诺','SN':'塞内加尔','SO':'索马里','SR':'苏里南','SS':'南苏丹','ST':'圣多美和普林西比','SV':'萨尔瓦多','SX':'荷属圣马丁','SY':'叙利亚','SZ':'斯威士兰','TC':'特克斯和凯科斯群岛','TD':'乍得','TF':'法属南部领地','TG':'多哥','TH':'泰国','TJ':'塔吉克斯坦','TK':'托克劳','TL':'东帝汶','TM':'土库曼斯坦','TN':'突尼斯','TO':'汤加','TR':'土耳其','TT':'特立尼达和多巴哥','TV':'图瓦卢','TW':'中国台湾','TZ':'坦桑尼亚','UA':'乌克兰','UG':'乌干达','UM':'美国本土外小岛屿','US':'美国','UY':'乌拉圭','UZ':'乌兹别克斯坦','VA':'梵蒂冈','VC':'圣文森特和格林纳丁斯','VE':'委内瑞拉','VG':'英属维尔京群岛','VI':'美属维尔京群岛','VN':'越南','VU':'瓦努阿图','WF':'瓦利斯和富图纳','WS':'萨摩亚','YE':'也门','YT':'马约特','ZA':'南非','ZM':'赞比亚','ZW':'津巴布韦'
};
// 目标字段(type 不限——text/hidden 均可):
// 名字叫 visitor_country / visitor_country_code / visitor_country_cn,
// 或值仍是 {visitor_country} 等字面量。
function isOurLiteral(v) {
return /^\{visitor_country(?:_code|_cn)?(?:\}|\s|:)/.test((v || '').trim());
}
function findTargets() {
var out = [];
document.querySelectorAll('form input').forEach(function (inp) {
var t = inp.type || '';
if (t === 'submit' || t === 'button' || t === 'radio' || t === 'checkbox' || t === 'file') { return; }
var n = (inp.name || '').trim();
if (n === 'visitor_country' || n === 'visitor_country_code' || n === 'visitor_country_cn' || isOurLiteral(inp.value)) {
out.push(inp);
}
});
return out;
}
// 是否仍需要填充:空 / 字面量 {visitor_country} / Unknown / 拨号代码残留(+86 等非国家名文本)
function needsFill(v) {
v = (v || '').trim();
if (!v || v === 'Unknown') { return true; }
if (isOurLiteral(v)) { return true; }
if (/^[0-9+]/.test(v)) { return true; }
return false;
}
var tries = 0;
// IP 推断状态:0 未开始 / 1 请求中 / 2 已有结果 / 3 失败
var geoState = 0, geoRetries = 0, geoCountry = '', geoCode = '', geoCountryCn = '';
// 按访客 IP 推断国家(ipwho.is:免费、HTTPS、无需 key;失败自动重试两次)
function geoDetect() {
if (geoState !== 0 && geoState !== 3) { return; }
if (geoState === 3 && geoRetries >= 2) { return; }
geoState = 1;
fetch('https://ipwho.is/')
.then(function (r) { return r.json(); })
.then(function (d) {
if (d && d.success && d.country) {
geoState = 2;
geoCountry = String(d.country);
geoCode = d.country_code ? String(d.country_code) : '';
geoCountryCn = geoCode && C2CN[geoCode] ? C2CN[geoCode] : '';
refresh();
} else {
geoState = 3; // 私网/保留 IP(本地调试等)会返回 success:false
}
})
.catch(function () {
geoState = 3;
})
.then(function () {
if (geoState === 3 && geoRetries < 2) {
geoRetries++;
setTimeout(geoDetect, geoRetries === 1 ? 6000 : 12000);
}
});
}
function lockInput(inp) {
if (inp.type !== 'hidden') { inp.readOnly = true; }
}
// 用 IP 结果填充需要填写的目标字段
function applyGeo(targets) {
targets.forEach(function (inp) {
if (!needsFill(inp.value)) { return; }
var isCnField = inp.name === 'visitor_country_cn' || /^\{visitor_country_cn(?:\}|\s|:)/.test(inp.value || '');
var isCodeField = inp.name === 'visitor_country_code' || /^\{visitor_country_code(?:\}|\s|:)/.test(inp.value || '');
if (isCnField) {
if (geoCountryCn && inp.value !== geoCountryCn) { inp.value = geoCountryCn; lockInput(inp); }
} else if (isCodeField) {
if (geoCode && inp.value !== geoCode) { inp.value = geoCode; lockInput(inp); }
} else if (geoCountry && inp.value !== geoCountry) {
inp.value = geoCountry;
lockInput(inp);
}
});
}
function refresh() {
var targets = findTargets();
if (!targets.length) { return; }
if (geoState === 0) { geoDetect(); } // 页面加载即开始推断
if (geoState === 2) { applyGeo(targets); }
if (tries >= 20) {
// 长时间无结果:清掉字面量标签,避免 "{visitor_country}" 原样进邮件/入库。
targets.forEach(function (inp) {
if (/^\{visitor_country/.test((inp.value || '').trim())) { inp.value = ''; }
});
}
tries++;
}
// 轮询把异步结果应用上去;字段若被其他脚本重置也会自动补填
refresh();
setInterval(refresh, 1000);
document.addEventListener('change', refresh);
document.addEventListener('input', refresh);
})();
</script>
JS;
}
// ---------------------------------------------------------------------------
// 4) 工具函数(服务端标签解析层用)
// ---------------------------------------------------------------------------
/**
* 当前访客 IP。
*
* 仅在确实经过 Cloudflare 时才信任 CF-Connecting-IP:CF-RAY 由 Cloudflare
* 边缘注入、客户端伪造不了,用它当“确实过 CF”的判据;否则任何人可直接
* 伪造 CF-Connecting-IP 头,不要无条件信任。
*/
function bfgc_visitor_ip() {
$ip = $_SERVER['REMOTE_ADDR'] ?? '';
if ( ! empty( $_SERVER['HTTP_CF_RAY'] ) && ! empty( $_SERVER['HTTP_CF_CONNECTING_IP'] ) ) {
$ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
}
return filter_var( $ip, FILTER_VALIDATE_IP ) ? $ip : '';
}
/**
* 按 IP 查国家:ipwho.is(免费、HTTPS、无需 key)。
*
* 结果按 IP 做 transient 缓存:成功 12 小时、失败 10 分钟,
* 避免每一次页面渲染都打外部 API。
*
* @return array{country:string, code:string}
*/
function bfgc_geo_lookup() {
$ip = bfgc_visitor_ip();
$key = 'bfgc_geo_' . md5( '' !== $ip ? $ip : 'no-ip' );
$cached = get_transient( $key );
if ( is_array( $cached ) && isset( $cached['country'], $cached['code'] ) ) {
return $cached;
}
$fallback = array(
'country' => 'Unknown',
'code' => '',
);
if ( '' === $ip ) {
set_transient( $key, $fallback, 10 * MINUTE_IN_SECONDS );
return $fallback;
}
$response = wp_remote_get(
'https://ipwho.is/' . rawurlencode( $ip ),
array( 'timeout' => 4 )
);
if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) {
set_transient( $key, $fallback, 10 * MINUTE_IN_SECONDS );
return $fallback;
}
$data = json_decode( wp_remote_retrieve_body( $response ), true );
// 私网/保留地址(本机 Local 的 127.0.0.1、内网 IP 等)会返回 success:false。
if ( empty( $data['success'] ) || empty( $data['country'] ) ) {
set_transient( $key, $fallback, 10 * MINUTE_IN_SECONDS );
return $fallback;
}
$result = array(
'country' => sanitize_text_field( $data['country'] ),
'code' => sanitize_text_field( $data['country_code'] ?? '' ),
);
set_transient( $key, $result, 12 * HOUR_IN_SECONDS );
return $result;
}
/**
* ISO 国家代码 → 中文名({visitor_country_cn} 用;未知代码返回“未知”)。
*/
function bfgc_country_cn( $code ) {
$map = array(
'AD' => '安道尔', 'AE' => '阿联酋', 'AF' => '阿富汗', 'AG' => '安提瓜和巴布达', 'AI' => '安圭拉',
'AL' => '阿尔巴尼亚', 'AM' => '亚美尼亚', 'AO' => '安哥拉', 'AR' => '阿根廷', 'AS' => '美属萨摩亚',
'AT' => '奥地利', 'AU' => '澳大利亚', 'AW' => '阿鲁巴', 'AX' => '奥兰群岛', 'AZ' => '阿塞拜疆',
'BA' => '波斯尼亚和黑塞哥维那', 'BB' => '巴巴多斯', 'BD' => '孟加拉国', 'BE' => '比利时', 'BF' => '布基纳法索',
'BG' => '保加利亚', 'BH' => '巴林', 'BI' => '布隆迪', 'BJ' => '贝宁', 'BL' => '圣巴泰勒米',
'BM' => '百慕大', 'BN' => '文莱', 'BO' => '玻利维亚', 'BQ' => '荷兰加勒比区', 'BR' => '巴西',
'BS' => '巴哈马', 'BT' => '不丹', 'BV' => '布韦岛', 'BW' => '博茨瓦纳', 'BY' => '白俄罗斯',
'BZ' => '伯利兹', 'CA' => '加拿大', 'CC' => '科科斯群岛', 'CD' => '刚果民主共和国', 'CF' => '中非共和国',
'CG' => '刚果共和国', 'CH' => '瑞士', 'CI' => '科特迪瓦', 'CK' => '库克群岛', 'CL' => '智利',
'CM' => '喀麦隆', 'CN' => '中国', 'CO' => '哥伦比亚', 'CR' => '哥斯达黎加', 'CU' => '古巴',
'CV' => '佛得角', 'CW' => '库拉索', 'CX' => '圣诞岛', 'CY' => '塞浦路斯', 'CZ' => '捷克',
'DE' => '德国', 'DJ' => '吉布提', 'DK' => '丹麦', 'DM' => '多米尼克', 'DO' => '多米尼加共和国',
'DZ' => '阿尔及利亚', 'EC' => '厄瓜多尔', 'EE' => '爱沙尼亚', 'EG' => '埃及', 'EH' => '西撒哈拉',
'ER' => '厄立特里亚', 'ES' => '西班牙', 'ET' => '埃塞俄比亚', 'FI' => '芬兰', 'FJ' => '斐济',
'FK' => '福克兰群岛', 'FM' => '密克罗尼西亚', 'FO' => '法罗群岛', 'FR' => '法国', 'GA' => '加蓬',
'GB' => '英国', 'GD' => '格林纳达', 'GE' => '格鲁吉亚', 'GF' => '法属圭亚那', 'GG' => '根西岛',
'GH' => '加纳', 'GI' => '直布罗陀', 'GL' => '格陵兰', 'GM' => '冈比亚', 'GN' => '几内亚',
'GP' => '瓜德罗普', 'GQ' => '赤道几内亚', 'GR' => '希腊', 'GS' => '南乔治亚和南桑威奇群岛', 'GT' => '危地马拉',
'GU' => '关岛', 'GW' => '几内亚比绍', 'GY' => '圭亚那', 'HK' => '中国香港', 'HM' => '赫德岛和麦克唐纳群岛',
'HN' => '洪都拉斯', 'HR' => '克罗地亚', 'HT' => '海地', 'HU' => '匈牙利', 'ID' => '印度尼西亚',
'IE' => '爱尔兰', 'IL' => '以色列', 'IM' => '马恩岛', 'IN' => '印度', 'IO' => '英属印度洋领地',
'IQ' => '伊拉克', 'IR' => '伊朗', 'IS' => '冰岛', 'IT' => '意大利', 'JE' => '泽西岛',
'JM' => '牙买加', 'JO' => '约旦', 'JP' => '日本', 'KE' => '肯尼亚', 'KG' => '吉尔吉斯斯坦',
'KH' => '柬埔寨', 'KI' => '基里巴斯', 'KM' => '科摩罗', 'KN' => '圣基茨和尼维斯', 'KP' => '朝鲜',
'KR' => '韩国', 'KW' => '科威特', 'KY' => '开曼群岛', 'KZ' => '哈萨克斯坦', 'LA' => '老挝',
'LB' => '黎巴嫩', 'LC' => '圣卢西亚', 'LI' => '列支敦士登', 'LK' => '斯里兰卡', 'LR' => '利比里亚',
'LS' => '莱索托', 'LT' => '立陶宛', 'LU' => '卢森堡', 'LV' => '拉脱维亚', 'LY' => '利比亚',
'MA' => '摩洛哥', 'MC' => '摩纳哥', 'MD' => '摩尔多瓦', 'ME' => '黑山', 'MF' => '法属圣马丁',
'MG' => '马达加斯加', 'MH' => '马绍尔群岛', 'MK' => '北马其顿', 'ML' => '马里', 'MM' => '缅甸',
'MN' => '蒙古', 'MO' => '中国澳门', 'MP' => '北马里亚纳群岛', 'MQ' => '马提尼克', 'MR' => '毛里塔尼亚',
'MS' => '蒙特塞拉特', 'MT' => '马耳他', 'MU' => '毛里求斯', 'MV' => '马尔代夫', 'MW' => '马拉维',
'MX' => '墨西哥', 'MY' => '马来西亚', 'MZ' => '莫桑比克', 'NA' => '纳米比亚', 'NC' => '新喀里多尼亚',
'NE' => '尼日尔', 'NF' => '诺福克岛', 'NG' => '尼日利亚', 'NI' => '尼加拉瓜', 'NL' => '荷兰',
'NO' => '挪威', 'NP' => '尼泊尔', 'NR' => '瑙鲁', 'NU' => '纽埃', 'NZ' => '新西兰',
'OM' => '阿曼', 'PA' => '巴拿马', 'PE' => '秘鲁', 'PF' => '法属波利尼西亚', 'PG' => '巴布亚新几内亚',
'PH' => '菲律宾', 'PK' => '巴基斯坦', 'PL' => '波兰', 'PM' => '圣皮埃尔和密克隆', 'PN' => '皮特凯恩群岛',
'PR' => '波多黎各', 'PS' => '巴勒斯坦', 'PT' => '葡萄牙', 'PW' => '帕劳', 'PY' => '巴拉圭',
'QA' => '卡塔尔', 'RE' => '留尼汪', 'RO' => '罗马尼亚', 'RS' => '塞尔维亚', 'RU' => '俄罗斯',
'RW' => '卢旺达', 'SA' => '沙特阿拉伯', 'SB' => '所罗门群岛', 'SC' => '塞舌尔', 'SD' => '苏丹',
'SE' => '瑞典', 'SG' => '新加坡', 'SH' => '圣赫勒拿', 'SI' => '斯洛文尼亚', 'SJ' => '斯瓦尔巴和扬马延',
'SK' => '斯洛伐克', 'SL' => '塞拉利昂', 'SM' => '圣马力诺', 'SN' => '塞内加尔', 'SO' => '索马里',
'SR' => '苏里南', 'SS' => '南苏丹', 'ST' => '圣多美和普林西比', 'SV' => '萨尔瓦多', 'SX' => '荷属圣马丁',
'SY' => '叙利亚', 'SZ' => '斯威士兰', 'TC' => '特克斯和凯科斯群岛', 'TD' => '乍得', 'TF' => '法属南部领地',
'TG' => '多哥', 'TH' => '泰国', 'TJ' => '塔吉克斯坦', 'TK' => '托克劳', 'TL' => '东帝汶',
'TM' => '土库曼斯坦', 'TN' => '突尼斯', 'TO' => '汤加', 'TR' => '土耳其', 'TT' => '特立尼达和多巴哥',
'TV' => '图瓦卢', 'TW' => '中国台湾', 'TZ' => '坦桑尼亚', 'UA' => '乌克兰', 'UG' => '乌干达',
'UM' => '美国本土外小岛屿', 'US' => '美国', 'UY' => '乌拉圭', 'UZ' => '乌兹别克斯坦', 'VA' => '梵蒂冈',
'VC' => '圣文森特和格林纳丁斯', 'VE' => '委内瑞拉', 'VG' => '英属维尔京群岛', 'VI' => '美属维尔京群岛',
'VN' => '越南', 'VU' => '瓦努阿图', 'WF' => '瓦利斯和富图纳', 'WS' => '萨摩亚', 'YE' => '也门',
'YT' => '马约特', 'ZA' => '南非', 'ZM' => '赞比亚', 'ZW' => '津巴布韦',
);
return isset( $map[ strtoupper( (string) $code ) ] ) ? $map[ strtoupper( (string) $code ) ] : '未知';
}
将以上代码直接复制粘贴带你的代码插件对应的代码条目中去。激活并发布代码段。
2、添加一个隐藏字段并将默认值设置获取国家信息
发布代码段之后,打开你的 Bricks Builder Form 表单编辑,如果已经打开,记得刷新一下编辑器页面,同步一下数据。
向表单中添加一个 Hidden 字段。

在 Value 中设置动态数据,点击字段的⚡️图标,展开后找到 GEO(IP)分类下面有三个动态字段,就是我们上面的代码注册的,只需要选择一个即可。如果你喜欢用英文就选择第一个,你喜欢短码就用第二个,你喜欢中文就选第三个。

设置完成之后,保存表单页面或者模板,清理网站缓存。
然后模仿用户发一封询盘提交,检查网站后台 对于表单的 submission列表,有没有出现国家字段。如果邮件转发设置是全部字段转发,邮件中也会显示国家字段。
3、我设置并收到的邮件转发效果
邮件转发格式(将下面额字段代码换成你自己的对应字段的 ID 即可,字段也按照自己的字段进行匹配):
你收到了一封来自网站【TryBricks】的询盘。
询盘信息如下:<br>
姓名:{{3587f9}}<br>
公司:{{zpgpzm}}<br>
邮箱:{{05d5df}}<br>
电话:{{tnfktm}}<br>
询盘内容:{{200ff8}}<br>
<br>
用户来自国家:{{kfmgff}}<br>
询盘来源页面:{{bjnude}}<br>
询盘来源页面URL:{{bztcpo}}<br>
<br>

