उपयोगकर्ता सूची में व्यवस्थापक को देखने के लिए अन्य उपयोगकर्ताओं के लिए योग्यता निकालें?


15

( मॉडरेटर का नोट: मूल शीर्षक "उपयोगकर्ता मेनू से व्यवस्थापक हटाएं" था)

मैंने एक क्लाइंट व्यवस्थापक भूमिका बनाई है जो अनिवार्य रूप से उपयोगकर्ताओं को जोड़ने / हटाने की क्षमता वाला संपादक है। लेख " एडिटर को छोड़कर कोई भी नया उपयोगकर्ता बना सकता है " मेरे नए क्लाइंट व्यवस्थापक की भूमिका को संपादित करने या ट्रू एडमिन उपयोगकर्ता बनाने में मदद करने में उत्कृष्ट था।

हालाँकि, आदर्श होगा कि जब वे उपयोगकर्ताओं को देख रहे हों, तो वे क्लाइंट व्यवस्थापक से छिपाएँ। मैं उन्हें "विश्वास" करने के लिए चाहता हूं कि वे उनकी साइट के व्यवस्थापक हैं, लेकिन मैं नहीं चाहता कि वे मेरी भूमिका / उपयोगकर्ता को भी देख सकें - अनिवार्य रूप से "व्यवस्थापक" की भूमिका को उनसे छिपाते हुए जब वे "उपयोगकर्ता" में हों पैनल।

जवाबों:


10

हाय @Carlos:

अपनी थीम की functions.phpफ़ाइल में, या .phpएक प्लगइन के भीतर एक फ़ाइल में जोड़ने की कोशिश करें जो आप लिख रहे होंगे (जो वर्डप्रेस 3.1.x के लिए काम करता है):

add_action('pre_user_query','yoursite_pre_user_query');
function yoursite_pre_user_query($user_search) {
  $user = wp_get_current_user();
  if ($user->ID!=1) { // Is not administrator, remove administrator
    global $wpdb;
    $user_search->query_where = str_replace('WHERE 1=1',
      "WHERE 1=1 AND {$wpdb->users}.ID<>1",$user_search->query_where);
  }
}

यदि आपके पास वर्डप्रेस 3.0.x है तो इसके बजाय इसे आज़माएं (क्योंकि वर्डप्रेस ने 'pre_user_query'3.1 तक हुक नहीं जोड़ा है ):

add_action('pre_user_search','yoursite_pre_user_search');
function yoursite_pre_user_search($user_search) {
  $user = wp_get_current_user();
  if ($user->ID!=1) { // Is not administrator, remove administrator
    global $wpdb;
    $user_search->query_where = str_replace('WHERE 1=1',
      "WHERE 1=1 AND {$wpdb->users}.ID<>1",$user_search->query_where);
  }
}

1
यह केवल पहले जोड़े गए उपयोगकर्ता को छुपाता है (जो लगभग हमेशा व्यवस्थापक होता है) ... लेकिन यदि व्यवस्थापक के पास 1 के अलावा एक आईडी है तो आपको क्वेरी को उचित रूप से बदलना होगा। यह केवल 1 व्यवस्थापक को भी छिपाएगा, सभी व्यवस्थापकों को नहीं।
एमान

मैं वास्तव में केवल 3.1 संस्करण पर काम करने के लिए इसे प्राप्त कर सकता था। किसी भी पुराने संस्करणों पर समान कोड चाल (3.04 भी) करने के लिए प्रतीत नहीं होता है।
कार्लोस

@ इमान - सच है, मैं सुविधाजनक था। अगर किसी को ज्यादा जरूरत है तो मैं इस पर गौर करूंगा।
माइकस्किंकेल

@Carlos - क्या आपको v3.0.x की आवश्यकता है, या v3.1 ठीक है?
माइकस्किंकेल

@ माइक - वाह, हाँ अगर तुम मेरी मदद करने के लिए तैयार हो तो यह बहुत अच्छा होगा। मैं कोई फायदा नहीं हुआ हैकिंग कर रहा हूं। मेरे उद्देश्यों के लिए एडमिन आईडी 1 ठीक काम करता है। मैं वास्तव में इसकी प्रशंसा करता हूँ।
कार्लोस

10

यहां माइकस्किंकल के उत्तर के लिए एक मॉड है जो यह जांचता है कि क्या वर्तमान उपयोगकर्ता की व्यवस्थापक की भूमिका है और यदि यह न केवल उन उपयोगकर्ताओं का चयन करता है जो ग्राहक हैं।

add_action('pre_user_query','yoursite_pre_user_query');
function yoursite_pre_user_query($user_search) {
    $user = wp_get_current_user();

    if ( $user->roles[0] != 'administrator' ) { 
        global $wpdb;

        $user_search->query_where = 
        str_replace('WHERE 1=1', 
            "WHERE 1=1 AND {$wpdb->users}.ID IN (
                 SELECT {$wpdb->usermeta}.user_id FROM $wpdb->usermeta 
                    WHERE {$wpdb->usermeta}.meta_key = '{$wpdb->prefix}user_level' 
                    AND {$wpdb->usermeta}.meta_value = 0)", 
            $user_search->query_where
        );

    }
}

1
बस FYI भविष्य है कि इस तरह अपने आप के रूप में एसक्यूएल में बहुत कुशल नहीं है, यदि आप सभी उपयोगकर्ताओं है कि प्रशासकों (संपादकों, लेखकों, सदस्य आदि), लेकिन अभी भी छिपाने व्यवस्थापक नहीं हैं दिखाना चाहते हैं किसी को भी के लिए, आप इस लाइन को बदल सकता है: AND {$wpdb->usermeta}.meta_value = 0और इसके बजाय मेटा मूल्य <10 को ऐसा बनाएं: AND {$wpdb->usermeta}.meta_value < 10)जो सभी उपयोगकर्ताओं को दिखाएगा और सभी उपयोगकर्ताओं से सभी प्रशासकों को छिपाएगा चाहे उनका स्तर कोई भी हो।
Howdy_McGee

2

उपयोगकर्ता स्तर हटाए गए हैं , इसलिए यह विधि इसके बजाय क्षमताओं के खिलाफ जांच करती है:

/** Hide Administrator From User List **/
function isa_pre_user_query( $user_search ) {
    if ( !current_user_can( 'administrator' ) ) { // Is Not Administrator - Remove Administrator
        global $wpdb;

        $user_search->query_where = str_replace(
            'WHERE 1=1', 
            "WHERE 1=1 AND {$wpdb->users}.ID IN (
              SELECT {$wpdb->usermeta}.user_id FROM $wpdb->usermeta 
              WHERE {$wpdb->usermeta}.meta_key = '{$wpdb->prefix}capabilities'
              AND {$wpdb->usermeta}.meta_value NOT LIKE '%administrator%' )", 
            $user_search->query_where
        );
    }
}

add_action( 'pre_user_query', 'isa_pre_user_query' );

1

pre_user_queryवर्डप्रेस 3.1.0 के बाद से उपयोगकर्ता क्वेरी को बदलने के लिए कार्रवाई का उपयोग किया जा सकता है


1
wp_user_query हालांकि, 3.6.1 में काम नहीं करता है pre_user_query करता है। 3.5.x
gwillie

1
आप विश्वस्त हैं? क्या आप किसी स्रोत का हवाला दे सकते हैं? यह क्रिया वर्तमान ट्रंक में उपयोग की जाती है - देखें wp- शामिल / user.php, लाइन 549
जोहान्स पिल्ले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.