Codex

Interested in functions, hooks, classes, or methods? Check out the new WordPress Code Reference!

bn:প্লাগইন লেখা

পরিচিতি

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

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

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

এই নিবন্ধটি ধরে নিচ্ছে, আপনি ওয়ার্ডপ্রেসের মৌলিক কার্যপ্রক্রিয়া এবং পিএইচপি প্রোগ্রামিং বিষয়ে ইতোমধ্যেই পরিচিত।

যা যা দরকার

  • ওয়ার্ডপ্রেস প্লাগইন কিভাবে কাজ করে এবং কিভাবে তা ওয়ার্ডপ্রেস সাইটে ইন্সটল করা যায় তা জানা, বিস্তারিত জানতে Plugins দেখুন।
  • প্লাগইন ডেভলপারদের জন্য বেশ সমৃদ্ধ নিবন্ধ এবং সরঞ্জামাদির তালিকা আছে, এতে ওয়ার্ডপ্রেস প্লাগইন বিষয়ে লিখিত বাহ্যিক নিবন্ধ এবং বিশেষ কোনো বিষয়ে লিখিত নিবন্ধও আছে, পাওয়া যাবে Plugin Resources-এ।
  • ওয়ার্ডপ্রেস প্লাগইন কিভাবে লেখা হয় তার মৌলিক জ্ঞানটুকু নিতে ভালোভাবে লেখা কার্যকর প্লাগইনগুলোর সোর্স কোড দেখা, যেমন Hello Dolly প্লাগইনসটি, যা ওয়ার্ডপ্রেসের সাথে দেওয়া হয়।
  • আপনার ওয়ার্ডপ্রেস প্লাগইনটি যখন লেখা হয়ে গেল, Plugin Submission and Promotion নিবন্ধ পড়ে জানুন কিভাবে এটি প্রকাশ করতে হবে এবং অন্যদের সাথে ভাগ করে নেয়া যাবে।

প্লাগইন তৈরি

এই অনুচ্ছেদটি আপনার অনুসরণ-করা-উচিত এমন কিছু ধাপের মধ্য দিয়ে যাবে, এবং সঠিকভাবে সুগঠিত একটা ওয়ার্ডপ্রেস প্লাগইন তৈরির ক্ষেত্রে বিবেচ্য বিষয়গুলোর আলোচনা করবে।

নাম, ফাইল এবং অবস্থান

প্লাগইনের নাম

ওয়ার্ডপ্রেস প্লাগইন তৈরির প্রথম কাজটি হলো এটা চিন্তা করা যে, প্লাগইনটি আসলে কী করবে, এবং এর জন্য একটা (সম্ভাব্য আনকোরা নতুন) নাম দিন। Plugins দেখুন এবং এতে দেখানো অন্যান্য উৎস দেখুন, যাতে যাচাই করতে পারেন যে আপনার দেয়া নামটি আনকোরা নতুন কিনা; আপনার প্রস্তাবিত নামটি গুগল সার্চ করেও দেখতে পারেন। অনেক প্লাগইন ডেভলপার এমন নাম বাছাই করেন যা কোনো না কোনোভাবে প্লাগইনের কাজ সম্বন্ধে বর্ণনা করে; যেমন, আবহাওয়া সংক্রান্ত প্লাগইনে "weather" নামটা থাকা। তবে নাম একাধিক শব্দে হতে পারে।

প্লাগইন ফাইল

পরের ধাপটি হলো একটা পিএইচপি ফাইল তৈরি করা, যার নামটি প্লাগইনের নাম থেকে উৎসারিত। যেমন: আপনার প্লাগইনটি যদি "Fabulous Functionality" নামে হয়, তাহলে পিএইচপি ফাইলটি হতে পারে fabulous-functionality.php। আবার, একটা আনকোরা নাম বাছাই করতে চেষ্টা করুন। যারা আপনার প্লাগইনটি ইন্সটল করবে তারা তাদের ওয়ার্ডপ্রেস ইন্সটলেশনের ওয়ার্ডপ্রেস প্লাগইন ডিরেক্টরিতে (সাধারণত যা wp-content/plugins/) আপনার পিএইচপি ফাইলটি রাখবে, তাই এতে তাদের ব্যবহৃত দুটো প্লাগইনের একই নাম হয়ে যেতে পারে।

