Jan 12, 2017
ওয়ার্ডপ্রেস হুক – যেন এক যাদুর কাঠি
ধরুন, একটা একশন হুক wp_head. আমরা এটা নিয়ে কাজ করব। এই হুকটা কল করা আছে wp_head() ফাংশনের মধ্যে। wp_head() ফাংশনটা তো চিনেন, আমরা থিমের মধ্যে header.php ফাইলে head ট্যাগের আগে শেষ লাইন এটা। তো আমরা চাচ্ছি সেখানে কিছু css প্রিন্ট করতে। নরমালি আমরা হুক নিয়ে আজ করি থিমের functions.php ফাইলে অথবা নিজের প্লাগিন ফাইলে। তো সেখানে আমরা একশন হুক নিয়ে কাজ করতে গিয়ে আর একটা ফাংশন ব্যবহার করব – add_action() আমরা নিয়মটা একটু দেখে নেইঃ
<!–?php
এবার একটু বিস্তারিত বলি। এখানে add_action() ফাংশনে ২টা আগর্ুমেন্ট ব্যবহার করা হয়েছে। প্রথমটা হল একশনটার নাম আর পরেরটা হল কলব্যাক ফাংশনের নাম। মানে, যখন ঐ একশনটা কল হবে, তখন আরো একটা ফাংশন রান করতে বলছেন আপনি, সেটা হল my_css()। এই my_css() ফাংশনটা শুধু তখনই কল হবে ও ততবারই কল হবে, যখন ও যতবার wp_head একশনটা কল হবে। এখন মনে করুন, আপনি একট একশনে ২টা কলব্যাক ফাংশন দিবেন, হ্যা সম্ভব।
এখানে একই হুকে ২টা ফাংশন কল করা হয়েছে। কিন্তু কোনটা আগে হবে? যেটা আগে লেখা সেটাই আগে হবে। কিন্তু আপনি যদি দ্বিতীয় ফাংশনটি লিখেন, আর প্রথমটা কোনো প্লাগিনের ভিতরে হয় যা আপনি এডিট করতে পারবেন না, সেখেত্রে আপনি কি করবেন? এই জন্য add_action() ফাংশনে ৩য় আগর্ুমেন্ট ব্যবহার করব। যেটা হল প্রায়োরিটি।
কোনো কোনো একশন ভ্যারিয়েবল পাস করে আগর্ুমেন্ট হিসেবে। যেমন edit_user_profile একশনটা $user অবজেক্ট পাস করবে। আপনি আপনার কলব্যাক ফাংশনে যেই ভ্যারিয়েবল নিয়ে আপনার ইচ্ছেমত কাজ করতে পারবেন।
যখন আপনি আপনার কলব্যাকে আগর্ুমেন্ট ব্যবহার করবেন, তখন আসলে add_action() ফাংশনে ৪থর্ আগর্ুমেন্ট ব্যবহার করতে হবে, যেটা হল কয়টা আগর্ুমেন্ট পাস করতেছে ঐ একশন। আমাদের উপরের উদাহরনে ১টা আগর্ুমেন্ট পাস হচ্ছে, সুতরাং সঠিক ব্যবহার হলঃ
এতক্ষন আমরা ওয়ার্ডপ্রেসের দিয়ে দেয়া একশন গুলো নিয়ে কাজ করলাম। ওয়ার্ডপ্রেস আপনাকে এই সুবিধা এ জন্যই দেয় যাতে মুল কোডে হাত না দিয়ে আপনি কিছু মডিফাই বা আপনার কিছু কাজ করে নিতে পারেন। তো আপনি যখন প্লাগিন বানাবেন, আপনিও আপনার ক্রেতাকে এই সুবিধা কেন দিবেন না? আসলে আপনার দেয়াই উচিত। কারন সে যদি আপনার প্লাগিন এডিট করে, তখন পরবর্তীতে আপডেট করতে গেলে তার এডিট ডিলিট হয়ে যাবে। একটা প্লাগিন ততই ভাল সেটা যত বেশি হুক প্রোভাইড করবে। আসুন দেখি আপনি কিভাবে এই সুবিধা দিবেন। মনে করেন, আপনি একটা আপনার প্লাগিনে কিছু বুকিং ডাটা সেভ করেন। তখন আপনি একটা একশন দিবেন, যে কিছু একটা হয়েছে এখানে।
এখানে আপনি booking_data_saved কাস্টম একশন দিলেন আপনার ক্রেতা কে। সে যদি চায়, যখন বুকিং ডাটা সেভ হবে, তখন সে যেন মেইল পায়। কিন্তু আপনি সে রকম কোন সুবিধা দেননি। সে তখন আপনার একশন ব্যবহার করবে তার functions.php তে:
এবার মনে করেন, edit_user_profile একশনের মত আপনিও ডাটা পাস করবেন। আপনি যতগুলো খুশি ভেরিয়েবল পাস করতে পারেন। ধরেন, আপনার আগের কোডেই যখন বুকিং ডাটা সেভ হচ্ছে তখন ক্রেতা নিজেকে একটা মেইল করতে চাচ্ছে (যেটা করে ফেলেছি আমরা) কিন্তু সেই মেইলে যে বুকিং করেছে তার নাম আর ইমেইল পাঠাতে চাচ্ছে। সেক্ষেত্রে আপনি বুকারের নাম আর ইমেইল আগর্ুমেন্ট হিসেবে পাঠাবেন।
আর functions.php তে extend করবেঃ
মনে করুন, আপনি চান প্রতি পেজে কন্টেন্টের পর আপনি একটা ইমেজ এড করবেন। সেক্ষেত্রে আমরা the_content ফিল্টারটা ব্যবহার করবঃ
এখানে আপনি কন্টেন্ট প্রিন্ট হবার আগে সেই কন্টেন্টকে মডিফাই করছেন, একটা ইমেজ এড করছেন। এখন সব কন্টেন্ট এর নিচে আপনি এই ইমেজটা দেখতে পারবেন। যদি এরকম চান যে একটা নির্দিষ্ট পেজ (ধরি ID 232) শুধু লগড ইন মেম্বাররা দেখবেন, তাহলেঃ
তো আপনি কিভাবে আপনার প্লাগিনে এই সুবিধা দিবেন? চলুন দেখা যাক – মনে করুন, আপনার প্লাগিনে আপনি একটা লেখা প্রিন্ট করবেন – Bookings কিন্তু ক্রেতা সেটাকে appointments দেখাতে চাচ্ছে। নরমালি এটা ল্যাংগুয়েজ ফাইল থেকে করা হলেও সিম্প্লিসিটির জন্য আমি এভাবে দেখাচ্ছি। আপনি যদি এভাবে লিখেন, তাহলে ক্লায়েন্ট সেটা চেঞ্জ করতে পারবেন নাঃ
আপনাকে যেটা করতে হবেঃ
এখন আপনার ক্লায়েন্ট সেটাকে চেঞ্জ করবেঃ
এবার সেটাকে Appointments দেখাবে। দেখুন, do_action() এ default আগর্ুমেন্ট একটা ছিল, apply_filters() এ কিন্তু ২টা – ফিল্টারের নাম, আর একটা ভেলু। আসুন এবার মাল্টিপল ভেলু পাস করিঃ
দেখুন, এখানে আরো একটা আগর্ুমেন্ট পাস করছি (চাইলে যতগুলো খুশি পাস করতে পারেন)। ক্লায়েন্ট চাচ্ছে, $count ১ হলে Appointment আর বেশি হলে Appointments দেখাবেঃ
আপনি চাইলে php এর অন্য syntax ও ব্যবহার করতে পারেনঃ
#১
public function __construct() {
public function boking_data_saved_cb( $name, $email ){
}
#২
public function __construct() {
public function boking_data_saved_cb( $name, $email ){
}
[php]
public function boking_data_saved_cb( $name, $email ){
add_action( ‘boking_data_saved’, array( ‘MyPlugin’, ‘boking_data_saved_cb’ ), 20, 2 );
#৪
public function __construct() {
public function boking_data_saved_cb( $name, $email ){
}
আরেকবারঃ
Leave a Reply
You must be logged in to post a comment.
Comments (No)