TranslatePressでmeta情報もテーマ側で無理やり書き換える方法

TranslatePressというプラグインですが、Google TranslateのAPIを使えばウェブサイトを自動翻訳してくれます。

さらに「https://oksho.net/en/」のように、自動的にサブディレクトリとして作られ、固定ページとかの下層ページも「https://oksho.net/en/pagename/」のようになります。

しかもWPの管理画面上でテーマのカスタマイズの容量でテキストを選択してカスタム翻訳を指定することもできます。(仕方ないですが、たまに変な翻訳があるので・・・)

さらに画像も選択して、翻訳時に指定の画像を表示させることも可能です。無茶苦茶凄いですね。

詳しくは公式サイトをご覧ください。

1つ仕方ない部分ですが、meta情報(title,description)は翻訳されません。
翻訳するには月額契約をしないとできません。

ただ、そもそも翻訳原稿も用意できないような低予算案件の場合にこのプラグインを使用させていただいているので、当然サブスクしてくれるわけはありません・・・。

そこで、TranslatePressが用意してくれている翻訳関数を使って、テキストを手動で翻訳して、無理やりmeta情報を書き換えるようにしました。手順は以下です。

YoastSEOを使った場合のやり方になります。
※使用の際は自己責任にてお願いします。

1.YoastSEOをいれる

まずmeta情報を簡単に書き換えられる方法としてYoastSEOをいれます。

2.functions.phpでTranslatePressの翻訳関数を使う

titleとdescriptionの翻訳のコードは以下です。
最初のif文でpreg_matchを使ってURL内に「/en/」が含まれるかを判別します。
titleの場合、次のif文でトップページかどうかを判別します。
トップではない場合は、ページのタイトルを取得し、翻訳関数の「trp_translate」を使用して翻訳します。フィルターでYoastSEOのタイトルとOGのタイトルを更新して完了です。
descriptionも基本の流れは同じです。

/*--------------------------------------------
titleの翻訳
-------------------------------------------*/
function title_translation($titletranslation){
  if (preg_match('#/en/#', $_SERVER["REQUEST_URI"])) {
      if ( is_home() || is_front_page()){
        $titletranslation = 'サイト名';
      }else{
        $titletranslation = trp_translate(get_the_title(), $language = null, $prevent_over_translation = true ).' | サイト名';
      }
  }
  return $titletranslation;
}
add_filter('wpseo_title','title_translation');
add_filter('wpseo_opengraph_title','title_translation');
/*--------------------------------------------
descriptionタグの翻訳
-------------------------------------------*/
function description__translation($desctranslation){
  if (preg_match('#/en/#', $_SERVER["REQUEST_URI"])) {
    $desctranslation = trp_translate(YoastSEO()->meta->for_current_page()->description, $language = null, $prevent_over_translation = true );
  }
  return $desctranslation;
}
add_filter('wpseo_metadesc','description__translation');
add_filter('wpseo_opengraph_desc','description__translation');

もっとスマートなやり方とか、そもそもサブスクしてmetaも書き換えれば済む話ですが、一応こういうやり方でも私は出来ましたというお話でした。