ফিল্টার এবং অ্যাকশন হুকের মধ্যে পার্থক্য?


51

আমি সম্প্রতি প্লাগইন এপিআই-তে আরও কিছু গভীরতার দিকে লক্ষ্য করছি এবং আমি ভাবছিলাম যে অ্যাকশন এবং ফিল্টার হুকের মধ্যে আসলে কী পার্থক্য রয়েছে । তারা উভয়ই এমন ঘটনা যা প্যারামিটার হিসাবে ডেটা গ্রহণ করে এবং তারা উভয়ই একই জিনিস করতে সক্ষম হবে বলে মনে হয়।

স্পষ্টতই আমি দেখতে পাচ্ছি যে কর্মগুলি সঞ্চালনের সময় অ্যাকশনগুলি ডাকা হয় এবং ডেটা ম্যানিপুলেটেড করার সময় ফিল্টারগুলি ডাকা হয়, তবে এটি কেবল সিনেমিক নামকরণের পার্থক্য বলে মনে হয়।

শব্দার্থবিজ্ঞান এবং এগুলির জন্য যা ব্যবহৃত হয় তা ছাড়া তাদের মধ্যে কী প্রকৃত পার্থক্য রয়েছে?

উত্তর:


58

হাই @ সত্যই :

আপনি আপনার নিজের প্রশ্নের উত্তরটি বেশ দিয়েছেন, তবে আমি কিছুটা বিশদভাবে বর্ণনা করব।

অ্যাকশন হুকস

ক্রিয়াকলাপ হুকগুলি ব্যবহারের উদ্দেশ্যে তৈরি করা হয় যখন ওয়ার্ডপ্রেস কোর বা কোনও প্লাগইন বা থিম আপনাকে কোনও নির্দিষ্ট সময়ে আপনার কোডটি সন্নিবেশ করানোর এবং নীচের একটি বা আরও কিছু করার সুযোগ দেয়:

  1. প্রতিক্রিয়া বাফারে কিছু HTML বা অন্যান্য সামগ্রী ইনজেকশনেরecho জন্য ব্যবহার করুন ,
  2. এক বা একাধিক ভেরিয়েবলের জন্য গ্লোবাল পরিবর্তনশীল রাষ্ট্র এবং / অথবা এর জন্য পরিবর্তন করুন or
  3. আপনার হুক ফাংশনে পাস হওয়া প্যারামিটারগুলি সংশোধন করুন (ধরে নিন হুক do_action_ref_array()পরিবর্তে ডেকেছিল do_action()যেহেতু পরবর্তীকটি রেফারেন্স বাই ভেরিয়েবলগুলি পাসিং সমর্থন করে না ))

ফিল্টার হুকস

ফিল্টার হুকস অ্যাকশন হুকের সাথে খুব একই রকম আচরণ করে তবে তাদের উদ্দেশ্য ব্যবহারটি একটি মান পাওয়া এবং সম্ভাব্যরূপে মানটির পরিবর্তিত সংস্করণ ফিরিয়ে দেওয়া। একটি ফিল্টার হুকও ঠিক অ্যাকশন হুকের মতো ব্যবহার করা যেতে পারে অর্থাত্ একটি গ্লোবাল ভেরিয়েবল পরিবর্তন করতে বা কিছু এইচটিএমএল তৈরি করতে, ধরে নেওয়া হুক যখন ডাকা হয় তখন আপনার যা করা উচিত। ফিল্টার হুক সম্পর্কে একটি বিষয় যা আপনাকে খুব গুরুত্বপূর্ণ তা অ্যাকশন হুকসের সাথে উদ্বিগ্ন হওয়ার দরকার নেই তা হ'ল ফিল্টার হুক ব্যবহার করা ব্যক্তিকে অবশ্যই প্রথম প্যারামিটারটি পাস করার (একটি পরিবর্তিত সংস্করণ) ফিরে আসতে হবে । একটি সাধারণ নবাগত ভুল হল সেই মানটি ফিরিয়ে দেওয়া!

ফিল্টার হুকসে প্রসঙ্গ সরবরাহ করতে অতিরিক্ত পরামিতি ব্যবহার করা