আরেকটা উপায় হতে পারে প্লাগইনটিকে একাধিক ফাইলে ভাগ করে ফেলা। আপনার ওয়ার্ডপ্রেস প্লাগইনে অবশ্যই কমপক্ষে একটি ফাইল থাকতে হবে; এতে জাভাস্ক্রিপ্ট ফাইল, সিএসএস ফাইল, ছবির ফাইল, ভাষার ফাইল ইত্যাদিও যুক্ত হতে পারে। যদি একাধিক ফাইল হয়ে থাকে, তাহলে একটা ডিরেক্টরির (ফোল্ডার) জন্য প্লাগইন পিএইচপি ফাইলের নামে আনকোরা নাম বাছাই করে নিন (সাধারণত একই নামে হয়ে থাকে), যেমন: fabulous-functionality.phpর জন্য fabulous-functionality হতে পারে; প্লাগইনের সব ফাইল সেই ডিরেক্টরিতে রাখুন, এবং প্লাগইন ব্যবহাকারীকে বলে দিন পুরো ডিরেক্টরিটাই wp-content/plugins/-এর অধীনে ইন্সটল করতে। লক্ষ করুন যে, ওয়ার্ডপ্রেস ইন্সটলেশনে wp-content/plugins/ ডিরেক্টরিকে অন্যত্র সরিয়েও দেয়া যেতে পারে, তাই সঠিক পাথ এবং ইউআরএল-এর জন্য আপনাকে সবসময়ই ব্যবহার করতে হবে plugin_dir_path() এবং plugins_url()। আরো বিস্তারিত জানতে দেখুন: Determining Plugin and Content Directories

নিবন্ধের বাকি অংশে "প্লাগইনের পিএইচপি ফাইল" দিয়ে প্লাগইনের প্রধান পিএইচপি ফাইলকে বোঝানো হয়েছে, এতে তা wp-content/plugins/-তে থাক বা কোনো সাব-ডিরেক্টরিতে থাক।

রিড্‌মী ফাইল

আপনি যদি আপনার প্লাগইনটি http://wordpress.org/extend/plugins/ -এ হোস্ট করতে চান, তাহলে আপনাকে সঠিক ফর্মেটে একটা readme.txt ফাইলও তৈরি করতে হবে, এবং সেটাকে প্লাগইনের সাথে যুক্ত করতে হবে। http://wordpress.org/extend/plugins/about/readme.txt -তে ফর্মেট সম্পর্কে বিস্তারিত দেখুন।

মনে রাখবেন যে, ওয়ার্ডপ্রেস প্লাগইন রেপোজিটরি স্ট্যাবল টাগে readme.txt থেকে "আবশ্যকীয়" এবং "পরীক্ষিত সাম্প্রতিক" সংস্করণটি গ্রহণ করে।

হোম পেজ

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

ফাইল হেডারসমূহ

এবারে সময় হয়েছে আপনার প্লাগইনের প্রধান ফাইলে কিছু তথ্য দেয়ার।

প্লাগইনের গ্রহণযোগ্য তথ্যাদি

প্লাগইনের প্রধান পিএইচপি ফাইলের সর্ব উপরের অংশে অবশ্যই প্লাগইনের গ্রহণযোগ্য তথ্যাদিসমৃদ্ধ header থাকতে হয়। এই হেডার, ওয়ার্ডপ্রেসকে বুঝতে দেয় যে, প্লাগইনটি আছে, প্লাগইন ম্যানেজমেন্ট স্ক্রীনে দেখায় যে, এটি অ্যাক্টিভেট করা যাবে, একে লোড করো আর এর ফাংশনগুলো রান করো; হেডার ছাড়া আপনার প্লাগইন অ্যাক্টিভেটও করা যাবে না, রানও করা যাবে না। হেডারের ফর্মেটটা এরকম:

<?php
/**
 * Plugin Name: Name Of The Plugin
 * Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
 * Description: A brief description of the Plugin.
 * Version: The Plugin's Version Number, e.g.: 1.0
 * Author: Name Of The Plugin Author
 * Author URI: http://URI_Of_The_Plugin_Author
 * License: A "Slug" license name e.g. GPL2
 */

ওয়ার্ডপ্রেসের বোধগম্যতার জন্য অন্তত প্লাগইনের নামের লাইনটা থাকতেই হয়। বাকি তথ্যাদি (যদি থাকে) তাহলে প্লাগইন ম্যানেজমেন্ট স্ক্রীণে প্লাগইনের টেবিল তৈরিতে ব্যবহৃত হবে। লাইনগুলোর ক্রম জরুরি কিছু নয়।

