サポート » テーマ » 続きを読むのタグについて

  • 解決済 dxc555

    (@dxc555)


    「Yoko」というテーマを親とし子テーマを独自に作成しています。
    記事一覧表示のデフォルトで「続きを読む」が「Continue reading →」と表示されるのですがこれを日本語化したく子テーマのfunctions.phpでなんとかできないものかと試行錯誤しております。

    remove_filter('excerpt_more', 'yoko_continue_reading_link');
    function new_excerpt_more($more)
    {
        return '<a href="' . get_permalink() . '">続きを読む&rarr;</a>';
    }
    add_filter('excerpt_more', 'new_excerpt_more');

    子テーマのfunctions.phpに上記の通り書いてみましたが何も変わらず試しに親テーマのfunctions.phpに入れてみると下記の通りになりました。

    ・本文だけで投稿している記事(抜粋が未入力)
    続きを読むと日本語で表示されることを確認しました。

    ・抜粋と本文と両方で投稿している記事
    こちらは何も変わらず英語のままでした。

    子テーマのfunctions.phpでどちらの場合にも日本語で表示したいのでですがどのようにすればいいでしょうか?

    子テーマの「content.php」内の抜粋表示には、「the_excerpt();」を使っております。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • モデレーター jim912

    (@jim912)

    dxc555さん、こんにちは。

    いちばん簡単な方法は、翻訳ファイルを自分で作成する方法です。
    yokoには、languagesフォルダ内にxx_XX.potファイルがあり、これをPoeditで編集し、ja.moを作成すれば、該当部分についても日本語にすることができます。

    functions.phpで対応する方法については、読み込みを行う順番が関係してきます。

    1. 子テーマのfunctions.php
    2. 親テーマのfunctions.php

    の順に読み込みが行われるため、子テーマのremove_filterが効かないことと、親テーマのadd_filterが後で行われ、フィルターフックの実行も子テーマ、親テーマの順となるため親テーマのフィルターが有効になってしまっています。
    これへの対応方法としては、子テーマでの優先度を下げ(後でフィルターフックが実行されるようにする)たり、

    add_filter('excerpt_more', 'new_excerpt_more', 11);

    remove_filterとadd_filterを行うタイミングをinitなど、後でフックするように変更する方法があります。

    抜粋と本文と両方で投稿している記事については、excerpt_moreの方法同様、親テーマを参考に、get_the_excerptに対してフックすれば大丈夫かと思います。

    トピック投稿者 dxc555

    (@dxc555)

    jim912さんお返事ありがとうございます。

    add_filter('excerpt_more', 'new_excerpt_more', 11);

    としたところ本文だけ(抜粋なし)の箇所は思うようになりました!

    抜粋ありの方も同様なつもりで下記のようにしてみましたがなぜかこちらはうまくいきません。

    remove_filter('get_the_excerpt', 'yoko_continue_reading_link');
    function new_yoko_custom_excerpt_more( $output )
    {
    	if ( has_excerpt() && ! is_attachment() ) {
    		$output .= 1; // 試しに「1」を追加
    	}
    	return $output;
    }
    add_filter('get_the_excerpt', 'new_yoko_custom_excerpt_more', 12);

    これで出力すると「Continue reading →1」となるので半分正解?というところかと思いますがどうやっても英語を日本語にすることができませんでした^^;

    言語ファイルをいじってみたところ簡単にできたのでとりあえずOKなのですが、子テーマのfunctions.phpで実行するにはどうするべきだったのか参考までに教えていただけないでしょうか?

    モデレーター jim912

    (@jim912)

    dxc555さん

    実際の読込と動作をよく理解してください。
    yokoテーマで抜粋に入力のある場合は、お察しの通り

    function yoko_custom_excerpt_more( $output ) {
    	if ( has_excerpt() && ! is_attachment() ) {
    		$output .= yoko_continue_reading_link();
    	}
    	return $output;
    }
    add_filter( 'get_the_excerpt', 'yoko_custom_excerpt_more' );

    によって、「Continue reading →」が追加されています。
    そして、結果からも分かるように

    $output .= yoko_continue_reading_link();

    は、$outputの後に、yoko_continue_reading_linkで得られた文字列を付け足しています。

    で、functions.phpの読込順ですが、
    1.子テーマ、2.親テーマの順になり

    1. 子テーマのfunctions.phpが読み込まれる
    1. remove_filterを実行。ただし、この時点では親テーマのフックは行われていないため、動作しない
    2. add_filterでget_the_excerptにnew_yoko_custom_excerpt_moreのフックを追加
    • 親テーマのfunctions.phpが読み込まれる
    1. add_filterでget_the_excerptにyoko_custom_excerpt_moreのフックを追加

    この結果、get_the_excerptに対して、子テーマのnew_yoko_custom_excerpt_moreと親テーマのyoko_custom_excerpt_moreの両方のフックが追加され、それぞれが文字を追加しているため、そのような結果となります。

    これについては、親テーマのフックを解除してあげる必要があります。
    remove_filterは、上記の様に追加されているものに対して解除するものですから、親テーマがadd_filterを実行した後(親テーマのfunctions.phpが読み込まれた後)にremove_filterを行わなければなりません。
    このような場合は、どうすれば良いかというと、親テーマの読込が終わったあとのフックでもって、remove_filterが実行されるようにしてあげれば良いです。

    function remove_yoko_custom_excerpt_more() {
    	remove_filter('get_the_excerpt', 'yoko_custom_excerpt_more');
    }
    add_filter('after_setup_theme', 'remove_yoko_custom_excerpt_more');

    昔のもので解決しているかも知れませんが、yokoの日本語ファイルを作りました。
    http://million.rash.jp/2012/02/2137
    ja.moをテーマyokoのlanguagesフォルダにアップロードすれば日本語になると思います。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「続きを読むのタグについて」には新たに返信することはできません。