ওয়ার্ডপ্রেস গ্লোবাল গোলমাল (ভেরিয়েবল) – পর্ব ২

ঘুরতে ঘুরতে একটা পান্ডা দিয়ে যাচ্ছে মুরগির আন্ডা! সে যাইহোক যেমনটা কথা দিয়েছিলাম তেমনটাই হবে। আজকের পর্বে আমরা লুপ গ্লোবাল ভেরিয়েবল গুলি সম্পর্কে জানবো। কিন্তু লুপ গ্লোবাল ভেরিয়েবল নিয়ে জানার পূর্বে আমাদের এটা স্পষ্ট হওয়া প্রয়োজন যে লুপ বলতে আমি কি বুঝাচ্ছি, ওয়ার্ডপ্রেস কি বলছে আর আপনি কি বুঝতেছেন, তাই নয় কি? নয়তো জেনারেল লুপের কনসেপ্ট আর ওয়ার্ডপ্রেসের লুপ তালগোল পাকিয়ে যাবে! আপনি যদি ওয়ার্ডপ্রেসে নতুন হয়ে থাকেন তবে সত্যি কনফিউজড হতে পারেন যেমনটা লারাভেলের ফ্যাসাডের নাম শুনে কনফিউজড হতে পারেন*।

দ্যা লুপ (The Loop)

The Loop is PHP code used by WordPress to display posts.
— Codex

কোডেক্স যেমন বলে ওয়ার্ডপ্রেসের লুপ তেমনটাই, এর বেশি কিছু না। এটা মূলত একটি PHP লুপ যার মূল উদ্দেশ্যই হলো পোস্টের কনটেন্ট দেখানো (পোস্টটি যেকোনো পোস্টটাইপের হতে পারে)। চলুন একটি সহজ সরল ওয়ার্ডপ্রেস লুপ দেখে নেই –

এখানে একটা মজার বিষয় হলো, লুপের ভিতর the_post() কে কল না করলে লুপটি কিন্তু ইনফিনিটি লুপে পরিণত হবে অর্থাৎ এটি ইনফিনিটি ওয়ার শুরু করে দিবে যতক্ষণ না আপনি ক্যাপ্টেন মারভেল রূপে আবির্ভূত হয়ে সেটাকে থামাচ্ছেন! কিভাবে হবে, কেনো হবে এসবের পসরা নিয়ে অন্যকোন দিন বসবো ইনশাআল্লাহ। লুপের ভিতর the_title(), the_content(), the_tags(), the_author() নামে যেসব ফাংশন দেখছি তা ওয়ার্ডপ্রেসে টেমপ্লেট ট্যাগ নামে পরিচিত। এইসব টেমপ্লেট ট্যাগের অনেকগুলি লুপ গ্লোবাল ভেরিয়েবলের উপর নির্ভরশীল। এছাড়াও গ্লোবাল ভেরিয়েবল গুলি ব্যবহার করে আমরা পোস্টের ডেট-টাইম, অথর সহ অনেক ইনফো সহজেই পেতে পারি।

