以前、WPMLに対応した新着一覧表示の折に、WPMLの構造をチェックしました。
その記事
– 投稿、固定ページ、カスタム投稿等をマージした新着一覧表示について(多言語WPML対応編)
が、参考になるのではと思います。
WPMLは WordPressとは別のテーブルで管理されているので、SQL文を利用して読みだす必要があります。もしかしたら、そういった用途のショートコードが用意されているかもしれません。って思ったらプラグイン
– https://ja.wordpress.org/plugins/wpml-shortcodes/
が使えそう….
なお個人的な興味と WPMLを利用していることから SQL文で、
日本語タイトルの場合のみ、日本語タイトル(英語タイトル)とする方法はざっくりこんな感じ。
function my_the_title($title, $id) {
$get_other_lang = 'en';
if(defined('ICL_LANGUAGE_CODE')){
global $post;
global $wpdb;
$wp_prefix = $wpdb->prefix;
$wp_icl_translations = "${wp_prefix}icl_translations";
$lang_code = ICL_LANGUAGE_CODE;
$sql = "SELECT ".$wp_icl_translations.".trid FROM $wp_icl_translations WHERE ".$wp_icl_translations.".element_id = ".$post->ID;
$other_posts_trid_ID = $wpdb->get_results( $sql );
$sql = "SELECT ".$wp_icl_translations.".element_id FROM $wp_icl_translations WHERE ".$wp_icl_translations.".trid = ".$other_posts_trid_ID[0]->trid . " AND ".$wp_icl_translations.".language_code = '$get_other_lang'";
$other_post_ID = $wpdb->get_results( $sql );
$sql = "SELECT ".$wp_prefix."posts.post_title FROM $wpdb->posts WHERE ".$wp_prefix."posts.ID = ".$other_post_ID[0]->element_id;
$other_post_title = $wpdb->get_results( $sql );
if($lang_code !== $get_other_lang)
$title = $title . " (" . $other_post_title[0]->post_title. ")";
}
return $title;
}
add_filter('the_title', 'my_the_title', 10, 2);
1つ目の SQL
wp_icl_translations の element_id が wp_posts.ID と連携しており、同じIDを探して、wp_icl_translations の tridを出力
2つ目のSQL
1つ目のSQLで出力した trid とおなじ tridをもつデータから element_idを抜き出す。
3つ目のSQL
2つ目の element_idと同じIDをもつデータを wp_postsから抜きだし、そこの post_titleを出力
って感じですね。
まぁそんな関数用意されているかもしれませんねぇ。
ちょっと興味があったのでやってはみましたが、有料プラグインになるので、詳しくは
https://wpml.org
のフォーラムで聞かれるのがよいでしょう。
有料プラグインのサポートはこのフォーラムの対象外ですのでここではなくプラグイン販売元のサポート窓口にお問い合わせください。
kimipooh さま
ありがとうございます!
大変わかりやすく参考になりました。
おかげさまで解決の方向に進めそうです。
Takayuki Miyoshi さま
大変失礼いたしました。以後同じことがないように気をつけます。
ずいぶん前にライセンスを取得して、有料ということを忘れておりました。。
解決済みのチェックを入れ忘れたので、この投稿をもちまして閉じさせていただきます。
皆様への感謝とご迷惑をおかけしてすみませんでした。