注意
「まろやかWEB拍手 for WordPress」の利用規約によると:
改造は自由ですが自己責任で行ってください。尚、改造に関するサポートは行いません。
スクリプトの再配布は要相談といたします。改造したスクリプトを配布したい場合などは作者に予めご一報下さい。
とあるので、この記事では修正方法のみに言及して、修正したスクリプトは配布しません。
より簡潔な書き方
【WordPress】まろやかWEB拍手 for WordPressをPHP8に対応させる方法
こちらでアロー関数を使って簡潔に書く方法が紹介されています。私が変数を使ったのに特段の意味はないので、こちらの解決でよいと思います。それはそれとして、資料として下記の記述は残しておきます。(2023/2/20)
原因
WordPressのサポートフォーラムでも話題に出ていますが、widget.phpに含まれるcreate_functionが原因です。これを無名関数に書き換えればOKです。
対策
「widget.php」をテキストエディタ等で開き、「create_function」で検索してみましょう。まずは173行目。
add_action('widgets_init', create_function('', 'return register_widget("MaroyakaWebClapRankingWidget");'));
これを、次の2行に書き換えます:
$dice2000_func1 = function() { return register_widget("MaroyakaWebClapRankingWidget"); };
add_action('widgets_init', $dice2000_func1);
もう1ヶ所、ファイルの最後(上記の修正をする前は272行目、修正後だと273行目)。
add_action('widgets_init', create_function('', 'return register_widget("MaroyakaWebClapWidget");'));
これを、次の2行に書き換えます:
$dice2000_func2 = function() { return register_widget("MaroyakaWebClapWidget"); };
add_action('widgets_init', $dice2000_func2);
dice2000というのは、万が一にも変数名が被るとマズいので、絶対に被らない要素として入れてあります。
解説
phpはぼんやりとしか分からないので、phpのマニュアル見て考えました。
//create_functionの使い方
$newfunc = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);');
//無名関数
$newfunc = function($a,$b) { return "ln($a) + ln($b) = " . log($a * $b); };
//ということは……
//$newfunc = create_function('変数', '処理');
//$newfunc = function(変数) { 処理 };
//だから…
$hogehoge = create_function('', 'return register_widget("MaroyakaWebClapRankingWidget");');
//これは引数無しの関数になると
$hogehoge = function() { return register_widget("MaroyakaWebClapRankingWidget"); };