自定义快捷代码在Elementor编辑器中可用,但在前端不起作用

时间:2021-08-12 作者:Sorius_45

我习惯于通过我的孩子主题和Elementor创建自定义短代码,这从来都不是问题。

然而,这一次出现了一些问题,当我在Elementor编辑器中插入短代码小部件时,我的代码正确显示,但保存后我访问了页面,它是空白的,就像从未处理过短代码一样。

有人知道为什么会这样吗?

这是我创建快捷码的代码:

    <?php 
    add_shortcode(\'test\', function () {
    ob_start();
    require_once (locate_template(\'views/test.php\'));
    return ob_get_clean();
});
在文件视图/测试中。php是一个简单的表单,没有什么疯狂之处。

这是Elementor editor的屏幕,其中显示了短代码:

enter image description here

enter image description here

如果我访问这个页面,它是完全空白的。

2 个回复
SO网友:Buttered_Toast

问题在于require_once, 您正在传递相对路径,但该路径不存在。

假设test.php 您需要的文件在此路径中

wp-content/themes/your-theme/views/test.php

您可以使用以下

require_once locate_template(\'views/test.php\');
考虑使用include 而不是require_one, 如果此短代码不是站点正常运行所必需的,最好使用include,因为这样您就不会收到致命错误,因为该文件不存在。

SO网友:Sorius_45

我找到了解决方案。谢谢你的回答。

下面是代码:

add_shortcode(\'test\', function () {
    ob_start();
    include(\'views/test.php\');
    return ob_get_clean();
});
现在它出现在前端,我不知道为什么require_once 不起作用,但如果我使用include 它工作得很好。

相关推荐

Shortcode not being executed

我将以下代码放在WP“init”回调中(或加载插件时)。add_shortcode(\'my_shortcode\', function($atts, $content =\'\') { die(); } ); if (!shortcode_exists(\'my_shortcode\')) die(); 在我的页面中,我放入“[my_shortcode]“”当我查看页面时,我得到“****”知道我的代码怎么了吗?更