🌍 WordPress 多语言网站 利用深度 L ai 和 Polylang 讲座构建自动翻译系统

大家好!😊今天我们将学习如何在WordPress网站上构建一套系统,实现对现有文章和新文章的自动翻译,同时完成SEO优化

本课程将结合DeepL API、Polylang插件和Yoast SEO,打造一次设置即可自动翻译的完整环境。🚀

注:DeepL API每月提供50万字符的免费翻译额度。

📌 课程目标

1️⃣
所有已发布的韩语文章自动翻译为英语和日语2️⃣ 新增文章实现实时自动翻译3️⃣
翻译后保持HTML结构完整性,避免
内容错乱4️⃣ 应用SEO(搜索引擎优化)设置,最大化搜索
曝光率5️⃣ 防止重复翻译,已译内容不再翻译

💡 1. 项目准备

首先需完成项目准备工作,确保以下步骤就绪:

📌 必备安装项

WordPress网站
Polylang插件(多语言支持)
Yoast SEO插件(搜索优化)
DeepL API密钥申请(翻译API使用)

📌 DeepL API密钥申请

使用DeepL翻译API需获取API密钥:
1️⃣ 访问DeepL API
官网 2️⃣ 注册账户后生成API密钥
3️⃣ 复制API密钥YOUR_DEEPL_API_KEY 输入至相应位置)

💡 2. 代码编写:构建自动翻译系统

现在 functions.php添加代码构建翻译系统。

📌 2-1. 现有文章自动翻译代码

首先,我们将创建自动翻译所有已发布文章的代码

// 이미 번역된 글인지 확인하는 함수 (중복 번역 방지)
function is_already_translated($post_id, $lang) {
    $translations = pll_get_post_translations($post_id);
    return isset($translations[$lang]); // 해당 언어의 번역 존재 여부 확인
}

// 기존 모든 게시물을 번역하는 함수 (한 번만 실행)
function auto_translate_existing_posts() {
    $languages = [
        'en' => ['prefix' => 'en', 'sep' => '-', 'sitename' => get_bloginfo('name')],
        'ja' => ['prefix' => 'ja', 'sep' => '-', 'sitename' => get_bloginfo('name')],
    ];

    $args = [
        'post_type' => 'post',
        'post_status' => 'publish',
        'posts_per_page' => -1,
    ];
    $posts = get_posts($args);

    foreach ($posts as $post) {
        if (pll_get_post_language($post->ID) !== 'ko') continue;

        foreach ($languages as $lang => $settings) {
            if (is_already_translated($post->ID, $lang)) {
                continue; // 이미 번역된 경우 건너뜀
            }

            $translated_title = deepl_translate_with_html($post->post_title, $lang);
            $translated_content = deepl_translate_with_html($post->post_content, $lang);
            $translated_slug = $settings['prefix'] . '-' . sanitize_title($translated_title);
            $seo_title = $translated_title . ' ' . $settings['sep'] . ' ' . $settings['sitename'];

            $translated_post_id = wp_insert_post([
                'post_title'    => $translated_title,
                'post_content'  => $translated_content,
                'post_status'   => 'publish',
                'post_type'     => $post->post_type,
                'post_author'   => $post->post_author,
                'post_name'     => $translated_slug,
                'post_category' => wp_get_post_categories($post->ID),
                'meta_input'    => [
                    '_yoast_wpseo_title' => $seo_title,
                ],
            ]);

            pll_set_post_language($translated_post_id, $lang);
            pll_save_post_translations([
                'ko' => $post->ID,
                $lang => $translated_post_id,
            ]);
        }
    }
}

// 기존 게시물 번역 실행 (한 번만 실행)
add_action('admin_init', function () {
    if (isset($_GET['run_translation']) && $_GET['run_translation'] === '1') {
        auto_translate_existing_posts();
        wp_die('Translation for all existing posts completed.');
    }
});

