WordPress FAQ ManagerのPHP7.x~対応

今から8年前が最終更新日というWordPressのプラグイン「WordPress FAQ Manager」をPHP7.4.10環境に移行したあとも使い続ける必要があったので、プラグインをメンテナンスしたメモです。
プラグインを使わずカスタム投稿タイプで作り変える方が良いなと思ったのですが、今回は諸々の事情により可能な限り現状維持で環境を移行します。

移行前の環境
PHP5.3.3
WordPress5.1.1

移行後の環境
PHP7.4.10
WordPress5.5.1

プラグイン
WordPress FAQ Manager1.331(最終更新: 8年前)

という訳で、サーバー移行が無事に済み、WordPressやプラグインのアップデートが完了するとエラーを吐きました。
(事前にwp-config.phpでdefine(‘WP_DEBUG’, true);にして作業しています)

エラー全文(以下、サーバーのパスはすべて/※※※/に書き変えています)
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; search_FAQ_Widget has a deprecated constructor in /※※※/wp-content/plugins/wordpress-faq-manager/faq-widgets.php on line 13 Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; random_FAQ_Widget has a deprecated constructor in /※※※/wp-content/plugins/wordpress-faq-manager/faq-widgets.php on line 67 Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; recent_FAQ_Widget has a deprecated constructor in /※※※/wp-content/plugins/wordpress-faq-manager/faq-widgets.php on line 146 Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; topics_FAQ_Widget has a deprecated constructor in /※※※/wp-content/plugins/wordpress-faq-manager/faq-widgets.php on line 221 Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; cloud_FAQ_Widget has a deprecated constructor in /※※※/wp-content/plugins/wordpress-faq-manager/faq-widgets.php on line 314 Deprecated: Function create_function() is deprecated in /※※※/wp-content/plugins/wordpress-faq-manager/faq-widgets.php on line 405 Deprecated: Function create_function() is deprecated in /※※※/wp-content/plugins/wordpress-faq-manager/faq-widgets.php on line 406 Deprecated: Function create_function() is deprecated in /※※※/wp-content/plugins/wordpress-faq-manager/faq-widgets.php on line 407 Deprecated: Function create_function() is deprecated in /※※※/wp-content/plugins/wordpress-faq-manager/faq-widgets.php on line 408 Deprecated: Function create_function() is deprecated in /※※※/wp-content/plugins/wordpress-faq-manager/faq-widgets.php on line 409 Deprecated: search_FAQ_Widget で呼び出された WP_Widget のコンストラクターメソッドはバージョン 4.3.0 から非推奨になっています ! 代わりに __construct() を使ってください。 in /※※※/wp-includes/functions.php on line 4866 Deprecated: random_FAQ_Widget で呼び出された WP_Widget のコンストラクターメソッドはバージョン 4.3.0 から非推奨になっています ! 代わりに __construct() を使ってください。 in /※※※/wp-includes/functions.php on line 4866 Deprecated: recent_FAQ_Widget で呼び出された WP_Widget のコンストラクターメソッドはバージョン 4.3.0 から非推奨になっています ! 代わりに __construct() を使ってください。 in /※※※/wp-includes/functions.php on line 4866 Deprecated: topics_FAQ_Widget で呼び出された WP_Widget のコンストラクターメソッドはバージョン 4.3.0 から非推奨になっています ! 代わりに __construct() を使ってください。 in /※※※/wp-includes/functions.php on line 4866 Deprecated: cloud_FAQ_Widget で呼び出された WP_Widget のコンストラクターメソッドはバージョン 4.3.0 から非推奨になっています ! 代わりに __construct() を使ってください。 in /※※※/wp-includes/functions.php on line 4866

やだ苦手。
1つずつ調べていきます。
最初の

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; search_FAQ_Widget has a deprecated constructor in /※※※/wp-content/plugins/wordpress-faq-manager/faq-widgets.php on line 13

は、wp-content/plugins/wordpress-faq-manager/faq-widgets.phpの13行目以降の2ヶ所を修正します。

//修正前
class search_FAQ_Widget extends WP_Widget {
function search_FAQ_Widget() {
$widget_ops = array( 'classname' => 'faq-search-widget widget_search', 'description' => 'Puts a search box for just FAQs' );
$this->WP_Widget( 'faq_search', 'FAQ Widget - Search', $widget_ops );
}
//修正後
class search_FAQ_Widget extends WP_Widget {
function __construct() {
$widget_ops = array( 'classname' => 'faq-search-widget widget_search', 'description' => 'Puts a search box for just FAQs' );
parent::__construct( 'faq_search', 'FAQ Widget - Search', $widget_ops );
}


※こちらの記事を参考にさせていただきました。
https://www.terakoya.work/wp_widget-construct-method-error/

同様の修正を、67行目~、146行目~、221行目~、314行目~にも行って、計5か所直します。

次にこちらのエラーですが、PHP7.2以降で出るエラーの様です。

Deprecated: Function create_function() is deprecated in /※※※/wp-content/plugins/wordpress-faq-manager/faq-widgets.php on line 405 Deprecated: Function create_function() is deprecated in /※※※/wp-content/plugins/wordpress-faq-manager/faq-widgets.php on line 406 Deprecated: Function create_function() is deprecated in /※※※/wp-content/plugins/wordpress-faq-manager/faq-widgets.php on line 407 Deprecated: Function create_function() is deprecated in /※※※/wp-content/plugins/wordpress-faq-manager/faq-widgets.php on line 408 Deprecated: Function create_function() is deprecated in /※※※/wp-content/plugins/wordpress-faq-manager/faq-widgets.php on line 409

405行目以下をごっそり置き換えて修正します。
(どこの記事を参考に直したのか記録し忘れてしまいましたが、エラー文で検索するといっぱい出てきます。)

//修正前
add_action( 'widgets_init', create_function( '', "register_widget('search_FAQ_Widget');" ) );
add_action( 'widgets_init', create_function( '', "register_widget('random_FAQ_Widget');" ) );
add_action( 'widgets_init', create_function( '', "register_widget('recent_FAQ_Widget');" ) );
add_action( 'widgets_init', create_function( '', "register_widget('topics_FAQ_Widget');" ) );
add_action( 'widgets_init', create_function( '', "register_widget('cloud_FAQ_Widget');" ) );
//修正後
add_action('widgets_init', function(){register_widget('search_FAQ_Widget' );});
add_action('widgets_init', function(){register_widget('random_FAQ_Widget' );});
add_action('widgets_init', function(){register_widget('recent_FAQ_Widget' );});
add_action('widgets_init', function(){register_widget('topics_FAQ_Widget' );});
add_action('widgets_init', function(){register_widget('cloud_FAQ_Widget' );});

以上でエラーはすべて消えました。
今後の為にもクライアントさんとコンテンツの再構築について相談しないといけませんね。

WordPress使う時は小まめにメンテナンスをちゃんとしましょうっ!


Comments

コメントを残す