我正在尝试使用“get\\u template\\u part()”包含用户输入。这些包含添加在主题选项中,例如用户输入。
get_template_part(\'content/block\', \'branding\');
get_template_part(\'content/block\', \'footer\');
我需要以php的形式执行这段代码,并为add\\u before\\u content()提供一个自定义挂钩,该挂钩在内容和侧栏之前运行。在layouts类中,我有一个方法检查用户输入,然后使用该方法使用eval()添加包含
function add_before_content() {
global $options;
$string = "get_template_part(\'content/block\', \'branding\');";
return eval($string);
}
add_action(\'before_content\', \'add_before_content\');
这非常有效,但是当使用eval()时,我会感到紧张,尤其是当它涉及用户输入的内容时。我在这个场景中的想法是,应该避免使用它,因为它允许用户输入任何php代码并将其执行。
但是,只能通过管理员登录进行访问。
实际上,我已经实现了一个不同的解决方案,但我想把这个问题提出来,因为得到一些反馈会很好。
在这种情况下,eval()是个坏主意吗?
进一步澄清,我试图达到与打开索引相同的结果。主题和添加的php文件get_template_part()
包含模板文件。例如:
<?php get_template_part(\'content/block\', \'header\'); ?>
文件的内容其实并不重要,它只是一个普通的php include,应该在调用时包含并运行。
在我的主题选项中,我有一个编辑器元素(extended textarea),用于一些功能,因此可以从主题选项将代码添加到主题中,而无需用户打开主题文件。
这对于我迄今为止添加的html非常有效。该值存储在数据库中,当其在主题中回显时,它会回显html,没有问题。
然而,当我想允许用户从主题编辑器中添加包含的php时,我就陷入了困境。
用户可以在两个位置添加这些Include。在内容的上面和下面都有挂钩,这就是我使用它们的原因。
下面是编辑器的屏幕截图,其中定义了includes。
http://cl.ly/3n3r3H381g1U1a2t3T3g
我需要的是包含文件的品牌和标题,就像我打开了索引一样。php文件,并在文件中手动输入get\\u template\\u部分,而不是编辑器。只需使用您解释的方式将值作为字符串输出到页面上,如下所示
http://cl.ly/3I251I0B282i0c0E0U2j
而不是实际包含那些模板文件。使用eval()意味着编辑器的保存值(一个字符串)将被计算为php,并添加include,就像我在索引中添加它一样。php,这就是它工作的原因,也是我唯一能理解它的方法。
我希望这能让事情变得更清楚。
感谢您的耐心:)
我在这里谈论的这个特定功能的概念是我唯一一次尝试添加php的地方,后来我尝试了另一种方法,但我发布了这个关于eval()的问题,因为我想证实我的想法。
这是一个父主题,第一次安装时只有一个内容区域和侧栏……上面或下面都没有。就像一块“干净的石板”在创建网站时开始。该主题有一个称为“积木生成器”的东西,它允许用户定义并向其网站添加/删除“积木”,然后定义要在这些积木中显示的内容。他们可以添加一个名为“品牌”的块
构建块就像网站上的任何内容“部分”。徽标区域、导航区域、页脚搁板、工具栏等。
构建块概念取自我们开发的Joomla模板框架,该框架的核心是构建块。
www.getmorp。组织机构
定义块后,可以通过4种方式之一将其设置为输出。
小部件(如果设置为小部件,则会创建一个具有块名称的新小部件pos)
显然,如果不在某个地方实际调用主题中的块,这将不起作用……这是唯一的手动步骤,也是我最初问题的全部要点显露出来的地方。
任何用户都可以轻松地打开索引。php或更好的方法创建子主题并添加索引。php并添加代码来调用该块
<?php get_template_part(\'content/block\', \'header\'); ?>
然而,在使用封闭的用户团队进行alpha测试时,一些人问是否可以不打开主题文件来添加块include…因此我的问题是。
注意:构建块是可选的。。用户不必使用它们,他们可以像使用其他主题一样使用该主题,但对于许多用户来说,这将使他们的网站建设和修改变得非常困难!!更简单。
这意味着不需要定义70个小部件位置,以备用户需要。我们的方法是可伸缩的,它只从边栏小部件的位置开始。
由于主题是以slate为基础开发的,因此可以根据需要通过添加所需的块来添加无限的小部件位置。