快捷代码始终显示在页面顶部

时间:2012-04-10 作者:john joe

我使用一个短代码通过循环名称引入不同的循环。php。出于某种原因,它总是在页面的顶部。我在google上搜索了它,使用echo而不是return导致了这个问题,但我的代码没有使用echo。以下是短代码:

// setup the shortcode for use
function friendly_loop_shortcode( $atts, $content = null ) {
extract( shortcode_atts( array(
\'category\' => \'\',
\'module\' => \'\'
), $atts ) );

include(locate_template(\'loop-\'.$module.\'.php\'));
 }
知道为什么会这样吗?

2 个回复
最合适的回答,由SO网友:offroff 整理而成

可以按如下方式缓冲输出:

ob_start();
include(locate_template(\'loop-\'.$module.\'.php\'));
return ob_get_clean();
编辑。我试过这个,效果很好。

function friendly_loop_shortcode( $atts, $content = null ) {
     extract( shortcode_atts( array(
         \'category\' => \'\',
         \'module\' => \'\'
     ), $atts ) );

     ob_start();
     include(locate_template(\'loop-\'.$module.\'.php\'));
     $output = ob_get_clean();
     //print $output; // debug
     return $output;
}

if (!is_admin()) {
     add_shortcode(\'test\', \'friendly_loop_shortcode\' );
}

SO网友:Stephen Harris

您包含的文件本质上是回显HTML。比如说

<?php
 //Some PHP
 echo \'test\';
 //Some more PHP
 ?>
与相同

<?php
 //Some PHP 
 ?>
 test
<?php
 //Some more PHP
 ?>
两者都会立即打印出来,而不是退回。因为它是打印出来的,所以它出现在页面内容之前。您需要返回内容中包含的内容。

正如@RutwickGangurde所指出的,在短代码中包含模板文件是不寻常的。

结束

相关推荐

如何将文本添加到_Content,但在img/Shortcode之后

我试图在每篇文章的开头添加一些文字(文字来自post_meta, 但是对于这个示例,我们假设它是静态文本)。以下是我尝试的内容:add_filter(\'the_content\', function($content) { return \'Text from meta - \' . $content; }); 然而,如果帖子以一个通常是浮动的图像开始(有时甚至用标题短代码包装),添加的文本将出现在图像之前。我想在文章的第一段前面加上文字。有没有办法在不解析完整