একদিকে যেমন আমি অনুভব করেছি যে ফিল্টার হুকগুলি ওয়ার্ডপ্রেসের পূর্ববর্তী সংস্করণগুলিতে আবদ্ধ ছিল কারণ তারা কেবল একটি পরামিতি গ্রহণ করবে; অর্থাত্ তারা পরিবর্তনের মান পাবে তবে কোনও প্রসঙ্গ সরবরাহের জন্য ২ য় বা ৩ য় পরামিতি নেই। ইদানীং, এবং ইতিবাচকভাবে, তবে মনে হচ্ছে ওয়ার্ডপ্রেস মূল দলটি আনন্দের সাথে (আমার জন্য) ফিল্টার হুকগুলিতে অতিরিক্ত পরামিতি যুক্ত করেছে যাতে আপনি আরও প্রসঙ্গটি আবিষ্কার করতে পারেন। একটি ভাল উদাহরণ posts_whereহুক; আমি কয়েক সংস্করণ ব্যাক এটি শুধুমাত্র বর্তমান ক্যোয়ারী এর হচ্ছে এক পরামিতি গ্রহণ বিশ্বাস "কোথায়" বর্গ SQL এর কিন্তু এখন এটি উভয় যেখানে দফা গ্রহণ এবং বর্তমান দৃষ্টান্ত একটি রেফারেন্স WP_Queryবর্গ যে হুক invoking হয়।

তাহলে আসল পার্থক্য কী?

বাস্তবে ফিল্টার হুকস অ্যাকশন হুকের সুপারস্টেট। প্রাক্তন পরবর্তীকালে কিছু করতে পারে এবং কিছুটা হলেও বিকাশকারীর অ্যাকশন হুকের সাথে কোনও মূল্য ফেরতের দায়িত্ব নেই যা তিনি বা তিনি ফিল্টার হুকের সাথে করেন।

গাইডেন্স এবং টেলিগ্রাফিং ইন্টেন্ট দেওয়া হচ্ছে

তবে এটি সম্ভবত গুরুত্বপূর্ণ নয়। আমি মনে করি যা গুরুত্বপূর্ণ তা হ'ল কোনও বিকাশকারী কোনও অ্যাকশন হুক বনাম একটি ফিল্টার হুক বা তার বিপরীতে তারা নিজের উদ্দেশ্যটি টেলিগ্রাফ করছেন এবং এইভাবে থার্ম বা প্লাগইন বিকাশকারীকে যারা হুক ব্যবহার করছেন তা নির্দেশিকা প্রদান করছেন choosing সংক্ষেপে তারা বলছে "আমি আপনাকে ফোন করতে যাচ্ছি, আপনার যা যা করা দরকার তা করুন" বা "আমি আপনাকে এই মানটি সংশোধন করতে যাচ্ছি তবে নিশ্চিত হয়ে নিন যে আপনি এটি ফিরে পেয়েছেন ।"

সুতরাং শেষ পর্যন্ত আমি মনে করি হুক প্রকারের পছন্দ অনুসারে প্রদত্ত গাইডেন্সই পার্থক্যের পিছনে আসল মান । আইএমও, যাইহোক।

আশাকরি এটা সাহায্য করবে!


আমার কাছে মনে হচ্ছে আপনি কেবলমাত্র সমস্ত কিছুর জন্য ফিল্টার ব্যবহার করতে পারতেন, যেহেতু একটি পরিবর্তনশীল ফিরিয়ে দেওয়া পিএইচপি-তে isচ্ছিক। ওয়ার্ডপ্রেস বিকাশকারীরা কেন দুটি পৃথক পদ বেছে নিয়েছেন তা কেউ জানেন? এটি কি নিখুঁত শব্দার্থক কারণে? প্রযুক্তিগতভাবে আমি এর প্রয়োজন দেখতে পাচ্ছি না ...
TheStoryCoder

2
@TheStoryCoder "এটি কি নিখুঁত শব্দার্থক কারণে?" মনে হচ্ছে আমার উত্তরটি ঠিক এইভাবে ব্যাখ্যা করেছিল, পাঁচ (৫) বছর আগে ...?
মাইকস্কিঙ্কেল

11

আপনি যদি add_action()মূল ফাংশনের উত্সটি দেখেন তবে এটি কেবল add_filter()কার্যের জন্য একটি মোড়ক ...

এবং যদি আপনি do_action()মূল ফাংশনটি দেখেন তবে এটি মূল ফাংশনের সাথে খুব মিল, এর মধ্যে apply_filters()একটি খুব মূল পার্থক্য রয়েছে: এটি কোনও মান দেয় না।

