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

如何实现WordPress从draft转publish时标题同义词替换的代码片段?

嘿,这需求我熟!用draft_to_publish钩子完全能搞定,我给你拆解清楚怎么实现,包括标题替换、slug更新,还帮你避开坑点:

核心思路&完整代码

首先,draft_to_publish钩子会自动传入当前的$post对象,你直接从这个对象里拿标题就行(本来就是字符串,不用额外转换)。然后定义替换规则,替换后更新文章的标题和slug就OK了,注意要避免无限循环哦:

function replace_title_on_publish($post) {
    // 可选:只处理文章类型,排除页面、自定义文章类型等
    if ($post->post_type !== 'post') {
        return;
    }

    // 自定义你的替换规则:键=要替换的词,值=同义词
    $replacements = array(
        '示例关键词' => '替换后的同义词',
        '草稿' => '正式发布',
        // 可以继续添加更多替换对
    );

    // 获取原标题(本身就是字符串,直接用)
    $original_title = $post->post_title;
    // 执行批量替换
    $new_title = str_replace(array_keys($replacements), array_values($replacements), $original_title);

    // 如果标题没变化,直接返回,避免不必要的数据库操作
    if ($new_title === $original_title) {
        return;
    }

    // 准备更新的数据:新标题+自动生成对应slug
    $update_args = array(
        'ID' => $post->ID,
        'post_title' => $new_title,
        // 用sanitize_title生成符合WordPress规范的slug
        'post_name' => sanitize_title($new_title)
    );

    // 关键:移除当前钩子,防止wp_update_post触发无限循环
    remove_action('draft_to_publish', 'replace_title_on_publish');

    // 更新文章
    wp_update_post($update_args);

    // 重新添加钩子,确保后续其他文章发布时正常生效
    add_action('draft_to_publish', 'replace_title_on_publish');
}
add_action('draft_to_publish', 'replace_title_on_publish');

关键细节解释

  1. 标题的获取与替换
    $post->post_title本身就是字符串类型,直接拿来用就行。用str_replace批量替换很方便,如果需要大小写不敏感或者正则匹配,换成preg_replace就行,比如:

    // 大小写不敏感替换"示例关键词"
    $new_title = preg_replace('/示例关键词/i', '替换后的同义词', $original_title);
    
  2. Slug的处理
    用sanitize_title($new_title)可以自动把新标题转换成符合WordPress要求的slug(比如空格转横杠、去掉特殊字符)。如果你想保留原slug,删掉'post_name' => sanitize_title($new_title)这一行就行。

  3. 避免无限循环
    因为wp_update_post会触发一些文章更新的钩子,可能会再次触发draft_to_publish,所以在更新前先移除钩子,更新完再加回来,完美避免循环问题。

测试建议

你可以新建一篇草稿,标题里包含你设置的替换词,然后点击发布,看看标题和slug是不是都按预期更新了~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:22:36