इन क्षेत्रों को 'प्रोफ़ाइल' अनुभाग से कैसे निकालें?


16

मुझे उपयोगकर्ता प्रोफ़ाइल के अनुसार कुछ प्रोफ़ाइल फ़ील्ड को 'प्रोफ़ाइल' पृष्ठ से निकालना होगा। रंग पिकर को हटाने के लिए मैंने उपयोग किया remove_action("admin_color_scheme_picker", "admin_color_scheme_picker")। मैं इन क्षेत्रों को हटाना चाहता हूं:

  1. उपनाम
  2. नाम सार्वजनिक करो
  3. एआईएम, याहू, गूगल टॉक और अपने बारे में क्षेत्र
  4. 2 चेकबॉक्स के साथ 'शो एडमिन बार' सेक्शन

मैं फ़ाइल 'user-edit.php' के माध्यम से गया था यह देखने के लिए कि क्या कोई क्रिया / फ़िल्टर हैं जो मुझे ऐसा करने की अनुमति देते हैं, लेकिन ऐसा लगता है कि वहाँ नहीं हैं। क्या कोई मुझे बता सकता है कि इसे कैसे करना है? किसी भी सहायता की सराहना की जाएगी। धन्यवाद

EDIT: उत्तर के लिए @helenhousandi का धन्यवाद। मैंने पहले से ही इस तरह से किया था।

<?php
add_action('admin_footer-profile.php', 'remove_profile_fields');
function remove_profile_fields()
{
    if(current_user_can('custom_role'))
    { ?>
        <script type="text/javascript">
            jQuery("h3:contains('Personal Options')").next('.form-table').remove();
            jQuery("h3:contains('Personal Options')").remove();
            jQuery("h3:contains('About Yourself')").next('.form-table').remove();
            jQuery("h3:contains('About Yourself')").remove();
        </script>
<?php }
}
?>

मुझे पता है कि यह थोड़ा लंबा है, लेकिन यह काम कर गया! मुझे लगता है कि मैं @ helenhousandi के जवाब के साथ जाऊंगा।


यह कहां जाना चाहिए? functions.php?
फैबियन

हाँ। यह functions.phpया एक प्लगइन फ़ाइल पर जा सकते हैं । जब तक हुक सही होते हैं, यह दोनों जगहों से काम करेगा।
रॉटविक गंगूरड़े

ठीक है, लेकिन अगर मैं इसे फ़ंक्शन में डाल देता हूं। एफपी, मैं जावास्क्रिप्ट कैसे लौटाऊं? वापसी या गूंज के साथ?
फेबियन

ऐसा लगता है कि वर्डप्रेस v4.4.1 के बाद से, उपनाम एक आवश्यक क्षेत्र बन गया है और ERROR देता है : कृपया इस हिडन के साथ एक उपयोगकर्ता को अपडेट करते समय एक उपनाम दर्ज करें , लेकिन आबादी नहीं है, इसलिए आप इसे और अधिक नहीं छिपा सकते हैं
icc97

जवाबों:


15

संपर्क विधियों के लिए फ़िल्टर करें user_contactmethods:

function update_contact_methods( $contactmethods ) {

    unset( $contactmethods['aim'] );
    unset( $contactmethods['jabber'] );
    unset( $contactmethods['yim'] );

    return $contactmethods;

}
add_filter( 'user_contactmethods', 'update_contact_methods' );

धन्यवाद ... यह एक मिल गया! 'शो एडमिन बार' और 'अपने बारे में' वर्गों के लिए कुछ भी?
रुटविक गांगुर्दे

यदि आपको कोई समाधान मिल जाए तो कृपया इसे अपडेट करें ... हालांकि मैं आपके उत्तर को स्वीकार कर रहा हूं। धन्यवाद!
रुटविक गांगुर्ड

+1 क्योंकि जहाँ तक मैं याद कर सकता हूँ कि PHP के माध्यम से खेतों को हटाना भी WordPress को usermeta तालिका में रिक्त प्रविष्टियाँ बनाने से रोकता है।
Ashfame

9

