web-dev-qa-db-fra.com

Le shortcode est toujours affiché en premier. Encore une fois

D'accord, j'ai eu un problème avec les échos dans mon dernier shortcodem, mais tout fonctionne bien maintenant.

Mais j'en ai un autre:

function myWidget_shortcode( $atts ) {
        extract( shortcode_atts( array(
        'title' => 'My Widget',
        'value' => '5',
        ), $atts ) );

        return the_widget(myWidget,'title='.$title.'&value='.$value);
}

add_shortcode('myWidget', 'myWidget_shortcode'); 

Pouvez-vous me dire pourquoi ce shortcode est toujours affiché en premier sur les pages? Il n'y a pas d'écho, etc., toutes les données sont renvoyées ...

[a trouvé la réponse - éditer]

Ceci résout le problème:

ob_start();    
the_widget(popularPosts,'title='.$title.'&number='.$number);
return ob_get_clean();

En tout cas, je ne comprends pas pourquoi c'est toujours le premier dans ce cas. Parce que the_widget est une fonction elle-même et fait écho à quelque chose? :>

1
Wordpressor

Oui, observez la méthode widget() dans votre classe MyWidget. Cela fait-il écho? Très probablement, parce que c'est ainsi que les widgets sont normalement écrits. En fait, je serais surpris de voir un widget qui ne renvoie pas la sortie dans sa méthode widget().

Et lorsque vous appelez the_widget(), il récupère une instance du widget que vous demandez et appelle $widget_obj->widget($args, $instance);. Donc, cela fait écho et ne renvoie rien.

3
Dougal Campbell