web-dev-qa-db-fra.com

dynamic_sidebar () renvoie false dans la section admin

Toute raison pour laquelle ce code ne fonctionne pas dans la section admin (en particulier lors de l'ajaxing mais le problème persiste sur d'autres pages) de WordPress mais fonctionne parfaitement

ob_start();
    dynamic_sidebar('frontpage_widgets');
$content = ob_get_clean();

print_r($content); // nothing 

les barres latérales sont définies à partir de ce que je vois (parce que j'ai appelé mon code qui a enregistré les barres latérales)

print_r($GLOBALS['wp_registered_sidebars'])

    Array
    (
        [frontpage_widgets] => Array
            (
                [name] => Frontpage Widgets
                [id] => frontpage_widgets
                [description] => Widgets for the Frontpage Widgetspage
                [class] => 
                [before_widget] => 
                ...

Est-ce que quelque chose empêche les widgets de s'afficher dans la section admin?

Edit - Il semble que les widgets ne soient pas définis globalement: $ wp_registered_widgets est vide

3
rugbert

Oui, vous devez vous assurer que cette fonction est activée à un moment donné après l’enregistrement des barres latérales. Ce n'est pas tout à fait expliqué, mais implique dans le codex que cette fonction dynamic_sidebar( $index ) s'attend à ce qu'elles soient enregistrées et chargées comme enregistrés au moment de leur exécution. Sinon, rien ne correspondra à l'argument $index, qui dans votre cas est 'frontpage_widgets'.

Si vos barres latérales ont été enregistrées par numéro, elles doivent être récupérées par numéro. S'ils avaient des noms lorsque vous les avez enregistrés, utilisez leurs noms pour les récupérer.

Si je devais deviner, je dirais que _ { wp_loaded() } _ est la première action à laquelle vous pouvez l'accrocher en toute sécurité. Ou si vous en avez besoin, vous pouvez vous connecter à wp_register_sidebar_widget pour vous connecter au widget spécifique que vous testez.

Je suppose que vous utilisiez simplement la mise en mémoire tampon des objets à des fins de débogage. Vous pouvez presque toujours trouver une action appropriée à accrocher ou une zone de votre modèle à modifier. Je trouve que comprendre l'ordre dans lequel les actions sont déclenchées est inestimable. Jetez un oeil à ceci (réponse de birgire } _ comme une bonne référence lorsque différentes actions sont déclenchées. Cela facilitera beaucoup le débogage. Généralement, trouver le bon endroit pour accrocher sera assez intuitif selon ce avec quoi vous travaillez.

2
iyrin