Skip to content

Instantly share code, notes, and snippets.

@ashikawa
Last active December 29, 2015 01:48
Show Gist options
  • Save ashikawa/7595348 to your computer and use it in GitHub Desktop.
Save ashikawa/7595348 to your computer and use it in GitHub Desktop.

PHP Fatalerror: Cannot use string offset as an array in ... popular-posts.php on line 282

Word Press で下書きのプレビューが出来ない(画面が真っ白になる)バグ。

環境は

  • WordPress 3.7.1
  • Custom Field Template 2.1.8
  • Popular Posts 2.6.2.0

エラーログを確認すると

PHP Fatalerror: Cannot use string offset as an array in ... popular-posts.php on line 282

とのこと。

エラーが出ているソースは

    // get the post's custom fields
    $custom = get_post_custom($postID);
    // find the view count field
    $views = intval($custom['pvc_views'][0]);  // エラー!!
    // increment the count
    if($views > 0) {
        update_post_meta($postID, 'pvc_views', ($views + 1));   
    } else {
        add_post_meta($postID, 'pvc_views', 1, true);
    }

どうも get_post_custom の戻り値に空の文字列が帰っているためにエラーおきている。 値のチェックが甘いのも問題だが、 配列を返すべきの get_post_custom 関数が文字列を返している原因は Custom Field Template のよう。

get_post_metadata フィルタ。

    add_filter( 'get_post_metadata', array(&$this, 'get_preview_postmeta'), 10, 4 );
    function get_post_meta($post_id, $key = '', $single = false) {
        // いろいろ略...

        return '';  // これ
    }

暫定ながら popular-posts.php の修正コード

    // get the post's custom fields
    $custom = get_post_custom($postID);
    // find the view count field
    if ($custom && $custom['pvc_views']) { // 追加
        $views = intval($custom['pvc_views'][0]);
        // increment the count
        if($views > 0) {
            update_post_meta($postID, 'pvc_views', ($views + 1));   
        } else {
            add_post_meta($postID, 'pvc_views', 1, true);
        }
    }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment