2

这就是我正在做的事情。我在插件的设置页面上有一个表单字段文本区域。到目前为止,我所拥有的是将内容正确存储在数据库中。该内容将是 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()and的东西htmlentities()。显然我不明白这里的东西。

4

1 回答 1

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';
//..
于 2013-08-16T02:54:13.297 回答