web-dev-qa-db-fra.com

Shortcode toujours affiché en haut de la page

J'utilise un shortcode pour insérer différentes boucles via le fichier loops-name.php. Pour une raison quelconque, il est toujours en haut de la page. Je l'ai googlé et l'utilisation d'écho au lieu de return cause ce problème mais avec mon code, je n'utilise pas d'écho. Voici le 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'));
 }

Une idée pourquoi cela se passe?

13
john joe

Vous pouvez tamponner la sortie comme ceci:

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

MODIFIER. J'ai essayé cela, a bien fonctionné.

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

Votre fichier inclus est essentiellement du HTML. Par exemple

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

Est le même que

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

Les deux sont imprimés immédiatement plutôt que retournés. Depuis son impression, il apparaît avant le contenu de la page. Vous devez retourner quelque chose pour cela être inclus dans le contenu.

Comme @RutwickGangurde l'a souligné - il est inhabituel d'inclure un fichier de modèle dans un shortcode.

8
Stephen Harris