লুপ গ্লোবাল ভেরিয়েবলস

  1. $post – এটি পুরো ওয়ার্ডপ্রেস সিস্টেমে এবং ওয়ার্ডপ্রেস লুপের অন্যতম গুরুত্বপূর্ণ একটি গ্লোবাল ভেরিয়েবল। কারণ অনেক টেমপ্লেট ট্যাগ এই ভেরিয়েবলের উপর নির্ভরশীল। এটিতে কারেন্ট পোস্টের অবজেক্ট থাকে যা WP_Post ক্লাসের ইন্সট্যান্স বা অবজেক্ট। ওয়ার্ডপ্রেসের প্রাইমারী লুপের পাশাপাশি আরেকটি লুপ চালানোর সময় $post ভেরিয়েবলটি বিশাল ভূমিকা পালন করে থাকে, যা এর অন্যতম একটি ব্যবহার। নিচের কোড দেখলে তা স্পষ্ট বোঝা যাবে –
  2. $authordata – ওয়ার্ডপ্রেস লুপে এটিও একটি গুরুত্বপূর্ণ ভেরিয়েবল। এটিতে কারেন্ট পোস্ট অথরের অবজেক্ট বা কারেন্ট পোস্ট অথরের WP_User ক্লাসের ইন্সট্যান্স থাকে এবং অথর সম্পর্কিত টেমপ্লেট ট্যাগগুলি এই ভেরিয়েবলের উপর নির্ভরশীল।
  3. $currentday – কারেন্ট পোস্ট পাবলিশের তারিখ স্ট্রিং হিসেবে এই ভেরিয়েবলে থাকে। যেমন- 28.04.18 এটি ২০১৮ সালের ২৮ এপ্রিল তারিখ নির্দেশ করছে।
  4. $currentmonth – কারেন্ট পোস্ট পাবলিশের মাস স্ট্রিং হিসেবে থাকে তবে মাসের নাম থাকেনা মাসের নম্বর থাকে। যেমন – 04 এটি নির্দেশ করে এপ্রিল মাস যেহেতু এপ্রিল চতুর্থ মাস।
  5. $page – পোস্টে যদি পেজিনেশন থাকে তবে এটি নির্দেশ করে পেজটি পেজিনেশনের কত নম্বর পেজ। নম্বরটি অবশ্যই ইন্টিজার হিসেবে থাকে স্ট্রিং হিসেবে নয়।
  6. $pages<!--nextpage--> দিয়ে কিন্তু একটা পোস্টের কনটেন্টকে অনেকগুলি পেজে ভাগ করা যায়! আর সেসব আলাদা আলাদা পেজের কনটেন্টগুলি থাকে এই ভেরিয়েবলে এ্যারে আকারে।
  7. $multipage – এটি একটি বুলিয়ান ভেরিয়েবল এবং এটি $pages ভেরিয়েবলের উপর নির্ভরশীল। একাধিক পেজ থাকলে এটি true হবে নয়তো false
  8. $numpages – এটিও $multipage এর মত $pages এর উপর নির্ভরশীল। কিন্তু এই ভেরিয়েবলের মাধ্যমে জানা যায় কতটি পেজ আছে, সুতরাং এটি অবশ্যই ইন্টিজার ভেরিয়েবল।

ইনশাআল্লাহ, পরবর্তি পর্বে আমরা এডমিন গ্লোবাল ভেরিয়েবলস নিয়ে জানব। ধন্যবাদ 🙂

ওয়ার্ডপ্রেস গ্লোবাল গোলমাল (ভেরিয়েবল) – পর্ব ১

ওয়ার্ডপ্রেসের কোর আর্কিটেকচার নিয়ে অনেকের ভীষণ আপত্তি আছে আবার অনেকের আছে মোটামুটি চলে টাইপের আপত্তি। আবার অনেকের আছে অন্ধ ভালোবাসা টাইপের আপত্তি, যাকে বলে আচ্ছা ঠিক আছে কিন্তু ভালো লাগেতো! 😛 আর এই আপত্তির অন্যতম একটি কারণ হলো ওয়ার্ডপ্রেসের গ্লোবাল ভেরিয়েবল। কোডেক্স অনুসারে ওয়ার্ডপ্রেসে প্রায় ৫০ টির মত গ্লোবাল ভেরিয়েবল আছে! সত্যিই তাই, সংখ্যাটা চমকে দেয়ার মত।

কোডেক্স অনুসারে ওয়ার্ডপ্রেসে ৬ ক্যাটেগরির গ্লোবাল ভেরিয়েবল আছে। চলুন ক্যাটেগরি গুলি দেখে নেয়া যাক।

  1. ওয়েব সার্ভার ডিটেকশন ভেরিয়েবলস
  2. ব্রাউজার ডিটেকশন ভেরিয়েবলস
  3. লুুপ গ্লোবাল ভেরিয়েবলস
  4. এডমিন ভেরিয়েবলস
  5. বিচ্ছিন্ন ভেরিয়েবলস
  6. ভার্সন ভেরিয়েবলস

