[WordPress] qTranslate使用時に日本語と英語のタイトルを同時に表示させる方法(案)



サイトの多言語化にqTranslateを使っているのですが、日本語表示の時にも英語タイトルも合わせて表示したい!と思ったのだけれど表示させる方法が見つかりませんでした。日本語と英語を切替る方法というのはあるけど、両方同時に表示させる方法がわからずで。
最初はqTranslateがカスタムフィールドに英語表記を登録しているだろうから、そこから取り出せればいいかと思ってましたが、データベースを見てみると、wp_postsテーブルのpost_titleに

<!--:ja-->日本語のタイトルです<!--:--><!--:en-->English Title<!--:-->

と、登録されていました。

そこで、入力した英語タイトルを記事の保存時に、独自に用意したカスタムフィールドに登録してみようと思いました。


1. 英語タイトルを保存しておくためのカスタムフィールドを準備する(今回はAdvanced Custom Fields(以後、ACF)を使いました)。


2. データベースに直接アクセスして、投稿IDからタイトルの値を取り出す。


3. 正規表現を使って英語タイトルの箇所だけを抜き出す。


4. 1.で準備したACFの$field_keyのカスタムフィールドに3.の英語タイトルを入れる。

な具合です。これをfunctions.phpに追加すれば、記事の更新時に英語タイトル入力内容がカスタムフィールドに別途保存されるので、後はテンプレートから直接値を取り出して表示させれば良かろうかと思います。

function db_english($post_id){
  remove_action('wp_insert_post', 'db_english');
  global $wpdb, $post;
  if( $post->post_type == "post"){
    $strResult = "SELECT post_title FROM $wpdb->posts WHERE ID = ".$post_id;
    $value = $wpdb->get_var($strResult);
    $gr = '/<!--:en-->(.*?)<!--:-->/u';
    preg_match($gr, $value, $ar);
    $value = $ar[1];
    $field_key = "field_*************";
    update_field( $field_key, $value );
  }
  add_action('wp_insert_post', 'db_english');
}
add_action('wp_insert_post', 'db_english');

参考:



物草灸太郎

怠けたい。

コメントを残す