サポート » プラグイン » qtransrateの英語タイトルと日本語タイトルを同時に出したい

  • 解決済 aq-n

    (@aq-n)


    qtransrateを使用しております。
    日本語ページ表示時に、英語タイトルも同時に出したいのですが、調べてもやり方がわかりませんでした。
    ご教授お願い致します。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • yuka2py

    (@yuka2py)

    こんばんわです。

    手元に qtransrate のコードがちょうどあったので、勉強がてらに考えてみました。
    qTranslate が the_posts フィルタでどーんとデータ内の言語データを整理してしまうので、思いのほか大掛かりなコードになりました。長くなったので、そのまま記載しておきます。

    ただもっと良いやり方あるかも知れないので、他の方からフォローがあれば嬉しいです。

    以下のコードを、functions.php に書いてから、テンプレート中では、<?php qtransextra::the_title( 'en' ) ?> のように使ってください。

    add_action( 'init', 'qtransextra::init' );
    
    class qtransextra
    {
    	private static $original_posts_data = array();
    
    	public static function init() {
    		if ( is_admin() ) {
    			return;
    		}
    		add_filter( 'the_posts', 'qtransextra::save_original_data', 0 );
    	}
    
    	public static function save_original_data( $posts ) {
    		if ( is_array( $posts ) ) {
    			foreach ( $posts as $post ) {
    				self::$original_posts_data[$post->ID] = (object) array(
    					'post_title' => $post->post_title,
    				);
    			}
    		}
    		return $posts;
    	}
    
    	public static function get_the_title( $lang, $post = 0 ) {
    		global $q_config;
    
    		$post = get_post( $post );
    
    		$actual_lang = $q_config['language'];
    		$actual_post_title = $post->post_title;
    
    		$q_config['language'] = $lang;
    		$post->post_title = self::$original_posts_data[$post->ID]->post_title;
    
    		$title = get_the_title();
    
    		$q_config['language'] = $actual_lang;
    		$post->post_title = $actual_post_title;
    
    		return $title;
    	}
    
    	public static function the_title( $lang, $before = '', $after = '', $echo = true ) {
    
    		$title = self::get_the_title( $lang );
    
    		if ( strlen( $title ) == 0 )
    			return;
    		$title = $before . $title . $after;
    		if ( $echo )
    			echo $title;
    		else
    			return $title;
    	}
    }
    トピック投稿者 aq-n

    (@aq-n)

    上記の通り出来ました!ありがとうございます。
    コードの中で

    if ( is_admin() ) {
    return;
    }

    としている理由を聞いてもよろしいでしょうか?

    yuka2py

    (@yuka2py)

    もにんぐですー。
    主に2つ理由があります。

    1つは、qtransextra::save_original_data で行う処理は、the_posts フィルタで qtransrate が現在の言語以外のデータを整理してしまう前に、多言語混在のデータを保存しておくことです。
    しかし、ここで、qtransrate は管理画面において言語を整理しません。伴って管理画面で qtransextra::save_original_data は実行しなくても良いかな?と判断しました。

    もう1つは、要件を見てフロントサイトでの表示の為の要望だと想像しました。このことから、管理画面での実行は不要だろう、とも考えました。

    以上2点だったと思いますー。

    トピック投稿者 aq-n

    (@aq-n)

    そうなんですね~!了解しました。
    ありがとうございます!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「qtransrateの英語タイトルと日本語タイトルを同時に出したい」には新たに返信することはできません。