动态侧边栏()在admin节中返回FALSE

时间:2017-04-05 作者:rugbert

任何原因此代码在WordPress的管理部分(特别是ajaxing时,但问题仍然存在于其他页面)不起作用,但工作正常

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

print_r($content); // nothing 
侧栏是根据我看到的内容设置的(因为我调用了注册侧栏的代码)

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] => 
                ...
是否有什么东西阻止小部件显示在管理部分?

编辑-我似乎没有全局设置小部件:$wp\\u registered\\u小部件为空

2 个回复
最合适的回答,由SO网友:iyrin 整理而成

是的,您必须确保在侧边栏注册后的某个时间钩住此函数。虽然没有解释清楚,但法典中暗示dynamic_sidebar( $index ) 希望它们在运行时注册并加载为registered。否则,它将无法与$index 论点,在你的情况下\'frontpage_widgets\'.

如果您的边栏是按编号注册的,则应按编号检索边栏。如果您注册时他们有名字,请使用他们的名字检索他们。

如果要我马上猜,我会说wp_loaded() 是您可以安全地将其挂接到的最早操作。或者如果你需要,你可以wp_register_sidebar_widget 连接到您正在测试的特定小部件。

我假设您只是出于调试目的使用对象缓冲。您几乎总是可以找到一个合适的操作来钩住或编辑模板的区域。我发现理解动作的顺序是非常宝贵的。看看这个answer by birgire 作为触发不同操作的良好参考。这将使调试更加容易。通常,根据您的工作内容,找到合适的钩子位置将相当直观。

SO网友:Atul Jindal

尝试注销管理员,然后查看代码行为。有时,由于登录会话,会出现这种行为。如果你对你的问题提供更多的细节,给出更好的答案可能会有帮助。