Get_users এর সাথে একাধিক ভূমিকা পান


10

আমি এর মতো কিছু কোড পেয়েছি:

$ ক্যোয়ারী_আরগস = অ্যারে ();
$ ক্যোয়ারী_আরগস ['ক্ষেত্র'] = অ্যারে ('আইডি', 'প্রদর্শন_নাম');
$ প্রশ্নের_args ['ভূমিকা'] = 'গ্রাহক';
= ব্যবহারকারীরা = get_users ($ ক্যোয়ারী_আরগস);
foreach ($ ব্যবহারকারী হিসাবে $ ব্যবহারকারী) $ users_array [$ ব্যবহারকারী-> আইডি] = $ ব্যবহারকারী-> প্রদর্শন_নাম;

আমি আরো ভূমিকা পেতে চান এবং অন্তর্ভুক্ত contributor, authorএবং কিছু কাস্টম ভূমিকা আমি ভূমিকা Scoper সঙ্গে তৈরি করা প্লাগিন যেমন Manager, ইত্যাদি কোন ধারনা কিভাবে আমি এটা করতে পারেন get_users?

ধন্যবাদ

উত্তর:


20

ওয়ার্ডপ্রেস ৪.৪-এ ফাস্টফারওয়ার্ড - এটি role__inবৈশিষ্ট্যটিকে সমর্থন করবে !

দেখে মনে হচ্ছে ওয়ার্ডপ্রেস ৪.৪ হ'ল আমাদের ভাগ্যবান সংস্করণ নম্বর , কারণ এটি শ্রেণীর বৈশিষ্ট্য role__inএবং role__not_inবৈশিষ্ট্য উভয়কেই সমর্থন করবে WP_User_Query

সুতরাং গ্রাহক , অবদানকারী এবং লেখকের ভূমিকা অন্তর্ভুক্ত করার জন্য , আমরা সহজভাবে ব্যবহার করতে পারি:

$users = get_users( [ 'role__in' => [ 'subscriber', 'subscriber', 'author' ] ] );

পুরো গল্পের জন্য টিকিট # 22212 দেখুন !


1
আপনি সরকারীভাবে birgireV4.4 ডাব করা হয়েছে, নতুন এবং উন্নত সংস্করণ ;-)
পিটার গুসেন

1
তিনি শীতল, এটি প্রিমিয়াম ভোডকা ব্র্যান্ডের মতো শোনাচ্ছে ( উইকি ) ;-) @ পিটারগুসেন
বার্জায়ার

18

আপনি যুক্তিটি ব্যবহার get_usersকরে একটি কল বা একক কল করেও WP_User_Queryএটি করতে পারেন meta_query:

global $wpdb;
$blog_id = get_current_blog_id();

$user_query = new WP_User_Query( array(
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => $wpdb->get_blog_prefix( $blog_id ) . 'capabilities',
            'value' => 'role_one',
            'compare' => 'like'
        ),
        array(
            'key' => $wpdb->get_blog_prefix( $blog_id ) . 'capabilities',
            'value' => 'role_two',
            'compare' => 'like'
        )
    )
) );

meta_queryকিভাবে থেকে টানা হয় WP_User_Queryহ্যান্ডলগুলি roleপরামিতি, যদি তুমি আগ্রহী।


@ অ্যান্ডি-অ্যাডামস ভাগ করে নেওয়ার জন্য ধন্যবাদ। এটি কেবল আমার জন্য সমস্ত ভূমিকা প্রদর্শিত হবে বলে মনে হচ্ছে । এটি কি এখনও আপনার জন্য কাজ করছে?
হেলগাটিভিকিং

@ হেলগাথভিওকিং আপনি বিশেষত কোন ভূমিকাটির তুলনা করছেন? এটি ভূমিকার নামগুলি কী তার উপর নির্ভর করতে পারে।
অ্যান্ডি অ্যাডামস

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

এসকিউএল কোয়েরিটি কী উত্পন্ন হচ্ছে তা দেখার জন্য আমি ডিবাগ ক্যোয়ারী প্লাগইনটি ব্যবহার করার পরামর্শ দিতে পারি। আমি কেন অপ্রত্যাশিত ফলাফল পাচ্ছি তা অনেক সময় এটি আমাকে বুঝতে সাহায্য করে। wordpress.org/plugins/debug-queries
অ্যান্ডি অ্যাডামস

12

আমি এই ফাংশনটি ব্যবহার করে এটি সমাধান করতে পেরেছি:

function get_clients() { 

    $users = array();
    $roles = array('subscriber', 'custom_role1', 'custom_role2');

    foreach ($roles as $role) :
        $users_query = new WP_User_Query( array( 
            'fields' => 'all_with_meta', 
            'role' => $role, 
            'orderby' => 'display_name'
            ) );
        $results = $users_query->get_results();
        if ($results) $users = array_merge($users, $results);
    endforeach;

    return $users;
}

তারপরে আমার থিমে আমি এটি করতে পারি:

$users_array = get_clients();

