বর্তমান ব্যবহারকারী যদি প্রশাসক বা সম্পাদক হন


99

বর্তমান লগ ইন থাকা ব্যবহারকারী একজন প্রশাসক বা সম্পাদক কিনা তা আমি কীভাবে দেখতে পারি?

আমি পৃথকভাবে প্রতিটি কিভাবে করতে জানি:

<?php if(current_user_can('editor')) { ?> 
    <!-- Stuff here for editors -->
<?php } ?>

<?php if(current_user_can('administrator')) { ?>
    <!-- Stuff here for administrators -->
<?php } ?>

তবে আমি কীভাবে তাদের একসাথে কাজ করব? অর্থাৎ ব্যবহারকারী প্রশাসক বা সম্পাদক?


9
if( current_user_can('editor') || current_user_can('administrator') )
শাজাদ

উত্তর:


189

প্রথম উত্তর, ওয়ার্ডপ্রেস-সম্পর্কিত নয় কারণ এটি কেবলমাত্র পিএইচপি: যুক্তিটি "ওআর" অপারেটরটি ব্যবহার করুন:

<?php if( current_user_can('editor') || current_user_can('administrator') ) {  ?>
    // Stuff here for administrators or editors
<?php } ?>

আপনি যদি দুটিরও বেশি ভূমিকা যাচাই করতে চান, আপনি বর্তমান ব্যবহারকারীর ভূমিকাগুলি কোনও অ্যারের মধ্যে রয়েছে কিনা তা পরীক্ষা করতে পারেন, এরকম কিছু:

$user = wp_get_current_user();
$allowed_roles = array('editor', 'administrator', 'author');
<?php if( array_intersect($allowed_roles, $user->roles ) ) {  ?>
   // Stuff here for allowed roles
<?php } ?>

তবে current_user_canকেবল ব্যবহারকারীর ভূমিকা নামের সাথেই নয়, দক্ষতার সাথেও ব্যবহার করা যেতে পারে।

সুতরাং, একবার সম্পাদক এবং প্রশাসক উভয়ই পৃষ্ঠাগুলি সম্পাদনা করতে পারলে আপনার জীবন সেই ক্ষমতাগুলির পক্ষে সহজতর চেক করা যায়:

<?php if( current_user_can('edit_others_pages') ) {  ?>
    // Stuff here for user roles that can edit pages: editors and administrators
<?php } ?>

একটি চেহারা আছে এখানে ক্ষমতা সম্পর্কে আরও তথ্যের জন্য।


আপনার কি চেক করা দরকার is_logged_in();?
রববেঞ্জ

3
@ রববেঞ্জ নং, কোনও ক্ষেত্রেই। কারণ current_user_can()ব্যবহারকারী লগ ইন না থাকলে সর্বদা মিথ্যা প্রত্যাবর্তন করে এবং ব্যবহারকারী লগ ইন না wp_get_current_user()থাকলে কোনও ভূমিকা ছাড়াই ব্যবহারকারীকে ফিরিয়ে দেয়, তাই array_intersect()সর্বদা মিথ্যা হবে।
গাজাজ্যাপ

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

আমি যখন array_intersectপদ্ধতিটি ব্যবহার করি, তখন আমি আমাদের সার্ভারের ত্রুটি লগতে পিএইচপি সতর্কতা পাই array_intersect(): Argument #2 is not an array। এটি কি কারণ এটি ব্যবহারকারী (গুলি) যাচাই করে থাকে তার কেবল একটি ভূমিকা আছে?
গারকনিস

@ গারকনিস সাধারণত এটি একটি অ্যারে হওয়া উচিত। কিছু কারণে আপনার কাছে মনে হয় এটি কোনও অ্যারে নয়। array_intersect($allowed_roles, (array)$user->roles )কোন সমস্যা নিয়ে কাজ করবে।
গাজাজ্যাপ

9

প্রথমত, current_user_can()ব্যবহারকারীর ভূমিকা যাচাই করতে ব্যবহার করা উচিত নয় - এটি ব্যবহারকারীর নির্দিষ্ট ক্ষমতা আছে কিনা তা পরীক্ষা করতে ব্যবহার করা উচিত ।

দ্বিতীয়ত, ব্যবহারকারীর ভূমিকার সাথে উদ্বিগ্ন হওয়ার পরিবর্তে দক্ষতার দিকে মনোনিবেশ করার পরিবর্তে আপনাকে মূল প্রশ্নে (যেমন ব্যবহারকারীর প্রশাসক বা সম্পাদক কিনা তা যাচাই করে দেখছে) জিজ্ঞাসা করা সমস্যার মতো বিষয়গুলি করতে আপনার মাথা ঘামানোর দরকার নেই। পরিবর্তে, যদি current_user_can()ছিল, হিসাবে উদ্দীষ্ট, একটি ব্যবহারকারীর ক্ষমতা পরীক্ষা করার জন্য যা ব্যবহৃত হচ্ছে না তাদের ভূমিকা, আপনি শর্তাধীন চেক প্রয়োজন হত না একটি "বা" (||) পরীক্ষা রয়েছে বলে। উদাহরণ স্বরূপ:

