こんにちは!😊今日はワードプレス(WordPress)サイトで既存の記事と新しい記事を自動で翻訳して、SEOの最適化まで行うシステムを構築する方法を学びます。
この講義ではDeepL API、Polylangプラグイン、Yoast SEOを活用し、一度設定したら、翻訳が自動で行われる環境を作ります🚀。

ちなみに、deep l apiは月に500,000文字まで無料で利用することができます。
📌講義の目標
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']]; } //既存のすべての投稿を翻訳する関数(一度だけ実行) function auto_translate_existing_posts()
'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']) && $_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で完全に自動で多言語コンテンツを運営することができます!🚀もっと気になることがあれば、いつでも質問してください!😊📌追加確認事項
📌実行後、追加で確認すべき事項
- 翻訳された投稿が生成されたか確認
- WordPress 管理者 → “すべての記事”で英語
(en)
、日本語(ja)
に翻訳された記事があるか確認してください。
- WordPress 管理者 → “すべての記事”で英語
- URLを確認
- 韓国語文
: https://example.co.kr/올림픽-일정/
- 英語記事
: https://example.co.kr/en/olympic-schedule/
- 日本語の記事
:
https://example.co.kr/ja/オリンピック日程/
- 韓国語文
- 翻訳された文がPolylangで正しく接続されていることを確認
- WordPress 管理者 →Polylangで翻訳関係を確認。
📌既存記事の翻訳が終わったら、もう実行する必要はありません。
✅既存の記事を一度翻訳すると、このURLを再実行する必要がありません。
その後、新しい記事を作成すると、自動的に翻訳されます。
📌追加質問
Q1.このURLを複数回実行してもいいですか?
すでに翻訳された記事は再翻訳されないので、複数回実行しても問題ありません。
重複翻訳を防止するコード(is_already_translated()
)が含まれているからです。
Q2.既存の記事を再翻訳するには?
既存の翻訳を削除して再実行する必要があります。
既存の翻訳された文章を削除して、https://your-site.com/wp-admin/?run_translation=1
を再実行してください。
Q3.自動的に翻訳が行われない場合は?
❌実行しても翻訳ができない場合は、以下を確認してください。
functions.phpに
コードが正しく追加されたか確認。- DeepL APIキーが正しく設定されているかどうか確認。
- Polylangプラグインが有効になっているか確認。
- WordPress 管理者 →設定 → 一意のアドレス(パーマリンク)を保存ボタンをクリックした後、再実行。