1
এটি আমার কাছে আসা সেরা বিকল্প। ধন্যবাদ।
জেক

@ ব্লগজুনকি কৌতূহলী, তবে এইটি বাছাই করে কতটা ভাল?
হেলগাটিভিকিং

4
$users = array_merge( get_users('role=subscriber'), get_users('role=contributor') );

যেহেতু get_users()এমন এক ব্যবহারকারীদের অ্যারে প্রদান করে যা পরম হিসাবে প্রদত্ত ক্যোয়ারী স্ট্রিংয়ের সাথে মেলে। get_users()আপনি আলাদাভাবে চান এমন প্রতিটি ভূমিকার জন্য কোয়েরিটি চালান এবং ফলাফলগুলি মার্জ করুন। তারপরে $usersআপনি অন্যভাবে যেমনভাবে চান তেমন লুপ করতে পারেন।


1
কেন আপনি সমস্যার সমাধান করেন তা বোঝাতে দয়া করে আরও তথ্য সরবরাহ করতে পারেন?
ঘোস্টটিস্ট

কেন এটি কাজ করে তা আরও ভালভাবে ব্যাখ্যা করার জন্য আমি মূল উত্তরটি সম্পাদনা করেছি।
ksloan

আমি $users = array_merge( get_users( array('role' => 'RoleOne' ,'fields' => 'ID') ), get_users( array('role' => 'RoleTwo' ,'fields' => 'ID') ));এটি হিসাবে ব্যবহার করেছি এবং এটি একটি ট্রিট কাজ করেছে। ধন্যবাদ!
গিট 4eva

3

ব্যবহারের array_mergeক্ষেত্রে সমস্যা হ'ল আপনি পৃষ্ঠাগুলি ব্যবহার করতে পারবেন না। আমি সত্যিই অ্যান্ডি অ্যাডামসের সমাধানটি পছন্দ করি তবে আপনি যদি তার অনেকগুলি ভূমিকা অনুসন্ধান করে থাকেন তবে তার মেটা ক্যোয়ারী ব্যবহার করার ফলে খুব ধীর গতির ক্যোয়ারী আসবে (অভ্যন্তরীণভাবে এটি INNER JOINপ্রতিটি মেটা ক্যোয়ারির জন্য নতুন করে তোলে)।

আমার সমাধানটি হ'ল নিয়মিত এক্সপ্রেশন মেটা ক্যোয়ারী ব্যবহার করা:

<?php

global $wpdb;
$blog_id = get_current_blog_id();

$roles = array('editor', 'administrator');
$meta_query = array(
    'key' => $wpdb->get_blog_prefix($blog_id) . 'capabilities',
    'value' => '"(' . implode('|', array_map('preg_quote', $roles)) . ')"',
    'compare' => 'REGEXP'
);
$user_query = new WP_User_Query(array(
    'meta_query' = array($meta_query)
));

?>

এটি এমন কোয়েরি তৈরি করে যা দেখে মনে হয়:

array(
    'meta_query' => array(
        array(
            'key' => 'wp_capabilities'
            'value' => '"(editor|administrator)"'
            'compare' => 'REGEXP'
        )
    )
);

1

আপনি কেবল আরও ব্যবহারকারীর প্রশ্নের ফলাফলগুলি মার্জ করতে পারবেন। ধরা যাক আপনি Authorএবং Editorভূমিকা উভয়ই অন্তর্ভুক্ত করতে চান । প্রতিটি মামলার জন্য ক্যোয়ারী সংজ্ঞায়িত করুন এবং তারপরে একটি একক অ্যারেতে একীভূত করতে অ্যারে_মেসার ব্যবহার করুন ।

$xuser_query = new WP_user_query(array( 'role' => 'Author'));    
$yuser_query = new WP_user_query(array( 'role' => 'Editor'));
$mergedRoles=array_merge($xuser_query->results,$xuser_query->results);

// further on you might want to do some sorting 
// of the resulting array of objects before looping through it:

if (!empty( $mergedRoles->results ) ) {
 foreach ( $mergedRoles->results as $user ) { 
        echo $user->display_name;
      }
 else echo "nada, no users found";

0

Get_users ফাংশন থেকে সমস্ত পরামিতি alচ্ছিক । আপনি যদি কিছু নির্দিষ্ট না করেন তবে আপনি এমন একটি অ্যারে পাবেন যাতে কাস্টম রোলগুলি সহ বর্তমান ব্লগের প্রতিটি ব্যবহারকারীর সাথে সম্পর্কিত জিনিসগুলি রয়েছে।


0
<?php 
$xuser_query = new WP_user_query(array( 'role' => 'Author'));    
$yuser_query = new WP_user_query(array( 'role' => 'Editor'));

$mergedRoles=array_merge($xuser_query->results,$xuser_query->results);

// further on you might want to do some sorting 
// of the resulting array of objects before looping through it:

if (!empty( $mergedRoles) ) {

    foreach ( $mergedRoles as $user ) { 
        echo $user->display_name;
    }

} else {
    echo "nada, no users found";
}
?>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.