update_option包含包含html和php的文本区域

时间:2013-08-15 23:46:56

标签: php database wordpress wordpress-plugin

这就是我的目标。我在插件的设置页面上有一个表单字段textarea。到目前为止,我正确地将内容存储在数据库中。这个内容将是HTML / PHP,更具体地说,它将是WordPress循环中的内容结构和模板标签。

我正在使用这段代码在表单提交时将表单中的数据插入到数据库中。

if (isset($_POST["update_settings"])) {
    $customPostLayout = esc_attr($_POST["post-layout"]);  
    update_option('aw_wp_yca_postcontent', $customPostLayout);      
}

然后我用这个显示数据:

echo get_option('aw_wp_yca_postcontent');

所以我可以说我的形式是:

<div id="wrapper">
    <?php the_title(); ?>
</div>

当我去帖子应该显示的前端时,我得到了这个:

<div id=\"wrapper\"> <?php the_title(); ?> </div>

因此,不是在循环内渲染,而是将其作为字符串输出。我在这做错了什么?我已尝试使用eval(),这不是我的偏好,也尝试使用htmlspecialchars()htmlentities()的各种内容。显然我不是在这里理解一些东西。

1 个答案:

答案 0 :(得分:3)

当您将其放入数据库时​​,您将存储文本字符串。因此,当您从数据库中提取它时,您就会得到一个文本字符串。如果你回显一个文本字符串,唯一会执行的代码是客户端代码(html,javascript,css等)如果你想从一个字符串执行php代码,那么是的,你将不得不使用eval ,这不是好习惯。但是,我不认为在数据库中存储php也是一种好习惯。

尽管如此,你的eval失败的原因是因为eval()需要一串有效的PHP代码,IE,<?php?>之间的东西。你的代码以html开头,所以如果你想要正确地评估html,那么你需要稍微编辑它。

eval("?> <b>foo</b> <?php ;");

例如,这将正确评估:

$myEvalString="?> ".get_option('aw_wp_yca_postcontent'). "<?php ;";
eval($myEvalString);

你可以做的另一件事就是让php从一个字符串中运行代码就是把它写入一个文件,然后包含它,就像这样:

file_put_contents("/your/file/path/specialCode.php",get_option('aw_wp_yca_postcontent'));
//your loop code...
include '/your/file/path/specialCode.php';
//..