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

WordPress save_post_news钩子仅在新增文章时触发问题排查

解决仅新增news类型文章时执行操作的问题

问题分析

你的代码中存在几个关键问题导致if($update) return;未生效:

  • 变量大小写错误:函数参数是$post_ID,但后续判断中误用了小写的$post_id,PHP对变量名大小写敏感,导致这些条件判断失效。
  • 冗余的get_post调用:已经通过参数拿到了$post对象,无需再次调用get_post获取状态。
  • 未处理自动保存场景:自动保存操作也会触发save_post_news钩子,需要排除这类情况。

修正后的代码

add_action( 'save_post_news', 'my_project_updated_send_email', 10, 3 );
function my_project_updated_send_email( $post_ID, $post, $update ) {
    global $wpdb;

    // 跳过自动保存和修订版本
    if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE || wp_is_post_revision( $post_ID ) ){
        return;
    }

    // 仅在发布状态且为新增文章时执行后续操作
    if ( $post->post_status !== 'publish' || $update ){
        return;
    }

    // 这里写入你的自定义操作逻辑
    // do smth...
}

关键修正点说明

  • 统一变量大小写:全程使用$post_ID(与参数一致),避免因大小写问题导致的判断失效。
  • 合并条件判断:将“非发布状态”和“更新操作”的判断合并,只要满足其中一个就返回,确保仅在新增且发布的news文章时执行逻辑。
  • 排除自动保存:添加DOING_AUTOSAVE判断,避免自动保存触发不必要的操作。
  • 直接使用$post对象:利用传入的$post对象获取状态,提升代码效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:25:26