प्लगइन में कस्टम विजेट समारोह काम नहीं कर रहा है?


15

मैंने अपने द्वारा बनाए गए विषयों में से एक से सीधे एक कोड लिया, और यह सभी 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

धन्यवाद।

जवाबों:


15

बदलने का प्रयास करें:

register_widget('States_Widget');

साथ में:

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

खुशी है कि मैं मदद कर सकता हूँ
Bainternet

2
वन-लाइनर: add_action ('widgets_init', create_function ('', '' register_widget ("States_Widget");)));
ज़ाचरी शूसेलर

3
उन वन-लाइनर्स का गंभीर नुकसान है कि अगर उपयोगकर्ता remove_action जारी करना चाहते हैं, तो वे नहीं कर सकते, क्योंकि कोई भी हुक फ़ंक्शन नहीं है जिसे हटाया जा सकता है।
इलियट

1

चलिए हम मान लेते हैं कि आपको एक तर्क के रूप में विजेट नाम को पारित करके एक वर्ग विधि के अंदर एक विजेट को इनिशियलाइज़ करना होगा। इसे पूरा करने के लिए आप ऐसा करेंगे:

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इसका उपयोग करने के लिए चर नाम को हमारे लंबो फ़ंक्शन में पास करना होगा। ऐसा करने वाला हिस्सा है use (&$widget_name)। जैसा कि पहले से ही बताया गया है कि इस तरह से हटाए गए हुक को हटाया नहीं जा सकता है remove_action

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.