web-dev-qa-db-fra.com

the_widget () et l'ID du widget

Supposons que j'ai un widget qui n'affiche que son nom:

    <p>
         <?php echo $args['widget_id'] ?>
    </p>

Ainsi, lorsque je glisse mon widget dans une barre latérale, il affiche:

<p>
     myWidget-number
</p>

Le problème est que je veux appeler ce widget avec un shortcode:

    (...)
            ob_start();    
            the_widget(MyWidget);
            return ob_get_clean();
   }

    add_shortcode('myWidget_short', 'myWidget_shortcode');

Et quand je fais [myWidget_short], il ne montre que

<p>
</p>

Des idées comment appeler l'identifiant du widget avec un shortcode?

2
Wordpressor

Je crois que @One Trick Pony avait raison.

Les widgets Shortcode n'ont pas d'identifiant, j'ai donc trouvé un moyen de contourner le problème.

Premièrement, j'ai utilisé la fonction PHP Rand:

$var = Rand();

Et puis, ajouté le "var" à l'ID, il n'entre donc pas en conflit avec d'autres codes courts appelant le même widget (chacun d'entre eux a un numéro aléatoire différent à la fin de l'ID):

<div id="myWidget-<?php echo $var?>;"></div>
1
Wordpressor

J'ai construit un shortcode pour appeler les barres latérales et un shortcode pour appeler des widgets dans Total Widget Control . Les barres latérales étaient assez faciles à créer, appelant simplement dynamic_sidebar dans ob_start ();

Cependant, l'appel de widgets individuels était assez compliqué. global $wp_registered_widgets Je pense est la variable globale qui contient l'instance complète du widget. Vous devez d'abord créer votre propre fonction qui vous permet de saisir l'instance du widget, puis appeler la fonction de rappel des widgets afin d'afficher le widget.

Le code que vous essayez d'utiliser the_widget nécessite en fait de transmettre l'instance de widget en tant que paramètre. Ce n'est pas capable de traquer le widget lui-même.

0