フリーのだいたいWeb屋の技術系メモ
最近AIが好き
仕事じゃないスクリプト書きはとても楽しい

bbPressの導入(fatal エラー解決方法付き)

2017年8月22日  2017年9月4日 

環境

さくらのレンタルサーバ
PHP 7.1
Wordpress 4.7.5
bbPress 2.5.13

まずはインストール

WP管理画面>プラグイン>新規追加>「bbPress」で検索>インストール>有効化

日本語化

WordPressのフォーラムプラグイン bbPress 2.5.4 を日本語化してみた

こちらのページから、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
をエディタで開きます。
1800行目前後は、

// 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にしておきましょう。

フォーラムを作ってみる

WP管理画面>フォーラム>フォーラムを新規作成
ここで作ったフォーラムは、カテゴリ的な意味合いになります。

トピックも作ってみる

WP管理画面>トピック>トピックを新規作成
ここでトピックを作成する際に、トピック属性>フォーラムで先ほど作ったフォーラムを指定すると、先ほど作ったフォーラムの中にトピックを入れることができます。

フロントページに表示させてみよう

固定ページなどに、[bbp-forum-index] とタグを書いてみましょう。
フォーラムのリストページが表示されます。
フロント側フォーラム一覧ページ画像
bbPressの設定などはこちらのページも詳しかったです。
bbPress メンバー登録制フォーラムの設置と使い方のまとめ
ー記事をシェアするー
B!
タグ
人気の投稿