コンサドーレの応援サイトであるコンサデコンサのレンタルサーバーを移転して、Wordpressのバージョンを3.4.1にあげ、その他のプラグインのバージョンも上げてみると、サイトの表示がおかしいことに気がついた。
投稿抜粋機能が機能しておらず、抜粋表示のはずが、全文が表示されてしまっている。
【正常時】
【投稿抜粋機能が機能していない状態】赤丸の部分
プラグインをオンオフしたり、インストールし直したりして、ようやく原因を突き止めた。
テーマであるArthemia とプラグインである WP Multibyte Patch 1.6がぶつかっている。
上記のWP Multibyte Patchの公式サイトでも何件か同様の症状を訴えている人がいる。
それでいろいろ調べてみた。
まず環境は、Wordpressは3.4.1を使用。テーマはArthemia Premium 3.6.5。
問題ないのは、 WP Multibyte Patch1.5.1まで。これを WP Multibyte Patch1.6にあげると、投稿抜粋機能が働かない症状が現れる。1.6.1、1.6.2でも同じ症状。
WP Multibyte Patchのサイトで、WP Multibyte Patch 1.6.2で、PCRE(Perl 互換正規表現) UTF-8 をサポートしているかどうかが正常に働くかどうかに影響を与えるということで、調べてみたところ、PCRE UTF-8と表示され、ひとまずサポートされているサーバーにのっかってはいるようだ。
次に、他のテーマで確認してみた。デフォルトのTwentyEleven 1.4に変更し、投稿抜粋機能を確認したところ、ちゃんと表示された。
ここまで確認して、コンサデコンサで使用しているテーマArthemiaと、WP Multibyte Patch1.6がぶつかっているという結論になった。
Arthemia Premiumは高機能テーマなので、おそらく独自の投稿抜粋機能を装備している可能性が高い。
WP Multibyte Patchのサイトの注意書き、の内容が起きている可能性が高い。
コンフリクトについて
WordPress ではプラグインやテーマの組み合わせにより機能の競合が起こる場合があります。問題が起きた場合は設定ファイルで該当パッチ機能をオフにして様子をみてください。
WP Multibyte Patchのサイトでは、1.6のバージョンでは、wordpress標準の投稿抜粋機能を使用するように変更されたと説明されている。
このあたりが、何らかの影響を与えている感じがする。
wpmp-config.phpを、いろいろいじってはみたが、症状は変化無し。
後日いろいろ試すことにする。
WP Multibyte Patchは重要なプラグインだから、これは困ったことになった。
[以下、追記 2012/08/07]
なんと WP Multibyte Patch の作者の方からじきじきにコメントまでいただいた、ArthemiaテーマとWP Multibyte Patchプラグインの相性問題であるが、結論から言うと、要因が判明した。
対応方法が、これで正しいのかどうかは不明だが、とりあえず働くようになったのでこれでしばらく様子を見ることにする。
それでは、本文。原因究明の続き。
WordPress 3.4.1で、抜粋機能に関して新たに機能が搭載されて、それにあわせてWP Multibyte Patch が、アップデートしたわけであるから、Arthemiaがその3.4.1に対応していないのではないか、という疑問がわいた。
というわけで、英語の長文を投稿して確認してみた。
すると、ちゃんと要約される。やはり日本語だけの問題か、と思ったものの、少し様子がおかしい。
Arthemiaテーマは、テーマの設定で要約する長さを指定できるのだが、それが機能しない。数字を変えても要約の長さが変化しない。どうもデフォルトの要約の長さで固定されてしまっているようだ。
すなわち、英文の投稿ページでは要約はされるが、テーマの設定がWordpressの要約機能とリンクしていない状態ということになる。
パラメータがうまく設定できてないのかな?
WP Multibyte Patch 1.5.1ではちゃんと動いているのだから、1.6でなくなったパラメーターが怪しい。
そこで、WP Multibyte Patch 1.5.1と1.6の変更点を確認してみる。
ふ〜む、excerpt_length というパラメータはWP Multibyte Patch 1.6 では削除されてしまっているのか。
というわけで、Arthemiaのソースコード内で、excerpt_length という名称のパラメータを使用しているような箇所を検索してみた。
そうすると怪しそうなコードを見つけた。
theme-functions.phpというファイルの中に、それらしい箇所を発見。
Wordpressの要約機能をテーマオリジナルの要約機能に変更している様な感じだ。
[php]
// get_the_excerpt filter
remove_filter(‘get_the_excerpt’, ‘wp_trim_excerpt’);
add_filter(‘get_the_excerpt’, ‘custom_trim_excerpt’);
function custom_trim_excerpt($text) { // Fakes an excerpt if needed
global $post;
if ( ” == $text ) {
(途中省略)
$excerpt_length = apply_filters( ‘excerpt_length’, get_option(‘colabs_excerpt_length’) );
(途中省略)
return $text;
}
[/php]
この部分を、コメントアウトしてみた。
そうすると、ちゃんと要約表示されるじゃないですか。
プログラマではないので、詳細は不明だが、とりあえずこれで解決か?
【結論】
有料テーマであるArthemiaテーマは、要約機能にテーマ独自の要約機能をカスタムして組み込んであるようだ。この部分が、新しいWordpress 3.4.1にまだ対応していないためか、3.4.1にあわせて書き直されたWP Multibyte Patch 1.6が、うまく機能しなかった模様。
現在使用中のArthemiaは、ver 3.6.5。最新版は3.8.0だが、上記のコード『// get_the_excerpt filter』の部分は同じだったので、まだ未対応のよう。
将来的には、テーマ側で対応してくれるような気もするが、しばらくは、コメントアウトして様子を見ることにする。
ちゃんと動くようになってめでたしめでたし。
こんにちは。WP Multibyte Patch の作者です。こちらの記事にある問題には該当しておりませんでしょうか。
わざわざコメントありがとうございます。
ご指摘の記事の内容を確認していみました。
wp-config.phpの内容は、
define(‘WPLANG’, ‘ja’);
$wpmp_conf[‘patch_force_character_count’] = true;
となっていて、どうもこれでは無いようです。
一応、末尾に記載にコードをそれぞれ追記してみました。想定通りの表示に管理画面などは変更されましたが、投稿抜粋機能は相変わらずでした。
こちらでもいろいろ、ためしてみましたが
使用しているArthemiaテーマが、独自の投稿抜粋機能を搭載していて、これが原因のような感じです。
その後、あれこれいじってみた結果、WP Multibyte Patch 1.6.2でもちゃんと要約機能が働くようになりました。
その経緯は、本分に『追加』記事として書き足してあります。
テーマ側に原因があったようで、とりあえず動くようになってよかった。
そのテーマは、古い WP Multibyte Patch と同じ方式で抜粋ロジックを上書きしているようですね。コードを見てみないとはっきりしたことは言えませんが、その後の流れで wp_trim_words() という関数を介していないとしたら WP Multibyte Patch の有無に関わらず WordPress 3.4 以降の文字数ベースの抜粋機能は効かなくなってしまいますので、その場合はバグとしてテーマ作者に修正の依頼をするべきかと思います。
ご指摘ありがとうございます。ぱっと見た感じでは、wp_trim_words() という関数は使っていないようです。
とりあえず、wpmp-config.phpの記述で文字数の変更も出来たので、しばらくはこれでいこうと思います。
使用しているテーマのChanegelogには、テーマの対応Wordpressが3.3.1になっているので、これが3.4.1になるのを気長に待つことにします。