我知道我们必须返回简码,但是我正在尝试使用自定义模板,并且在所见即所得的编辑器中将简码插入内容的末尾时,该短代码实际上已插入内容的末尾:
这是我的简码:
add_shortcode('test_temp', 'temp_handler');
function temp_handler($atts) {
ob_start();
load_template(TEMPLATES_PATH . templates/test.php');
return ob_get_contents();
}
这是test.php的样子:
<div class="testDiv">Here is my test template</div>
还有什么办法可以使短代码不在内容之前插入?
答案 0 :(得分:1)
尝试一下:
add_shortcode('test_temp', 'temp_handler');
function temp_handler($atts) {
ob_start();
load_template(TEMPLATES_PATH . templates/test.php');
$ret = ob_get_contents();
ob_end_clean();
return $ret;
}
您的想法是使用输出缓冲加载模板文件,这是一个好主意,并且是Wordpress短代码的常见做法。但是,在您提供的代码ob_end_clean()
中的任何地方都没有结束输出缓冲,这让我感到奇怪,这使我相信您的输出缓冲设置不完美。
通常来说,Wordpress将运行您的功能,并用输出替换您的shortcode标记。如果函数的输出显示在页面上的其他位置(特别是显示在应该显示的区域上方),那么您的函数必须在Wordpress运行时输出内容 (在您的情况下,它一定不能按预期进行输出缓冲)。
注意:load_template
函数默认使用require_once
,这意味着您只能在页面上使用一次简码。相反,我建议使用:load_template(TEMPLATES_PATH . templates/test.php',
false );