Дополнительные способы добавления и удаления полей в профилях пользователей

Более подробно о расширении пользовательских профилей уже было написано ранее. Сейчас лишь рассмотрим частные случаи.

Добавление полей в блок «Контакты»

Так как страницу вконтакте или скайп (а также номер сотового) в профиле нужно отображать под вкладкой «Контакты» а не под «Дополнительная информация» то лучше всего применить следующую функцию:

function true_add_contacts( $contactmethods ) {
	$contactmethods['vk'] = 'Ваша страница вконтакте';
	$contactmethods['mobile'] = 'Номер сотового';
	$contactmethods['skype'] = 'Скайп';
	return $contactmethods;
}
add_filter('user_contactmethods', 'true_add_contacts', 10, 1);

И это всё!

Да, действительно, этот способ довольно простой, так почему им не воспользоваться, чтобы добавить несколько полей для заполнения контактов в профиль?

Удаление стандартных полей из блока «Контакты»

И сразу же бросаются в глаза стандартные вордпрессовские поля, я имею ввиду AIM, Yahoo IM, Jabber / Google Talk.

стандартные поля Aim, Jabber, Google Talk

Почему-то мне кажется, что мало кто их использует, по крайней мере в нашей стране, поэтому избавимся от них:

function true_hide_contacts( $contactmethods ) {
	unset($contactmethods['aim']);
	unset($contactmethods['jabber']);
	unset($contactmethods['yim']);
	return $contactmethods;
}
add_filter('user_contactmethods', 'true_hide_contacts', 10, 1);

Удаление блока «Персональные настройки»

Также в профиле можно удалить блок с персональными настройками, то есть возможность выбора цветовой схемы и прочее. Это несколько шаманский способ удаления (а точнее скрытия) данного блока, если вы знаете способ получше, пожалуйста, поделитесь им в комментариях.

