Get_users के साथ कई भूमिकाएँ प्राप्त करें


10

मुझे कुछ कोड इस तरह मिले हैं:

$ query_args = array ();
$ query_args ['फ़ील्ड'] = array ('ID', 'display_name');
$ query_args ['भूमिका'] = 'ग्राहक';
$ उपयोगकर्ता = get_users ($ query_args);
foreach ($ उपयोगकर्ताओं को $ उपयोगकर्ता के रूप में) $ users_array [$ user-> ID] = $ उपयोगकर्ता-> display_name;

मैं अधिक भूमिकाएँ प्राप्त करना चाहता हूं और इसमें शामिल करना चाहता हूं contributor, authorऔर कुछ कस्टम भूमिकाएँ जो मैंने रोल स्कोपर प्लगइन के साथ बनाई हैं Manager, आदि। कोई भी विचार कि मैं उसके साथ कैसे कर सकता हूं get_users?

धन्यवाद

जवाबों:


20

वर्डप्रेस 4.4 के लिए तेज़ - यह role__inविशेषता का समर्थन करेगा !

ऐसा लगता है कि वर्डप्रेस 4.4 हमारी भाग्यशाली संस्करण संख्या है , क्योंकि यह कक्षा के दोनों role__inऔर role__not_inविशेषताओं का समर्थन करेगा WP_User_Query

इसलिए सब्सक्राइबर , योगदानकर्ता और लेखक भूमिकाओं को शामिल करने के लिए , हम बस उपयोग कर सकते हैं:

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

पूरी कहानी के लिए टिकट # 22212 देखें !


1
आप आधिकारिक तौर पर birgireV4.4, नए और उन्नत संस्करण ;-) डब किया गया है
पीटर गूसेन

1
हेह कूल, वह भी एक प्रीमियम वोदका ब्रांड ( विकी ) की तरह लगता है ;-) @PieterGoosen
बिरगाइरे

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पैरामीटर, अगर आपका कोई दिलचस्पी।


@ एंडी-एडम्स साझा करने के लिए धन्यवाद। यह केवल मेरे लिए सभी भूमिकाओं को प्रदर्शित करता है। क्या यह अभी भी आपके लिए काम कर रहा है?
हेलगेटहाइकिंग जूल

@helgatheviking विशेष रूप से आप किन भूमिकाओं की तुलना कर रहे हैं? यह इस बात पर निर्भर कर सकता है कि भूमिका के नाम क्या हैं।
एंडी एडम्स

@AndyAdams मैं इसे अपने साधारण उपयोगकर्ता लिस्टिंग प्लगइन में काम करने की कोशिश कर रहा हूं, इसलिए मैं इसे किसी भी भूमिका के संयोजन के लिए काम करने की कोशिश कर रहा हूं। अपनी स्थानीय साइट पर, मैंने व्यवस्थापक और संपादक की कोशिश की है, लेकिन परिणाम के माध्यम से सभी अन्य भूमिकाएं अभी भी शामिल हैं।
हेलगेटहाइकिंग 20

मैं डीबग क्वेरी प्लगइन का उपयोग करके यह देखने की सिफारिश कर सकता हूं कि SQL क्वेरी क्या उत्पन्न हो रही है। बहुत बार यह मुझे यह पता लगाने में मदद करता है कि मुझे अप्रत्याशित परिणाम क्यों मिल रहे हैं। 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
यह सबसे अच्छा विकल्प है जो मैं भर में आया हूं। धन्यवाद।
जेक

@blogjunkie जिज्ञासु, लेकिन यह कैसे अच्छी तरह से करता है?
हेलगेटहाइकिंग जूल 25'13

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') ));, और यह एक इलाज किया। धन्यवाद!
गुइट

3

उपयोग करने array_mergeमें समस्या यह है कि आप पृष्ठांकन का उपयोग नहीं कर सकते हैं। मैं वास्तव में @Andy एडम्स के समाधान को पसंद करता हूं, लेकिन यदि आप कई भूमिकाओं पर खोज कर रहे हैं, तो उसकी मेटा क्वेरी का उपयोग करने से बहुत धीमी गति से क्वेरी होगी (आंतरिक रूप से यह 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भूमिका दोनों को शामिल करना चाहते हैं। प्रत्येक मामले के लिए क्वेरी को परिभाषित करें फिर एक एकल सरणी में समेकित करने के लिए array_merge का उपयोग करें ।

$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 वैकल्पिक हैं। यदि आप कुछ भी नहीं निर्दिष्ट करते हैं, तो आपको एक ऐसी सरणी मिलेगी जिसमें वर्तमान ब्लॉग के प्रत्येक उपयोगकर्ता के अनुरूप ऑब्जेक्ट शामिल हैं, जिनमें कस्टम भूमिकाएं शामिल हैं।


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";
}
?>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.