তাহলে এর অর্থ কি? ক্রিয়াগুলি ফিল্টারগুলির মতো হয়, ব্যতীত কোনও ক্রিয়া কোনও মান দেয় না, তাই আপনি ডেটা সংশোধন করতে পারবেন না। এটি দেখায় যে কেবল ফিল্টার প্রক্রিয়াটি অনুলিপি করে, এবং কোনও মান ফেরত না দিয়ে ওয়ার্ডপ্রেসটির ক্রিয়া প্রক্রিয়া তৈরি করা সহজ ছিল। মূলত, আপনি কোনও ক্রিয়া দিয়ে যা করতে পারেন তা হ'ল কিছু মান পরিবর্তন না করে কেবল একটি ফাংশন সম্পাদন করা।


5

সহজ কথায়।

ক্রিয়াগুলি হ'ল পিএইচপি ফাংশন যা আউটপুট কার্যকর করে।

ফিল্টারগুলি সেই পিএইচপি ফাংশন যা আউটপুট ফেরত return

আপডেট করা: আমরা কোনও কোডটি সংশোধন না করে ক্রিয়া এবং ফিল্টার ব্যবহার করে এমন কোনও প্লাগইন প্রসারিত করতে পারি। আমাদের নিজস্ব থিম বা প্লাগইনে ফিল্টার এবং ক্রিয়া যুক্ত করে।


কিভাবে ব্যবহার করে?

কর্ম:

আপনার থিম functions.phpফাইলে সাধারণ উদাহরণগুলির নীচে পরীক্ষা করুন।

  1. প্রথম উদাহরণ: (সাধারণ পিএইচপি উদাহরণ)
ফাংশন পরীক্ষা() {
     প্রতিধ্বনি "আউটপুট";
}

পরীক্ষা ();

প্রোগ্রামের উপরে আউটপুট মুদ্রণ করুন:

আউটপুট

[দ্রষ্টব্য: এখানে পরীক্ষা () কেবল ফাংশনটি কল করে। এবং কলব্যাক ফাংশন 'পরীক্ষা' সম্পাদন করুন]]


  1. উদাহরণ দুটি: (কর্মের সহজ ব্যবহার)
ফাংশন টেস্ট 1 () {
     প্রতিধ্বনি "আউটপুট";
}
যোগ_অ্যাকশন ('পরীক্ষা', 'পরীক্ষা 1');

do_action ('পরীক্ষা');

প্রোগ্রামের উপরে আউটপুট মুদ্রণ করুন:

আউটপুট

[দ্রষ্টব্য: এখানে do_action('test')কলিং ফাংশনের মতো কাজ করে। এবং কলব্যাক ফাংশন 'টেস্ট 1' চালিত করুন]]


  1. উদাহরণ তিনটি: (ক্রিয়াকলাপগুলির আরেকটি ব্যবহার)
ফাংশন টেস্ট 2 () {
     প্রতিধ্বনি "পরীক্ষা 2";
}
যোগ_অ্যাকশন ('পরীক্ষা', 'পরীক্ষা 2', 1);

ফাংশন টেস্ট 1 () {
     প্রতিধ্বনি "পরীক্ষা 1";
}
যোগ_অ্যাকশন ('পরীক্ষা', 'পরীক্ষা 1', 2);

do_action ('পরীক্ষা');

প্রোগ্রামের উপরে আউটপুট মুদ্রণ করুন:

পরীক্ষা 2 টেস্ট 1

[দ্রষ্টব্য: এখানে do_action('test')কলিং ফাংশনের মতো কাজ করে। এবং এর অগ্রাধিকারগুলিতে কলব্যাক ফাংশন সম্পাদন করুন।

কলব্যাক ফাংশন 'টেস্ট 1' এর অগ্রাধিকার 2 এবং 'টেস্ট 2'-এর অগ্রাধিকার রয়েছে।]

অগ্রাধিকারগুলি যদি অগ্রাধিকার 1 সহ 'টেস্ট 1' এবং অগ্রাধিকার 2 সহ 'টেস্ট 2' এর মতো পরিবর্তন হয় তবে আউটপুটটি হবে:

টেস্ট 1 টেস্ট 2

  1. উদাহরণ চার: (তৃতীয় পক্ষের সমর্থন) নীচে কোড যুক্ত করুনfunctions.php