function true_remove_personal_options(){
	echo "\n" . '<script type="text/javascript">
	jQuery(document).ready(function($) {
	$(\'form#your-profile > h3:first\').hide();
	$(\'form#your-profile > table:first\').hide();
	$(\'form#your-profile\').show(); });
	</script>' . "\n";
}
 
add_action('admin_head', 'true_remove_personal_options');
Подпишитесь, чтобы раз в неделю получать свежие статьи с блога по email.

Смотрите также

Комментарии 48

  • Nexxt200816 июня 2012 в 13:06 #

    Как добавить поля в профиль для пользователей определенной роли?
    Например чтоб отображались поля "Ваша страница вконтакте", "Номер сотового", "Скайп" в профиле только подписчиков.

    • Миша16 июня 2012 в 21:06 #

      вот готовое условие для подписчиков:

      if(current_user_can('subscriber')){
       
      }

      хотя честно говоря, не знаю будет ли это распространяться для тех, у кого больше прав, не пробовал
      пиши, если что)

      • Nexxt200817 июня 2012 в 14:06 #

        Это условие работает для текущей роли. Если под администратором просматривать подписчиков, то дополнительные поля не отображаются в профилях подписчиков.

      • Миша18 июня 2012 в 06:06 #

        да-да, согласен что для текущей, чото я тупанул, тогда смотри как будет:

        function show_profile_fields( $user ) {
        	if($user->level == 0){
        		// Level 0 - значит подписчик
        	}
        }

        подробнее это функция расписана в другом посте, ссылка есть в начале этой статьи

      • Миша18 июня 2012 в 06:06 #

        возможно цифру в условии придется взять в кавычки)

  • Марат14 июля 2012 в 19:07 #

    Привет, Миша.
    Как можно удалить поля из профиля но из других групп? Например, биография или имя пользователя.
    И можно ли менять местами их? Например, мои добавленные поля поставить выше стандартных?
    Спасибо.

    • Миша15 июля 2012 в 17:07 #

      Привет, Марат, я как раз недавно столкнулся с этой проблемой, увы, там не предусмотрено никаких хуков, чистый HTML, так что удалить поля ты сможешь только при помощи CSS или jQuery

    • Миша15 июля 2012 в 17:07 #

      либо придется править файлы движка WordPress) но обычно когда доходит до этого, я просто ищу другое решение

  • Александр9 августа 2012 в 13:08 #

    Добрый день! Сейчас работаю над этой проблемой. у меня установлен плагин "
    theme-my-profile " не подскажите, а как удалить ненужные поля в профиле, например "last name"? пробовал идалять их из движка путь - wp-admin-user-edit, не помогает(версия 3.4.1)

    • Миша10 августа 2012 в 07:08 #

      из движка не нужно удалять уж :)
      но вроде такие поля как email и last name можно вырезать только в файлах движка

  • Михаил7 сентября 2012 в 20:09 #

    Не подскажите, каким образом можно удалить в профиле "Отображать как"? Пользователи меняют это значение и в результате один и тот же человек в одних комментариях зовется по-одному, а в других по-другому. Хотелось бы жестко прикрутить к логину при регистрации.

  • Flora19 сентября 2012 в 04:09 #

    Очень актуальные вопросы насчёт удаления Биографии и Отображать как...:)
    Как спрятать биографию, если нельзя удалить, может кто подскажет???
    Вот нашла на одном сайте рекомендацию и попробовала - добавила в файл style.css следующие строчки:
    [code lang="css"]tr > th > label[for="description"] {display: none;}
    td > #description {display: none;}
    #description + br + .description {display: none;}[/cc]

    у меня не скрылось лично. может есть ещё варианты?))

  • BASoftWARe3 октября 2012 в 23:10 #

    Добрый времени суток. Миша могли бы вы мне посоветовать как реализовать в теме в functions.php возможность изменить фон а заодно и css для стандартной формы входа? Сразу разъясню у меня там в functions.php есть уже такая возможность как замена ВП логотипа на свой который всегда лежит в теме. То есть мне не надо менять ядро cms, хотя это для меня не проблема но как вы сами понимаете после обновления всё придется делать по новой (можно конечно копировать редактированные файлы обратно после обновы), но если там произошли большие изменения и старый файл может привести к ошибкам? Тогда надо снова ручками править код.
    Вот пример кода который реализовывает подмену стандартного логотипа в форме входа-регистрации на мой:

    add_action("login_head", "my_login_head");
    	function my_login_head() {
    		echo "
    		<style>
    			body.login #login h1 a {
    			background: url('".get_template_directory_uri()."/images/custom-logo-login.png') no-repeat scroll center top transparent;
    			margin-bottom: 30px;
    			background-size: auto;
    		}
    		</style>
    			";
    	}
    • Миша4 октября 2012 в 22:10 #

      конечно файлы двига не трогаем, тут вопросов быть не должно)
      замену через админку - сделать какую-нибудь страницу где лого будет загружаться и url прописываться в настройках, потом в твоем коде надо будет поправить строчку

      background: url('".get_option(custom.png)."') no-repeat scroll center top transparent;

      как-то так)

  • Сергей25 июня 2013 в 11:06 #

    Приветствую Миша. Подскажите мне пожалуйста, как быть... Мне нужно изменить поля регистрационной формы, добавив одни и удалив другие... С помощью хуков это делается влет, но форум Mingle Forum "не берет" эти изменения. Помогут ли мне в этом плагины - сомневаюсь, а устанавливать не берусь, потому что они не просто корректируют данные, а делают всё своё... Дайте мне пожалуйста дельный совет...

    • Миша27 июня 2013 в 10:06 #

      но форум Mingle Forum

      ну, тут уже надо рыться в этом функционале и смотреть.

      Делный совет: использовать редактор с возможностью поиска по файлам например notepad++, тогда можно будет быстро найти нужные участки кода

  • Елена21 марта 2014 в 15:03 #

    Здравствуйте!
    С помощью описанного Вами кода удалила aim, jabber, yim
    У меня там ещё болтается Гугл+ и ненавистное мне поле "Сайт".
    Для гугл+ по аналогии написала

    unset($contactmethods['googleplus']);

    но это не помогло, поле всё равно осталось видимое.

    Как удалить Гугл+ и "Сайт"?

    На всякий случай сайт: http://psyhelp24.ru/

    Спасибо!

    • Миша28 марта 2014 в 11:03 #

      Добрый день!
      гугл+ скорее всего был добавлен через какой-то плагин или тему в коде - надо смотреть там.

      для удаления поля сайт можно попробовать следующее:

      function true_remove_website_field () {
      	echo "<script>jQuery(document).ready(function(){jQuery('#url').parents('tr').remove();});</script>";
      }
       
      add_action( 'admin_head-user-edit.php', 'true_remove_website_field' );
  • Сергей14 мая 2014 в 10:05 #

    Добрый день.
    А как потом получить доступ к этой информации? Мне нужно после текста записи вывести контактную информацию автора..

    • Сергей16 мая 2014 в 13:05 #

      Я сделал реализовал это таким

      <?php if ($link_vk = get_the_author_meta(vk)){ ?>
         <a href="https://<?php echo $link_vk; ?>" target="_blank">
       
         <img class="vkimg" alt="vk" src="<?php bloginfo('template_url'); ?>/img/vk2.svg">
       
         </a>
      <?php } ?>

      И также для facebook.. Не уверен что правильно.. Но работает..

      Если не сложно подскажите пожалуйста еще один момент или киньте силку.. Мне нужно реализовать новый тип страниц. В них должен быть заголовок, текст, дата и набор цифр.. Список всех статей должен быть по адресу mysite.ru/test/ и сами стати по адресу mysite.ru/test/lala
      Как сделать чтобы при наборе mysite.ru/test/ для вывода использовался файл test-archive.php, a для mysite.ru/test/lala test-single.php

  • Константин2 июля 2014 в 11:07 #

    Почему никто, не пишет в каких файлах это надо исправлять.
    Не все же профи.

  • Алексей14 августа 2014 в 09:08 #

    Добрый день, меня интересует такой вопрос. Раз мы удалили ненужные поля вот таким способом: unset($contactmethods['jabber']);, почему я не могу убрать поле Facebook , twitter, vk следующим образом : unset($contactmethods['facebook ']); , unset($contactmethods['twitter']); , unset($contactmethods['vk(ну или что там в ВК указано']); ?

    • Миша15 августа 2014 в 09:08 #

      Добрый день!
      Вы можете, прост в старых версия WP не было полей Facebook, Twitter и т д.

      • Алексей15 августа 2014 в 09:08 #

        Спасибо большое, оказывается переменные были не так названы. Посмотрел в таблице wp_usermeta, они назывались snup_facebook ( интересный префикс конечно) именно поэтому когда я просто писал unset($contactmethods['facebook ']);, ничего не срабатывало. И тут у меня возник еще один вопрос, могут ли эти поля быть разными в зависимости от роли пользователя ? допустим одному пользователю не нужен телефон, а другому необходимы другие поля ? как я понял необходимо проверить роль пользователя и выводить поля в зависимости от его уровня, но где это делать (если я правильно рассуждаю) ?

  • Наталия2 июня 2015 в 18:06 #

    А где и кому видны эти поля, кроме самого пользователя? Ведь никакой возможности увидеть профиль другого пользователя в WP нет. Или я её не нашла?

    • Миша3 июня 2015 в 09:06 #

      Ну да, сам пользователь + администраторы могут смотреть и редактировать профили.

  • Наталия3 июня 2015 в 13:06 #

    А можно как-нибудь соорудить доступную для всех страницу на сайте с профилем пользователя, где будет отражаться его аватар и данные, которые он о себе указал? Как, допустим, на официальном сайте WP?

  • Наталия3 июня 2015 в 16:06 #

    И ещё вопрос. Как можно засунуть дополнительные поля не в блок "контакты", а в блок "О себе", там где биография?

      • Наталия3 июня 2015 в 23:06 #

        Да, я это видела. Но там добавляется отдельная таблица с новыми полями в виде самостоятельной html-сущности. А здесь, в примере этого поста, новые поля добавляются в уже существующую таблицу. Вот я и спрашиваю возможно ли таким же способом дополнить таблицу, в которой уже есть строка "биография".

        Чисто теоретически можно было бы выкинуть заголовок и эту, отдельную таблицу, с помощью CSS "пристыковать" к стандартной. Но дело в том, что у меня стоит плагин Basic User Avatar, который тоже лепит свою таблицу как раз после биографии. И сотворённые указанным Вами способом новые поля встают последними, после аватара.

        • Миша4 июня 2015 в 08:06 #

          Смотрите, что можно сказать сходу:

          1. Нам нужен какой-то хук, через который мы и хотим добавить поля. Для этого вам нужно открыть файл WordPress, который просто выводит страницу профиля и просмотреть его на наличие хуков.
          2. Если плагин смог туда добавить, то и мы сможем тоже.

          Если для вас этот вопрос важен, можете просто связаться со мной по email и мы решим эту задачу. Также я хотел этот пост обновить, но это пока только в планах.

  • Наталия3 июня 2015 в 23:06 #

    Михаил, я заранее прошу прощения, ибо следующий вопрос будет не по теме. Вы его потом можете смело удалять. Где, в каком месте Вашего сайта можно задавать Вам вопросы типа "А как у Вас сделано вот это?" Я что-то помыкалась туда-сюда и так и не нашла где спросить.

    • Миша4 июня 2015 в 08:06 #

      Пока что отдельной страницы с вопросами у меня нет. Возможно в скором времени она появится, а до тех пор наверн просто придется искать посты, наиболее близкие по тематике, и оставлять вопросы там.

      • Наталия4 июня 2015 в 22:06 #

        Хорошо, спасибо. Если всё это здесь не к месту - удаляйте, не люблю мусорить в чужом доме. )

  • Константин8 июня 2015 в 08:06 #

    Здравствуйте! Много полезных фишек взял с вашего блога, спасибо. А как можно вывести созданное поле на странице добавления нового пользователя (/wp-admin/user-new.php) или созданное поле по этому методу https://truemisha.ru/blog/wordpress/custom-user-profile-fields.html без разницы главное как вывести его на странице добавления нового пользователя из админки??

    • Миша10 июня 2015 в 23:06 #

      Здравствуйте!
      Попробуйте фильтр user_new_form.

      • Константин15 июня 2015 в 07:06 #

        Спасибо! По этому методу https://truemisha.ru/blog/wordpress/custom-user-profile-fields.html если добавить такую строку

        add_action( 'user_new_form', 'show_profile_fields' );

        то поля выводятся но не сохраняются, подскажите что добавить в функцию сохранения чтобы все работало?

        • Константин15 июня 2015 в 07:06 #

          Нашел ответ на иностранном сайте. Сделал так:

          add_action( 'user_register', 'save_profile_fields' );

          все сохраняется.

  • campusboy1 февраля 2016 в 16:02 #

    Спасибо. Всё же считаю, что вместо jQuery лучше с помощью css орудовать, рейдеринг страницы-то на порядок быстрее. Жаль, что в WP этой странички достаточно мало внимания удаляли. Почти никаких хуков для её изменения на свой вкус :-(

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • alex morozov: Ура, спасибо! Все-таки я разобрался ! Сделал:

  • alex morozov: Сделал Класс добаляется даже если поле пустое

  • Vladislav: Лучше бы посоветовали изящное решение имеющейся проблемы.

  • alex morozov: Не очень понял. Я добавляю метабокс через класс, почти как у вас. class Desc_Meta_Box { private $screens = array(...

  • Миша: Метод тыка хорош, но оснвоы нужно знать в любом случае. Рекомендую почитать это.