WordPress

WordPress

【WordPress】バージョン5.3にて使用しているプラグイン「AVH Extended Categories Widgets」にてエラーが出たのて対応した件

2019/12/23

WordPressのバージョンを5.3にアップグレードしましたら、久々にプラグインでの不具合が出たので、メモとして残しておきたいと思います。
対象のプラグインは「AVH Extended Categories Widgets」というプラグインです。

「AVH Extended Categories Widgets」プラグインのエラー

現象

WordPress本体のバージョンを、5.3へアップグレードした際に発現。
管理画面のキャプチャはこちら。

エラーはこんな感じの、Warningでした(一部パスを伏せ字にしています)
公開側画面のキャプチャを取り忘れたのですが、現象としては同じく Warning が表示されるというものでした。

AVH Extended Categories Widgetsの概要

「AVH Extended Categories Widgets」とは、ウィジェットへ任意のカテゴリを表示するプラグインです。
サイトの右ブロックにカテゴリ一覧があるのですが、その内容を表示するのに使用しています。

と書きましたが、正直私も忘れていたので検索して知った次第。
詳細は下記サイト様に掲載されていますので、興味のある方はご一読ください。

もしかしたら自分でインストールしたのではなく、テーマを変更した際に自動的にインストールされたプラグインかもしれません。

対策

では対策です。

wordpress upgrade AVH Extended Categories Widgets error

とググりましたら、下記サイトがヒットしました。

おお、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 876

Change 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以降、可変長引数リストを扱う時に、「...トークン」を使用して実装することが出来るとのこと。

世の中は知らないことだらけですな。

-WordPress
-, ,