আজকে আমরা শুধুমাত্র ব্রাউজার ডিটেকশন এবং ওয়েব সার্ভার সংশ্লিষ্ট গ্লোবাল ভেরিয়েবল গুলি নিয়ে জানার চেষ্টা করবো।

ব্রাউজার ডিটেকশন ভেরিয়েবলস

ব্রাউজার ডিটেকশন ভেরিয়েবল গুলি দিয়ে জানা যায় ইউজার কোন ব্রাউজার ব্যবহার করে আমাদের ওয়ার্ডপ্রেস সাইট ভিজিট করছে। এই ভেরিয়েবল গুলির বিশেষত্ব হলো এগুলি বুলিয়ান ডাটা রাখে। বুলিয়ান ডাটা কি বা কেমন এটা বোঝার জন্য একটা প্রশ্নোত্তর পর্ব থেকে ঘুরে আসি চলুন। ধরুন, আপনি আমাকে জিজ্ঞেস করলেন “আপনার ম্যাকবুক আছে” আমি উত্তর দিলাম “নাই”। আবার আপনি জিজ্ঞস করলেন আপনি কি “উকমার্স থিম ডেভেলপ করতে পারেন” আমি উত্তর দিলাম “হ্যাঁ”। বুলিয়ান ডাটা হচ্ছে এরকমই, যার মাধ্যমে আমরা হ্যাঁ-না, আছে-নাই টাইপের উত্তর পেতে পারি।

  1. $is_iphone – এই ভেরিয়েবলের মাধ্যমে আমরা জানতে পারবো আমাদের সাইটটি আইফোনের সাফারি ব্রাউজার ব্যবহার করে ব্রাউজ করা হচ্ছে কিনা বা ব্রাউজের জন্য রিকোয়েস্ট করা হচ্ছে কিনা।
  2. $is_chrome – এই ভেরিয়েবল ব্যবহার করে জানতে পারবো গুগল ক্রোম কিনা।
  3. $is_safari – এটির মাধ্যমে জানা যাবে এটি সাফারি কিনা। এটি আর $is_iphone এর মধ্যে মিল হলো দুটোই সাফারি আর অমিল হলো একটি আইফোন আরেকটি ডেস্কটপ।
  4. $is_NS4 – নেটস্কেপ ব্রাউজার বেঁচে আছে কিনা আমার জানা নেই। গুগল করতে ভুলে গেছি। আপনি একটু খবর নিয়ে এই অলসকে জানিয়েন পিলিজ!
  5. $is_opera – এটির মাধ্যমে জানা যাবে এটি অপেরা ব্রাউজার কিনা। আপনি জানেন কী? অপেরা কিন্তু ব্লিংক লেআউট ইঞ্জিন ব্যবহার করে যেটি আবার ক্রোমের লে আউট ইঞ্জিন। ব্লিংক আবার ওয়েব কোরের একটি ফর্ক আর ওয়েব কোর হলো ওয়েব কিটের অংশ। আবার ওয়েব কিট হলো সাফারির ব্রাউজার ইঞ্জিন 😀 দারুন ব্যাপার না!
  6. $is_macIE – এটি দিয়ে জানা যাবে ম্যাকের ইন্টারনেট এক্সপ্লোরার কিনা! কেউ কি আদতে ম্যাকে ইন্টারনেট এক্সপ্লোরার ব্যবহার করে? আল্লাহ মালুম!
  7. $is_winIE – এটির মাধ্যমে জানা যাবে এটি সেই বিখ্যাত ইন্টারনেট এক্সপ্লোরার কিনা। যেটি ব্যবহার করে আমরা ক্রোম অথবা ফায়ারফক্স ডাউনল‌োড করে থাকি! 😛
  8. $is_gecko – নাম নিতে নিতে চলে আসছে, অনেক দিন বাঁচবে! কিন্তু এর নাম ফায়ারফক্স না হয়ে গেকো হলো ক্যানো? গেকো (Gecko) হলো মূলত ওয়েব ব্রাউজার ইঞ্জিনের নাম যা মজিলার ডেভেলপ করা আর ফায়ারফক্স এই ইঞ্জিন ব্যবহার করেই বানানো।
  9. $is_lynx – এই ব্রাউজার নিয়ে আমার কোন আইডিয়া নেই। গুগল করে জানলাম এটি একটি টেক্সট বেজড ব্রাউজার। আপনি চাইলে গুগল করে আরও কিছু জেনে নিতে পারেন।
  10. $is_IE – এটি $is_macIE অথবা $is_winIE হলেই হ্যাঁ হ্যাঁ বলে। অর্থাৎ ম্যাক হোক আর উইন্ডোজ ইন্টারনেট এক্সপ্লোরার হলেই হ্যাঁ।
  11. $is_edge – আর এটি হলেন জনাব এজ। এসেছেন ইন্টারনেট এক্সপ্লোারের ঐতিহ্য উদ্ধার করতে। এটির মাধ্যমে সেটিকেই জানা যাবে।

