【WordPress】バージョン5.3にて使用しているプラグイン「AVH Extended Categories Widgets」にてエラーが出たのて対応した件
2019/12/23
WordPressのバージョンを5.3にアップグレードしましたら、久々にプラグインでの不具合が出たので、メモとして残しておきたいと思います。
対象のプラグインは「AVH Extended Categories Widgets」というプラグインです。
「AVH Extended Categories Widgets」プラグインのエラー
現象
WordPress本体のバージョンを、5.3へアップグレードした際に発現。
管理画面のキャプチャはこちら。
1 2 3 4 5 6 7 8 9 |
Warning: Declaration of AVH_Walker_Category_Checklist::walk($elements, $max_depth) should be compatible with Walker::walk($elements, $max_depth, ...$args) in /***/plugins/extended-categories-widget/4.2/class/avh-ec.widgets.php on line 0 Warning: Declaration of AVH_Walker_CategoryDropdown::walk($elements, $max_depth) should be compatible with Walker::walk($elements, $max_depth, ...$args) in /***/plugins/extended-categories-widget/4.2/class/avh-ec.core.php on line 0 Warning: Cannot modify header information - headers already sent by (output started at /***/plugins/extended-categories-widget/4.2/class/avh-ec.widgets.php:0) in /***/wp-includes/functions.php on line 5946 Warning: Cannot modify header information - headers already sent by (output started at /***/plugins/extended-categories-widget/4.2/class/avh-ec.widgets.php:0) in /***/wp-admin/includes/misc.php on line 1252 Warning: Cannot modify header information - headers already sent by (output started at /***/plugins/extended-categories-widget/4.2/class/avh-ec.widgets.php:0) in /***/wp-admin/admin-header.php on line 9 |
エラーはこんな感じの、Warningでした(一部パスを伏せ字にしています)
公開側画面のキャプチャを取り忘れたのですが、現象としては同じく Warning が表示されるというものでした。
AVH Extended Categories Widgetsの概要
「AVH Extended Categories Widgets」とは、ウィジェットへ任意のカテゴリを表示するプラグインです。
サイトの右ブロックにカテゴリ一覧があるのですが、その内容を表示するのに使用しています。
と書きましたが、正直私も忘れていたので検索して知った次第。
詳細は下記サイト様に掲載されていますので、興味のある方はご一読ください。
https://webkaru.net/wordpress/plugin-avh-extended-categories-widgets/
もしかしたら自分でインストールしたのではなく、テーマを変更した際に自動的にインストールされたプラグインかもしれません。
対策
では対策です。
wordpress upgrade AVH Extended Categories Widgets error
とググりましたら、下記サイトがヒットしました。
https://wordpress.org/support/topic/widget-generates-error-with-upgrade-to-wp-5-3/page/2/
おお、100%的中している内容っぽいです。
その中の下記内容が対策のようです。
You may try to edit two lines with the same content in these two files:
/plugins/extended-categories-widget/4.2/class/avh-ec.widgets.php line 62
/plugins/extended-categories-widget/4.2/class/avh-ec.core.php line 876Change both lines from:
public function walk($elements, $max_depth) {
to:
public function walk($elements, $max_depth, …$args) {The warning will be gone, please test if the plugin still works as desired.
avh-ec.widgets.php の62行目と、avh-ec.core.php の876行目にある関数の引数に、オプションを追加すれば良いとのこと。
しかし「…$args」のドット3つは何なんだ??
しかもよく見るとなぜか全角文字のリーダー点「…」になってる。なんじゃこりゃ。
もう少し下まで読んでみると、以下の書き込みが。
Hi aaron, thanks for your feedback.
Sorry, on the way from my tested code to my posting here the three dots ... before $args were somewhere replaced by an ellipsis … – looks similar, but is as wrong as a greek question mark instead of a semicolon (the classic prank).And yes, with three dots it is valid PHP, see https://www.php.net/manual/en/functions.arguments.php#functions.variable-arg-list
Edit: just learned that the CODE-Tag in the editor here prevents the three-dots-replace.
Change both lines from:
public function walk($elements, $max_depth) {
to:
public function walk($elements, $max_depth, ...$args) {
半角ドットを3つ書いたつもりが、システムの都合で全角文字に変換されたようだ、とのこと。
正しくは半角ドットを3つ書くのだそうな。
しかもPHP公式サイトへのリンク付き。
仕様はあとで確認するとして、まずは対策。
仕組みがよくわからないのでドットを書かずに「$args」のみを追記して試すと、対策前と変わらずに、Warningが出ました。
半信半疑ながら、ドット付きで「...$args」として試してみると、、、
おお!? Warningが消えたぞ。
可変長引数リスト
「...」について調査すると「可変長引数リスト」という答えに行き着きました。
PHP5.6以降、可変長引数リストを扱う時に、「...トークン」を使用して実装することが出来るとのこと。
https://qiita.com/Kunikata/items/66a9c339b697d4196d45
世の中は知らないことだらけですな。