if ( current_user_can( 'edit_pages' ) ) { ...

edit_pages অ্যাডমিনিস্ট্রেটর এবং সম্পাদক উভয় রোলেরই ক্ষমতা, তবে লেখকের মতো কোনও নিম্ন ভূমিকা নয়। এইভাবে current_user_can()ব্যবহার করার ইচ্ছা ছিল।


দয়া করে নোট করুন : উচ্চ স্তরের ডব্লিউপি এই উত্তরগুলির সাথে একমত হয়। আপনার যথাসম্ভব ভূমিকা চেক এড়াতে চেষ্টা করা উচিত, সক্ষমতা ব্যবহার করুন। আমি বর্তমানে একাধিক ভূমিকা নিয়ে একটি প্রকল্পে কাজ করছি যা কেবলমাত্র 'পড়ুন' ক্যাপ রাখে। একমাত্র সমাধানটি আমার জন্য রোল চেকিং। দুঃখিত, আমি লিঙ্কটি খুঁজে পাচ্ছি না, এটি ডাব্লুপি গিথুবে একটি মুক্ত আলোচনা ছিল।
বিয়ন্সের

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত, আইএমও। current_user_canভূমিকা হিসাবে সাধারণত ক্ষমতা জন্য ব্যবহার করা উচিত।
আর্মস্ট্রোনজেস্ট

2

@ বুটারব্লগের উত্তরে যেমন বলা হয়েছে, কোনও ভূমিকার বিপরীতে আপনার বর্তমান_উজার_ক্যান ব্যবহার করা উচিত নয়

এই নোটিশটি বিশেষত পিএইচপি ডকুমেন্টেশনে যুক্ত করা হয় has_capযা দ্বারা ডাকে functioncurrent_user_can

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

এটি করার সঠিক উপায়টি হল ব্যবহারকারীকে পেতে এবং এটির$user->roles মতো পরীক্ষা করা :

if( ! function_exists( 'current_user_has_role' ) ){
    function current_user_has_role( $role ) {

        $user = get_userdata( get_current_user_id() );
        if( ! $user || ! $user->roles ){
            return false;
        }

        if( is_array( $role ) ){
            return array_intersect( $role, (array) $user->roles ) ? true : false;
        }

        return in_array( $role, (array) $user->roles );
    }
}

এটি করার জন্য আমি ব্যবহার করি এমন কিছু সহায়ক ফাংশন (যেমন কখনও কখনও আমি কেবল বর্তমান ব্যবহারকারীকে চাই না):

if( ! function_exists( 'current_user_has_role' ) ){
    function current_user_has_role( $role ){
        return user_has_role_by_user_id( get_current_user_id(), $role );
    }
}

if( ! function_exists( 'get_user_roles_by_user_id' ) ){
    function get_user_roles_by_user_id( $user_id ) {
        $user = get_userdata( $user_id );
        return empty( $user ) ? array() : $user->roles;
    }
}

if( ! function_exists( 'user_has_role_by_user_id' ) ){
    function user_has_role_by_user_id( $user_id, $role ) {

        $user_roles = get_user_roles_by_user_id( $user_id );

        if( is_array( $role ) ){
            return array_intersect( $role, $user_roles ) ? true : false;
        }

        return in_array( $role, $user_roles );
    }
}

তারপরে আপনি কেবল এটি করতে পারেন:

current_user_has_role( 'editor' );

অথবা

current_user_has_role( array( 'editor', 'administrator' ) );


-1
<?php if( current_user_can('editor')) :
  echo "welcome";
elseif( current_user_can('member')) :
  echo "welcome";
else :
 wp_die("<h2>To view this page you must first <a href='". wp_login_url(get_permalink()) ."' title='Login'>log in</a></h2>");
endif;
?>

1
এটি ওপিকে কীভাবে সহায়তা করে তা আপনি যদি ব্যাখ্যা করতে পারেন তবে দুর্দান্ত হবে।
ব্র্যাভোকেল

আপনি কেবল "সম্পাদক" বা "সদস্য" পৃষ্ঠাটি দেখার অনুমতি দিতে পারেন আপনি এই কোডটি সরাসরি জেনেরিক-
পেজ.এফপি

4
দয়া করে কেবল কোড ড্রপ করবেন না। মন্তব্য এবং কিছু ব্যাখ্যা যুক্ত করুন এটি কীভাবে প্রশ্নকারীদের সমস্যা সমাধান করে।
kraftner
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.