यद्यपि user_contactmethodsफ़िल्टर उपयोगकर्ता प्रोफ़ाइल स्क्रीन के लिए कुछ में से एक है, क्योंकि वर्डप्रेस में अन्य फ़ील्ड्स की आवश्यकता नहीं है, आप jQuery का उपयोग कर सकते हैं .hide()और .remove()प्रभावी रूप से उन लोगों से छुटकारा पा सकते हैं जिन्हें आप जानकारी बचाने के संदर्भ में जटिलताओं के बिना नहीं चाहते हैं। । निश्चित रूप से, जेएस पर एक व्यक्ति अभी भी उन्हें देख सकता है, लेकिन यह एक छोटा सा अल्पसंख्यक है और मैं अनुमान लगा रहा हूं कि वहां बदल रही जानकारी वास्तव में कुछ भी प्रभावित नहीं करेगी।

पूरे व्यक्तिगत विकल्प के टुकड़े को हटाने का एक उदाहरण (शो व्यवस्थापक बार और रंग योजना)। मुझे पता है कि यह वही नहीं है जो आप वास्तव में ढूंढ रहे हैं, बस मैं आपको एक त्वरित उदाहरण देना चाहता हूं जो मेरे पास है:

// remove personal options block
if( is_admin() ){
    remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );
    add_action( 'personal_options', 'prefix_hide_personal_options' );
}

function prefix_hide_personal_options() {
  ?>
    <script type="text/javascript">
        jQuery( document ).ready(function( $ ){
            $( '#your-profile .form-table:first, #your-profile h3:first' ).remove();
        } );
    </script>
  <?php
}

इसके अलावा, शो एडमिन बार विकल्प के बारे में एक नोट: 3.3 में एडमिन बार हेडर बन रहा है और इस तरह इसे चालू या बंद नहीं किया जा सकता है, इसलिए यह चिंता का विषय नहीं हो सकता है।

मैंने अधिक सटीक और पूर्ण होने के लिए कोड उदाहरण को अपडेट किया। वहाँ कुछ बचा था।


धन्यवाद! यह एक अच्छा उपाय है! मैंने जो किया वह कुछ ऐसा ही था लेकिन मैंने एक अलग एक्शन हुक का इस्तेमाल किया, ताकि मेरी स्क्रिप्ट पर ही चले profile.php। मुझे अपने सिस्टम में परिभाषित विशिष्ट कस्टम भूमिका के लिए भी ऐसा करने की आवश्यकता थी। मेरे सवाल का जवाब के साथ अद्यतन।
रुटविक गांगुर्दे

1
यदि आप निम्नलिखित को jQuery से जोड़ते हैं तो यह प्रश्न से उपनाम और 'डिस्प्ले नेम' को भी छिपा देगा:$("#nickname,#display_name").parent().parent().remove();
icc97

आप edit_user_profile हुक का भी उपयोग कर सकते हैं। और कोड को तुरंत चलाने के लिए jQuery (दस्तावेज़)। इस तरह
गिराल्डी

WP v.4.4.1 के बाद से अब आवश्यक है
icc97

2

जैसा कि लगता है कि इसके लिए कोई अच्छा php हुक नहीं है, मैंने सीएसएस के साथ खेतों को छिपाना समाप्त कर दिया और फिर उन्हें जेएस के साथ हटा दिया।

add_action( 'admin_head', 'remove_default_profile_fields' );

function remove_default_profile_fields() {

    global $pagenow;

    if( 'profile.php' != $pagenow) return;

    remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );

    // <tr> selectors, each containing a field
    $tr = array(
        "tr.user-rich-editing-wrap",
        "tr.user-comment-shortcuts-wrap",
        "tr.user-first-name-wrap",
        "tr.user-last-name-wrap",
        "tr.user-admin-bar-front-wrap",
        "tr.user-profile-picture",
        "tr.user-user-login-wrap",
        "tr.user-display-name-wrap",
        "h2" // Personally I decided to remove all H2 tags too.
    );

    $selectors = implode(", ", $tr);

    // Hide the fields with css, so even if javascript is disabled they wont show up. 
    echo "<style>{$selectors}{display:none;}</style>"; ?>

    <script type="text/javascript">
        jQuery( document ).ready(function( $ ){
           // Remove selected <tr>'s
           $( '<?= $selectors; ?>' ).remove();
           // Remove any empty table that may have been left over
           $(".form-table:not(:has(tr))").remove();
        });
    </script>

  <?php
}

1

से वर्डप्रेस समर्थन मंच आप PHP का उपयोग हटाने कर सकते हैं। यह अपने बारे में अनुभाग को हटा देता है:

