如何在WordPress中利用用户数据创建带动态URL的iframe
问题描述
我第一次在这里提问,完全不是编程专家,靠谷歌、StackOverflow和大量试错学了点HTML和CSS,现在遇到的问题涉及PHP,我几乎一无所知。
我正在搭建一个订阅型WordPress网站,需要创建一个src值动态生成的iframe:
- src前缀固定:
https://app.example.com/autoin/ - 后缀是每个用户的唯一代码,存在用户资料的
address-two字段里(我用的是第二地址栏)
我找了一段代码,通过WPBakery的Raw HTML框加到目标页面里:
<?php $current_user = wp_get_current_user(); if($current_user) { ?> <iframe class="metricool-iframe" src="https://app.example.com/autoin/<?php echo $current_user->address-two; ?>"> </iframe> <?php } ?>
但Chrome查看页面源码时,URL还是https://app.example.com/autoin/<?php echo $current_user->address-two; ?>,代码根本没生效,求改进方法或者其他替代方案,我是纯新手😅
解决方法
1. 代码不生效的原因
WPBakery的Raw HTML框默认不会解析PHP代码,只会把它当作普通文本输出,所以你的PHP代码根本没被执行。
2. 推荐方案:用WordPress短代码
这是最适合新手的方法,步骤如下:
- 打开WordPress后台「外观」→「主题文件编辑器」,找到
functions.php(也可以用FTP工具找到主题目录下的functions.php文件) - 在文件末尾添加这段代码:
function user_unique_iframe_shortcode() { // 获取当前登录用户 $current_user = wp_get_current_user(); // 检查用户是否登录 if (is_user_logged_in()) { // 从用户资料里取出address-two字段的值 $user_code = get_user_meta($current_user->ID, 'address-two', true); if (!empty($user_code)) { // 拼接完整的iframe地址,esc_attr用来避免安全问题 $iframe_src = 'https://app.example.com/autoin/' . esc_attr($user_code); return '<iframe class="metricool-iframe" src="' . $iframe_src . '"></iframe>'; } else { return '<p>你的用户资料里缺少必要的代码,请先完善资料</p>'; } } else { return '<p>请登录后查看内容</p>'; } } // 注册短代码,名字是user_iframe add_shortcode('user_iframe', 'user_unique_iframe_shortcode');
- 保存修改后,回到WPBakery编辑页面,添加「短代码」模块,输入
[user_iframe]就能显示动态iframe了。
3. 为什么不用原来的写法?
原来的$current_user->address-two写法有问题:PHP里的-会被当成减号运算,无法正确读取字段值。用get_user_meta函数是WordPress官方推荐的读取用户自定义字段的方法,兼容性更好。
4. 不推荐的方案:开启Raw HTML的PHP解析
有些插件或主题可以让Raw HTML框支持PHP,但这种方法容易带来安全风险,不建议新手尝试。
内容的提问来源于stack exchange,提问作者Ercos
相关产品推荐
相关产品推荐

