• 行き詰まって4日ほ
    ど経つので質問させていただきます。 エラーログを確認...
  • guest 
    行き詰まって4日ほど経つので質問させていただきます。
    エラーログを確認し、ググってその都度そのエラー内容に合わせて修正しているつもりなのですが、ゴールが見えないのでそもそも私のしていることが間違っているかもしれないと思い、質問させていただきます。

    カスタムウィジェットを追加するにあたり、動画通り、補足事項も反映しコードを入力しましたが、下記エラーになりました。
    PHP Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; my_widgets_item1 has a deprecated constructor in /Applications/MAMP/htdocs/wordpress/wp-content/themes/sample/functions.php on line 166

    調べると、クラス名とウィジェット名が同じでは新しいPHPバージョンでは推奨されないとのことだったので、検索し、下記のように書きました。(参考:https://webicky.net/php7-deprecated-error/ )
    164 register_widget($widget_class){
    165 //ウィジェット自体を作成する
    166 class my_widgets_item1 extends WP_Widget{
    167
    168 //初期化(管理画面で表示するウィジェットの名前を設定する)
    169 function __construct(){
    170 parent::__construct(false, $name = 'メリットウィジェット');
    }

    と書いたのですが、今度はカスタムウィジェット冒頭(add_action('widgets_init',function(){register_widget('My_Widget’);});)に対してのエラーだと思うのですが、wp-widget-factory.php のファイルに関してのエラーまで出てしまいました。

    Fatal error: Uncaught Error: Class 'My_Widget' not found in /Applications/MAMP/htdocs/wordpress/wp-includes/class-wp-widget-factory.php:100 Stack trace: #0 /Applications/MAMP/htdocs/wordpress/wp-includes/widgets.php(115): WP_Widget_Factory->register('My_Widget') #1 /Applications/MAMP/htdocs/wordpress/wp-content/themes/sample/functions.php(151): register_widget('My_Widget') #2 /Applications/MAMP/htdocs/wordpress/wp-includes/class-wp-hook.php(286): {closure}('') #3 /Applications/MAMP/htdocs/wordpress/wp-includes/class-wp-hook.php(310): WP_Hook->apply_filters(NULL, Array) #4 /Applications/MAMP/htdocs/wordpress/wp-includes/plugin.php(465): WP_Hook->do_action(Array) #5 /Applications/MAMP/htdocs/wordpress/wp-includes/widgets.php(1715): do_action('widgets_init') #6 /Applications/MAMP/htdocs/wordpress/wp-includes/class-wp-hook.php(286): wp_widgets_init('') #7 /Applications/MAMP/htdocs/wordpress/wp-includes/class-wp-hook.php(310): WP_Hook->apply_filters(NULL, Array) #8 /Applications/MAMP/htdocs/wordpress/wp-includes/plugin.php(465 in /Applications/MAMP/htdocs/wordpress/wp-includes/class-wp-widget-factory.php on line 100

    そこで、上記エラーを検索し、(参照:https://teratail.com/questions/192998)

    My_Widgetクラスが定義されていないのが原因かと思い、register_widget($widget_class)という関数をつけたらいいという記事をもとに、下記付け足しました。
    //付け足し部分
    164 register_widget( $widget_class ){
    //↑付け足し部分終了
    //ウィジェット自体を作成する
    166 class my_widgets_item1 extends WP_Widget{

    //初期化(管理画面で表示するウィジェットの名前を設定する)
    function __construct(){
    parent::__construct(false, $name = 'メリットウィジェット’);・・・・
    とし、register_widgetの閉じ括弧( } ) は一番ファイルの下に置きました。


    すると今度は
    Parse error: syntax error, unexpected 'class' (T_CLASS) in /Applications/MAMP/htdocs/wordpress/wp-content/themes/sample/functions.php on line 166

    という風に出てきたのですが、これはもともと講義で出てきた部分ですし、他に質問も見当たらないため、ここが違うというわけではないだろうと判断しました。

    答えを教えてくださいというわけではないのですが、そもそも私の上記の行動は、きちんと正解に向かっているのかどうか、いろいろなネットを鵜呑みにしすぎて違う方向に向かっているのかが確認したく質問させていただきました。

    この他にも先日からエラーをみてはググって試行錯誤を繰り返し、という形で、ファイルも3回ほど書き直しております。(ウィジェット部分のみ)。

    今はエラー続きでワードプレスの画面すら表示されません。このレッスンでの質問は少なく、みなさんそんなに躓いていないように見受けたので、私が違った方向に進んでいるのではないかと思っております。

    長文、暴走しているかもしれませんが、少しヒントをいただけましたら幸いです。
    よろしくお願いいたします。
    回答 0

    guest 
    数日置いてもう一度、エラーごとにググって落ち着いて向き合ったら解消しました。おさわがせしました。

    今後の方のために一つ言うとすれば、バージョンが上がってるので、メソッド名とクラス名はそのまま書いてはダメです。

    guest 
    落ち着いて後日一からやり直したらできました。おさわがせしました。
    バージョンが変わっているため、メソッド名とクラス名が同じではいけないと言うのは今後の人のために書いておきます。

     
    回答が遅れてしまい申し訳ありませんでした。
    ご自身で解決した内容を記載していただき、ありがとうございます。

    今回の場合は、ご記載いただいた通り、143行目付近の関数register_widget()の第一引数と157行目付近に記載のクラス名を同じにして、「ウィジェットを作成するクラスがどれなのか」というのを指定してあげる必要がありますね。

    また、この後にこの質問欄に作成していただいたスレッドについては誤りとのことですので、こちらで削除しておきます。