サポート » プラグイン » WPMLで現在展開中の言語に紐づく他言語のデータを取得したい

  • 解決済 takahashitakashi

    (@takahashitakashi)


    いつもお世話になります。

    WPMLで英語/日本語のサイトを作成しています。
    カスタム投稿の個別記事にてタイトルを英語と日本語を同時に表示したいのですが、
    展開中と別の言語の同記事からタイトルや他情報を取得する関数や方法はないのでしょうか?

    せめてIDだけでも取得できればどうにでもなるのですが検索してもうまく見つけられずに
    行き詰ってしまいました。。

    よろしくお願いいたします。

    – – – – – – – – – – – – – – – – – – – – – – – –
    wordpress 4.5.3
    WPML Multilingual CMS 3.1.5
    – – – – – – – – – – – – – – – – – – – – – – – –

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • 以前、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
    のフォーラムで聞かれるのがよいでしょう。

    モデレーター Takayuki Miyoshi

    (@takayukister)

    有料プラグインのサポートはこのフォーラムの対象外ですのでここではなくプラグイン販売元のサポート窓口にお問い合わせください。

    トピック投稿者 takahashitakashi

    (@takahashitakashi)

    kimipooh さま

    ありがとうございます!
    大変わかりやすく参考になりました。
    おかげさまで解決の方向に進めそうです。

    Takayuki Miyoshi さま

    大変失礼いたしました。以後同じことがないように気をつけます。
    ずいぶん前にライセンスを取得して、有料ということを忘れておりました。。

    トピック投稿者 takahashitakashi

    (@takahashitakashi)

    解決済みのチェックを入れ忘れたので、この投稿をもちまして閉じさせていただきます。

    皆様への感謝とご迷惑をおかけしてすみませんでした。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「WPMLで現在展開中の言語に紐づく他言語のデータを取得したい」には新たに返信することはできません。