在这种情况下应该使用窗口小部件吗?

时间:2012-03-08 作者:porton

我们开发了一个新的WordPress网站,专门为这个网站开发了一个新主题。

一些相同类型的小部件(例如两个“书签”小部件)的样式应该不同(即具有不同的CSS)。

我的问题:在这种情况下,我应该使用两个书签小部件还是将其硬编码到主题中?

我可以为这些具有ID的小部件专门编写CSS,但这似乎不雅观,尤其是因为如果有人删除了我的小部件,然后添加自己的类似小部件,它将被破坏。

Widgetize还是硬代码?

2 个回复
SO网友:kaiser

动态侧栏的一般概念基本上是WP循环通过全局$wp_registered_widgets 并根据其参数构建小部件。您可以轻松拦截它们:

使用过滤器dynamic_sidebar_params 要将类添加到目标特定的小部件,请执行以下操作:

// SHOW the params for better insights
function wpse44903_dump_sidebar_params( $params )
{
    echo \'<pre>\';
    print_r( $params );
    echo \'</pre>\';

    return $params;
}
add_filter( \'dynamic_sidebar_params\', \'wpse44903_dump_sidebar_params\' );
然后,您可以简单地更改您需要的任何内容(取决于您的情况):

// ALTER the params to your needs
function wpse44903_alter_sidebar_params( $params )
{
    // remove trailing and leading white space and use only lower case characters to be on the save side of things
    if ( \'YOUR WIDGET NAME\' === trim( strtolower( $params[0][\'widget_name\'] ) ) )
    {
        // do whatever you need to do.
        // @example:
        foreach ( $wp_registered_widgets as $widget )
            if ( in_array( $params[0][\'widget_name\'], $widget ) )
                print_r( $widget );
    }

    return $params;
}
add_filter( \'dynamic_sidebar_params\', \'wpse44903_alter_sidebar_params\' );
注意:这没有经过测试,可能需要一些bug修复。一定要转身WP_DEBUGTRUE 在wp配置中。php文件。

SO网友:Geert

在我看来,选择widget路线显然是一条干净的道路。请注意,您还可以manually display a widget in the sidebar via the the_widget() function. 这样用户就无法删除小部件。

另一种方法可能是在小部件中构建样式选择下拉列表,以便用户能够选择适用的样式。然后,您可以在小部件中向小部件包装器添加CSS类。优于基于可以更改的ID的样式,如mywidget-5.

结束