web-dev-qa-db-fra.com

Pourquoi mon code court est-il exécuté avant tout autre contenu?

J'ai le texte suivant dans une page. Comme vous pouvez le constater, mon shortcode se situe tout en bas, mais lorsque le code est exécuté, la sortie de mon shortcode est insérée en haut de la page au lieu de suivre son contenu précédent.

<img class="alignnone" title="title_enquires" src="http://localhost/barcelona/wp-content/uploads/2011/08/title_enquires.jpg" alt="" width="589" height="77" />
<img class="alignnone" title="contact_map" src="http://localhost/barcelona/wp-content/uploads/2011/08/contact_map.jpg" alt="" width="555" height="222" />

[barcelona_address]

voici l'enregistrement de mon code court dans le fichier function.php:

<?php
add_shortcode( 'barcelona_address', 'barcelona_shortcode_handler' );

function barcelona_address_func()
{
    print "<p>sdsdsds</p>";
}

function barcelona_shortcode_handler( $atts, $content=null, $code="" ) 
{
   if (function_exists($code . "_func"))
   {
       call_user_func($code . "_func", $atts);
   }
}
?>

et le résultat est:

<p>sdsdsds</p>
<img class="alignnone" title="title_enquires" src="http://localhost/barcelona/wp-content/uploads/2011/08/title_enquires.jpg" alt="" width="589" height="77" />
<img class="alignnone" title="contact_map" src="http://localhost/barcelona/wp-content/uploads/2011/08/contact_map.jpg" alt="" width="555" height="222" />
3
Roman

A la demande générale:

La solution consiste simplement à remplacer print par return. Les codes courts doivent toujours renvoyer la valeur au lieu de l’imprimer ou de la renvoyer en écho.

10
Bainternet