• 動画と補足を確認し
    つつカスタムウィジェットを作成しているのですが F...
  • 小柳由梨子小柳由梨子 
    動画と補足を確認しつつカスタムウィジェットを作成しているのですが

    Fatal error: Uncaught Error: Class 'MY_Widget' not found in /Applications/MAMP/htdocs/wordpress/wp-includes/class-wp-widget-factory.php:61 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(162): register_widget('MY_Widget') #2 /Applications/MAMP/htdocs/wordpress/wp-includes/class-wp-hook.php(292): {closure}('') #3 /Applications/MAMP/htdocs/wordpress/wp-includes/class-wp-hook.php(316): WP_Hook->apply_filters('', Array) #4 /Applications/MAMP/htdocs/wordpress/wp-includes/plugin.php(484): WP_Hook->do_action(Array) #5 /Applications/MAMP/htdocs/wordpress/wp-includes/widgets.php(1799): do_action('widgets_init') #6 /Applications/MAMP/htdocs/wordpress/wp-includes/class-wp-hook.php(292): wp_widgets_init('') #7 /Applications/MAMP/htdocs/wordpress/wp-includes/class-wp-hook.php(316): WP_Hook->apply_filters(NULL, Array) #8 /Applications/MAMP/htdocs/wordpress/wp-includes/plugin.php(484): in /Applications/MAMP/htdocs/wordpress/wp-includes/class-wp-widget-factory.php on line 61

    という過去の質問と近いエラーが出ました。


    関数register_widget()の第一引数と157行目付近に記載のクラス名を同じにして、「ウィジェットを作成するクラスがどれなのか」というのを指定する必要があるということで

    160 // ウィジェットエリアを作成する関数がどれなのか登録する
    161 add_action('widgets_init', function(){
    162 register_widget('MY_Widget');
    163 });
    164 // ウィジェット自体の作成する関数がどれなのかを登録する
    165 add_action( 'widgets_init', function(){
    166 register_widget( 'my_widgets_item1' );
    167 });

    169 // ウィジェットエリアを作成する
    170 function my_widgets_area(){
    171 register_sidebar( array(
    172 'name' => 'メリットエリア',
    173 'id' => 'widget_merit',
    174 'before_widget' => '<div>',
    175 'after_widget' => '</div>'));
    176
    177 register_sidebar( array(
    178 'name' => 'right-sidebar',
    179 'id' => 'my_sidebar',
    180 'before_widget' => '<div>',
    181 'after_widget' => '</div>',
    182 'before_title' => '<h2 class="rounded">',
    183 'after_title' => '</h2>'
    184 ));
    185 }
    186
    187 // ウィジェット自体を作成する
    188 class my_widgets_item1 extends WP_Widget{
    189
    190 /* 初期化(管理画面で表示するウィジェットの名前を設定する)*/
    191 public function __construct() {
    192 parent::__construct(false, $name = 'メリットウィジェット');
    193 }

    166行目のメソッドの第一引数と188行目のクラス名を揃えましたが状況が変わりません。
    他に確認が必要な箇所はあるでしょうか?
    回答 2

    ウェブカツコーチ 
    講師からの回答
    エラー文には「Class 'MY_Widget' not found ...」とあります。
    つまり「MY_Widget クラスが見つからない」ということです。

    「166行目のメソッドの第一引数と188行目のクラス名を揃えましたが...」
    これはmy_widgets_item1のことですね。

    小柳由梨子 
    回答ありがとうございます。

    ・165-167行目をコメントアウトする
    ・188行目のクラス名をmy_widgets_item1からMy_Widgetに変更する

    の二つを実施したところエラーが出なくなりました。

    小柳由梨子 
    エラーは出なくなりましたがwordpressの管理画面で
    外観→ウィジェットの項目が表示されなくなったため

    ・161-163行目をコメントアウトしていた165-167行目に置き換える
    ・188行目のクラス名をMy_Widgetからmy_widgets_item1に変更する

    対応を行いました

    ウェブカツコーチ 
    講師からの回答
    「MY_Widget クラスが見つからない」
    見つからないのでMY_Widget クラスを追加してあげればいいわけです。my_widgets_item1と同じように。

    小柳由梨子 
    ありがとうございます


    add_action( 'widgets_init', function(){
    register_widget( 'My_Widget' );
    });


    class My_Widget extends WP_Widget{
    public function __construct() {
    parent::__construct(false, $name = 'ウィジェット');
    }
    }


    を追加したところ

    Class 'MY_Widget' not found
    のエラーが解消されました