একই ভাবে আমরা যদি একটা মেথড লিখি যেখানে user এর কাছ থেকে Data নিয়ে Database এ save করা হবে আর যদি সাথে একটা হুক দিয়ে দেই। তাহলে পরবর্তীতে অল্প পরিশ্রমে আমরা সেই ডাটা অন্য কাজে ব্যবহার করতে পারব। কিছুদিন পর দরকার পরল সেই একই ডাটা মেইলে সেন্ড করার। সেক্ষেত্রে হুক ব্যবহার করে খুব সহজেই ইমেইল করা যাবে।
function save_user_data($data){ //Sanitize Data do_action('prefix_user_doing_data',$data);//hook for doing something else save_data($data); } add_action('prefix_user_doing_data',function($data){ mail($data); // your mail function will accept the data });
এখানে “save_user_data” ফাংশনটি user এর ডাটা sanitize করে ডাটাবেসে জমা করতেছে “save_data” ফাংশনটি ব্যবহার করে। কিন্তু এর পূর্বে একটি লাইন রয়েছে do_action। এখানে প্রথমে ঘোষণা করে হয়েছে হুকের নাম যে নামে তাকে ডাকা হবে আর এর পর প্যারামিটার/আর্গুমেন্ট হিসেবে পাস করে হয়েছে $data কে, যেটা মূলত user data।
আর add_action মেথডটি action এর নামে কল করছে নির্দিষ্ট ইভেন্টকে। এখানে anonymous ফাংশনে প্যারামিটার হিসাবে পাচ্ছি user data যা আমরা হুক ঘোষণা করার সময় বলে দিয়েছি। (শর্টকাটে দেখানো জন্যই anonymous ফাংশন ব্যবহার করা হয়েছে, আপনি named ফাংশন ব্যবহার করুন)
সম্পূর্ন বিষয়টা এখানে তাহলে কিভাবে কাজ করছে। প্রথমে user data আর্গুমেন্ট হিসেবে পাস হচ্ছে save_user_data র কাছে। save_user_data ইউজার ডাটাকে sanitize করছে, এরপর সে খুঁজে দেখছে do_action হুক ব্যবহার করে কোথাও ফাংশন কল করা হয়েছে কিনা, যদি হয়ে থাকে তবে সেই অংশটুকো এক্সিকিঊট করছে। এরপর save_data ফাংশনটির কাছে user data পাস করে কাজ শেষ করছে।
সুতরাং আমরা বলতে পারি আমাদের ফাংশনটা ডায়নামিক। ।পরবর্তীতে আমাদের code এ হাত না দিয়ে আমাদের ফাংশনটা modify করা যাবে। অথচ এই হুক না থাকলে আমাদের নতুন করে ফাংশন লিখে data sanitize করে মেইল করা লাগত। অর্থাৎ রিপিটিং । যেটা ডেভলাপিং এর টাইম বাড়িয়ে দেয় আর মেইন্টনিবিলিটি কমিয়ে দেয়।
WordPress এ আরেকটি হুক আছে। এটাকে বলা ফিল্টার হুক। ফিল্টার শব্দটার দ্বারাই বুঝা যাচ্ছে এটা এক প্রকার ছাকনি। উপরের পরিস্থিতিটা নিয়েই আবার চিন্তা করা যাক। আপনি চাচ্ছেন ইউজার এর first name আর last name একসাথে করে full name আকারে ডাটাবেস এ জমা রাখতে। সেক্ষেত্রে এখন আপনাকে আবার ফাংশনটাকে modify করা লাগবে। কিন্তু একটা ফিল্টার হুক ব্যবহার করলে বিষয়টা সহজ হয়ে যায়।
function save_user_data($data){ //Sanitize Data apply_filters('prefix_user_data',$data); do_action('prefix_user_doing_data',$data); save_data($data); } add_filter('prefix_user_data',function ($data){ $data['name'] = $data['first_name'] .' '.$data['last_name']; return $data; }); add_action('prefix_user_doing_data',function($data){ mail($data); // your mail function will accept the data });
একই ভাবে add_filter ও ফিল্টার হুকের নাম ধরে নির্দিষ্ট ইভেন্টকেই কল করে এবং প্যারামিটার হিসাবে প্রাপ্ত ডাটাকে modify করে Return করে। যা পরর্বতীতে save_user_data মেইল করে এবং ডাটাবেসে save করে।
Note
WordPress এ হুক মূলত একটাই, আর সেটা হচ্ছে ফিল্টার হুক। কারণ add_action ও মূলত add_filter কে return করে।
হুকের বাস্তবিক ব্যবহার
অনেকেই আমাকে প্রশ্ন করে এত তামঝামের কি দরকার আছে। কেন আমরা আমাদের লিখা ফাংশন/মেথডকে পরবর্তীতে পরিবর্তন করতে পারব না । আসলে আমরা context টা বুঝতে ব্যর্থ হই। এটা বুঝতে একটু কল্পনা শক্তি ব্যবহার করা লাগবে।
ধরুন আপনি একটা প্লাগিন/ এপ বানাইছেন যেটা user এর ডাটা নিয়ে ডাটাবেসে এ জমা রাখে। এরপর এই প্লাগিনটা WordPress Repo তে রিলিস ও দিয়েছেন। আপনার প্লাগিন শুধুই ডাটা সেভ করে আর কিছু করে না। কিন্তু কয়কদিন পর একজন ব্যবহারকারি এসে বলল উনি সেই একই ডাটা মেইল করতে চায়। এখন আপনি কি করবেন। শুধু মাত্র একজন ব্যবহারকারির জন্য এই অতিরিক্ত কোড করবেন। তাহলে হয়ত এরকম আরও অনেকের জন্যই করা লাগতে পারে। যা বাস্তব সম্মত না। আবার যদি এমন করা হয় যে শুধু মাত্র তার server ঐ প্লাগিনে এ কোড modify করা হয়েছে সে ক্ষেত্রেnext আপডেটে ঐ কোড মুছে যাবে। কিন্তু ওই হুক ব্যবহার করার কারণে এখন যে যার প্রয়োজন মত ফাংশনটিকে পরিবর্তন করতে পারবে প্লাগিন টাচ না করেই।
হুকই হচ্ছে WordPress এর Event handling system। একই ভাবে জাভাস্ক্রিপ্টেও trigger ব্যবহার করে এই কাজ করা যায়। সব CMS/Languae/FrameWork এই ইভেন্ট হ্যান্ডলিং রয়েছে। হুক নিয়ে আরও আলোচনা হবে পরবর্তীতে।