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


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.