SANGOテーマを多言語で使うカスタマイズ(2/3)関数とプロフ編

修正
コメント欄、検索の抜けを追加、MultilingualPressプラグインの言語判定ではなく標準のget_localeを使う方式に変更

関数とプロフィールのカスタマイズ編となります。

SANGOの関数でのカスタマイズ

関数のカスタマイズが一番面倒な部分となりますが、子テーマで対応できる範囲となっています。

サイトの言語を取得する関数追加

functions.phpに追加します。

日本語と英語だけなので簡単な関数にしています。

/*********************
ロケールの先頭2文字を返す関数
*********************/
function blog_short_lang() {
  return substr(get_locale(), 0, 2);
}

function_exists()でオーバーライド可能な関数

これは、子テーマで簡単にオーバーライド可能な関数なので、同じ関数名で子テーマのfunctions.phpに記述できます。

親テーマから対象となる関数を子テーマのfunctions.phpにコピーします。

親テーマ:/wp-content/themes/sango-theme/library/functions/entry-function.php

以下が対象となる関数です。子テーマのfunctions.phpにコピー後、
if( ! fucntion_exists(...) ) {}を消します。けして親テーマを修正しないように注意してください。

/*********************
フォローボックス(この記事が気に入ったらいいね)
*********************/
if( ! function_exists( 'insert_like_box' ) ) {    <--消す
  function insert_like_box(){

      〜〜 省略 〜〜

  }//end function
}                                                 <--消す
/*********************
この記事を書いた人
*********************/
if( ! function_exists( 'insert_author_info' ) ) {  <--消す
  function insert_author_info() {

      〜〜 省略 〜〜

<?php endif; }
}                                                  <--消す
/*************************
 コメントレイアウト(comments.phpで呼び出し)
**************************/
if( ! function_exists( 'sng_comments' ) ) {        <--消す
  function sng_comments( $comment, $args, $depth ) {

      〜〜 省略 〜〜

  } //END sng comments
}                                                  <--消す
/*********************
 シェアボタン
*********************/
if( ! function_exists( 'insert_social_buttons' ) ) {  <--消す
  function insert_social_buttons($type=null) {

      〜〜 省略 〜〜

  }
}                                                     <--消す
確認
ここで、一度ブログの表示が問題ないか確認してください。

「フォローボックス(この記事が気に入ったらいいね)」のカスタマイズ

insert_like_box()の修正部分です。

            <div class="like_content"><P><?php _e('この記事が気に入ったらフォローしよう','sango');?></P>
        if($user_tw) : //twitter ?>
          <div><a href="https://twitter.com/<?php echo $user_tw;?>" class="twitter-follow-button" data-show-count="<?php echo $follower;?>" data-lang="<?php echo blog_short_lang();?>" data-show-screen-name="false" rel="nofollow"><?php _e('フォローする','sango');?></a> <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script></div>

「この記事を書いた人」のカスタマイズ

insert_author_info()の修正部分です。

          <span><?php _e('この記事を書いた人','sango');?></span>

「コメントレイアウト」のカスタマイズ

          <time datetime="<?php echo comment_time('Y-m-j'); ?>"><a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>" rel="nofollow"><?php if ( blog_short_lang() === 'ja') { comment_time('Y年n月j日'); } else { comment_time('Y/n/j'); }?> </a></time>
            <p><?php echo __('あなたのコメントは現在承認待ちです。','sango'); ?></p>

「シェアボタン」のカスタマイズ

insert_social_buttons($type=null)の修正部分です。

                  <span class="share_txt"><?php _e('ツイート','sango');?></span>
                  <span class="share_txt"><?php _e('シェア','sango');?></span>

以下は、追加のカスタマイズとなります。「はてな」は日本だけのサービスですので、英語では表示しないようにします。

<!-- はてなブックマーク -->の後ろに、以下のように追加します。

          <!-- はてなブックマーク -->
          <?php if (blog_short_lang() === 'ja') : ?>

<!-- Google+ 別デザインのときは非表示に-->の前に、以下のように追加します。

          <?php endif; ?>

          <!-- Google+ 別デザインのときは非表示に-->
確認
ここで、一度ブログの表示が問題ないか確認、英語サイトでは「はてな」が表示されない確認をしてください。

「ショートコード(他サイトへのリンク)」と「日付アーカイブ」のカスタマイズ

他サイトへのリンクショートコードは、「参考」と表示されるため、英語では「Refer」と表示されるようにします。
また、日付アーカイブのタイトルに日本語が入るので変更します。

