অ্যাডমিন প্যানেলে নিজস্ব $wp_query’র জন্য পেজিনেশন

অ্যাডমিন প্যানেলে একটা পাতায় (menu_page কিংবা submenu_page হতে পারে) একটা WP_Query() চালিয়ে কিছু তথ্য নিয়ে এসেছি। টেবিল আকারে তথ্যগুলো দেখিয়েছিও। এবং পেজিনেশনও করেছি। কিন্তু লক্ষ করলাম, পেজিনেশন কাজ করছে না। অনুসন্ধান করে দেখলাম Christine Cooper-ও একই সমস্যায় পড়েছিলেন এবং তিনি একটা সমাধানও বের করেছেন Milo’র পরামর্শকে কাজে লাগিয়ে। সমাধানটা দারুণ, এবং আমার সমস্যারও সমাধান দিলো। কিন্তু আরো কিছু বিষয়ের দরকার হয়ে পড়েছিল, তাই আমি সেটাতে আরো কাজ করে আপনাদের জন্য হাজির করলাম একটু গোছানো একটা সমাধান হিসেবে। আপনারা এটাকে আরো গুছিয়ে নিতে পারেন নিজের মতো করে।

আসলে কী হচ্ছে, কেন হচ্ছে?

এই ব্যাপারটা আগে জানা দরকার। কপি-পেস্ট সবাই করতে পারে, কোড বুঝে নিয়ে তা ব্যবহার করাটাই প্রকৃত প্রোগ্রামারের কাজ হওয়া উচিত। যা জানা গেল, তা হলো, আমাদের পাতায় কোনো $wp_query অবজেক্ট লোড হচ্ছে না। সেকারণে Query argument-ও যোগ হচ্ছে না ইউআরএল-এ। তাই আমাদের বহুল পরিচিত পেজিনেশন সংক্রান্ত কন্ডিশনাল:

$paged = get_query_var('paged') ? get_query_var('paged') : 1;

এখানে কাজ করছে না, কারণ get_query_var() আসলে কিছু পাচ্ছে না (কুয়েরি আর্গুমেন্ট তো যোগই হচ্ছে না, পাবে কিভাবে)। সেজন্য ইউআরএল-এ &paged প্যারামিটারের ভ্যালু পাবার জন্য আমরা $_GET মেথড ব্যবহার করতে বাধ্য হচ্ছি, যেমনটা Milo শিখালেন।

এবারে সব পেজিনেশনের জন্য যেমন কিছু ছোটখাটো বিষয় বানিয়ে নেয়া লাগে এখানেও তাই করা হচ্ছে, আমরা বলে নিচ্ছি:

$nextpage = $paged + 1;

আর আমরা আগের পাতা দেখানোর জন্য তৈরি করেছি:

$prevpage = max( ($paged - 1), 0 );

খুব সোজা, পরের পাতা মানে ১ যোগ, আর আগের পাতা মানে ১ বিয়োগ। কিন্তু এভাবে যাতে নেগেটিভ মানে না চলে যায়, তাই আমরা পিএইচপি’র max() ফাংশন ব্যবহার করেছি।

ধরা যাক আমাদের কুয়েরিটা এরকম:

এখানে আমরা posts_per_page প্যারামিটারে ওয়ার্ডপ্রেসের নিজস্ব Settings > Reading-এ সেট করা পাতা-প্রতি পোস্টের সংখ্যা ব্যবহার করছি। আমরা তাই বারবার কুয়েরি না করে ফাংশনেও এই সংখ্যাটা নিয়ে নিচ্ছি। যদি আপনার ক্ষেত্রে ব্যতিক্রম কিছু থেকে থাকে, আপনি চাইলে পেজিনেশন $posts_per_page = 5 এরকম করে আপনার ভ্যালুও পাস করে দিতে পারেন। যদি ফাংশনে $items_per_page-এ কোনো ভ্যালু না দেয়া হয়, তাহলে আমরা ওয়ার্ডপ্রেসের ডিফল্টটা গ্রহণ করেছি ফলব্যাক হিসেবে। লক্ষ রাখুন, $paged প্যারামিটারে get_query_var()-এর বদলে $_GET মেথড ব্যবহার করেছি।

এবারে এই হচ্ছে আমাদের পেজিনেশন ফাংশন:

আর, এই ফাংশনকে আমরা এভাবে ব্যবহার করতে পারবো:

এখানে আমাদের মতো করে আমরা পেজিনেশন প্যারামিটারগুলো পাঠাতে পারছি। এবং সর্বোপরি, আমরা কততম পাতায় আছি, Next Page, Previous Page, Last Page, First Page ইত্যাদি বোতামও পাচ্ছি, প্যাজিনেশনকে প্রয়োজনমতো ব্যবহার করার জন্য।

অ্যাডমিন পাতায় $wp_query'র জন্য নিজস্ব পেজিনেশন

অ্যাডমিন পাতায় $wp_query’র জন্য নিজস্ব পেজিনেশন

সুতরাং, বুঝে নিয়ে ব্যবহার করতে নেই মানা। কোনো ভুল থাকলে জানানোর অনুরোধ। আর ভালো লাগলো কিনা, কিংবা আসল কথা, কাজে লাগলো কিনা, নিচে মন্তব্য করে জানাতে ভুলবেন না। আর কাজে লাগলে, শেয়ার করে সবাইকে জানাতেও ভুলবেন না।

মঈনুল ইসলাম
ফ্রন্ট এন্ড ডিযাইনার ও ওয়ার্ডপ্রেস ডেভলপার

_____________________________

কৃতজ্ঞতা

কৃতজ্ঞতা জানাচ্ছি Christine Cooper এবং Milo-কে, তাঁদের দেয়া পরামর্শ আর স্নিপেটের^ উপর ভিত্তি করে এখানে একটা কার্যোপযোগী মার্জিত সংস্করণ যোগ করা হয়েছে মাত্র।

আপনার মন্তব্য জানান...