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

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

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

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

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');

Миша

В последние годы я долго не знал, что мне делать с сайтом misha.blog, ведь он практически не приносит никакого профита, но недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.

Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.

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

Комментирование этого поста более не доступно.
  • Nexxt2008 16 июня 2012 #

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

    • Миша 16 июня 2012 #

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

      if(current_user_can('subscriber')){
       
      }

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

      • Nexxt2008 17 июня 2012 #

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

      • Миша 18 июня 2012 #

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

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

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

      • Миша 18 июня 2012 #

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

  • Марат 14 июля 2012 #

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

    • Миша 15 июля 2012 #

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

    • Миша 15 июля 2012 #

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

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

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

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

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

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

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

  • Flora 19 сентября 2012 #

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

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

    • Миша 19 сентября 2012 #

      если на css:

      #description {
      display: none;
      }
      label[for="description"] {
      display: none;
      }

      можно ещё и на jQuery, если надо, скину код))

    • Миша 19 сентября 2012 #

      знаешь куда эти стили вставлять же?

      • Alex23 21 января 2013 #

        Привет, можешь подсказать куда это вставлять?

      • Миша 21 января 2013 #

        привет, попробуй вот так:

        <?php
        function add_styles_in_admin(){
        ?>
        #description {
        display: none;
        }
        label[for="description"] {
        display: none;
        }
        <?php
        }
        add_action('admin_head','add_styles_in_admin');
  • BASoftWARe 3 октября 2012 #

    Добрый времени суток. Миша могли бы вы мне посоветовать как реализовать в теме в 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 #

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

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

      как-то так)

  • Сергей 25 июня 2013 #

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

    • Миша 27 июня 2013 #

      но форум Mingle Forum

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

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

  • Елена 21 марта 2014 #

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

    unset($contactmethods['googleplus']);

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

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

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

    Спасибо!

    • Миша 28 марта 2014 #

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

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

      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 #

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

    • Сергей 16 мая 2014 #

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

      <?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 #

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

    • Миша 2 июля 2014 #

      Добрый день!
      Файл functions.php в текущей теме.

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

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

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

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

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

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

  • Наталия 2 июня 2015 #

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

    • Миша 3 июня 2015 #

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

  • Наталия 3 июня 2015 #

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

    • Миша 3 июня 2015 #

      Через шаблоны страниц как вариант.

      • Наталия 3 июня 2015 #

        Так вопрос что писать в шаблоне. Шапку, сайдбар и футер я выведу, а что между ними - для меня проблема. С HTML и CSS я ещё более-менее дружу. А с PHP исключительно на "Вы".

        • Миша 4 июня 2015 #

          В принципе весь процесс строится на двух функциях — get_user_meta() и update_user_meta().

          • Наталия 4 июня 2015 #

            Ок. Я попробую сама, если не получится - призову Вас на помощь. )

  • Наталия 3 июня 2015 #

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

      • Наталия 3 июня 2015 #

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

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

        • Миша 4 июня 2015 #

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

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

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

  • Наталия 3 июня 2015 #

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

    • Миша 4 июня 2015 #

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

      • Наталия 4 июня 2015 #

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

  • Константин 8 июня 2015 #

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

    • Миша 10 июня 2015 #

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

      • Константин 15 июня 2015 #

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

        add_action( 'user_new_form', 'show_profile_fields' );

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

        • Константин 15 июня 2015 #

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

          add_action( 'user_register', 'save_profile_fields' );

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

  • campusboy 1 февраля 2016 #

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