Código corto que siempre se muestra en la parte superior de la página

11

Estoy usando un código corto para extraer diferentes bucles a través de loops-name.php. Por alguna razón siempre está en la parte superior de la página. Busqué en Google y el uso de eco en lugar de retorno causa ese problema, pero con mi código no estoy usando eco. Aquí está el código corto:

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

¿Alguna idea de por qué sucede esto?

    
pregunta john joe 10.04.2012 - 14:27

2 respuestas

15

Puedes almacenar el resultado de esta manera:

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

EDITAR. Intenté esto, trabajé bien.

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

Su archivo incluido es esencialmente un eco HTML. Por ejemplo

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

Es lo mismo que

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

Ambos se imprimen inmediatamente en lugar de devolverse. Desde su impresión aparece antes del contenido de la página. Debe devolver algo para que se incluya en el contenido.

Como señaló @RutwickGangurde, es inusual incluir un archivo de plantilla en un código corto.

    
respondido por el Stephen Harris 10.04.2012 - 14:46

Lea otras preguntas en las etiquetas