যাতে আপগ্রেড মেকানিজম সঠিকভাবে প্লাগইনের ভার্ষন পড়তে পারে, সেজন্য ভার্ষন নাম্বারের জন্য একটা ফর্মেট অনুসরণ করতে উৎসাহ দেয়া হয়, এবং বিভিন্ন সংস্করণে এই ফর্মেটের মধ্যেই থাকতে বলা হয়। যেমন: x.x কিংবা x.x.x কিংবা xx.xx.xxx

লাইসেন্স স্লাগ হতে হবে সংক্ষিপ্ত সাধারণ পরিচায়ক, যাতে প্লাগইনটি কোন লাইসেন্সের অধিনে আছে তা সহজে, স্বাচ্ছন্দ্যে কোডের লাইসেন্স সম্পর্কে জানান দেয়।

গুরুত্বপূর্ণ: ফাইলকে অবশ্যই UTF-8 এনকোডেড হতে হবে।

লাইসেন্স

প্লাগইনের লাইসেন্সের জন্য মানসম্পন্ন হেডার অনুসরণ করা সাধারণ অনুসৃত পন্থা। অধিকাংশ প্লাগইনই ওয়ার্ডপ্রেসের ব্যবহৃত GPL2 লাইসেন্স কিংবা GPL2 সমর্থিত লাইসেন্স ব্যবহার করে থাকে। GPL2 লাইসেন্স বোঝাতে নিচের লেখনীটুকু আপনার প্লাগইনে যুক্ত করুন:

