Shortcode toujours affiché en haut de la page

11

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

Avez-vous une idée du pourquoi?

    
posée john joe 10.04.2012 - 14:27

2 réponses

15

Vous pouvez mettre en tampon la sortie comme ceci:

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

EDIT. 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' );
}
    
réponse donnée offroff 10.04.2012 - 15:02
7

Votre fichier inclus est essentiellement du HTML. Par exemple

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

est identique à

<?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 renvoyer quelque chose à inclure dans le contenu.

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

    
réponse donnée Stephen Harris 10.04.2012 - 14:46

Lire d'autres questions sur les étiquettes