サポート » プラグイン » feedwordpressでCatchable fatal error

  • 解決済 gatolabo

    (@gatolabo)


    feedwordpressというプラグインがwordpress4.1.2以降(4.1.1迄は正常、4.2.2まで確認)
    多くの日本語feedで
    Catchable fatal error: Object of class WP_Error could not be converted to string in /DOCUMENT_ROOT_PATH/wp-includes/revision.php on line 65
    となりfeedの取り込みが途中で停まります。
    feed中の文字に影響を受けているのかなとは思いますが本当かは解りません。
    wordpress本体側の修正が原因ではありますが何か良い解決方法はないでしょうか。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック投稿者 gatolabo

    (@gatolabo)

    ごめんなさい。プラグインのフォーラムを選んだつもりがテーマのフォーラムに書き込んでしまいました。
    消していただくか移動いただければ助かります。

    テーマを Twenty Fifteen 等の公式テーマにして、プラグインは FeedWordPress と Multibyte Patch だけを有効にしても再現するでしょうか?

    テスト用に使っている WordPress 4.2.2 に FeedWordPress を入れて確かめてみましたが、そのエラーは出ず、フィードから投稿が作られました。

    トピック投稿者 gatolabo

    (@gatolabo)

    他のプラグインは無効にして試しています。
    日本語でも問題の発生しないfeedもあるのですがエラーになるfeedもある状態です。
    あるfeedについて1つも取り込めないときもあれば幾つか取り込んでエラーになるときもある。
    だだし、そのfeedが更新されるまではエラーの発生の仕方は同じ。
    日本語feedでも問題なく取り込めることもあります。
    また、英語のfeedではエラーなりません。
    なのでfeed内の文字の影響かなと思いました。
    既に書きましたがWordpress4.1.1以下ならエラーになりません。
    feedの構文には問題が無いです。

    gatolaboさん、問題が起きやすいfeedを使って試してみましょうか。該当するfeedを教えて頂けませんか。

    トピック投稿者 gatolabo

    (@gatolabo)

    モデレータの方
    書き込み先を間違えて申し訳ありませんでした。トピックの移動ありがとうございました。

    gblsmさん
    他所の方のfeedを挙げるのは憚られましたので自前のコンテンツからエラーになるfeedを作ってみました。
    http://denwa.biz/feed/gatolabo.php

    宜しくお願いします。

    失礼しました、用意していただいたフィードで確かに同じエラーが再現しました。原因は今のところ想像がつきません。

    gatolaboさん、ざっと調べたところ、FeedWordPressの内部で抜粋(excerpt)を自動生成する処理が日本語対応していない為にエラーが発生しているみたいです。WordPressの4.1.1まで普通に動作していた理由はわかりませんが。

    プラグインのコードを下記のように修正するとエラーが無くなりました。これは WP Multibyte Patch の処理を真似したものですが、文字コードを UTF-8 に固定しているので注意してください。

    FeedWordPressのファイル syndicatedpost.class.php の中です。修正前:

    # If content is available, generate an excerpt.
    if ( strlen(trim($content)) > 0 ) :
    	$excerpt = strip_tags($content);
    	if (strlen($excerpt) > 255) :
    		$excerpt = substr($excerpt,0,252).'...';
    	endif;
    endif;

    修正後:

    # If content is available, generate an excerpt.
    if ( strlen(trim($content)) > 0 ) :
    	$excerpt = strip_tags($content);
    	if (strlen($excerpt) > 255) :
    		$excerpt = mb_strcut($excerpt, 0, 252, 'UTF-8' ) . '…';
    	endif;
    endif;

    WP Multibyte Patch プラグインの機能を FeedWordPress へ取り込んで修正する場合は次のようにすれば良さそうです。抜粋の文字数は減りますが。

    // $excerpt = substr($excerpt,0,252).'...';
    // $excerpt = mb_strcut($excerpt, 0, 252, 'UTF-8' ) . '…';
       $excerpt = wp_trim_words( $excerpt, 84, '...' );	// 84 = 252/3

    トピック投稿者 gatolabo

    (@gatolabo)

    gblsmさん
    ありがとうございました。バッチリです。
    phpで日本語とかUTF-8の扱いに慣れていないので全然問題無いように見えてました。

    if (strlen($excerpt) > 255) :
    		$excerpt = substr($excerpt,0,252).'...';
    	endif;

    私の場合はですが、この3行自体要らないかも。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック「feedwordpressでCatchable fatal error」には新たに返信することはできません。