<?php
/*  Copyright YEAR  PLUGIN_AUTHOR_NAME  (email : PLUGIN AUTHOR EMAIL)

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License, version 2, as 
    published by the Free Software Foundation.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

আপনার প্লাগইনের প্রোগ্রামিং

এখন সময় হলো আপনার প্লাগইনকে আসলেই কিছু করার উপযোগী করে তোলা। এই অনুচ্ছেদটিতে প্লাগইন ডেভলপমেন্টের কিছু সাধারণ ধারণার উল্লেখ রয়েছে, এবং এতে বর্ণিত হয়েছে কিভাবে আপনার প্লাগইনকে কিছু কাজ পরিপূরণ করতে হবে।

ওয়ার্ডপ্রেস প্লাগইন হুক

অনেক ওয়ার্ডপ্রেস প্লাগইন এক বা একাধিক ওয়ার্ডপ্রেস প্লাগইন "হুক"-এর (hooks) সাথে সংযোগ ঘটিয়ে তাদের কাজ সমাধা করে থাকে। প্লাগইন হুক কাজ করে বিভিন্ন সময়ে, যখন ওয়ার্ডপ্রেস রান করে, যখন ওয়ার্ডপ্রেস চেক করে যে, কোনো প্লাগইনে রেজিস্টার্ড ফাংশন চালু করার মতো আছে কিনা, যদি থাকে, তাহলে সেই ফাংশনগুলো রান করে। এই ফাংশনগুলো ওয়ার্ডপ্রেসের স্বকীয় আচরণগুলোকে বদলে দেয়।

যেমন, ব্রাউযার আউটপুটে কোনো পোস্টে টাইটেল যোগ করার আগে ওয়ার্ডপ্রেস চেক করে যে, কোনো প্লাগইনে কি কোনো ফাংশন "the_title" "ফিল্টার" হুকের জন্য রেজিস্টার করা হয়েছে কিনা। যদি থাকে, তাহলে টাইটেল টেক্সটটাকে উল্টো প্রত্যেকটা রেজিস্টার্ড ফাংশনের ভিতর দিয়ে পাস করবে, এবং চূড়ান্ত ফলাফল হলো যা সে প্রিন্ট করে দেখাবে। তাই, যদি আপনার প্লাগইনের দরকার হয় যে, সে প্রিন্ট করা টাইটেলে কিছু তথ্য যোগ করবে, তাহলে তা "the_title" নামক একটা ফিল্টার ফাংশন রেজিস্টার করতে পারে।

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

কিভাবে ফিল্টার এবং অ্যাকশন হুকের জন্য ফাংশ রেজিস্টার করতে হয় এবং ওয়ার্ডপ্রেসের প্লাগইন এপিআই-তে কী কী ব্যবহারোপযোগী প্লাগইন হুক রয়েছে সে সম্পর্কে আরো বিস্তারিত জানতে পারেন। আপনি যদি ওয়ার্ডপ্রেস কোডের কোনো জায়গায় অ্যাকশন কিংবা ফিল্টার ব্যবহার করতে চান, কিন্তু ওয়ার্ডপ্রেসের সেরকম কোনো অ্যাকশন কিংবা ফিল্টার না থাকে, তাহলে আপনি কিন্তু নতুন হুকের পরামর্শ জানাতে পারেন (পরামর্শ সাধারণত গ্রহণ করা হয়ে থাকে); কিভাবে তা করতে হয়, দেখুন বাগ রিপোর্ট করা

টেমপ্লেট ট্যাগ

ওয়ার্ডপ্রেস প্লাগইনে কার্যোপযোগিতা যোগ করার আরেকটি পদ্ধতি হলো নতুন নিজস্ব টেমপ্লেট ট্যাগ তৈরি। কেউ, যিনি আপনার প্লাগইনটি ব্যবহার করতে চাচ্ছেন, তিনি এই ট্যাগগুলো তাঁর থিমে যোগ করতে পারেন, সাইডবারে, পোস্টের কন্টেন্ট সেকশনে, কিংবা যেখানে যথাযথ মনে হয়। যেমন: একটা প্লাগইন যেখানে পোস্টে ভৌগোলিক ট্যাগ যোগ করে, সে তার সাইডবারের জন্য টেমপ্লেট ট্যাগ ফাংশন লিখবে geotag_list_states(), যা প্লাগইনের অবস্থানুযায়ী-চালু করা সকল আর্কাইভ পেজের লিংকসহ, ট্যাগ করা সকল পোস্টের তালিকা করে।

একটা নিজস্ব টেমপ্লেট ট্যাগ লিখতে, খুব সাধারণ একটা পিএইচপি ফাংশন লিখুন আর প্লাগইনের হোমপেজে কিংবা প্লাগইনের প্রধান পিএইচপি ফাইলে এটিকে লিপিবদ্ধ করুন। ফাংশন লিপিবদ্ধ করে রাখার ক্ষেত্রে ফাংশনটি ব্যবহার করার জন্য আসলে কী কাজটা করা লাগবে তার, <?php and ?> সহকারে একটা উদাহরণ দেয়া একটা ভালো বুদ্ধি।

প্লাগইনের তথ্য ডাটাবেজে সংরক্ষণ

অধিকাংশ ওয়ার্ডপ্রেস প্লাগইনের ক্ষেত্রেই সাইটের মালিক কিংবা ব্লগ ব্যবহারকারীর থেকে কিছু তথ্য ইনপুট হিসেবে নিতে হয় এবং সেগুলোকে সেশনে মাঝখানে সংরক্ষণ করে রাখতে হয়, যাতে এর ফিল্টার ফাংশন, অ্যাকশন ফাংশন, এবং টেমপ্লেট ফাংশনে ব্যবহার করা যায়। এই তথ্যগুলো ওয়ার্ডপ্রেস ডাটাবেজে সংরক্ষণ করতে হয়, যাতে সেশনসমূহের মধ্যে দীর্ঘস্থায়িত্ব পায়। প্লাগইনের তথ্যকে ডাটাবেজে সংরক্ষণের চারটি (৪) পন্থ আছে:

  1. ওয়ার্ডপ্রেসের "option" মেকানিজম (নিম্নে বর্ণিত) ব্যবহার করা। এই পদ্ধতি, তুলনামূলক স্থির আর কম পরিমাণ, যাকে বলা যেতে পারে তথ্যের কিছু টুকরা -- এর ক্ষেত্রে যথার্থ, যেখানে আপনি আশা করতে পারেন যে সাইটের মালিক শুধুমাত্র প্রথমবার সেটআপ করার সময়ই তথ্য দিবে, এরপর কদাচিৎ বদল করবে।
  1. পোস্ট মেটা'র (যাকে বলা হয় কাস্টম ফিল্ড) ব্যবহার। একক পোস্ট, পেজ অথবা অ্যাটাচমেন্টের ক্ষেত্রে যেসকল তথ্যাদি জড়িত, সেখানে পদ্ধতিটি যথার্থ। দেখুন পোস্ট মেটা ফাংশনের উদাহরণ, add_post_meta(), এবং সম্পর্কিত ফাংশনগুলো।