You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在WordPress与Formidable Forms中,如何输出含PHP的字符串并执行其中代码?

解决WordPress+Formidable Forms中存储的HTML字符串执行短码/PHP逻辑的问题

可行方案如下(按推荐度排序):

方案一:直接使用短码+动态替换条目ID(最优解)

无需在HTML中嵌套PHP标签,直接在自定义字段里存储带Formidable短码的HTML结构,例如:

<h2>[frm-field-value field_id=11 entry="%ENTRY_ID%"]</h2>
<p>邮箱:[frm-field-value field_id=12 entry="%ENTRY_ID%"]</p>

在页面模板中,通过以下代码处理:

// 获取自定义字段中的签名HTML模板
$signature_template = get_post_meta(get_the_ID(), 'your_signature_field_key', true);

// 从URL参数获取当前提交的条目ID
$current_entry_id = isset($_GET['entry_id']) ? intval($_GET['entry_id']) : '';

if ($current_entry_id) {
    // 替换模板中的占位符为实际条目ID
    $signature_template = str_replace('%ENTRY_ID%', $current_entry_id, $signature_template);
}

// 执行短码并输出最终HTML
echo do_shortcode($signature_template);

这种方式完全利用WordPress原生短码机制,无需执行额外PHP代码,更安全且符合开发规范。

方案二:执行HTML中嵌套的PHP代码(适合已有模板的场景)

如果你的自定义字段已经包含嵌套PHP的HTML字符串,可通过正则匹配+eval执行(因你完全控制内容,无安全风险):

// 获取存储的HTML内容
$content = get_post_meta(get_the_ID(), 'your_custom_field_key', true);

// 匹配所有<?php ... ?>代码块
preg_match_all('/<\?php\s*(.+?)\s*\?>/s', $content, $matches);

foreach ($matches[0] as $index => $php_block) {
    // 捕获PHP代码执行结果
    ob_start();
    eval($matches[1][$index]);
    $execution_result = ob_get_clean();
    
    // 替换原PHP块为执行结果
    $content = str_replace($php_block, $execution_result, $content);
}

// 输出处理后的HTML
echo $content;

注意:eval仅在你100%控制输入内容时使用,禁止用于用户可编辑的内容。

方案三:临时文件执行(适合复杂PHP逻辑场景)

若模板包含大量复杂PHP逻辑,可将内容写入临时PHP文件再执行:

$content = get_post_meta(get_the_ID(), 'your_custom_field_key', true);

// 创建临时PHP文件
$temp_file = wp_tempnam('signature-builder');
file_put_contents($temp_file, $content);

// 执行临时文件并捕获输出
ob_start();
include $temp_file;
$processed_content = ob_get_clean();

// 清理临时文件
unlink($temp_file);

// 输出结果
echo $processed_content;

需确保服务器对WordPress临时目录有写入权限,此方案仅在必要时使用。


内容的提问来源于stack exchange,提问作者Thessa Verbruggen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 08:42:50