WordPressでCall to undefined method GuzzleHttp\Utils::chooseHandler()

こんにちは、フリーランスエンジニアの太田雅昭です。

PHPでWordPressプラグイン開発も行っているのですが、他プラグインとの競合が起こりました。

Call to undefined method GuzzleHttp\Utils::chooseHandler()

これはWordPressに複数インストールしているプラグインが、競合を起こしてこうなっているようです。

他プラグインとの競合

具体的には、BackWpUpというプラグインですね。コードを見てもGuzzleHttpのバージョンが分かりませんでしたので、更新履歴から推察することにします。2023/09/15現在このプラグインが現在はバージョン4ですが、3.1.2の時にGuzzleHttp SDKを3.8.1にアップデートしたとあります。その後特にGuzzleHttpに関する記述がないことから、おそらく今でもGuzzleHttpは3.8.1と思われます。

BackWPup – WordPress Backup Plugin

WordPress の完全自動バックアップを予約します。保存するコンテンツ (Dropbox、S3など) を指定できます。これは無料版です

一方で今のGuzzleHttpはバージョンは2023/09/15時点で7.8.0で、私が今開発に使っているのは7.7です。7.7と3.8.1との間の差で、今回のエラーとなっているようです。実際にBackWpUpプラグインを無効化すると、正常に動くことを確認しました。

ならどうするか

私自身Composerのことをあまりよく理解できていなかったこともあり、どうにか出来るのではないかとかなり調べましたが、どうも根本的な解決は無理そうです。

大局的に考えれば、古いバージョンのライブラリを使い続けるより新しいバージョンに合わせるのがセオリーだとは思うのですが、作者の都合や事情もあるのかなと。これだけ古いバージョンを使い続けているのですから、何か根幹的ないじりにくい部分で変えにくいと言うこともあるのかも知れません。

ちなみに、以下では力技を紹介されています。

PHP-ScoperでWordPressプラグインのコンフリクトを解決する

PHPにはcomposerという高度なパッケージ管理ツールが存在しており、WordPressでもcomposerを利用した開発がさかんに行われている。しかし、ついにコンフリクトが発生するようになったため、その解決方法と知 […]

これはComposerライブラリの名前空間を置換すると言う力技です。まぁ私の場合ここまですることもありませんので、とりあえずGuzzleHttpを使わずに、他ので代替することにしようかなと。

最近は曇りが多く涼しかったのですが、今日はまた暑いです。夏はまだまだ続きそうですね。