Shortcode sempre exibido no topo da página

11

Estou usando um shortcode para puxar loops diferentes pelo loops-name.php. Por algum motivo, está sempre no topo da página. Eu pesquisei isso e usar o eco em vez de retornar causa esse problema, mas com o meu código eu não estou usando o eco. Aqui está o shortcode:

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

Alguma idéia do porquê isso está acontecendo?

    
por john joe 10.04.2012 / 14:27

2 respostas

15

Você pode armazenar em buffer a saída assim:

ob_start();
include(locate_template('loop-'.$module.'.php'));
return ob_get_clean();

EDIT. Eu tentei isso, funcionou bem.

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' );
}
    
por offroff 10.04.2012 / 15:02
7

Seu arquivo incluído é essencialmente um eco do HTML. Por exemplo

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

é o mesmo que

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

Ambos são impressos imediatamente e não retornados. Desde a sua impressão aparece antes do conteúdo da página. Você precisa retornar algo para que seja incluído no conteúdo.

Como @RutwickGangurde apontou - é incomum incluir um arquivo de modelo em um shortcode.

    
por Stephen Harris 10.04.2012 / 14:46

Tags