কিছু হুক শ্রেণি প্রসঙ্গে কেন কাজ করে না?


16

আমি এই এক খুব স্ট্যাম্পড। আমি আমার প্লাগইন বর্গের ভিতরে কিছু কাজ করার জন্য অ্যাডঅ্যাকশনটি ব্যবহার করছি - স্ক্রিপ্টগুলি এবং শৈলীতে মাথায় যোগ করুন, ডাব্লুপি_জ্যাক্স, ইত্যাদি the কনস্ট্রাক্টে এখানে ক্রিয়াগুলি এখানে রয়েছে:

function __construct(){
    add_action('admin_menu', array($this, 'sph_admin_menu'));
    add_action('sph_header', array($this, 'sph_callback'));
    add_action('sph_header_items', array($this, 'sph_default_menu'), 1);
    add_action('sph_header_items', array($this, 'sph_searchform'), 2);
    add_action('sph_header_items', array($this, 'sph_social'), 3);

    //Below here they don't work. I have to call these outside of the class (but I need class variables within the functions)
    add_action('wp_print_styles', array(&$this, 'sph_stylesheets'));
    add_action('wp_print_scripts', array(&$this, 'sph_scripts'));
    add_action( 'wp_ajax_nopriv_add_to_list', array(&$this, 'le_add_to_list'));
    add_action( 'wp_ajax_add_to_list', array(&$this, 'le_add_to_list'));
    add_action('init', array(&$this, 'register_menu'));
}

কেউ কি কখনও এই জাতীয় কিছু জুড়ে আসে? আমি কীভাবে ক্লাসের মধ্যে থেকে বলা হুকগুলি কীভাবে ব্যবহার করতে পারি তা জানতে চাই - ক্লাসের বাইরে এমন অগোছালো ক্রিয়া হচ্ছে!


3
আপনি কি এই শ্রেণীর উদাহরণ তৈরি করেছেন? উদাহরণস্বরূপ: $my_plugin = new MYClass();যেহেতু আমি কোনও ক্লাসের মধ্যেই এই একই হুকগুলি ব্যবহার করেছি।
— বেনারনেট

1
অতিরিক্তভাবে, নিশ্চিত করুন যে হুক হিসাবে পরিবেশন করা ফাংশনগুলির publicদৃশ্যমানতা রয়েছে।
— জোসেফ লেডি

বেন্টারনেট হ্যাঁ আমি আছি। @ জোসেফ এটি হতে পারে নির্মাণ জনসাধারণ হতে পারে? চিয়ার্স
— হারলে

@Harley - bainternet জিজ্ঞাসা ছিল যেখানে আপনি একটি দৃষ্টান্ত তৈরি করব।
— স্টিফেন হ্যারিস

@ হারলে যদি আপনি ভিজিবিলিটি মডিফায়ারটি অন্তর্ভুক্ত না করেন তবে এটি স্বয়ংক্রিয়ভাবে জনসাধারণের কাছে সেট হয়ে গেছে। আমি প্রকৃত ফাংশনটি উল্লেখ করছিলাম যা কিছু ক্রিয়া হুক করা হচ্ছে তা সম্পাদন করে।
— জোসেফ লেডি

উত্তর:


10

কখনও কখনও নির্দিষ্ট হুক গুলি নির্দিষ্ট সময়ে নিক্ষেপ করা প্রয়োজন। উদাহরণস্বরূপ, কিছু হুকগুলি ডিআইএসের উপর নিক্ষেপ করা দরকার ।

এটি আপনার যুক্ত করুন __construct()

add_action('init', array(&$this, 'init'));

তারপর এই ফাংশন, সব আঙ্গুলসমূহ উপর বহিস্কার করা প্রয়োজন উপস্থিত থাকবে যা যোগ Init ।

public function init(){
    add_action('hook_name', array(&$this, 'your_method_name'));
    add_action('hook_name', array(&$this, 'your_method_name'));
    add_action('hook_name', array(&$this, 'your_method_name'));
    add_action('hook_name', array(&$this, 'your_method_name'));
}

আরেকটি উদাহরণ:

add_action( 'init', function () {

    add_action( 'hook_name', 'function_name', 10, 3 );
    add_action( 'hook_name', __NAMESPACE__ . '\namespaced_function_name', 10 );
    add_action( 'hook_name', '\specific\namespace\function_name', 5 );

}, 1 );

আপনি হুকগুলি এবং যখন তাদের বরখাস্ত করা হবে সে সম্পর্কে পড়তে চাইবেন। সুতরাং কখন আপনি কোথায় আপনার ক্রিয়াকলাপ করতে হবে তা আপনি জানেন। প্লাগইন এপিআই / অ্যাকশন রেফারেন্স


3

এটি বেশ পুরানো প্রশ্ন, তবে কেউ উত্তর খুঁজতে চাইলে আমারও একই সমস্যা ছিল। আমার একটা ক্লাস ছিল

class Plugin{
  function __construct(){
    add_action('init', array(&$this, 'init'));
  }

  function init(){
    // code...
  }
}

প্লাগিন :: init () কখনই কল করা হচ্ছিল না। আমি তখন আমার ভুল বুঝতে পারি। ক্লাসটি ইনস্ট্যান্ট করার জন্য আমি এটি করছিলাম:

if(class_exists('Plugin')){
    add_action("init", "plugin_init");
    function socialsports_init() {
      global $plugin;
      $plugin = new Plugin;
    }
}

এটি ঠিক করার জন্য, আমি কেবল ইনস্ট্যান্টেশন কোডটি এতে পরিবর্তন করেছি:

if(class_exists('Plugin')){
    add_action("init", "plugin_init");
    function socialsports_init() {
      global $plugin;
      $plugin = new Plugin;
      $plugin->init();
    }
}

অন্য বিকল্পটি হ'ল কনস্ট্রাক্টরে আলাদা হুক ব্যবহার করা:

function __construct(){
  add_action('wp_loaded', array(&$this, 'init'));
}

বা ইনস্ট্যান্টেশন একটি পূর্ববর্তী হুক:

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