dxc555さん、こんにちは。
いちばん簡単な方法は、翻訳ファイルを自分で作成する方法です。
yokoには、languagesフォルダ内にxx_XX.potファイルがあり、これをPoeditで編集し、ja.moを作成すれば、該当部分についても日本語にすることができます。
functions.phpで対応する方法については、読み込みを行う順番が関係してきます。
- 子テーマのfunctions.php
- 親テーマのfunctions.php
の順に読み込みが行われるため、子テーマのremove_filterが効かないことと、親テーマのadd_filterが後で行われ、フィルターフックの実行も子テーマ、親テーマの順となるため親テーマのフィルターが有効になってしまっています。
これへの対応方法としては、子テーマでの優先度を下げ(後でフィルターフックが実行されるようにする)たり、
add_filter('excerpt_more', 'new_excerpt_more', 11);
remove_filterとadd_filterを行うタイミングをinitなど、後でフックするように変更する方法があります。
抜粋と本文と両方で投稿している記事については、excerpt_moreの方法同様、親テーマを参考に、get_the_excerptに対してフックすれば大丈夫かと思います。
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で実行するにはどうするべきだったのか参考までに教えていただけないでしょうか?
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.親テーマの順になり
- 子テーマのfunctions.phpが読み込まれる
- remove_filterを実行。ただし、この時点では親テーマのフックは行われていないため、動作しない
- add_filterでget_the_excerptにnew_yoko_custom_excerpt_moreのフックを追加
- 親テーマのfunctions.phpが読み込まれる
- 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フォルダにアップロードすれば日本語になると思います。