繁体   English   中英

Wordpress;如何从插件中删除_action以隐藏另一个插件创建的admin_notices

[英]Wordpress;how to remove_action from a Plugin to hide admin_notices created by another Plugin

我是 WP 钩子的初学者,(操作和过滤器)我能够创建一个插件,在 WP 仪表板中显示所有 4 个管理员通知

这里是插件一代码

    /* Start admin notices on */
  
function display_admin_notice() {
    ?>
    <div class ="notice notice-success is-dismissible"><p>Congratulatios! it seems you have a nice success notice</p></div>
    <div class = "notice notice-error"><p>What a nice error message</p> </div>
    <div class = "notice notice-warning"><p>WARNING!!! site about to blow up in pieces</p></div>
    <div class = "notice notice-info is-dismissible"><p>INFO - you must renew license</p></div>

    <?php
  }
  add_action( 'admin_notices', 'display_admin_notice' );
  
/* Stop admin notices on */

它完美地工作。

现在我有另一个隐藏所有通知的插件

/* Start Block ALL admin notices */

add_action('admin_enqueue_scripts', 'block_dismissable_admin_notices');
add_action('login_enqueue_scripts', 'block_dismissable_admin_notices');

function block_dismissable_admin_notices() {
   echo '<style>.wp-core-ui .notice{ display: none !important; }</style>';
}

/* Stop Block ALL admin notices */

它也很好用

但我需要从第一个插件中删除操作,而不是隐藏所有通知,我的意思是,有没有办法获得

add_action( 'admin_notices', 'display_admin_notice'

从第一个插件和remove_action,所以插件只隐藏/阻止该插件的admin_notices,而不是所有Wordpress核心或其他插件?

提前致谢

您可以添加一个 if 语句来有条件地检查是否需要操作挂钩,而不是加载代码然后卸载它(毫无意义)。

例如。

$noticesOn = true; // Conditional setting could be here

if ( $noticesOn == true ) {
    add_action('admin_enqueue_scripts', 'block_dismissable_admin_notices');
    add_action('login_enqueue_scripts', 'block_dismissable_admin_notices');
}

好的,我终于明白了

这是解决方案

add_action( 'init', 'remove_my_action' );
function remove_my_action()
{
global $wp_filter;
remove_action( 'admin_notices', 'display_admin_notice');
}

它完美无缺

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM