是否曾在管理员屏幕上留下“剩余”通知?

时间:2020-04-09 作者:JasonGenX

管理仪表板上的每个页面都是这样的——带有我们无法摆脱的“死/空”通知剩余。没有添加新插件,也没有进行插件更新。我们的代码不涉及任何管理页面。

是否有任何数据库表可以“zap”或“drain”来消除这种恼人的影响。

The admin pages still function -- 我们只需向下滚动即可获得实际内容。这是一件令人烦恼的事,但我们想摆脱它。

enter image description here

3 个回复
最合适的回答,由SO网友:Daniel Simmons 整理而成

让我们看看admin_notices, 因为这就是你的输出。

https://core.trac.wordpress.org/browser/tags/5.4/src/wp-admin/admin-header.php#L281

所以,它只是一个作为输出点的操作,这意味着如果您愿意,您可以在这里输出任何东西,最重要的是,这一切都发生在内存中,因此,调试应该非常简单;这个地方是用来输出东西的。就是这样。

除非您在该操作周围使用包装器,例如https://github.com/WPTRT/admin-notices 这允许您编写代码清理器(但仍使用admin_notices 内部动作),您将执行以下操作add_action( \'admin_notices\', function() { echo \'My notification!\' } )

。。。任何其他允许您推出这些通知的包也会如此。

了解以下变量:在内存、动作中,我们可以尝试查看其中发生了什么。你可以自己写action inspection engine 或者,您可以使用其他人的:

https://wordpress.org/plugins/query-monitor/

现在,如果我们要进入仪表板>打开查询监视器面板(位于顶部的粘性WP栏中)>访问“挂钩和操作”>搜索admin_notices, 我们将得到如下屏幕提示:

All actions hooking to <code>admin_notices</code>

在这里,我们可以确切地看到与此操作相关的内容及其优先级,因此,让我们尝试复制您的问题。让我们创建一些空通知并输出它们:

add_action( \'admin_notices\', function() {
    $class = \'notice notice-error\';

    printf( \'<div class="%1$s"><p>%2$s</p></div>\', esc_attr( $class ), esc_html( \'\' ) );
    printf( \'<div class="%1$s"><p>%2$s</p></div>\', esc_attr( $class ), esc_html( \'\' ) );
    printf( \'<div class="%1$s"><p>%2$s</p></div>\', esc_attr( $class ), esc_html( \'\' ) );
    printf( \'<div class="%1$s"><p>%2$s</p></div>\', esc_attr( $class ), esc_html( \'\' ) );
    printf( \'<div class="%1$s"><p>%2$s</p></div>\', esc_attr( $class ), esc_html( \'\' ) );
}, 15 );
很好,现在让我们看看仪表板的外观:

Dashboard with error code in

噢。It\'s broken, just like yours is. 但是图像告诉我们什么呢?嗯,它说在主题里面,从一个结尾开始,在functions.php 在线87, 它正在尝试输出一些通知。

针对您的案例执行此操作,并尝试查看哪一个存在问题。

虽然有点超出范围,或者更确切地说,包括一个更大的范围,但有时我真的希望你能return value 一个钩子。您的案例是检查操作中的数据流如何不容易做到的主要示例,请不要误解我的意思,这仍然是可能的,但需要做大量的工作来处理所有事情,我中途放弃了。换句话说,如果说Hey, WordPress, on action \'admin_notices\', which one of the hooked functions returns an empty string or an error?. 真的为你节省了很多时间。

SO网友:uPrompt

无法发表评论,请继续。

如果您不喜欢编写或调试代码,我会尝试以下方法:

在WordPress网站上搜索名为“分别禁用管理员通知”的插件。每当弹出管理通知时,您可以禁用它。虽然这个插件并没有解决问题的根本原因,但它确实似乎把它藏在岩石下面,所以你看不到它。

我想指出的是,如果你更新了WordPress,但没有更新插件,那可能就是问题所在。

SO网友:wpnovice

这里是jQuery的一个变通方法。将此添加到您的函数中。活动主题文件夹中的php

function enqueue_my_scripts_hide_warnings() {
?>
<script>
jQuery(document).ready(function(){
    jQuery(\'.notice-info\').each(function(){
        if(!jQuery(this).text()){
            jQuery(this).hide();
        }
    })
    jQuery(\'.notice-warning\').each(function(){
        if(!jQuery(this).text()){
            jQuery(this).hide();
        }
    })
});
</script>
<?php

}  
add_action( \'admin_footer\', \'enqueue_my_scripts_hide_warnings\' );
如果该选择器不起作用,只需将第5-9行替换为以下内容即可。但是,选择器可能太宽,因此请小心使用。可能需要根据管理页面的工作方式调整选择器。

    jQuery(\'.notice\').each(function(){
        if(!jQuery(this).text()){
            jQuery(this).hide();
        }
    })