সার্ভার ডিটেকশন ভেরিয়েবলস

সার্ভার ডিটেকশন ভেরিয়েবল গুলি দিয়ে আমরা জানতে পারি আমাদের ওয়ার্ডপ্রেস কোন ওয়েব সার্ভার সফটওয়্যার দিয়ে চলতে। এই ভেরিয়েবল গুলিও ব্রাউজার ডিটেকশন ভেরিয়েবলের মত বুলিয়ান।

  1. $is_apache – এটি দিয়ে সর্বেসর্বা এ্যাপাচি ওয়েব সার্ভার কিনা জানা যাবে।
  2. $is_nginx – এটি দিয়ে Nginx সার্ভার কিনা জানা যাবে।
  3. $is_IIS এবং $is_iis7 – এই দুইটা দিয়ে মাইক্রোসফটের Internet Information Services বা আইআইএস কিনা জানা যাবে।

ইনশাআল্লাহ, পরবর্তি পর্বে আমরা জানব লুপ গ্লোবাল ভেরিয়েবল বা ওয়ার্ডপ্রেসের লুপের সাথে সংশ্লিষ্ট গ্লোবাল ভেরিয়েবল গুলি নিয়ে।

 

— ধন্যবাদ 🙂

পোস্টের হায়ারারকিক্যাল ডেপথ কন্ট্রোল

আজকে আমরা দারুন একটি কাজ করবো। আর দারুন কাজটি হবে আমাদের কাল্পনিক ক্লায়েন্ট মিঃ খুতখুত এর জন্য। মিঃ খুতখুত বাংলাদেশ নিয়ে একটি তথ্য বহুল সাইট বানাতে চাচ্ছেন। যেখানে বাংলাদেশের ৬৪ টি জেলার বিস্তারিত বর্ণনা থাকবে। প্রতিটি জেলার ইতিহাস, ঐতিহ্য, দূর্লভ এবং চমৎকার দৃষ্টি নন্দন সব ছবি নিয়ে গ্যালারী, ভিডিও আর্কাইভ এসব থাকবে। আবার প্রতিটি বিভাগ (বর্তমানে ৮ টি) আলাদা করে গুরুত্ব পাবে। প্রতিটি বিভাগে গেলে সে বিভাগের আওতাভুক্ত জেলা গুলি দেখা যাবে এবং সেখানে থেকে আবার প্রতিটি জেলাতে ক্লিক করে সেসব জেলার ডিটেইলস দেখা করা যাবে। আবার মিঃ খুতখুত চাচ্ছেন জেলাগুলি যেনো হায়ারারকিক্যাল হয় মানে কোন বিভাগে কোন জেলার বা কোন জেলা কোন বিভাগের অন্তর্গত সেই রিলেশনটা যেনো মেনে চলা হয়।

এনালাইসিস এবং ডিসিশন