ফাংশন টেস্ট 1 () {
     কর_অ্যাকশন ('পরীক্ষা_পরে');
     প্রতিধ্বনি "পরীক্ষা 1";
     কর_অ্যাকশন ('পরীক্ষা_পরে');
}
যোগ_অ্যাকশন ('পরীক্ষা', 'পরীক্ষা 1');

do_action ('পরীক্ষা');

প্রোগ্রামের উপরে আউটপুট মুদ্রণ করুন:

পরীক্ষা 1

এখন, তৃতীয় পক্ষ বিকাশকারীর জন্য এটি কীভাবে কাজ করে তা পরীক্ষা করতে নমুনা প্লাগইন তৈরি করুন।

  1. /wp-content/plugins/ডিরেক্টরিতে ফোল্ডার 'সরল' তৈরি করুন ।
  2. 'সরল.এফপি' নামক ফাইল তৈরি করুন এবং কোডের নীচে যুক্ত করুন।
/ *
* প্লাগইনের নাম: সাধারণ প্লাগইন
* /
ফাংশন test_callback_function () {
     প্রতিধ্বনি "প্লাগইন থেকে";
}
যোগ_অ্যাকশন ('পরীক্ষা', 'টেস্ট_ক্যালব্যাক_ফানশন');

এখন, ওয়ার্ডপ্রেস অ্যাডমিন ড্যাশবোর্ড থেকে আমাদের সাধারণ প্লাগইনটি সক্রিয় করুন ।

গোটো মেনু প্লাগইন এবং এটি সক্রিয় করুন।

উপরে প্রোগ্রাম প্লাগ ইন সক্রিয় করার পরে আউটপুট মুদ্রণ:

প্লাগইন থেকে 1 টি পরীক্ষা করুন

[দ্রষ্টব্য: যদি আমরা 1 থেকে 9 পর্যন্ত আমাদের প্লাগইন ক্রিয়াকে অগ্রাধিকার যোগ করি তবে এটি আউটপুটটি প্রিন্ট করে:

প্লাগইন টেস্ট 1 থেকে

কারণ, ওয়ার্ডপ্রেস 10 priority by defaultসমস্ত যুক্ত ক্রিয়াকলাপ বিবেচনা করে ]

ফিল্টার

নীচের উদাহরণগুলি দেখুন:

সাধারণ পিএইচপি উদাহরণ:

$ ডেটা = অ্যারে ('এক', 'দুই');
মুদ্রণ_আর ($ তথ্য);

প্রোগ্রামের উপরে আউটপুট মুদ্রণ করুন:

অ্যারে ([0] => এক [1] => দুই)
  1. প্রথম উদাহরণ: (ফিল্টার সহজ ব্যবহার)
$ ডেটা = প্রয়োগ_ ফিল্টার ('আমার_ ফিল্টার_নাম', অ্যারে ('এক', 'দুই'));
মুদ্রণ_আর ($ তথ্য);

add_filter ('আমার_ ফিল্টার_নাম', ফাংশন ($ পুরানো_ডেটা)
     রিটার্ন অ্যারে ('তিন', 'চার');
});

প্রোগ্রামের উপরে আউটপুট মুদ্রণ করুন:

অ্যারে ([0] => তিনটি [1] => চার)

এখানে, আমরা ফিল্টার যোগ করেছেন my_filter_nameএবং বিদ্যমান আউটপুট পরিবর্তন array( 'one', 'two' )সঙ্গে array( 'three', 'four' )থিম / প্লাগিন ফাইল পরিবর্তন না করে।



এই জাতীয় সরল কৌতুকের জন্য @ মহেশ্বাghগমরে ধন্যবাদ দয়া করে 'ফিল্টারগুলি' সম্পর্কেও লিখুন
আদি

"শীঘ্রই" বলতে কী বোঝ?
রাপ্তি

@ রাপ্তি বিলম্বের জন্য দুঃখিত আজ রাতে আমি ফিল্টার সম্পর্কিত উত্তর যুক্ত করব। ভবিষ্যতে আমি হুক (ক্রিয়া ও ফিল্টার) সম্পর্কিত একটি বর্ণনামূলক নিবন্ধ তৈরি করব।
মহেশ্বৌমমারে

@ মহেশবাগমীর কি অনেক অনুগ্রহ করে? : পি

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