Problème:
Donc, en gros, cela revient à . Il doit y avoir un moyen d’utiliser le code de filtre functions.php pour récupérer les widgets enregistrés dans une barre latérale, puis les injecter dans une autre barre latérale avant de les afficher.
Cela peut être utile pour toutes sortes de scénarios dans lesquels vous voulez le même widget dans plusieurs barres latérales en fonction du contexte, en particulier lorsque vous utilisez un thème parent inflexible qui n'a pas "assez de barres latérales".
Notez que je n'ai pas besoin d'être informé sur les plug-ins "Contrôle de widget" ni sur l'option Jetpack qui vous permet d'afficher/masquer des widgets individuels en fonction du contexte. Ce dont j'ai besoin, c'est d'un moyen de contrôler les autres barres latérales dans lesquelles un widget apparaîtra.
Les suggestions de plugins sont les bienvenues si elles résolvent le problème clé.
Merci! Je vais essayer de le comprendre moi-même de toute façon et je vous répondrai si j'ai une solution satisfaisante :)
Voici une idée (non testée) où nous injectons la barre latérale sidebar-inject
avant la barre latérale sidebar-target
à l'aide du hook dynamic_sidebar_before
:
add_action( 'dynamic_sidebar_before', 'wpse_inject_sidebar', 10, 2 );
function wpse_inject_sidebar( $index, $has_widgets )
{
// Only target front-end
if( is_admin() )
return;
// Only target 'sidebar-target'
if( 'sidebar-target' !== $index )
return;
// Make sure 'sidebar-inject' is active
if( ! is_active_sidebar( 'sidebar-inject' ) )
return;
// Avoid recursive loop
remove_action( 'dynamic_sidebar_before', 'wpse_inject_sidebar', 10 );
// Inject 'sidebar-inject'
dynamic_sidebar( 'sidebar-inject' );
// Re-hook it again
add_action( 'dynamic_sidebar_before', 'wpse_inject_sidebar', 10, 2 );
}
Ici, nous guettons une boucle récursive en supprimant l'action avant d'appeler dynamic_sidebar()
dans le rappel du hook.
Mais en ne ciblant que 'sidebar-target'
ici et en veillant à ce que ce soit différent de 'sidebar-inject'
, nous évitons en réalité une boucle récursive.