• 解決済 shokun0803

    (@shokun0803)


    特定の環境の特定の状況でのみ以下の Warning が発生しております。

    Warning: in_array() expects parameter 2 to be array, null given in /home/www/wp-content/plugins/advanced-gutenberg/init.php on line 109
    
    Warning: in_array() expects parameter 2 to be array, null given in /home/www/wp-content/plugins/advanced-gutenberg/init.php on line 110
    
    Warning: array_push() expects parameter 1 to be array, null given in /home/www/wp-content/plugins/advanced-gutenberg/init.php on line 116

    これに関して、対象のプラグインは PublishPress Blocks で間違いないのですが、エラーの発生する条件があります。
    ・エラーの発生する箇所は「外観 – ウィジェット」( /wp-admin/widgets.php )
    ・本番環境およびその検証サイト(DBコピー)で発生する
    ・ローカルの WSL2 (Ubuntu)環境でプラグイン新規インストール時には発生しない
    ・検証サイトにて PublishPress Blocks 以外のプラグイン無効化 → 発生する
    ・検証サイトにてテーマをデフォルトに変更 → 発生する
    ・PublishPress Blocks プラグインを削除、再インストール → 発生する

    該当プラグインのフォーラムにはそれらしき質問はありませんでした。その代わり他のプラグインで同じようなエラーを発生しているフォーラムの書き込みがあり、一部ではプラグイン側のミスで修正を行っているようです。
    エラーの内容的には配列ではない変数をarray_push()している、もしくは配列として定義されていない変数をin_array()していることによるエラーだと思いますが、特定環境(本番環境のサーバー)のみ出ているため、これ以上の検証ができずに困っています。

    何か他に検証してみるべき内容があればご教授頂きたいと思います。
    よろしくお願いいたします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • @shokun0803 さん

    こんにちは。

    該当のエラーを出しているの箇所のソースを読んでみました。

    詳しい説明は避けますが、プラグイン側で特定の条件で発生するエラーなので、プラグインのサポートフォーラムで報告されてみてはいかがでしょうか。

    https://wordpress.org/support/plugin/advanced-gutenberg/

    トピック投稿者 shokun0803

    (@shokun0803)

    Tetsuaki Hamanoさん、ありがとうございます。

    自分も該当箇所のソースは読んでいて、前後ソースの確認までは行っていませんが、そもそもなぜ現在の本番環境でのみ発生して、別の環境では発生していないのかが分からなかったため、プラグイン作者側への報告ができずにおります。
    せめてローカル環境で再現できて、ソースを弄って状況が判明するのであればすぐにでも報告するのですが…

    以前他のプラグインで、別のプラグインとの競合が発生していた報告を行ったらそっちのプラグインの問題だからそっちに報告しろ…のようなこともあったので、できれば最低限状況を把握しよう思っております。
    ローカルのPHPのバージョンを上げてみたりしていますが、まだ現象を確認できずです。本番環境はレンタルサーバーのためあまり弄れなくて、ログの保存設定等は先ほど済ませたのですけど、特段別のログは取得できておりません…

    じっくりソース追っかけるしかないかしら…

    こんにちは

    私はこのプラグインについて知りませんが、該当箇所のソースとエラーを見ると単純なロジック上のミスと思いますが・・・

    開発者はこの Warning が発生しないようにいかのいずれかのようにコードを書く必要があります。
    $advgb_blocks_user_roles[$current_user_role]['active_blocks']というハッシュが常に存在するようにする。
    $advgb_blocks_user_roles[$current_user_role]['active_blocks']が存在しない場合には、in_arrayが実行されないように事前にチェックする。

    この Warning は PHP のバージョンに依存しないと思いますので、PHP のバージョンを変更してもなくならないと思います。

    該当箇所のソースから類推すると、現在のユーザーのロールでウィジットブロックをアクティブにするか、インアクティブにするか、あるいは何かロールにウィジットブロックを紐づける操作をしたらでなくなるんじゃないでしょうか。

    ちょっと間違えましたね。

    $advgb_blocks_user_roles[$current_user_role]['active_blocks']というハッシュの値が常に配列であるようにする。
    $advgb_blocks_user_roles[$current_user_role]['active_blocks']の値がが配列ではない場合には、in_arrayが実行されないように事前にチェックする。

    トピック投稿者 shokun0803

    (@shokun0803)

    munyaguさん、ありがとうございます。

    なんだか30分前に同じような内容をプラグインフォーラムに投げている人が出てきましたね…
    https://wordpress.org/support/topic/php-warnings-in-customizer-page/
    PHP 8でと言っているけど、そうでもない気がします。少し結果追いかけてみようかな。

    該当箇所では$advgb_blocks_user_rolesを配列である前提で扱っていますけれども、その中身は目前で
    $advgb_blocks_user_roles = get_option( 'advgb_blocks_user_roles' ) && !empty( get_option( 'advgb_blocks_user_roles' ) ) ? get_option( 'advgb_blocks_user_roles' ) : [];
    しているので、オプションで取得できる情報が空だとそもそも空を返していそうだし、返り値が配列である確証もなさそうですねぇ…
    (array)でキャストしてもいいけど、本来はget_optionで配列が返ってくると言うことなのでしょう。
    さらにその先でarray_pushしているから、ちゃんと配列にしておいてよって感じですかね…

    ちょっとプラグインのフォーラム様子見してみながら、本番環境にのみ発生する(おそらくget_optionの返り値が問題)原因も探ってみます。

    @shokun0803 さんこんにちは。

    上記コードの意味は、

    advgb_blocks_user_roles というオプションが存在し、かつ空でなければ、$advgb_blocks_user_roles にその値を格納する。
    そうでなければ、$advgb_blocks_user_roles に空配列を格納する

    という意味です。

    $advgb_blocks_user_roles が配列である事は担保されていますが、ただの空配列である時もあるので、

    $advgb_blocks_user_roles[$current_user_role]['active_blocks']
    $advgb_blocks_user_roles[$current_user_role]['inactive_blocks']

    のキー自体が存在しない(null)→in_arrayでエラーが出る

    という事だと思います。

    単純にプラグイン側で配列のキーのチェックが漏れているだけだと思うので、詳細をフォーラムで報告されると良いと思います。
    ※エラーメッセージだけ投げても伝わると思います。

    トピック投稿者 shokun0803

    (@shokun0803)

    Tetsuaki Hamanoさん、ありがとうございます。

    おっしゃる通りでした。
    完全に私のソースの読み間違いですが、何もない時は空配列のためエラーですね…

    そして、プラグインフォーラムの他の方の質問の回答から、Blocksのメニューから何も考えずにオプション画面をSaveすることでエラーがなくなりました。
    おそらくどこかのバージョンからオプションが保存されていることが前提に変わっていて、本番環境ではアップデートしながら使用していたためオプションを保存したことがなかったことから、get_optionがNullで空の配列が返ってきていたのだと思われます。

    普段あまり使わないような管理画面の特定の状況のみで出る警告レベルのエラーですから、深く考えることもないのでしょうけど、やっぱり気になりますよね…
    最新バージョンの新規インストールでは発生しないことから、開発側はバグとしては考えていないのでしょうけども。

    ありがとうございました。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「特定の環境のみでのWarningについて」には新たに返信することはできません。