这就是我的目标。我在插件的设置页面上有一个表单字段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()
的各种内容。显然我不是在这里理解一些东西。
答案 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';
//..