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

如何在WordPress区块编辑器中展示transition_post_status钩子操作通知

解决WordPress编辑器状态转换后的提示问题

解决这个问题的核心思路很简单:在transition_post_status钩子完成邮件操作后,把提示消息临时存起来,等页面跳回编辑器时,用WordPress自带的后台通知功能把消息显示出来,显示完就删掉,避免重复提示。下面给两种可行的实现方案:


方案一:用临时会话存消息(推荐)

这个方案依赖PHP会话存储临时消息,消息只会显示一次,刷新页面就消失,符合需求。

1. 先开启后台会话

WordPress后台默认没启用会话,所以先加这段代码确保会话可用:

add_action('init', function() {
    if (is_admin() && !session_id()) {
        session_start();
    }
});

2. 状态转换时存消息

修改你原来的钩子函数,完成邮件逻辑后把提示消息存入会话:

add_action('transition_post_status', function($new_status, $old_status, $post) {
    // 只处理「已发布转草稿」的场景
    if ($old_status === 'publish' && $new_status === 'draft') {
        // 这里写你的邮件发送逻辑
        // 比如 wp_mail('admin@xxx.com', '文章状态变更', '用户把《'.$post->post_title.'》改成草稿了');
        
        // 把提示消息存到会话里
        $_SESSION['post_notice'] = '已通知管理员';
    }
}, 10, 3);

3. 显示并清除消息

用WordPress的admin_notices钩子读取会话里的消息,渲染成系统风格的通知,显示完就删掉会话内容:

add_action('admin_notices', function() {
    if (isset($_SESSION['post_notice'])) {
        $msg = $_SESSION['post_notice'];
        // 删掉消息,防止刷新页面重复显示
        unset($_SESSION['post_notice']);
        
        // 输出成功通知(WordPress原生样式,带关闭按钮)
        echo '<div class="notice notice-success is-dismissible">
                <p>'.$msg.'</p>
              </div>';
    }
});

方案二:用URL查询参数传递消息

如果不想用会话,也可以在保存后跳转的URL里加个参数,然后检测参数显示消息:

1. 状态转换时加URL参数

add_action('transition_post_status', function($new_status, $old_status, $post) {
    if ($old_status === 'publish' && $new_status === 'draft') {
        // 执行邮件发送逻辑
        
        // 给跳转URL加个自定义参数
        add_filter('redirect_post_location', function($location) {
            return add_query_arg('notify_done', '1', $location);
        });
    }
}, 10, 3);

2. 检测参数显示通知

add_action('admin_notices', function() {
    if (isset($_GET['notify_done']) && $_GET['notify_done'] === '1') {
        echo '<div class="notice notice-success is-dismissible">
                <p>已通知管理员</p>
              </div>';
        // 可选:把URL里的参数去掉,避免刷新页面重复显示
        if (wp_get_referer()) {
            wp_redirect(remove_query_arg('notify_done'));
            exit;
        }
    }
});

为什么这俩方案比你之前的思路靠谱

  • 不用折腾文章元字段:完全避开了前端编辑器读取元字段、渲染组件的复杂操作,直接用WordPress原生的后台通知机制搞定显示。
  • 不用修改文章响应:不需要拦截或修改保存文章的API响应,完全贴合WordPress后台的工作流程,兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 18:22:40