You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress插件类内Hook问题:激活时管理员通知不显示

WordPress插件激活通知不显示的问题修复

你的代码问题在于:register_activation_hook的执行时机早于admin_notices钩子的触发阶段,而且插件激活后WordPress会自动跳转页面,导致你在激活函数里添加的admin_notices钩子根本不会被执行。

正确的做法是通过数据库存储激活标记,在后台加载时检查这个标记并显示通知,之后清除标记。以下是修正后的代码:

主插件文件

/**
 * Plugin Name: TFT
 * Version: 1.0.0
 */
 
defined('ABSPATH') or die("You can't access this file directly.");

define('TFT_PATH', plugin_dir_path(__FILE__));
define('TFT_FILE', __FILE__);

require __DIR__ . '/tft_init.php';

$tft = new TFT();

tft_init.php 文件

class TFT
{
    public function __construct()
    {
        register_activation_hook(TFT_FILE, array($this, 'activate'));
        // 注册后台通知钩子
        add_action('admin_notices', array($this, 'activate_notice'));
    }

    public function activate()
    {
        // 存储激活标记到数据库
        add_option('tft_activation_notice', '1');
        // 激活时可选刷新重写规则(如果插件用到自定义路由等功能)
        flush_rewrite_rules();
    }

    public function activate_notice()
    {
        // 检查是否存在激活标记
        if (!get_option('tft_activation_notice')) {
            return;
        }

        // 显示激活通知
        echo '<div class="notice notice-success is-dismissible">
            <p>Thanks for installing TFT.</p>
        </div>';

        // 删除标记,避免每次后台加载都显示通知
        delete_option('tft_activation_notice');
    }
}

关键改动说明

  • 将admin_notices钩子的注册移到类的构造函数中,确保每次后台页面加载时都能触发该钩子
  • 在激活函数中用add_option添加临时标记,记录插件刚完成激活的状态
  • 在通知函数中先检查标记是否存在,存在则显示通知,之后立即删除标记,保证通知仅在激活后的第一次后台加载时显示

内容的提问来源于stack exchange,提问作者Perfection

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 06:15:06