খুবই সিম্পল রিকোয়ারমেন্ট, তাইনা? আমরা জানি পেজ একটি হায়ারারকিক্যাল পোস্টটাইপ, যেখানে একটি পেজকে আরেকটি পেজের প্যারেন্ট হিসেবে এ্যাসাইন করা যায়। সো, আমরা খুব সহজেই পেজ ব্যবহার করে হায়ারারকির কাজটি করে ফেলতে পারি। কিন্তু আমরা পেজ ব্যবহার করবো না! কারণ এ মিঃ খুতখুতের চাহিদা পূরণের জন্য আমাদের ডেডিকেটেড একটি পোস্টটাইপ দরকার। তাই আমরা পেজের মত (হায়ারারকিক্যাল) একটি কাস্টম পোস্টটাইপ রেজিস্টার করে নিব যার নাম হবে district

নোট: আমরা এখানে খুব সাধারণভাবে রিকোয়ারমেন্ট এনালাইসিস করেছি এবং একটি সিদ্ধান্তে পৌঁছেছি শুধুমাত্র মূল বিষয়টাকে সহজভাবে উপস্থাপনের জন্য।

District পোস্টটাইপ রেজিস্ট্রেশন

নিচের কোডটুকু কপি করে আমরা থিমের functions.php তে পেস্ট করি এবং এ্যাডমিন প্যানেলে গিয়ে রিফ্রেশ করি। চমৎকার, আমরা district কাস্টম পোস্টটাইপ রেজিস্টার করে ফেলেছি! 😀

মিঃ খুতখুত দেখলে খবর আছে!

এরপর আমরা কিছু District এ্যাড করবো। আপনি চাইলে নিচের গুলি এ্যাড করতে পারেন ডামি হিসেবে।

Rangpur
– Dinajpur
Rajshahi
– Bogora
Dhaka
– Narayongonj

এট্রিবিউট মেটাবক্স
কুইক এডিট প্যানেল

একি, আমরা যখন প্যারেন্ট হিসেবে ডিভিশন এ্যাসাইন করছি তখন অন্য জেলা গুলি লিস্টে চলে আসছে ক্যানো? ড্রপডাউন বোঝেনা ক্যানো যে আমরা শুধু ডিভিশন গুলি দেখতে চাচ্ছি, কোন জেলা নয়? আসলে এখানে ড্রপডাউনের কোন অপরাধ নেই। ড্রপডাউনকে এভাবেই ইন্সট্রাকশন দেয়া আছে। কিন্তু আমরা এই ইন্সট্রাকশন পরিবর্তন করতে পারি। আমরা যা চাই, যেভাবে চাই তা ড্রপডাউনকে বলে দিতে পারি, দারুন না? মিঃ খুতখুত দেখার আগেই আমাদের এটি সমাধান করে ফেলতে হবে নয়তো খবর আছে! চলুন তাহলে সমাধান করে ফেলি 😛

সমাধান

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

ওয়ার্ডপ্রেস কোর দেখে আমরা জানতে পারলাম যে wp_dropdown_pages() ফাংশনটি ব্যবহার করে ড্রপডাউনটি বানানো হচ্ছে। এই ফাংশনটিতে depth নামের একটি আর্গুমেন্ট পাস করা হয় যা দিয়ে মূলত হায়ারারকির লেভেল কন্ট্রোল করা হয়। ডকুমেন্টেশন দেখে আমরা নিশ্চিত বলতে পারি যে আমরা যদি depth এর ভ্যালু 1 সেট করে দেই তাহলে আমরা আমাদের সমস্যাটি সমাধান হয়ে যাবে। আমরা শুধুমাত্র টপলেভেল ডিসট্রিক্ট বা ডিভিশন গুলি দেখতে পারবো।

চলুন নিচের কোডটুকু কপি করে আমাদের functions.php তে পেস্ট করি এবং ডিসট্রিক্টের লিস্ট পেজ অথবা এডিট পেজ রিফ্রেশ করি।

