মঙ্গলবার,  সকাল ৬:৩৪  ♦  ২৮শে মার্চ, ২০১৭ ইং, ১৪ই চৈত্র, ১৪২৩ বঙ্গাব্দ ( বসন্তকাল ), ২৯শে জমাদিউস-সানি, ১৪৩৮ হিজরী  ♦
T4B Promotion
ওয়ার্ডপ্রেস টিপস

নিদিস্ট একটি ইউজার একটি পোস্ট দেখতে পারবে, এটা কিভাবে করবো?

আপনার জিজ্ঞাসাCategory: ওয়ার্ডপ্রেসনিদিস্ট একটি ইউজার একটি পোস্ট দেখতে পারবে, এটা কিভাবে করবো?
মোঃ আবুল বাশার Staff asked 1 বছর ago

প্রথমেই টিপস ফর ব্লগকে ধন্যবাদ জানাই, কারন ইতি পূর্বে অনেক সমাধান তাদের কাছ থেকে নিয়েছি, আজও হেল্প নিলাম, এখন আবার একটি সমস্যা নিয়ে হাজির হলাম।

আজ সকালে একটি হেল্প চেয়ে ছিলাম যা ছিলো, একটি টিপস বা পেজের ইনফো শুধু নিদিস্ট কিছু ইউজার রোলরা দেখতে পারবে, যেমন: কম্পিউটার অপারেট, এ্যডমিন, শিক্ষক ইত্যাদি, এবং তার সমাধানও পেয়ে ছিলাম, যার কোডটা ছিলো এমন:

if( current_user_can('student_teacher_panel_manager') || current_user_can('administrator') || current_user_can('student_dataentry_manager') || current_user_can('student_manager') || current_user_can('editor') ) :

এখন আমি এর সাথে আরো একটি বিষয় যোগ করতে চাই। আমরা জানি ওয়ার্ডপ্রেসে সকল বিষয়ের সাথে একটি ডায়নামিক আইডি জেনারেট হয়, যা দিয়ে বিভিন্ন কাজ করা সম্ভব, যেমন: টিপস আইডি, এ্যটাচ আইডি, ইত্যাদি।

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

মানে আমি চাচ্ছি, প্রতিটি ছাত্র / ছাত্রীর ইনফো তার নিজ নিজ আইডি দিয়ে লগইন করে দেখতে পারবে, তাতে সে যে রোলেই থাকুক, আবার প্রতিটি শিক্ষক / শিক্ষিকাও তার নিজ নিজ আইডি দিয়ে লগইন করে তার ঐ পেজের সকল ইনফো দেখতে পারবে।

মনে করুন: একটি ছাত্র তার ইনফো দেখতে চাচ্ছে, কিন্তু তার আইডি আছে subscribe হিসেবে, তাহলেতো তার রোল উপরে সেট করা নেই, কিন্তু ঐ ইউজারের আইডি টা যদি মিলে যায় যা এডমিন টিপসটি করার সময় মেটা বক্সে লিখে দিয়ে ছিলো তাহলও তার সামনে ঐ পেজের ইনফোটা শো করবে। আইডি মিলে গেলে আর রোল পারমিশন কেয়ার করবে না।

আমি একটি পদ্ধতিতে চেস্টা করে ছিলাম, জানি বিয়টা ভুল, কিন্তু আপনার বোঝার সুবিধার্থে কোডটি আমি শেয়ার করলাম নিচে।

< ?php if( current_user_can('student_teacher_panel_manager') || current_user_can('administrator') || current_user_can('student_dataentry_manager') || current_user_can('student_manager') || current_user_can('editor') || current_user_can(50) ) : ?>

এখানে দেখুন একদম শেষে current_user_can(50)  আছে, এখানে 50 দিয়ে ইউজারের আইডি বোঝানো হয়েছে, উপরের রোলের সাথে যদি না মিলে কিন্তু যে আইডি দিয়ে সে লগইন অবস্থায় আছে তার আইডি যদি হয় 50 তাহলেও তার সামনে পেজের ইনফোটা শো করবে। (এখানে আইডি মেটাবক্স থেকে আনতে পারবো, কিন্তু পারমিশনটা কিভাবে হবে, বুঝতে পারছি না, উল্লেখ্যে যে, এখানে ইউজারের আইডি, ইমেইল, ইউজার নেম যেটা দিয়ে করা যায় সেটাই শেয়ার করতে পারেন, আইডি দিয়েই করতে হবে এটা বাধ্যতা মূলক নয়। )

বিষয়টি কিভাবে লিখলে বুঝাতে সুবিধা হবে, তা বুঝে উঠতে পারছিলাম না, তাই এতো বড় লিখতে হলো। জানি না এখনও কিলিয়ার ভাবে বুঝাতে পেরেছি কিনা।

এ্যডমিনকে অসংখ্য ধন্যবাদ যে, সে অসুস্থ অবস্থায়ও আমাকে যথেস্ট হেল্প করে যাচ্ছে।

2 Answers
ইফতেখার Staff answered 1 বছর ago

কাস্টম ফিল্ডের ভ্যালূ দেখানোর জন্য get_post_meta($post_id, $key, $single); এই কোড লিখতে হয়। একটা উদাহরণ দেই… ধরেন আপনি একটা ইউজার আইডি দিয়েছেন 13, এখন যেভাবে লিখবেন:

$user_id = get_post_meta($post_id, 'custom_meta_key', false);

যদি একটাই আইডি হয় তাহলে false দিবেন, আর অ্যারে বা একাধিক আইডি হলে true দিবেন। এবার কন্ডিশনে $user_id দিয়ে চেক করেন। কোন সমস্যা হলে বলবেন…

মোঃ আবুল বাশার Staff answered 1 বছর ago

Thanks vi. Now working, i will tried this way.
 
<?php
global $current_user;
$chosen_id = get_post_meta( $post_id, ‘chosen_user_id’, true );
if( current_user_can(‘administrator’) || $current_user->ID == $chosen_id ) {
//show user-specific contents
}