Як видалити ці поля з розділу "Профіль"?


16

Мені потрібно видалити деякі профільні поля зі сторінки "Профіль" відповідно до ролей користувача. Для видалення підбирача кольору я використовував remove_action("admin_color_scheme_picker", "admin_color_scheme_picker"). Я хочу видалити ці поля:

  1. Псевдонім
  2. Відображати ім'я публічно як
  3. AIM, Yahoo, Google talk та про себе
  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.


Куди це має піти? function.php?
Фабіан

Так. Він може перейти functions.phpв файл або плагін. Поки гачки будуть правильними, він працюватиме з будь-якого місця.
Рутвік Гангурде

Гаразд, але якщо я поставив його у function.php, як мені повернути javascript? із поверненням чи відлунням?
Фабіан

Схоже, що з моменту WordPress v4.4.1, псевдонім став обов'язковим полем і дає ПОМИЛКУ: Будь ласка, введіть Псевдонім під час оновлення користувача з цим прихованим, але не заселеним, так що ви більше не можете його приховати
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' );

Дякую ... отримав цей! Щось для розділів "Показати панель адміністратора" та "Про себе"?
Rutwick Gangurde

Будь ласка, оновіть це, якщо ви знайдете рішення ... Я все ж приймаю вашу відповідь. Спасибі!
Rutwick Gangurde

+1, оскільки, наскільки я можу пригадати, видалення полів через PHP також зупиняє WordPress створювати порожні записи в таблиці usermeta.
Ashfame

9

Хоча user_contactmethodsфільтр є одним з небагатьох на екрані профілю користувача, оскільки інші поля не потрібні в WordPress, ви можете використовувати jQuery .hide()і .remove()ефективно позбутися тих, які не хочете, без ускладнень з точки зору збереження інформації. . Звичайно, людина, яка не має JS, все одно їх побачить, але це невелика меншина, і я здогадуюсь, що зміна там інформації насправді нічого не вплине.

Приклад видалення всього персонального фрагмента параметрів (показати панель адміністратора та кольорову схему). Я знаю, що це не те, що ви точно шукаєте, просто хотів дати вам короткий приклад, який я маю під рукою:

// 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 (документ) .ready для запуску коду миттєво. Як це
Джиральді

Псевдонім потрібен зараз, оскільки WP v.4.4.1
icc97

2

Оскільки здається, що для цього немає гарного гачка PHP, я в кінцевому підсумку приховав поля за допомогою CSS, а потім видалив їх за допомогою JS.

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

З форуму підтримки WordPress ви можете зробити видалення за допомогою 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".../>)
Я думаю, що краще ховатись лише від користувачів лише візуально, з jquery, .hide();а не з .remove();
кодом ПРИКЛАД, щоб приховати поля " DISPLAY NAME " та " NICKNAME ":

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

2) Щоб приховати панель адміністратора, є спеціальна опція в меню Wordpress (у налаштуваннях) . для користувацького коду, наприклад, тобто

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) {

перед JavaScript.


Невелике пояснення було б чудово!
bravokeyl

-4

Немає фільтра, щоб відключити їх. Подивіться на джерело ( /wp-admin/user-edit.php), коли вам потрібно робити такі речі. Ви можете приховати їх за допомогою JS, але вони все ще можуть бути видимими, а значення оновлюються на POST.

Єдиний життєздатний варіант - зламати ядро ​​самостійно. Просто переконайтеся, що ви обробляєте оновлення та ігноруєте ці поля в POST.


Так, я вже перевірив цей файл! Рішення JS не здається надто безпечним. Я побачу, що я можу зробити! Спасибі!
Rutwick Gangurde

3
Якщо єдине рішення, про яке ви можете придумати, - це зламати ядро, то, можливо, вам не слід відповідати на це конкретне питання. Вам також не потрібно пропонувати запитувачу запитання подивитися вже згадуваний файл, і ви також не правильні, заявляючи, що фільтри взагалі відсутні - напевно, ви, напевно, повинні прочитати питання та попередню відповідь?
helenhousandi

@helenhousandi xoxo
EarnestoDev
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.