web-dev-qa-db-ja.com

プラグインのカスタムウィジェット機能が動作しませんか?

私が作成したテーマの1つから直接コードを取り出しました。これは、サイドバーにドラッグアンドドロップできるウィジェットにまとめられた番号なしリスト内の全50州のリストです。

問題は、PLUGINファイルでこのコードを使用しようとすると、次のエラーが発生することです。

Fatal error: Call to a member function register() on a non-object in C:\xampp\htdocs\wordpress\wp-includes\widgets.php on line 431

テーマでは機能するのに、プラグインでは機能しないのはなぜですか。ところで、アクティブなテーマはコードを取り出したテーマではありません。

これが私のコードです: http://Pastebin.com/ZeRWW3yb

ありがとう。

14
Jared

交換してみてください。

register_widget('States_Widget');

と:

add_action('widgets_init', 'register_states_widget');
function register_states_widget() {
    register_widget('States_Widget');
}
14
Bainternet

引数としてウィジェット名を渡すことにより、クラスメソッド内でウィジェットを初期化する必要があると仮定します。これを実現するには、次のようにします。

class WidgetMonster {
    /**
     * Register widget via PHP lambda function as an argument to the add_action function
     * @var $widget_name string | WP_Widget.
     */
    public static function register_widget_helper( $widget_name ) {
        add_action('widgets_init',
            function() use ( &$widget_name ) {
                return register_widget( $widget_name );
            }
        );
    }
}

変数$widget_name nameをラムダ関数に渡して使用する必要があることに注意してください。これを行う部分はuse (&$widget_name)です。既に述べたように、このように初期化されたフックはremove_actionで削除できません。

1
toni_lehtimaki