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

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

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

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

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

Миша Рудрастых

Впервые познакомился с WordPress в 2009 году. С 2014 года меня можно встретить на WordCamp — официальной конфе по WordPress, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills.

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

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

  • Nexxt2008:

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

  • Марат:

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

  • Александр:

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

  • Михаил:

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

  • Flora:

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

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

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

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

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

      как-то так)

  • Сергей:

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

    • Миша:

      но форум Mingle Forum

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

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

  • Елена:

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

    unset($contactmethods['googleplus']);

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

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

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

    Спасибо!

    • Миша:

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

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

      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' );
  • Сергей:

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

    • Сергей:

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

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

  • Константин:

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

  • Алексей:

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

    • Миша:

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

      • Алексей:

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

  • Наталия:

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

  • Наталия:

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

  • Наталия:

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

      • Наталия:

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

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

        • Миша:

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

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

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

  • Наталия:

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

  • Константин:

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

  • campusboy:

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

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

phpjsHTMLCSSSQLПросто код
  Комментарии закрыты.