在管理区域编辑WordPress小工具的标题栏吗?

时间:2016-08-08 作者:Solomon Closson

我正在为我创建的所有自定义小部件中的移动小部件和桌面小部件提供一种方法,因此我认为最好在后端小部件区域的标题中指示小部件是否为移动/桌面小部件,以帮助使此部分更加用户友好。

是否有一个过滤器可用于加载小部件标题栏(小部件标题左侧)中的图像,以包括移动/桌面图标,以便能够识别哪些活动小部件是桌面的,哪些活动小部件是移动的,而无需打开小部件以查看其选项?

wordpress中是否有一个钩子,只在后端管理中捕获这个widgets.php 页希望在页面加载时使用php挂钩。已经在使用jQuery来表示选项何时从移动设备更改为桌面,反之亦然。正是小部件页面的初始加载让我需要这样做。

可能的

下面的示例,如果可能,可以在初始小部件上执行。php页面从内部轻松加载和扩展WP\\U Widgets类文件?或筛选器、操作等。。。

enter image description here

因此,我尝试在扩展WP\\u Widget的Widget类中执行以下操作:

function __construct() {

        parent::__construct(
            \'social_media_widget\',
            __(\'Social Media Widget\', \'mydomain\')
        );

        add_filter(\'dynamic_sidebar_params\', array($this, \'my_sidebar_params\'), 10, 1);

    }

    function my_sidebar_params($params) {

        $sidebar_id = $params[0][\'id\'];

        if (is_admin() && $params[0][\'widget_name\'] == \'Social Media Widget\')
        {
            $_widget = get_option(\'widget_social_media_widget\');

            if (!empty($_widget) && isset($_widget[$params[1][\'number\']]))
            {
                // $platform is being set in here as "desktop" because if I do a var_dump, it gives me "desktop", however, the image is not showing in the titlebar using before_title below... why?
                $platform = isset($_widget[$params[1][\'number\']][\'platform\']) ? $_widget[$params[1][\'number\']][\'platform\'] : \'\';
            }

            if (!empty($platform))
            {
                $params[0][\'before_title\'] = \'<img src="\' . get_stylesheet_directory_uri() . \'/img/\' . $platform . \'-icon.png" alt="\' . $platform . \' menu" class="menu-icon \' . $platform . \'-icon" />\';
            }
        }
    return $params;
}
因此,$platform现在是正确的值,但图像没有附加到管理小部件区域标题栏中的标题之前,所以我不确定为什么它没有显示。。。有什么想法吗?

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

我相信你在寻找$params = apply_filters( \'dynamic_sidebar_params\', $params ); (看这里:https://github.com/WordPress/WordPress/blob/master/wp-includes/widgets.php#L706).

现在,该过滤器将在前端和后端进行计算。为了回答您的问题,您可以将过滤器包装在if( is_admin() ){ // Do icons } 检查

更好的是,您可以在注册级别使用register_sidebar( $args ) 作用退房Line 236 用于定义函数和Line 250 对于实际参数,您需要自定义conditionaly。像这样的

$before_title = is_admin() ? \'<span class="custom-icon"></span><h2 class="widgettitle">\' : \'<h2 class="widgettitle">\';

$args = array(
  // ... your custom args definition
  \'before_title\' => $before_title,
);

register_sidebar( $args );

UPDATE

在深入研究代码之后,我的答案不符合您的需要,因为有几件事。

正在对小部件标题进行HTML转义,因此无法呈现任何标记存在筛选器widget_title 重写HTML转义行为,但它不适用于admin area, 因此,我们无法针对您的用例修改此行为,因为它在Line 229