简码始终显示在页面顶部


15

我正在使用简码通过loops-name.php引入不同的循环。由于某些原因,它始终位于页面顶部。我用谷歌搜索,并使用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'));
 }

知道为什么会这样吗?


包含文件的简码?我觉得有点奇怪。
Rutwick Gangurde

1
“使用我的代码,我不使用echo” -loop-module.php文件是回显还是返回其输出?
Michael

目前还不行-文件中只有一个段落标签,上面写有“ test”,因此我可以看到它是如何工作的。
约翰·乔

get_template_part('loop',$module)而是使用它,它更漂亮,键入速度更快,支持父/子主题,并且是在wordpress中包括模板的推荐方法(是的,locate_template可能会做一些事情,但看起来可读性差得多!)
Tom J Nowell

Answers:


16

您可以像这样缓冲输出:

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' );
}

4
如果还有其他方法,请不要使用输出缓冲
fuxia

恐怕没有用。
约翰·乔

什么地方出了错?我尝试并更新了答案
offroff

8

所包含的文件实质上是回显HTML。例如

<?php
 //Some PHP
 echo 'test';
 //Some more PHP
 ?>

是相同的

<?php
 //Some PHP 
 ?>
 test
<?php
 //Some more PHP
 ?>

两者都立即打印而不是退回。由于已打印,因此它出现在页面内容之前。您需要返回一些内容,使其包含在内容中。

正如@RutwickGangurde指出的-在简码中包含模板文件是不寻常的。


1
谢谢,我不知道。所以我需要将整个东西放到一个变量中并返回它?至于包括模板文件,我想让主题用户尽可能轻松地自定义主题,而将巨大的短代码文件嵌套在根主题目录之外对他们而言并不是真正的理想选择。
约翰·乔

参见@offroff的答案-应该起作用
Stephen Harris

1
好吧,我想让主题用户尽可能轻松地自定义主题 ”-到底需要多少个抽象层?您在简码内有一个自定义模板文件。我不认为这会使用户感到更轻松。如果要提供向所有帖子添加静态内容的功能,只需dynamic_sidebar()在Loop中定义一个内部,然后让用户添加小部件即可。
Chip Bennett

大多数主题用户将不喜欢不得不浏览庞大的shortcode文件来更改前端上的简单CSS类。如果我使用标准的loop-name.php系统分解所有内容,那么他​​们找到所需内容的速度会大大提高。不理想,但我必须让他们开心;)
约翰·乔

很好的解释;
索玛博士,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.