μλ νμΈμ! π μ€λμ μλνλ μ€(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' => '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
β μλ‘μ΄ κΈμ λ²μνλ €λ©΄?
- μ κΈ μμ± ν μλ λ²μλ¨. (μΆκ° μμ νμ μμ)
β λ²μλ κΈμ λ€μ λ§λ€κ³ μΆλ€λ©΄?
- κΈ°μ‘΄ λ²μ κΈμ μμ ν λ€μ μ€ν.
π‘ μ΄μ μλνλ μ€μμ μμ ν μλμΌλ‘ λ€κ΅μ΄ μ½ν μΈ λ₯Ό μ΄μν μ μμ΅λλ€! π λ κΆκΈν μ μ΄ μλ€λ©΄ μΈμ λ μ§ μ§λ¬Έν΄μ£ΌμΈμ! π
π μ€ν ν μΆκ° νμΈν΄μΌ ν μ¬ν
- λ²μλ κ²μλ¬Όμ΄ μμ±λμλμ§ νμΈ
- μλνλ μ€ κ΄λ¦¬μ β “λͺ¨λ κΈ” μμ μμ΄(
en
), μΌλ³Έμ΄(ja
)λ‘ λ²μλ κΈμ΄ μλμ§ νμΈνμΈμ.
- μλνλ μ€ κ΄λ¦¬μ β “λͺ¨λ κΈ” μμ μμ΄(
- URL νμΈ
- νκ΅μ΄ κΈ:
https://example.co.kr/μ¬λ¦Όν½-μΌμ /
- μμ΄ κΈ:
https://example.co.kr/en/olympic-schedule/
- μΌλ³Έμ΄ κΈ:
https://
example
.co.kr/ja/γͺγͺγ³γγγ―ζ₯η¨/
- νκ΅μ΄ κΈ:
- λ²μλ κΈμ΄ Polylangμμ μ λλ‘ μ°κ²°λμλμ§ νμΈ
- μλνλ μ€ κ΄λ¦¬μ β Polylangμμ λ²μ κ΄κ³ νμΈ.
π κΈ°μ‘΄ κΈ λ²μμ΄ λλλ©΄ λ μ€νν νμ μμ
β
κΈ°μ‘΄ κΈμ ν λ² λ²μνλ©΄ μ΄ URLμ λ€μ μ€νν νμκ° μμ΅λλ€.
β
μ΄νμλ μλ‘μ΄ κΈμ μμ±νλ©΄ μλμΌλ‘ λ²μλ©λλ€.
π μΆκ° μ§λ¬Έ
Q1. μ΄ URLμ μ¬λ¬ λ² μ€νν΄λ λλμ?
β
μ΄λ―Έ λ²μλ κΈμ λ€μ λ²μλμ§ μμΌλ―λ‘ μ¬λ¬ λ² μ€νν΄λ λ¬Έμ μμ΅λλ€.
β
μ€λ³΅ λ²μμ λ°©μ§νλ μ½λ (is_already_translated()
)κ° ν¬ν¨λμ΄ μκΈ° λλ¬Έμ
λλ€.
Q2. κΈ°μ‘΄ κΈμ λ€μ λ²μνλ €λ©΄?
π¨ κΈ°μ‘΄ λ²μμ μμ νκ³ λ€μ μ€νν΄μΌ ν©λλ€.
β
κΈ°μ‘΄ λ²μλ κΈμ μμ νκ³ , https://your-site.com/wp-admin/?run_translation=1
μ λ€μ μ€ννμΈμ.
Q3. μλμΌλ‘ λ²μμ΄ μ§νλμ§ μμΌλ©΄?
β μ€ννλλ° λ²μμ΄ λμ§ μλλ€λ©΄, λ€μμ νμΈνμΈμ.
functions.php
μ μ½λκ° μ λλ‘ μΆκ°λμλμ§ νμΈ.- DeepL API ν€κ° μ¬λ°λ₯΄κ² μ€μ λμλμ§ νμΈ.
- Polylang νλ¬κ·ΈμΈμ΄ νμ±νλμλμ§ νμΈ.
- μλνλ μ€ κ΄λ¦¬μ β μ€μ β κ³ μ μ£Όμ(νΌλ¨Έλ§ν¬) μ μ₯ λ²νΌ ν΄λ¦ ν λ€μ μ€ν.