J'ai récupéré l'identifiant du widget de cette façon:
$the_sidebars = wp_get_sidebars_widgets();
print_r( $the_sidebars['sidebar-1'] );
Ça montre:
Array ( [0] => recent-posts-2 [1] => recent-comments-2
[2] => archives-2 [3] => categories-2 [4] => meta-2 )
Maintenant, je veux juste montrer le widget recent-posts-2
, ce qui signifie que je veux juste passer l'ID du widget recent-posts-2
à la fonction, et la fonction affichera le widget, tel que le code suivant:
function display_widget($widget_id) {
...
return $wid;
}
Quand je echo display_widget($widget_id)
, il affichera le widget avec HTML et la classe du thème par défaut.
Avez-vous une idée?
Vous pouvez utiliser wp_get_sidebars_widgets()
avec un rappel de filtre "à la demande". Cela signifie que nous ajoutons le rappel de filtre, juste avant l'appel de la fonction, puis le supprimons à nouveau à l'intérieur du rappel. Cela nous permet de ne l'utiliser qu'une seule fois. Cela signifie également que nous devons le définir juste avant l'appel à wp_get_sidebars_widgets()
chaque fois que nous n'avons besoin que du widget spécifié.
Si vous avez besoin de différents widgets sur différentes pages, ajoutez simplement un switch/foreach
dans le rappel et utilisez des balises conditionnelles telles que is_home()
, etc.
// For your functions.php
/**
* Call a specific sidebar widget
* Filter callback
*
* @param array $sidebars_widgets
* @return mixed bool/object $sidebars_widgets The widget or FALSE if not found
*/
function filter_sidebars_widgets( $sidebars_widgets )
{
// SET your wanted widget right here:
$wanted = 'recent-posts-2';
// Prevent intercepting another call - on demand filter(!)
remove_filter( current_filter(), __FUNCTION__ );
if ( is_array( $sidebars_widgets ) )
{
// array_search() returns FALSE in case the widget isn't present
$index = array_search( $wanted, $sidebars_widgets, FALSE );
$sidebars_widgets = $sidebars_widgets[ $index ];
}
else
{
// we add a manual FALSE in case the widget isn't present
$sidebars_widgets = $wanted === $sidebars_widgets ? $sidebars_widgets : FALSE;
}
return $sidebars_widgets;
}
// In your template: First add the filter...
add_filter( 'sidebars_widgets', 'filter_sidebars_widgets' );
// ...then call the function.
$widget = wp_get_sidebars_widgets();
// Now do something with $widget :)
// As we removed the filter inside the callback, any other call
// to wp_get_sidebars_widgets(); will behave like normal.