ALTER ADMIN通知删除包含特定字符串的消息

时间:2018-10-08 作者:Felix Eve

我启用了一个插件,该插件设置了一个管理员通知,指出cron没有运行。这不是真的-我只是使用了一个通过WP CLI触发的实际cron,而不是WP的可怜人,所以不需要此消息。

不幸的是,在呈现管理消息之前,似乎没有钩子来更改它们,但有没有办法过滤包含特定字符串的消息并阻止它们显示?

1 个回复
SO网友:Felix Eve

是的,这是可能的(但很痛苦)。

Wordpress在中运行此行时正在创建管理消息admin-header.php:

do_action( \'admin_notices\' );
在此之前调用的操作是:

do_action( \'in_admin_header\' );
因此,我们可以在Wordpress呈现消息之前,在那里挂接并运行一些代码进行一些更改以过滤掉消息。

首先创建一个新操作以绑定到\'in_admin_header\' 事件:

add_action(\'in_admin_header\', \'admin_mods_disable_some_admin_notices\');
当插件想要显示管理消息时,他们会添加admin_notices\'s回调。如果这些操作返回要显示的HTML而不是仅仅打印它,这将是明智的,但事实并非如此,因此我们需要循环所有回调并为每个回调设置输出缓冲区,以收集生成的HTML,然后检查其中是否包含禁止的字符串。这样,我们就可以取消绑定模块admin\\u通知回调。

例如:

function admin_mods_disable_some_admin_notices() {

    // This global object is used to store all plugins callbacks for different hooks
    global $wp_filter;

    // Here we define the strings that we don\'t want to appear in any messages
    $forbidden_message_strings = [
        \'The WP scheduler doesn\\\'t seem to be running correctly for Newsletter\'
    ];

    // Now we can loop over each of the admin_notice callbacks
    foreach($wp_filter[\'admin_notices\'] as $weight => $callbacks) {

        foreach($callbacks as $name => $details) {

            // Start an output buffer and call the callback
            ob_start();
            call_user_func($details[\'function\']);
            $message = ob_get_clean();

            // Check if this contains our forbidden string
            foreach($forbidden_message_strings as $forbidden_string) {
                if(strpos($message, $forbidden_string) !== FALSE) {

                     // Found it - under this callback
                     $wp_filter[\'admin_notices\']->remove_filter(\'admin_notices\', $details[\'function\'], $weight);
                }
            }

        }

    }
}
Wordpress实际上可以实现Druapl的渲染数组之类的东西,从而使这样的事情变得更容易。

LIMITATIONS:

正如TomJ Nowell指出的那样,插件可以在任何时候吐出HTML,而WP javascript会将它们移动到屏幕顶部。由于没有一个API端点来添加所有管理通知,因此几乎不可能可靠地更改所有管理消息。然而,使用这种方法,您至少可以针对任何使用admin_notices 行动

结束

相关推荐

重定向期间忽略自定义ADMIN_NOTICES消息

我在中设置了错误处理机制one of my plugins 向管理区域添加通知和错误,就像核心一样。它在大多数情况下都能正常工作,但在某些情况下(如保存自定义帖子类型)却不能正常工作。我猜重定向是在幕后发生的,消息是在重定向发生之前打印的,因此它们似乎永远不会出现。所以,我猜这就是发生的事情用户编辑自定义帖子类型并点击Publish(发布)调用My post\\u updated(我的帖子更新)回调,该回调验证并保存自定义字段。回调添加错误消息。Wordpress重定向到某个页面以进行某些处理。调用My