MEMO
Wordpressでは、functions関連につていは、子テーマ->親テーマの順になるため、function_exists()が指定されていない関数はオーバーライド出来ません。今回はショートコードでしたので、ショートコードの設定を後から上書きしています。

「ショートコード(他サイトへのリンク)」をコピーしてきて修正

/wp-content/themes/sango-theme/library/functions/style-shortcode.php

900行あたりの以下の関数をコピーしてください。

/*********************
他サイトへのリンクカード
*********************/
function sng_othersite_link($atts) {

      〜〜 省略 〜〜

      <div class="tbcell">参考</div>

      〜〜 省略 〜〜

} //END sng_othersite_link

以下のように関数名変更と「参考」を翻訳対象に修正して、子テーマのfunctions.phpに追加します。

/*********************
他サイトへのリンクカード
*********************/
function my_sng_othersite_link($atts) {

      〜〜 省略 〜〜

      <div class="tbcell"><?php _e(‘参考’,’sango’);?></div>

      〜〜 省略 〜〜

} //END sng_othersite_link

アーカイブページのタイトル変更関数追加

以下の関数を子テーマのfunctions.phpに追加します。

/*********************
 カテゴリーページの表示タイトルを変更する自前関数
*********************/
function my_get_the_archive_title($title) {
  if ( is_date() ) {//日付
    if ( blog_short_lang() !== 'ja') {
      $title = get_query_var( 'year' );
      if( is_day() ){
        $title .= '/'.get_query_var( 'monthnum' );
        $title .= '/'.get_query_var( 'day' );
      } elseif( is_month() ) {
        $title .= '/'.get_query_var( 'monthnum' );
      } 
    }
  } elseif ( is_post_type_archive() ) {
    $title = post_type_archive_title( '', false ); // アーカイブの文字を消す
  }
  return $title;
}

親テーマのfunctions関連が読み込まれた後で実行する関数追加

以下の関数を子テーマのfunctions.phpに追加します。

// *********************************************************************
// ここから、親テーマのfunctions以降に実行させる関数
// functions()は、子テーマ->親テーマの順番となるため、親テーマの後で書き換える
// 
add_action( 'after_setup_theme', function () {
    add_filter( 'get_the_archive_title', 'my_get_the_archive_title');
    add_shortcode('sanko','my_sng_othersite_link');
}, 20 );
// ここまで、親テーマのfunctions以降に実行させる関数
// *********************************************************************
確認
ここで、日付のアーカイブで年月日の文字が表示されていないことを確認、他サイトへのリンクが表示されていることを確認してください。

プロフィールの多言語化カスタマイズ

プロフィールは多言語されませんので、以下のような姑息な手段で対応しています。

肩書き、プロフィール詳細については、「日本語記述;英語記述」のフォーマットで記述することとし、現在表示している言語を判別して前後の表示を切り替えています。
プログを複数人で運用している場合でも対応できます。
日本語と英語を両方表示しても良いのであれば、このカスタマイズは必要ありません。

「この記事を書いた人」の追加カスタマイズ内容

insert_author_info()内の以下の部分を、

              <dd><?php esc_attr(the_author_meta('yourtitle')); ?></dd>
          </dl>
        </div>

          <div class="tb-right">

            <p><?php the_author_meta('user_description'); //プロフィール文 ?></p>

以下のように修正します。

              <dd><?php $lang = blog_short_lang();
              $tstring = explode(";", get_the_author_meta('yourtitle'));
              if ($lang !== 'ja' && count($tstring) > 1) {
                  echo esc_attr($tstring[1]);
              } else {
                  echo esc_attr($tstring[0]);
              }
              //esc_attr(the_author_meta('yourtitle')); ?></dd>
          </dl>
        </div>

          <div class="tb-right">

            <p><?php $dstring = explode(";", get_the_author_meta('user_description'));
              if ($lang !== 'ja' && count($dstring) > 1){
                  echo $dstring[1];
              } else {
                  echo $dstring[0];
              } 
              //the_author_meta('user_description'); //プロフィール文 ?></p>
確認
ここで、プロフィールに「日本語記述;英語記述」で入力して、日本語サイトは日本語が、英語サイトは英語が表示されているかを確認してください。

以上、関数とプロフィールのカスタマイズ編でした。

これで、翻訳ファイルを作成する準備が整いました。

Monappy: MBDQ39VHypMQwfyR8SshuHvfPNUz321F6B

Monacoinを投げる
モナゲ(tipmona)ってなに?
そもそもMonacoinってなに?

1 Comment

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください