প্লাগইনে কাস্টম উইজেট ফাংশন কাজ করছে না?


15

আমি আমার তৈরি থিমগুলির মধ্যে সরাসরি একটি কোড নিয়েছি এবং এটি এমন একটি 50 টি রাজ্যের একটি তালিকা রয়েছে যা একটি বিন্যাসিত তালিকার মধ্যে নেই এমন একটি উইজেটে আপনি প্যাচ করে সাইডবারে রেখে দিতে পারেন।

সমস্যাটি হল, যখন আমি এই কোডটি একটি প্লাগিন ফাইলে ব্যবহার করার চেষ্টা করি তখন আমি নিম্নলিখিত ত্রুটিটি পাই:

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


2
ওয়ান-লাইনার: অ্যাডঅ্যাকশন ('উইজেটস_ইনিট', ক্রিয়েট ফাংশন ('', 'রিটার্ন রেজিস্টার_ উইজেট ("স্টেটস_ উইজেট");')));
জ্যাচারি শিউসেলার

3
এই ওয়ান-লাইনারগুলির মারাত্মক অসুবিধা রয়েছে যে ব্যবহারকারীরা মুছে ফেলা_অ্যাকশন ইস্যু করতে চাইলে তারা তা করতে পারে না, কারণ এমন কোনও হুকড ফাংশন নেই যা মুছে ফেলা যায়।
এলিয়ট

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.