Eklentide Özel Widget işlevi çalışmıyor?


15

Oluşturduğum temalardan birinden doğrudan bir kod aldım ve kenar çubuğuna sürükleyip bırakabileceğiniz bir widget içine paketlenmiş sıralanmamış bir listede tüm 50 durumun bir listesi.

Sorun, bu kodu bir PLUGIN dosyasında kullanmayı denediğimde, aşağıdaki hatayı alıyorum:

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

Neden tema içinde çalışır, ancak eklentide işe yaramaz? Bu arada, aktif tema kodu çıkardığım tema DEĞİL.

İşte kodum: http://pastebin.com/ZeRWW3yb

Teşekkürler.

Yanıtlar:


15

değiştirmeyi deneyin:

register_widget('States_Widget');

ile:

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

Sevindim yardım edebilirim
Bainternet

2
Tek satırlı: add_action ('widgets_init', create_function ('', 'return register_widget ("States_Widget");'));
Zachary Schuessler

3
Bu tek satırlar, kullanıcılar remove_action vermek isterse yapamayacakları ciddi bir dezavantaja sahiptir, çünkü kaldırılabilecek bir kanca işlevi yoktur.
Elliot

1

Widget adını bağımsız değişken olarak geçirerek, bir sınıf yöntemi içinde bir widget başlatmanız gerektiğini varsayalım. Bunu başarmak için şunu yaparsınız:

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 );
            }
        );
    }
}

Değişken $widget_nameadını kullanmak için lambda fonksiyonumuza iletmemiz gerektiğini unutmayın. Bunu yapan kısım use (&$widget_name). Daha önce belirtildiği gibi, bu şekilde başlatılan kancalar tarafından çıkarılamaz remove_action.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.