🚀 现在在浏览器中执行下方URL,所有现有文章都会被翻译!

(your-site.com(需将 替换为您的网站域名

https://your-site.com/wp-admin/?run_translation=1

📌 2-2. 新文章自动翻译代码

✅ 设置新文章发布时自动翻译功能

function auto_translate_and_seo_publish($post_id) {
    $original_post = get_post($post_id);
    if ($original_post->post_status !== 'publish') return;

    $languages = [
        'en' => ['prefix' => 'en', 'sep' => '-', 'sitename' => get_bloginfo('name')],
        'ja' => ['prefix' => 'ja', 'sep' => '-', 'sitename' => get_bloginfo('name')],
    ];

    if (pll_get_post_language($post_id) !== 'ko') return;

    foreach ($languages as $lang => $settings) {
        if (is_already_translated($post_id, $lang)) {
            continue; // 이미 번역된 경우 건너뜀
        }

        $translated_title = deepl_translate_with_html($original_post->post_title, $lang);
        $translated_content = deepl_translate_with_html($original_post->post_content, $lang);
        $translated_slug = $settings['prefix'] . '-' . sanitize_title($translated_title);
        $seo_title = $translated_title . ' ' . $settings['sep'] . ' ' . $settings['sitename'];

        $translated_post_id = wp_insert_post([
            'post_title'    => $translated_title,
            'post_content'  => $translated_content,
            'post_status'   => 'publish',
            'post_type'     => $original_post->post_type,
            'post_author'   => $original_post->post_author,
            'post_name'     => $translated_slug,
            'meta_input'    => [
                '_yoast_wpseo_title' => $seo_title,
            ],
        ]);

        pll_set_post_language($translated_post_id, $lang);
        pll_save_post_translations([
            'ko' => $post_id,
            $lang => $translated_post_id,
        ]);
    }
}

// 새로운 글이 게시될 때 자동 번역 실행
add_action('publish_post', 'auto_translate_and_seo_publish');

🚀 最终整理

如何翻译所有旧文章?

  • 仅需执行一次: https://your-site.com/wp-admin/?run_translation=1

如何翻译新文章?

  • 撰写新文章后自动翻译。(无需额外操作)

若需重新生成已翻译文章?

  • 删除原有翻译文章后重新执行。

💡 如今您可在WordPress中实现完全自动化的多语言内容运营!🚀 若有任何疑问,随时欢迎咨询!😊

📌 执行后需额外确认的事项

  1. 确认翻译文章是否生成
    • WordPress管理后台 → "所有文章"中检查是否生成英语(en)、日语(ja)的翻译文章是否存在。
  2. URL验证
    • 韩语文章: https://example.co.kr/올림픽-일정/
    • 英文文章: https://example.co.kr/en/olympic-schedule/
    • 日语文章: https://example.co.kr/ja/オリンピック日程/
  3. 确认翻译内容在Polylang中是否正确关联
    • WordPress管理后台 → Polylang中确认翻译关联关系。

📌 现有文章翻译完成后无需再次执行

✅ 现有文章翻译完成后无需再次执行此URL
✅ 后续撰写新文章时自动完成翻译

📌 补充说明

Q1. 是否可以多次执行此URL?

✅ 已翻译文章不会重复处理,多次执行不会造成问题。
✅ 因代码中包含防止重复翻译的机制 (is_already_translated())已内置其中。

Q2. 如何重新翻译现有文章?

🚨 需先删除原有翻译再重新执行。
✅ 请删除已翻译内容后 https://your-site.com/wp-admin/?run_translation=1 后重新执行。

Q3. 若翻译未自动进行?

❌ 若执行后仍未翻译,请确认:

  1. functions.php代码是否正确添加至
  2. DeepL API密钥是否正确配置。
  3. 确认Polylang插件是否已激活。
  4. WordPress管理后台 → 设置 → 固定链接(Permalink)→ 点击保存按钮后重新执行。

发表评论

목차