REGISTER_SEIDBAR覆盖自身,并且不存在于全局$wp_REGISTERED_SIDEDAR中;

时间:2016-10-24 作者:Matthew

我有基于创建的分类术语生成的动态侧栏。

CLASS EXCERPT:

public function __construct() {
    add_action(\'widgets_init\', array($this, \'checkForActiveSidebarAndMenu\'));   
}
public function checkForActiveSidebarAndMenu() {
    //global $wp_registered_sidebars;
    //print_r($wp_registered_sidebars);
    $terms = get_terms(array(\'taxonomy\'=>\'minisite\',\'hide_empty\'=>false));
    print_r($terms);
    foreach($terms as $term) {
        $this->registerSidebars($term->term_id);
        //$this->registerMenu($term->term_id);
        update_term_meta($term->term_id, \'sidebar_active\', \'1\');
        //update_term_meta($term->term_id, \'menu_active\', \'1\');
    }
}
public function registerSidebars($mini_site_id) {
    // Register main content sidebar, [MINISITENAME]_[TERMID]_HOMEPAGE
    // Register right aligned sidebar, [MINISITENAME]_[TERMID]_RIGHT_SIDEBAR
    $mini_site_name = get_term($mini_site_id, \'minisite\');
    $mini_site_name = $mini_site_name->slug;
    $sidebar_name = $mini_site_name . \'_\' . $mini_site_id;
    $args = array(
        \'id\'=>$sidebar_name . \'_HOMEPAGE\',
        \'name\'=>$sidebar_name . \' HOMEPAGE\'
    );
    register_sidebar($args);
    //var_dump($sidebar);
    $args = array(
        \'id\'=>$sidebar_name . \'_RIGHT_SIDEBAR\',
        \'name\'=>$sidebar_name . \' RIGHT SIDEBAR\'
    );
    register_sidebar($args);
}   
此函数用于注册侧栏。“get\\u terms”中的查询数组将更改。

这是我最初编写的第二个函数,我的印象是侧边栏只需要注册一次,而不是每个“widgets\\u init”

上面的代码每次运行widgets\\u init时都会创建侧栏,这意味着我可以用小部件填充侧栏,刷新,新的侧栏就会出现,旧的侧栏就会消失。

我做错了什么?我希望能够注册一个动态侧边栏,并让它一直保留到我注销它为止。

其他:

类很好,方法正在按其应该的方式执行。

分类法“minisite”是我的分类法,它工作正常,它在“init”上作为优先级0加载,以允许widgets\\u init正确运行该分类法。

1 个回复
SO网友:Matthew

解决办法很简单,让我觉得自己非常愚蠢。我能找到的与我的问题极为相似的90%的问题都与外壳有关。在整个过程中,我忽略了ID中的“\\u主页”和“\\u右侧边栏”。

这些应该是小写的。

id-边栏id-必须全部为小写,不带空格(默认为数字自动递增id)。如果不设置id参数值,则从版本4.2开始,您将在调试模式下获得E\\u USER\\u NOTICE消息。

https://codex.wordpress.org/Function_Reference/register_sidebar#Parameters

相关推荐

Calling hooks in functions

我习惯于使用主题挂钩,定期添加功能,但难以使用插件挂钩来过滤内容。这是我所知的极限,我试图理解这个过程,但没有用。我正在使用GigPress 管理事件。它允许您添加一个节目(基于日期),并将该节目与帖子(标准WP帖子)关联。我已经创建了一个自定义的帖子类型—productions—来关联节目,而不仅仅是一般的博客帖子。插件有一个钩子-gigpress_related_post_types —允许您用自己选择的任何CPT交换帖子。如果我直接编辑插件,它就会工作,将“帖子”替换为“产品”。如果我添加了我希望是