if (! function_exists('remove_plain_bio') ){
    function remove_plain_bio($buffer) {
        $titles = array('#<h3>About Yourself</h3>#','#<h3>About the user</h3>#');
        $buffer=preg_replace($titles,'<h3>Password</h3>',$buffer,1);
        $biotable='#<h3>Password</h3>.+?<table.+?/tr>#s';
        $buffer=preg_replace($biotable,'<h3>Password</h3> <table class="form-table">',$buffer,1);
        return $buffer;
    }

    function profile_admin_buffer_start() { ob_start("remove_plain_bio"); }

    function profile_admin_buffer_end() { ob_end_flush(); }
}
add_action('admin_head', 'profile_admin_buffer_start');
add_action('admin_footer', 'profile_admin_buffer_end');

कोड 'पासवर्ड के बारे में' अपने बारे में 'हेडर' की जगह ले लेता है और फिर उस और अगली तालिका के बीच कुछ भी पता चलता है (जो पासवर्ड तालिका है)।

इसके अलावा प्लगइन WP Hide Dashboard भी इसी तरह के jQuery की जगह करता है यदि आप इसे बढ़ाना चाहते हैं।


भविष्य के संदर्भ के लिए, आप उपयोग करना चाह सकते हैं admin_head-profile.phpऔर admin_footer-profile.phpइसके बजाय

1

सावधान रहे!!

1) एक क्षेत्र को हटाना अच्छा नहीं हो सकता है , जैसा कि अद्यतन पर, यदि आप आवश्यक फ़ील्ड को WORDPRESS अपडेट हुक में नहीं भेजते हैं, तो यह उन फ़ील्ड में रिक्त मान सेट कर सकता है! (उदाहरण के लिए, फ़ॉर्म सबमिट करने में, वहाँ मौजूद होना चाहिए <input name="username".../>) यानी
मुझे लगता है, कि उपयोगकर्ताओं से केवल HIDE बेहतर है, केवल jquery के साथ .hide();और .remove();
" DISPLAY NAME " और " NICKNAME " फ़ील्ड छिपाने के लिए EXAMPLE कोड के साथ नहीं।

jQuery(document).ready(function( $ ){
    $("#nickname,#display_name").parent().parent().hide();
});

2) एडमिन बार को छिपाने के लिए, वर्डप्रेस मेनू (सेटिंग्स में) में एक विशेष विकल्प है । कस्टम कोड के लिए, जैसे कि

add_action('after_setup_theme', 'remove_admin_bar');

function remove_admin_bar()
{
  if (!current_user_can('administrator') && !is_admin()) 
  {
    show_admin_bar(false);
  }
}

0

उपयोग

add_action('admin_head', 'remove_profile_fields');

और जोड़

jQuery(document).ready(function(e) {

जावास्क्रिप्ट से पहले।


थोड़ा स्पष्टीकरण बहुत अच्छा होगा!
bravokeyl

-4

उन्हें अक्षम करने के लिए कोई फ़िल्टर नहीं है। स्रोत ( /wp-admin/user-edit.php) को देखें जब आपको इस तरह से सामान करने की आवश्यकता होती है। आप उन्हें JS के साथ छिपा सकते हैं लेकिन उन्हें अभी भी दृश्यमान बनाया जा सकता है और POST पर मान अपडेट किए जाते हैं।

केवल व्यावहारिक विकल्प कोर को हैक करना है। बस यह सुनिश्चित करें कि आप अपडेट को संभाल लें और POST पर इन क्षेत्रों की अवहेलना करें।


हां, मैंने उस फ़ाइल को पहले ही देख लिया था! जेएस समाधान बहुत सुरक्षित नहीं लगता है। में देखता हूँ में क्या कर सकता हूँ! धन्यवाद!
रुटविक गांगुर्ड

3
यदि एकमात्र समाधान आप सोच सकते हैं कि कोर को हैक करना है, तो शायद आपको उस विशेष प्रश्न का उत्तर नहीं देना चाहिए। आपको पहले से बताई गई फ़ाइल को देखने के लिए प्रश्न पूछने वाले को सुझाव देने की आवश्यकता नहीं है, और आप यह बताते हुए भी सही नहीं हैं कि इसमें कोई फ़िल्टर नहीं हैं - निश्चित रूप से आपने प्रश्न पढ़ा होगा और पहले उत्तर दें?
हेलनहसंडी 14

@ हेलेनहुंडी xoxo
EarnestoDev
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.