bbPressの導入(fatal エラー解決方法付き)
環境
PHP 7.1
Wordpress 4.7.5
bbPress 2.5.13
まずはインストール
日本語化
こちらのページから、bbpress-ja.moをDL>FTPで
/wp-content/plugins/bbpress/languages/
にアップ。
フォーラム一覧が表示されない
PHPのエラーが出てますね。なんだかわからないけど。
トピックも返信も一覧で表示されます。
新規作成はすべて問題なし。
フロント側への表示も問題ありません。
PHPのエラーを見えるようにする
display_errors=On
error_reporting="2047"
これだけでいいです。
#見えちゃいけない場合は、ログに書き出してください。
すると、次のように表示されています。
Fatal error: Uncaught Error: [] operator not supported for strings in /path/to/hogehoge in
/home/kw-sakura/www/se/wp-content/plugins/bbpress/includes/forums/functions.php on line 1800
ということで、
サーバから
/wp-content/plugins/bbpress/
以下を落としてきて、ファイルを覗いてみましょう。
エラー修正
/bbpress/includes/forums/functions.php
// Get any existing post status
$post_stati = $posts_query->get( 'post_status' );
// Default to public status
if ( empty( $post_stati ) ) {
$post_stati[] = bbp_get_public_status_id();
// Split the status string
} elseif ( is_string( $post_stati ) ) {
$post_stati = explode( ',', $post_stati );
}
[PHP]Fatal error: [] operator not supported for strings の対処方法
によると、初期化してあげると大丈夫なようです。
PHP > マニュアル > 言語リファレンス > 型 > 角括弧構文で作成/修正
ここに
注意: PHP 7.1.0 以降では、文字列に空のインデックス演算子を適用すると fatal エラーが発生するようになりました。 これまでのバージョンではエラーにならず、文字列が配列に変換されていました。とありますので、なんだかわからないけど、
// Get any existing post status
$post_stati = $posts_query->get( 'post_status' );
ここでは恐らく文字列が返ってくるのだと思います。
} elseif ( is_string( $post_stati ) ) {
ここで文字列のチェックをしているからです。
でも、空が返ってくるときもあるので
if ( empty( $post_stati ) ) {
それもチェックしているというわけです。
この場合、$post_statiは文字列扱いになり、「文字列に空のインデックス演算子を適用すると fatal エラーが発生するようになりました。」に引っかかるのではないでしょうか。
ということで、
// Get any existing post status
$post_stati = $posts_query->get( 'post_status' );
// Default to public status
if ( empty( $post_stati ) ) {
$post_stati = array();
$post_stati[] = bbp_get_public_status_id();
// Split the status string
} elseif ( is_string( $post_stati ) ) {
$post_stati = explode( ',', $post_stati );
}
こんな感じに直してみます。修正したら、FTPでアップします。
無事に表示されました。
#幅広く運用されている割には、同じエラーに関する報告がみあたらないのは、既に運用開始されているところでは起こらないからだと思います。
#PHP 7.1.0以前に書かれたコードなのでしょう。
参考
関数リファレンス/WP Query > ステータスのパラメータ先ほど設定したPHPのエラー表示はOffにしておきましょう。