如何确定将自定义小部件加载到哪个已注册的侧栏区域

时间:2013-02-02 作者:N2Mystic

我有一个自定义小部件,我想对其应用条件逻辑,这取决于其父侧栏的注册ID。

例如,“我的主题”有6个已注册的边栏小部件区域。

我有一个自定义小部件,可以加载到这6个侧栏小部件区域中的任何一个。

是否有一种方法可以编写下面的小部件代码脚本,以确定小部件是否加载到一个或多个已注册的边栏小部件区域?

例如,我正在注册侧栏小部件区域,如下所示:

register_sidebar(array(
    \'name\' => \'Footer Area One\',
    \'id\' => \'home-footer-widget\',
    \'description\' => __( \'Appears just above the main footer area. Spans across the entire width of page\'),
    \'before_widget\' => \'<div class="footer-pre-home %2$s">\',
    \'after_widget\' => \'</div>\',
    \'before_title\' => \'<h4>\',
    \'after_title\' => \'</h4>\',
));

register_sidebar(array(
    \'name\' => \'Footer Area Two\',
    \'id\' => \'footer-two\',
    \'description\' => __( \'Appears just above the main footer area. Spans across the entire width of page\'),
    \'before_widget\' => \'<div class="footer-two %2$s">\',
    \'after_widget\' => \'</div>\',
    \'before_title\' => \'<h4>\',
    \'after_title\' => \'</h4>\',
));
我有一个自定义小部件,它有以下代码:

function widget( $args, $instance ) {
    extract($args);
    $title = apply_filters( \'widget_title\', empty($instance[\'title\']) ? \'\' : $instance[\'title\'], $instance );
    $text = apply_filters( \'widget_text\', $instance[\'text\'], $instance );
    $hide_title = isset( $instance[\'hide_title\'] ) ? $instance[\'hide_title\'] : false;
    $filter = isset( $instance[\'filter\'] ) ? $instance[\'filter\'] : false;
    echo $before_widget;
    if ( $title && !$hide_title )echo $before_title . $title . $after_title;
    if ( $text ) echo $filter ? wpautop($text) : $text;
    echo $after_widget;
}
我想将代码放入函数widget()中,该函数确定小部件是否位于上面两个命名的已注册侧栏小部件中的任何一个。如果它恰好位于这两个命名侧栏中的一个,那么在这种情况下,我将不回显before/after小部件代码。

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

您想要的信息位于$args 参数

var_dump($args); // inside your widget method
查看“name”和“id”数组元素。

您的代码应该如下所示:

function widget( $args, $instance ) {
    extract($args);
    $title = apply_filters( \'widget_title\', empty($instance[\'title\']) ? \'\' : $instance[\'title\'], $instance );
    $text = apply_filters( \'widget_text\', $instance[\'text\'], $instance );
    $hide_title = isset( $instance[\'hide_title\'] ) ? $instance[\'hide_title\'] : false;
    $filter = isset( $instance[\'filter\'] ) ? $instance[\'filter\'] : false;
    if (\'home-footer-widget\' != $args[\'id\'] && \'footer-two\' != $args[\'id\']) echo $before_widget;
    if ( $title && !$hide_title )echo $before_title . $title . $after_title;
    if ( $text ) echo $filter ? wpautop($text) : $text;
    if (\'home-footer-widget\' != $args[\'id\'] && \'footer-two\' != $args[\'id\']) echo $after_widget;
}

结束