在WordPress 6.0中,如何从用户个人资料页面中删除颜色方案选项?

4
我一直使用这段代码在必须使用的插件中,以删除整个配色方案部分:
remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );

很遗憾,使用WordPress 6.0时,这个方法不再起作用了。我发现Core的add_action('admin_color_...已经从default-filters.php文件移动到admin-filters.php文件中了,但我不确定为什么以及我需要如何更新上面的片段才能使其再次起作用。

也许最好在 https://wordpress.stackexchange.com/ 上进行更深入的研究。 - user437212
3个回答

8
为了有效执行 remove_action() 函数,需要在添加要移除的动作之后,且该动作运行之前调用该函数。
WordPress 在 admin-filters.php 中添加了 admin_color_scheme_picker 动作,然后在 user-edit.php 管理页面模板中运行该动作。
为了在用户个人资料页面上调用 admin_color_scheme_picker 动作之前移除它,可以使用 admin_head-profile.php 钩子运行 remove_action() 函数。
add_action( 'admin_head-profile.php', 'wpse_72463738_remove_admin_color_scheme_picker' );

/**
 * Remove the color picker from the user profile admin page.
 */
wpse_72463738_remove_admin_color_scheme_picker() {
    remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );
}

注意,admin_head-{$hook_suffix}钩子将在特定管理员页面的部分触发。在上面的示例中,将钩子名称中的$hook_suffix替换为profile.php,使其在用户管理配置文件页面上运行。

非常感谢,这帮了我很多。所以,就像我在对@josh-bonnick的评论中所说的那样:可能它触发得太早(在add_action之前),但我有点迷失在找出何时/何地挂钩它的问题上... 所以,我仍然很难找出为什么最近移到admin-filters.phpadd_action放在我的remove_action之后。我在核心代码中可以看到哪里? - jovilog
在WordPress源代码中进行快速搜索,可以发现default-filters.php文件在wp-settings.php文件的第134行被加载,必须使用插件也在同一文件的第351行被加载。如果不再深入挖掘,我只能假设admin-filters.php比您的必须使用插件稍后被加载。当尝试确定加载顺序时,深入研究WordPress源代码是最好的选择。 - Barry Ceelen
我在user-edit.php的顶部添加了钩子:add_action( 'admin_head-user-edit.php', 'wpse_72463738_remove_admin_color_scheme_picker' ); - wittich

3
您可以使用if语句的另一部分在user-edit.php中禁用更改颜色方案的功能。
来自user-edit.php
<?php if ( count( $_wp_admin_css_colors ) > 1 && has_action('admin_color_scheme_picker' ) ) : ?>

虽然不能直接解决使用remove action函数的问题,但是您可以将$_wp_admin_css_colors全局变量设置为空数组...

add_action( 'admin_init', function () {
    global $_wp_admin_css_colors;
    $_wp_admin_css_colors = [];
} );

没错,但我想了解为什么“remove_action”不再起作用。一般来说,这似乎是推荐的方式。可能它触发得太早了(在“add_action”之前),但我有点迷失于找到何时、何地、以及在哪里挂钩。 - jovilog
@jovilog 我尝试将其与各种优先级值连接到 admin_initinit 中,但它似乎根本行不通 - 非常奇怪。 - Josh Bonnick
我也尝试了所有的方法,但是在代码中追踪这些东西并不是我的强项。 - jovilog

2
除了Barry Ceelen的回答外,如果你想要从profile.php和user-edit.php屏幕中删除admin_color_scheme_picker,你可以这样做:
add_filter('admin_head',function($class){

        $screen = get_current_screen();
        
        if( in_array($screen->id,array(
        
            'profile',
            'user-edit',
        
        ))){

            // remove color picker
            
            remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker');
        }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接