检查已注册的侧边栏是否处于活动状态并具有小部件内容

时间:2012-10-17 作者:Q Studio

我想检查一个注册的边栏是否有小部件内容-但似乎找不到用于此的WP函数-is\\u active\\u小部件检查它是否有内容,但不检查它是否存在。

function ql_widget( $widget, $widget_name, $element = \'sider\' ){

    if ( $widget ) { // widget name passed ##

        // check if widget is active - return html & widget content if true ##
        if ( is_active_sidebar( $widget ) ) { 

        echo \'
        <div class="\'.$element.\'">\';

            dynamic_sidebar( $widget );

         echo \'</div>\';

        } else {

            // issue error if requested widget does not exist or is empty ##
            if ( ql_user_is_administator() ) { // user is admin ##

                if ( dynamic_sidebar( $widget ) ) { // empty ##

                    $message = \'empty\';

                } else { // widget ID or name wrong ##

                    $message = \'error\';

                }

?>
                <div class="error"><strong>Widget <?php echo $message; ?>:</strong> 
                <?php echo $widget_name ? $widget_name : $widget ; ?></div>
<?php 


            }
        }
    }
}
我在页面上使用以下命令调用此命令:

// load widget ##
// widget_id, widget name, class of containing element ##
ql_widget( \'sidebar-general\', \'Standard Sidebar\', \'sider\' );
侧栏使用register\\u sidebar()正确注册,并为每个侧栏分配了唯一的ID。

当前,如果小部件丢失或为空,此函数会将错误返回给管理员-我希望能够调整错误以指示它是否丢失或为空

谢谢

UPDATE以下是工作功能:link to pastebin

3 个回复
最合适的回答,由SO网友:Mridul Aggarwal 整理而成

wp_get_sidebars_widgets(); 将返回所有侧栏的列表(&N);每个控件中的小部件。这可以让您检查没有小部件的侧栏

SO网友:Adam

您可以通过使用检查侧栏是否处于活动状态并正在使用中(包含包含内容的小部件)is_active_sidebar, 这里有一个例子。。。

if ( is_active_sidebar( $sidebar ) ) {
    // Display some text
} else {
    // Display none
};
在哪里$sidebar 是要检查的侧栏的名称、ID或编号。

更新:

这里有一个改进函数易读性的建议,

function ql_widget( $widget, $widget_name, $element = \'sider\' ){

    if ( $widget ) { 

        $message = (ql_user_is_administator() ? \'empty\' : \'error\');
        $widget_name = ($widget_name ? $widget_name : $widget);

        if ( is_active_sidebar( $widget ) ) { 

            $html  = \'<div class="\'.$element.\'">\';
            $html .= dynamic_sidebar( $widget );
            $html .= \'</div>\';
            echo $html;

        } else {

            $html  = \'<div class="error"><strong>Widget \';
            $html .= $message;
            $html .= \'</strong> \';
            $html .= $widget_name;
            $html .= \'</div>\';
            echo $html;

        }
    }
} // This is the end of the function
如果您只想在admin时显示错误消息,请将else 语句,或更改elseelseif 并运行管理员检查,并可以选择使用else 满足所有其他结果的条件,例如对于常规用户。法典参考:http://codex.wordpress.org/Function_Reference/is_active_sidebar

SO网友:Amir 2mi

根据公认的答案,我用这个函数解决了我的问题,希望它有帮助,谢谢Mridul Aggarwal。

function is_active_sidebar_with_content( $sidebar ) {

   $sidebars = wp_get_sidebars_widgets();

   if ( isset( $sidebars[ $sidebar ] ) && ! empty( $sidebars[ $sidebar] ) ) {
       return true;
   }


   return false;
}

结束

相关推荐

Widgets in PHP files?

有没有可能让Wordpress上的每个小部件都以不同的方式运行。php文件我有一个包含12个元素的页面,我想让每个元素都成为一个小部件,以便以后更容易管理/编辑它们,但如果它来自php页面,而不是来自管理面板上的代码块,则会更好。