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

如何用wp_insert_post插入含&标题的WordPress文章?避免转义

解决WordPress wp_insert_post标题&符号重复转义问题

方案1:还原转义后再传入

WordPress的wp_insert_post会自动对标题做转义处理,如果你的标题已经是转义后的内容(比如包含&),直接传入会触发二次转义。可以先把转义后的标题还原成原始文本,再传入函数:

// 示例:已转义的标题
$escaped_title = "Tips & Tricks";
// 解码转义字符,还原为原始文本
$raw_title = htmlspecialchars_decode($escaped_title);

// 组装文章数据
$post_args = array(
    'post_title'   => $raw_title,
    'post_content' => '文章内容',
    'post_status'  => 'publish',
    'post_type'    => 'post'
);

wp_insert_post($post_args);

如果你的标题本身就是未转义的原始文本(比如直接是Tips & Tricks),不要手动提前转义,让wp_insert_post自动处理即可,存储后会是正确的&,前端输出时会正常显示为&。

方案2:用钩子在插入前修正

通过wp_insert_post_data钩子,在数据写入数据库前直接修改标题,避免二次转义:

add_filter('wp_insert_post_data', 'correct_title_ampersand', 10, 2);
function correct_title_ampersand($data, $postarr) {
    // 把重复转义的&替换为正确的&
    if (strpos($data['post_title'], '&') !== false) {
        $data['post_title'] = str_replace('&', '&', $data['post_title']);
    }
    // 或者通过解码+重新转义,确保只转义一次
    $data['post_title'] = htmlspecialchars(htmlspecialchars_decode($data['post_title']));
    return $data;
}

这个钩子会在wp_insert_post处理完数据但还没写入数据库时触发,直接修正标题内容,无需后续手动调用$wpdb->update。

问题根源

当传入的标题已经包含HTML转义后的&,wp_insert_post内部的转义逻辑会再次把&转成&,导致原本的&变成&。核心解决思路是确保传入的标题是原始未转义状态,或者在插入前把重复转义的内容修正。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:15:30