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

手动定制WordPress网站实现双语功能的技术问询

解决WordPress后台发布文章同步更新post_title_en列的问题

首先得提醒你:绝对不要直接修改WordPress核心文件(比如wp-includes/post.php这类),因为WordPress每次版本更新都会覆盖你的修改,得不偿失。最佳实践是用WordPress自带的钩子(Hooks)功能,通过自定义代码实现需求,你可以把代码放在当前主题的functions.php文件里,或者做个简单的自定义插件,这样既安全又不会被更新影响。

下面给你具体的实现方案:

1. (可选)在后台编辑页添加英文标题输入框

如果希望用户能手动输入英文标题,先在文章编辑页面加一个专属输入字段,操作更直观:

// 在文章标题下方添加英文标题输入框
add_action('edit_form_after_title', 'add_post_title_en_input');
function add_post_title_en_input() {
    global $post;
    // 先从数据库列里读取已有的英文标题
    $current_en_title = $post->post_title_en ?? '';
    ?>
    <div style="margin: 15px 0; padding: 10px; background: #f0f0f1;">
        <label for="post_title_en" style="display: block; margin-bottom: 5px; font-weight: bold;">英文标题</label>
        <input type="text" name="post_title_en" id="post_title_en" value="<?php echo esc_attr($current_en_title); ?>" style="width: 100%; padding: 8px; box-sizing: border-box;" />
    </div>
    <?php
}

2. 用save_post钩子同步更新数据库列

当用户发布或更新文章时,触发钩子把内容同步到post_title_en列:

// 保存文章时同步更新post_title_en字段
add_action('save_post', 'sync_post_title_en_to_db', 10, 3);
function sync_post_title_en_to_db($post_id, $post, $update) {
    // 跳过自动保存、草稿版本和非公开文章
    if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id) || $post->post_status !== 'publish') {
        return;
    }
    // 检查用户权限,确保只有能编辑文章的用户才能触发
    if (!current_user_can('edit_post', $post_id)) {
        return;
    }
    // 获取提交的英文标题,如果没填就自动用原标题(你可以根据需求调整这里的逻辑)
    $en_title = isset($_POST['post_title_en']) ? sanitize_text_field($_POST['post_title_en']) : $post->post_title;
    // 更新wp_posts表的post_title_en列
    global $wpdb;
    $wpdb->update(
        $wpdb->posts,
        array('post_title_en' => $en_title),
        array('ID' => $post_id),
        array('%s'), // 字段格式:字符串
        array('%d')  // 条件格式:数字
    );
}

3. 关键注意点

  • 如果你不需要手动输入英文标题,只想自动把原标题同步到post_title_en,可以直接去掉第一步的代码,把第二步里的$en_title直接设为$post->post_title就行。
  • 代码里的sanitize_text_field和esc_attr是必须的,能防止SQL注入和XSS攻击,保障网站安全。
  • 如果你用的是子主题,优先把代码放在子主题的functions.php里,避免主题更新时丢失修改。

要是你实在忍不住想碰核心文件(真的不推荐),可以去看wp-includes/post.php里的wp_insert_post和wp_update_post函数,但再次强调:核心文件修改会在WordPress更新后完全失效,风险极高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:02:31