ফিল্টার হুক দুটি, post_type নামের একটি আর্গুমেন্ট পাস করে যার মাধ্যমে আমাদের নিশ্চিত করতে হবে যে আমরা শুধুমাত্র district কাস্টম পোস্টটাইপের হায়ারারকি লেভেল কন্ট্রোল করছি, নয়তো খবর আছে 😛 । চলুন এবার দেখে আসি আমাদের ফাইনাল রেজাল্ট কি হলো –

কুইক এডিট প্যানেল

দারুন আমরা সমস্যা সমাধান করে ফেলেছি 😎

 

মূল্যবান সময় ব্যয় করে মিঃ খুতখুতের রিকোয়ারমেন্ট পূরণের জন্য আপনাকে ধন্যবাদ 😀

৫ টি কন্সট্যান্টের শক্তিতে ওয়ার্ডপ্রেস ডিবাগিং

সর্বদা define( 'WP_DEBUG', true ); যখনই করিব প্লাগিন কিংবা থিম শুরু!

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

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

WP_DEBUG

এই কন্সট্যান্টের ভ্যালু ডিফল্টভাবে false থাকে। এটিকে যদি আমরা true করে দেই তাহলে আমাদের PHP কোডে যত নোটিশ, ওয়ার্নিং, এরর আছে সব দেখাবে (যদি থাকে)। এটি ডিবাগিংয়ের জন্য সব থেকে প্রয়োজনীয় কন্সট্যান্ট। আমরা ‍‍‍‍‍যখন কোন থিম বা প্লাগিন ডেভেলপ করবো অথবা এডিট করব তখনো WP_DEBUG কে true করে নিব। সিনিয়র ডেভেলপাররা সর্বদা এটিকে রিকোমেন্ড করে থাকেন। সুতরাং, সর্বদা define( 'WP_DEBUG', true ); যখনই করিব প্লাগিন কিংবা থিম শুরু 😀

WP_DEBUG_LOG

এই কন্সট্যান্টটি হলো WP_DEBUG এর একটি সহযোগী কন্সট্যান্ট অর্থাৎ এটি WP_DEBUG এর উপর নির্ভরশীল। WP_DEBUG এর মান false হলে এই কন্সট্যান্টটি কাজ করবে না, মান অবশ্যই true হতে হবে। WP_DEBUG_LOG এর মান true করা থাকলে সিস্টেম সব রকমের PHP এরর debug.log নামের একটি ফাইলে সেভ করে রাখবে। ফাইলটি সেভ হলে wp-content ডিরেক্টরিতে থাকবে। যেহেতু এররগুলি ফাইলে সেভ করা থাকবে সেহেতু আমাদের যখন ইচ্ছে আমরা দেখতে পারবো। মজার বিষয় হলো আমরা চাইলে error_log() ফাংশন ব্যবহার করে debug.log ফাইলে কাস্টম কিছু লিখতেও পারি। এজাক্স রিকোয়েস্ট ডিবাগিং এ যা বেশ কার্যকরী একট উপায়। ডিফল্টভাবে এই কন্সট্যান্টের মান false থাকে।

WP_DEBUG_DISPLAY

এটি WP_DEBUG এর আরেকটি সহযোগী কন্সট্যান্ট অর্থাৎ এটিও WP_DEBUG এর উপর নির্ভরশীল। WP_DEBUG এর মান false হলে এই কন্সট্যান্টটি কাজ করবে না, মান অবশ্যই true হতে হবে। WP_DEBUG_DISPLAY কন্সট্যান্টটির মান true হলে আমাদের থিম বা প্লাগিনের এরর, ওয়ার্নিং এবং নোটিশ গুলি আমরা ব্রাউজারে দেখতে পারবো আর false হলে দেখতে পারবো না। ডিফল্টভাবে এই কন্সট্যান্টের মান true থাকে।

SCRIPT_DEBUG

