ওয়ার্ডপ্রেস হ্যাকস [পর্ব-০৩] :: Backend-এ শুধু নিজের পোস্ট দেখানো

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

একাধিক সদস্যের (Users) ওয়ার্ডপ্রেস ব্লগে যখন কোনো ইউজার (ধরা যাক, rahim) এডমিন প্যানেল যান, তিনি All Posts-এ (http://www.yoursite.com/wp-admin/edit.php) ক্লিক করলে সেই ইউজার সহ অন্য সকল ইউজারের পোস্টের হিসাব দেখা যায়। ধরুন, rahim নামের একজন ইউজার আপনার ব্লগে ১টি পোস্ট দিয়েছেন। rahim যখন All Posts দেখতে যাবেন, তখন ওই ব্লগের সবগুলো পোস্টের হিসাবনিকাশ তাঁকে দেখানো হবে! নিচের ছবিটি দেখুন-

মুক্তকণ্ঠ

এটা নিঃসন্দেহে অনাকাঙ্ক্ষিত। আমি ব্যক্তিগতভাবে মনে করি, কোনো ইউজার যখন All Posts দেখতে যাবেন, তখন শুধুমাত্র তাঁর পোস্টের হিসাবই দেখানো উচিৎ। উদাহরণ হিসেবে নিচের ছবিটি দেখুন-

মুক্তকণ্ঠ

এই সমস্যাটিও আপনি খুব সহজেই সমাধান করতে পারেন। আপনার ওয়ার্ডপ্রেস থিমের funcions.php ফাইলে নিচের কোডটুকু যোগ করে দিন।

add_action('pre_get_posts', 'filter_posts_list');

function filter_posts_list($query) {
    global $pagenow;
    get_currentuserinfo();

    if (!current_user_can('administrator') && current_user_can('edit_posts') && ('edit.php' == $pagenow)) {
        $query - > set('author', $current_user - > ID);
        $screen = get_current_screen();
        add_filter('views_'.$screen - > id, 'remove_post_counts');
    }
}

function remove_post_counts($posts_count_disp) {
    unset($posts_count_disp['all']);
    unset($posts_count_disp['publish']);
    unset($posts_count_disp['pending']);
    unset($posts_count_disp['draft']);
    unset($posts_count_disp['trash']);
    unset($posts_count_disp['sticky']);

    return $posts_count_disp;
}

এবার দেখুন, অন্য সবার পোস্ট বাদে শুধু ইউজারের নিজের পোস্টগুলো দেখাবে।

কারো কোনো জিজ্ঞাসা থাকলে মন্তব্যে জানান।

Level 0

আমি নাজমুল আহসান। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 13 বছর 5 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 20 টি টিউন ও 134 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 0 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।


টিউনস


আরও টিউনস


টিউনারের আরও টিউনস


টিউমেন্টস

ধন্যবাদ ভাই সুন্দর একটি পোস্টের জন্য । আমার একটি ওয়ার্ডপ্রেস সাইট আছে । এটা আমার খুবই কাজে লাগবে । জাযাকাল্লাহ খাইর । ভাই আমার জিজ্ঞাসা আপনার কোড দুই ভাবে দেখা যাচ্ছে । কিছু কোড নীল বোর্ডারের ভিতর কিছু কোড বাহিরে । দুটিই কি এক সাথে কপি পেস্ট করবো নাকি একটি । একটি হলে কোনটি ? http://www.deenilhaq.com

ভাই আমার জিজ্ঞাসা আপনার কোড দুই ভাবে দেখা যাচ্ছে । কিছু কোড নীল বোর্ডারের ভিতর কিছু কোড বাহিরে । দুটিই কি এক সাথে কপি পেস্ট করবো নাকি একটি । এই প্রশ্নটি আমারও। আমি আপনার ব্লগে গিয়ে এই পোষ্টের (http://www.muktokontho.com/mukto90/blog/3368) কোডটা কপি করে নিয়ে উপকৃত হয়েছি। ধন্যবাদ আপনাকে।

    @al.noman2006: কোড মূলত একই সঙ্গে পুরোটুকু। পুরোটাই কপি করুন।
    মন্তব্যের জন্যে ধন্যবাদ।

নাজমুল ভাই আপনার কোড টি কাজের এর সাথে আমার এই কোড টি ব্যবহার করলে আরো বেশি কাজে দিবে মনে হয়… আপনার এই কোড টি ব্লগের সবগুলো পোস্টের হিসাবনিকাশ শুধু লুকিয়ে দেয় কিন্তু অ্যাডমিন পোষ্ট বা অন্য ইউজারের পোষ্ট লুকাতে পারে না… এটাও নিঃসন্দেহে অনাকাঙ্ক্ষিত। আপনার কোডের পায়ের নিচে আমার এই কোড টি যদি স্থান পায় তবে আর ঠ্যাকায় কে… 😀

ভালো থাকবেন, ধন্যবাদ…!

function posts_for_current_author($query) {
global $pagenow;

if( ‘edit.php’ != $pagenow || !$query->is_admin )
return $query;

if( !current_user_can( ‘manage_options’ ) ) {
global $user_ID;
$query->set(‘author’, $user_ID );
}
return $query;
}
add_filter(‘pre_get_posts’, ‘posts_for_current_author’);

আপনার কোড এ ভুল আছে । wp syntax error ashe

    @ফিদা আল হাসান:

    ফিদা আল হাসান ভাই এই কোড টি দেখেনঃ wp syntax error ashe এরোর আসবেনা… 🙂

    add_action(‘pre_get_posts’, ‘filter_posts_list’);
    function filter_posts_list($query)
    {
    global $pagenow;
    get_currentuserinfo();
    if(!current_user_can(‘administrator’) && current_user_can(‘edit_posts’) && (‘edit.php’ == $pagenow))
    {
    $query->set(‘author’, $current_user->ID);
    $screen = get_current_screen();
    add_filter(‘views_’.$screen->id, ‘remove_post_counts’);
    }
    }
    function remove_post_counts($posts_count_disp)
    {
    unset($posts_count_disp[‘all’]);
    unset($posts_count_disp[‘publish’]);
    unset($posts_count_disp[‘pending’]);
    unset($posts_count_disp[‘draft’]);
    unset($posts_count_disp[‘trash’]);
    unset($posts_count_disp[‘sticky’]);

    return $posts_count_disp;
    }

এই কোডটি দিতে পারেন :
function posts_for_current_author($query) {

if($query->is_admin) {

global $user_ID;
$query->set(‘author’, $user_ID);
}
return $query;
}
add_filter(‘pre_get_posts’, ‘posts_for_current_author’);