WordPress 3.8获取当前管理员配色方案

时间:2014-01-23 作者:Julian F. Weinert

我正在尝试使用当前活动的管理员配色方案的样式表来设置插件的样式,以适应颜色上下文。

如中所述this post 我看了一下admin_color_scheme_picker() 在里面wp-admin/includes/misc.php:564. 它们使用一个名为$_wp_admin_css_colors 但当我尝试访问(var_dump()) 它,它是NULL.

有没有办法访问实际的CSS代码?

为什么全局变量NULL? 我做了一个grep -n \'$_wp_admin_css_colors\' -r . 找不到任何线路被破坏。。。

EDIT

我看不清楚我到底想要什么。我不想访问实际的CSS代码,而是要访问解析为CSS的颜色代码。在里面wp-includes/general-template.php:2117 默认主题的注册方式如下:

wp_admin_css_color( \'fresh\', _x( \'Default\', \'admin color scheme\' ),
    admin_url( "css/colors$suffix.css" ),
    array( \'#222\', \'#333\', \'#0074a2\', \'#2ea2cc\' ),
    array( \'base\' => \'#999\', \'focus\' => \'#2ea2cc\', \'current\' => \'#fff\' )
);
我想在PHP中访问这样的变量。复制定义不是一种选择,因为其他插件和主题可以自己添加主题。

3 个回复
SO网友:Julian F. Weinert

我真的做到了!

在脚本文件中,在to处定义一个新变量并复制$_wp_admin_css_colors 使用admin_head 钩子,因为变量在稍后的某个点被销毁:

<?php
    global $admin_colors; // only needed if colors must be available in classes
    add_action(\'admin_head\', function() {
        global $_wp_admin_css_colors;
        global $admin_colors; // only needed if colors must be available in classes
        $admin_colors = $_wp_admin_css_colors;
    });

    // more script content...
?>

SO网友:loxlie

这两个答案都很有帮助。朱利安的回答抓住了所有的配色方案。tfrommen的答案找到当前启用的答案。如果我们将这两者结合起来,我们可以更进一步并实际使用它。

下面是一个获取当前颜色方案并动态插入样式表的示例,其中CSS变量对应于每种颜色:

class MyTheme
    {
    static $ADMINCOLS = [];
    static function ImprintCols()
        {
        add_action(\'admin_head\', function()
            {
            global $_wp_admin_css_colors; 
            if(!$_wp_admin_css_colors) return;
            $color = get_user_meta(get_current_user_id(), \'admin_color\', true);
            if(key_exists($color,$_wp_admin_css_colors)) 
                self::$ADMINCOLS = $_wp_admin_css_colors[$color];
            });
        add_action(\'admin_footer\', function()
            {   
            if(!self::$ADMINCOLS) return;
            $vars = [\'\'];
            foreach(self::$ADMINCOLS->colors as $key=>$col)
                $vars[] = "\\t--wp-admin-color-$key: $col;";
            if(isset(self::$ADMINCOLS->icon_colors)) 
                foreach(self::$ADMINCOLS->icon_colors as $key=>$col)
                    $vars[] = "\\t--wp-admin-color-icon-$key: $col;";
            $vars[] = \'\';
            $styles = ":root {".join(PHP_EOL,$vars)."\\t}";
            echo \'<style id="wp-admin-cols">\'.PHP_EOL.$styles.PHP_EOL.\'</style>\'.PHP_EOL;
            });
        }
MyTheme::ImprintCols();
这将创建一个样式表声明,如下所示(这里我使用的是Deletable Extoplasm配色方案):

<style id="wp-admin-cols">
:root {
    --wp-admin-color-0: #413256;
    --wp-admin-color-1: #523f6d;
    --wp-admin-color-2: #a3b745;
    --wp-admin-color-3: #d46f15;
    --wp-admin-color-icon-base: #ece6f6;
    --wp-admin-color-icon-focus: #fff;
    --wp-admin-color-icon-current: #fff;
    }
</style>
然后,任何基于管理的样式表都可以使用这些CSS变量,如下所示:

h1 { border-bottom: 2px solid var(--wp-admin-color-0); }

SO网友:tfrommen

配色方案存储为用户元:

$color = get_user_meta(get_current_user_id(), \'admin_color\', true);
然而,CSS文件似乎是在选择了其他方案后生成的。

所以你只需要这个:

$admin_css_file = wp_admin_css_uri(\'css/colors\');

结束

相关推荐

MENU_ORDER不能处理以admin.php开头的插件

我正在过滤menu\\u order挂钩(codex链接->http://codex.wordpress.org/Plugin_API/Filter_Reference/menu_order) 更改“管理”菜单中“我的链接”的顺序。目前,以admin开头的slug无法进行排序。因此,带有slug“admin.php?page=custom\\u settings\\u page”的设置页面将位于列表的底部。有人知道这方面的解决方法吗?//change admin menu order add