エックスサーバーをPHP8.0系にアップデートしたら動かなくなったWordPressのプラグイン(TwitterDigest)をChatGPTに解決してもらった話

NextcloudをNextcloud26(Nextcloud Hub 4 (26.0.1))にするにあたって、エックスサーバーのPHPをPHP7.4系から8.0系に上げる必要がでてきた。

Nextcloud25にアップデートする時にどうしようも無い抜けられないエラーが出てしまい、クリーンインストールしNextcloud26になっちゃいました。 | happyman web

Nextcloud26(Nextcloud Hub 4 (26.0.1))に「OpenAI integration」モジュールをいれてChatGPTをやってみる | happyman web

仕方ないのでPHP8.0系にアップデートしたらWordpressの方で色々不都合が出てきました。

(それにしてもPHPのバージョンを勝手に行ったり来たりすることが出来るなんてほんと便利だな)

一番の不都合は、このサイト。オレオレTwilogをやっているサイトです。

はっぴ~まんの独白?毒吐? – WordPressのTwitter DigestプラグインによるTwitterの記録テストです

うっかりしてましたね。TwitterDigestというもう化石化したようなプラグインを使っていたのです。

もう作者は管理していませんので、このサイトを捨てようかと思っていたのですが、PHPって編集できるよね?ということになりまして、やってみることにしました。

1.TwitterDigestがPHP8.0系で使えなくなった原因。

TwitterDigestではどうやら、PHP8.0系では使えない「create_function()」が使用されているので、サイトは表示されているのですが、ページの更新がされなくなっていました。

PHP8, create_function()の廃止。無名関数を使おう! | ただ屋ぁのブログ

このサイトによると、無名関数に差し替えたら良いよとのことらしい。

無名関数ってなに?

差し替える例が乗っていましたが、私にはさっぱり意味がわかりません。

2.そうだ!ChatGPTさんに相談だ!そして解決。

諦めようかと思っていたのですが、ここで今話題のChatGPTさんに相談してみようかと言うことにしました。

$tweet = preg_replace_callback(

'/((?:^|\s+|[\"\’\[\(]))\@([\w]{1,30})/’,

create_function(

'$matches’,

'return $matches[1].ws_profile_link($matches[2]);’

),

$tweet

);

$tweet = preg_replace_callback(

'/((?:^|\s+|[\"\’\[\(]))\#([\w]{1,30})/’,

create_function(

'$matches’,

'return $matches[1].ws_hashtag_link($matches[2]);’

),

$tweet

);

エラーになっているコードはこれ。ここの「 create_function(」というところが使えなくなっているわけです。

そこで、ChatGPTさんにこんなお願いをしてみた。

「PHP8.0に対応させたい+上記コード」

ChatGPTさんがこんな答えを出してきました。

create_function()はPHP7.2で非推奨となり、PHP8.0では削除されました。代わりに、無名関数を使用することが推奨されます。

以下は、無名関数を使用して、$tweet変数をPHP8.0で動作するように修正した例です。

$tweet = preg_replace_callback(

'/((?:^|\s+|[\"\’\[\(]))\@([\w]{1,30})/’,

function($matches) {

return $matches[1] . ws_profile_link($matches[2]);

},

$tweet

);

おぉ・・・なんか知らないけど動きそうなコードが出てきました。

貼り付けたら、動きました。ChatGPTさんすごい。