Goole AI Studio API(Free)を使ってWorldpressの投稿スラッグを日本語から英語に自動で変換します。
パーマリンク設定を投稿名にすると記事タイトルがslugに反映されるため、日本語のタイトルの場合、日本語パーマリンクになります。
https://exsample.com/日本語パーマリンク
パーマリンクは、日本語でも英語や数字でもSEO的には問題ない(Googleは言語に関係なくボットはクロールすると言っています)、可読性も上がりますが、メールやSNSにリンク先URLをコピペした場合など、URLはエンコードされてしまうことがあり、逆に可読性が下がります。
https://exsmaple.com/%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%83%91%E3%83%BC%E3%83%9E%E3%83%AA%E3%83%B3%E3%82%AF
Google Analyticsなどのアクセス解析ツールでは、文字化けしたURLで表示されるため、どのページがアクセスされているのかを判別しづらくなる場合もあるようです。
ユーザーがURLを共有したり、アクセス解析を行ったりする可能性が高い場合は、視認性が高く、扱いやすい英語や数字のパーマリンクの方が無難ではないかと思います。
function translate_slug_to_english($post_id)
{
// 管理画面以外または自動保存時はスキップ
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if (wp_is_post_revision($post_id)) return;
// 投稿情報を取得
$post = get_post($post_id);
if (!$post || $post->post_status === 'auto-draft') return;
if (empty($post->post_title)) return;
// 既にスラッグが英語ならスキップ
if (!empty($post->post_name) && preg_match('/^[a-z0-9\-]+$/', $post->post_name)) {
return;
}
// タイトルを翻訳
$translated_slug = translate_text_to_english_ai($post->post_title);
if ($translated_slug) {
$sanitized_slug = sanitize_title($translated_slug);
$unique_slug = wp_unique_post_slug($sanitized_slug, $post_id, $post->post_status, $post->post_type, $post->post_parent);
if ($post->post_name !== $unique_slug) {
remove_action('save_post', __FUNCTION__); // 無限ループ防止
wp_update_post([
'ID' => $post_id,
'post_name' => $unique_slug,
]);
add_action('save_post', __FUNCTION__);
}
}
}
add_action('save_post', 'translate_slug_to_english');
function translate_text_to_english_ai($text)
{
$apiKey = '取得したAPIキーをコピペ.'; // APIキーを設定
$url = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=" . $apiKey;
$prompt = "Translate this into English, max 5 words: {$text}";
$args = [
'headers' => [
'Content-Type' => 'application/json'
],
'body' => wp_json_encode([
'contents' => [
[
'parts' => [
['text' => $prompt]
],
],
],
]),
'method' => 'POST',
'timeout' => 10,
];
$response = wp_remote_post($url, $args);
if (is_wp_error($response)) {
error_log('Google AI API Error: ' . $response->get_error_message());
return '';
}
$body = wp_remote_retrieve_body($response);
error_log('Google AI API Response: ' . $body); // API レスポンスをログに記録
$data = json_decode($body, true);
// 正しいレスポンス構造に合わせて解析
if (!empty($data['candidates'][0]['content']['parts'][0]['text'])) {
return trim($data['candidates'][0]['content']['parts'][0]['text']);
} elseif (!empty($data['candidates'][0]['content'])) {
return trim($data['candidates'][0]['content']);
} else {
error_log('Google AI API Error: Invalid response structure: ' . $body);
return '';
}
}