边栏参数和wp_list_bookmark的问题

时间:2011-04-07 作者:Horacio Nuñez

我遇到了一个问题,试图使用侧栏参数(before\\u widget、after widget、after\\u widget、before\\u widget)作为wp\\u list\\u bookmarks函数的主题风格友好参数,也就是说wp\\u list\\u bookmarks输出看起来就像wp\\u widget\\u链接中的一个。

我几乎一字不差地复制了links小部件的代码,但当尝试重用仅有的一个侧栏参数(通过全局$wp\\u registered\\u侧栏)时,我得到了一些用于小部件容器的css类,这些类不会使用wp\\u小部件\\u链接显示。

例如,边栏args的以下转储:

\'name\' => \'Sidebar 1\'
\'id\' => \'sidebar-1\'
\'before_widget\' => \'<li id="%1$s" class="widget %2$s">\'
\'after_widget\' => \'</li>\'  
\'before_title\' => \'<h2 class="widgettitle">\'
\'after_title\' => \'</h2>\'
通过阅读wp代码,我认为可以安全地更改%1$s、%2$s的%id、%class resp,然后一旦wp_列表_书签被执行,我应该以before_小部件结束<li id="linkcat-" class="widget linkcat">.但是在与links小部件的输出进行比较之后,小部件css类名丢失了,并且我的代码的输出在页面中看起来有点奇怪。

这是我使用该函数的代码,该函数被称为提要栏\\u小部件的过滤器:

function my_sidebars_widgets($sidebar_widgets) {
    global $wpdb, $wp_registered_sidebars;
    static $hits;
    if(++$hits == 2) {

        $sidebar = array_values($wp_registered_sidebars);

        $before_title = $sidebar[0][\'before_title\'];
        $after_title = $sidebar[0][\'after_title\'];
        $before_widget = $sidebar[0][\'before_widget\'];
        $after_widget = $sidebar[0][\'after_widget\'];

        $before_widget = str_replace(\'%2$s\',\'%class\',$before_widget);
        $before_widget = str_replace(\'%1$s\',\'%id\',$before_widget);

        wp_list_bookmarks(apply_filters(\'widget_links_args\',array(
            \'title_before\' => $before_title, \'title_after\' => $after_title,
            \'category_before\' => $before_widget, \'category_after\' => $after_widget,
            \'hide_invisible\' => true,\'title_li\' => \'Links\',
            \'categorize\' => 0,\'inquiry\' => true
        )));
    }
    return $sidebar_widgets;
}
你知道我在这里遗漏了什么吗?我一直试图弄清楚WP-feed小部件是如何工作的,但到目前为止,在阅读代码时没有解释。

提前感谢您的任何考虑。

1 个回复
最合适的回答,由SO网友:Horacio Nuñez 整理而成

几分钟后var_dumps 我知道这一点:

1) 当wp\\u list\\u bookmarks被称为whithin wp\\u Widget\\u Links->widgethe时\'class\' 参数被忽略,因为\'category_before\' 参数没有%class 通配符。相反\'category_before\' 看起来像是“班级”在哪里\'widget_links\'.

这就是函数dynamic\\u侧栏在小部件被调用后如何为小部件设置$before\\u小部件参数的方法。

当然,这可以通过以下过滤器进行更改\'widget_links_args\'\'dynamic_sidebar_params\'.

2) 在许多主题上,为了显示默认小部件,会调用wp\\u list\\u书签,但参数为零,然后使用书签模板中定义的默认值。php:

(\'class\' => \'linkcat\',\'category_before\' => \'<li id="%id" class="%class">\')
即使使用以下方法注册侧栏,也会发生这种情况:

(\'before_widget\' => \'<li id="%1$s" class="widget %2$s">\')
因为WP\\U Widget\\u链接\'category_before\' 参数最初是从侧栏借用的\'before_widget\' 参数

结束

相关推荐

Dividing widgets in sidebar?

我有一个自定义的边栏叫做页脚。我使用以下代码显示此侧栏:<?php if ( !function_exists(\'dynamic_sidebar\') || !dynamic_sidebar(\'Footer\') ) : ?> (maybe I should do something in this line?) :) <?php endif; ?> 这很顺利,但现在几乎每个主题都允许用户将其小部件放在列中,就像这样:http://ka