নামেই কর্ম পরিচয়! নাম দেখেই বোঝা যায় এটি স্ক্রিপ্ট ডিবাগিং এর জন্য ব্যবহৃত হয়। তবে জাভাস্ক্রিপ্ট ছাড়াও এটি সিএসএস এর জন্যও ব্যবহার হয়। ওয়ার্ডপ্রেস সাধারণত কোর CSS এবং JS ফাইলগুলিকে একত্র করে মিনিফাইড ভার্সন সার্ভ করে থাকে। তাই ননমিনিফাইড বা ডেভেলপমেন্ট ভার্সনের স্ক্রিপ্ট এবং সিএসএস প্রয়োজন হলে SCRIPT_DEBUG এর ভ্যালু true সেট করতে হবে। বিভিন্ন থার্ডপার্টি প্লাগিন এবং থিমও এই কন্সট্যান্টটির উপর নির্ভর করে মিনিফাইড এবং ননমিনিফাইড ফাইল সার্ভ করে থাকে। আমরাও চাইলে এই সুবিধাটি ব্যবহার করতে পারি নিচের মত করে –

SAVEQUERIES

এই কন্সট্যান্টটি ব্যবহার করা হয় ডাটাবেজের কুয়েরি ডিবাগিংয়ের জন্য। SAVEQUERIES এর মান true সেট করা হলে সব ডাটাবেজ কুয়েরি গুলি এ্যারে আকারে গ্লোবাল $wpdb->queries এ স্টোর হয়ে থাকে। আমরা $wpdb->queries কে প্রিন্ট করে যেসব কুয়েরি রান করেছে সেসব দেখতে পারি এবং কুয়েরি চলতে কি পরিমাণ সময় লেগেছে তাও জানতে পারি।

ডাটাবেজ কুয়েরি ডিবাগিংয়ের জন্য WP Debug Bar টি দারুন একটি প্লাগিন এবং মজার বিষয় হলো এই প্লাগিনটি SAVEQUERIES কন্সট্যান্টের উপর নির্ভরশীল! SAVEQUERIES এর মান false থাকলে প্লাগিনটি কাজ করবে না।

বি.দ্র. – এই লেখাটি Debugging in WordPress এর উপর নির্ভর করে লেখা।

— ধন্যবাদ 🙂

আমি কিভাবে শিখব? পর্ব: সোর্সকোড

ধরুন, আপনি একই ধরনের দুটি ফাংশন নিয়ে কাজ করছেন অথবা কোথাও দেখলেন। যেমন: the_title() এবং get_the_title() কিংবা esc_attr__() এবং esc_attr_e() । এখন আপনার যদি এ নিয়ে পূর্ব অভিজ্ঞতা না থাকে তবে স্বাভাবিকভাবেই মনে প্রশ্ন আসতে পারে, আচ্ছা এ দুটির পার্থক্য কি? তখন এ উত্তর জানার জন্য আপনি কি করবেন?

আপনি কি WordPressians এ গিয়ে প্রশ্ন করবেন, নাকি Stack Overflow তে গিয়ে প্রশ্ন করবেন, নাকি এক্সপার্ট কাউকে ইনবক্স করবেন, নাকি এক্সপার্ট কাউকে সামনা-সামনি জিজ্ঞেস করবেন! আপনি কি করবেন?

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

আপনি যদি এই চর্চা অব্যহত রাখেন, আমি গ্যারান্টি দিয়ে বলছি আপনি অনেক দ্রুত শিখতে পারবেন এবং পুরো সিস্টেম কিভাবে কাজ করছে এবং কোথায় কখন কি ঘটছে সবকিছু বুঝতে পারবেন। এবং নিশ্চিতভাবে এই চর্চা আপনাকে একজন ভালো মানের ডেভেলপার হতে অনেক সহায়তা করবে।

সোর্সকোড দ্রুত নেভিগেট করার জন্য এবং যে কোন ফাংশন বা ক্লাস থেকে তার ডেফিনেশনে যাবার জন্য একটি ভালো মানের কোড এডিটর অথবা IDE (Integrated Development Environment) অনেক বড় ভূমিকা পালন করে। আপনি Sublime Text, VS Code, PHPStrom এ ধরনের এডিটর/IDE ব্যবহার করতে পারেন।

আমি এভাবেই শিখি 🙂