Intereting Posts
Как заказать персонализированные сообщения по одному из значений настраиваемых полей, «дата»? WordPress 3.0 Media Upload Directory Страница администратора WordPress Перенаправление в субдомен Определить тип страницы по URL-адресу (Архив, одиночный, страница, автор, …) Установлена ​​статистика WordPress с ключом api и забыли ключ. Как я могу зарегистрировать новый ключ? Правила перезаписи URL для запроса нескольких таксономий отключить WordPress 404 для одной конкретной страницы / папки для получения фактических ошибок php Несколько блогов, разные имена доменов, одна установка, чтобы управлять ими всеми Обрезание изображения перед вставкой в ​​сообщение Блокировать IP-адреса с использованием кода Запрос MySQL для массового изменения роли пользователей атрибуты коротких кодов экранных сообщений не влияют Как настроить простую подписку на электронную почту? Клонирование сайта в стиле GIT, у меня есть идея Функция Mediaelement.js не работает

Добавление полей в экран «Добавить нового пользователя» на панели инструментов

Я хотел бы добавить поле «Название компании» на новую страницу пользователя на панели администратора. Я довольно много искал и не смог найти подробные сведения о том, как это сделать. Я легко могу добавить информацию на страницу профиля и зарегистрироваться с помощью.

function my_custom_userfields( $contactmethods ) { //Adds customer contact details $contactmethods['company_name'] = 'Company Name'; return $contactmethods; } add_filter('user_contactmethods','my_custom_userfields',10,1); 

Но никаких кубиков ни на что другое.

Solutions Collecting From Web of "Добавление полей в экран «Добавить нового пользователя» на панели инструментов"

У меня была такая же потребность, и я создал следующий хак:

 <?php function hack_add_custom_user_profile_fields(){ global $pagenow; # do this only in page user-new.php if($pagenow !== 'user-new.php') return; # do this only if you can if(!current_user_can('manage_options')) return false; ?> <table id="table_my_custom_field" style="display:none;"> <!-- My Custom Code { --> <tr> <th><label for="my_custom_field">My Custom Field</label></th> <td><input type="text" name="my_custom_field" id="my_custom_field" /></td> </tr> <!-- } --> </table> <script> jQuery(function($){ //Move my HTML code below user's role $('#table_my_custom_field tr').insertAfter($('#role').parentsUntil('tr').parent()); }); </script> <?php } add_action('admin_footer_text', 'hack_add_custom_user_profile_fields'); function save_custom_user_profile_fields($user_id){ # again do this only if you can if(!current_user_can('manage_options')) return false; # save my custom field update_usermeta($user_id, 'my_custom_field', $_POST['my_custom_field']); } add_action('user_register', 'save_custom_user_profile_fields'); 

user_new_form – это крючок, который может делать магию здесь.

 function custom_user_profile_fields($user){ ?> <h3>Extra profile information</h3> <table class="form-table"> <tr> <th><label for="company">Company Name</label></th> <td> <input type="text" class="regular-text" name="company" value="<?php echo esc_attr( get_the_author_meta( 'company', $user->ID ) ); ?>" id="company" /><br /> <span class="description">Where are you?</span> </td> </tr> </table> <?php } add_action( 'show_user_profile', 'custom_user_profile_fields' ); add_action( 'edit_user_profile', 'custom_user_profile_fields' ); add_action( "user_new_form", "custom_user_profile_fields" ); function save_custom_user_profile_fields($user_id){ # again do this only if you can if(!current_user_can('manage_options')) return false; # save my custom field update_usermeta($user_id, 'company', $_POST['company']); } add_action('user_register', 'save_custom_user_profile_fields'); add_action('profile_update', 'save_custom_user_profile_fields'); 

Для получения дополнительной информации посетите мой пост в блоге: http://scriptbaker.com/adding-custom-fields-to-wordpress-user-profile-and-add-new-user-page/

Обходной путь доступен с помощью user_new_form_tag который находится внутри начального тега формы user-new.php . В конце концов, если вы выведете HTML после этого, вам просто нужно начать вывод с > и удалить последний вывод > собственного кода. Как в:

 function add_new_field_to_useradd() { echo "><div>"; // Note the first '>' here. We wrap our own output to a 'div' element. // Your wanted output code should be here here. echo "</div"; // Note the missing '>' here. } add_action( "user_new_form_tag", "add_new_field_to_useradd" ); 

user_new_form_tag находится в user-new.php вокруг строки 303 (по крайней мере, в WP3.5.1):

 ... <p><?php _e('Create a brand new user and add it to this site.'); ?></p> <form action="" method="post" name="createuser" id="createuser" class="validate"<?php do_action('user_new_form_tag');?>> <input name="action" type="hidden" value="createuser" /> ... 

Конечно, недостатком здесь является то, что все ваше настраиваемое поле должно появляться первым в форме перед полями, объявленными в ядре WP.

Вам нужно сделать 2 вещи.

  1. Регистрировать поля
  2. Сохранить поля

Примечание. Ниже пример работает только для роли пользователя administrator .


1. Регистрировать поля

Для добавления нового пользователя используйте действие user_new_form

Для использования пользователями профиля действия show_user_profile , edit_user_profile

Регистрация полей Фрагмент:

 /** * Add fields to user profile screen, add new user screen */ if( !function_exists('m_register_profile_fields') ) { // This action for 'Add New User' screen add_action( 'user_new_form', 'm_register_profile_fields' ); // This actions for 'User Profile' screen add_action( 'show_user_profile', 'm_register_profile_fields' ); add_action( 'edit_user_profile', 'm_register_profile_fields' ); function m_register_profile_fields( $user ) { if ( !current_user_can( 'administrator', $user_id ) ) return false; ?> <h3>Client Portal</h3> <table class="form-table"> <tr> <th><label for="dropdown">Portal Category</label></th> <td> <input type="text" class="regular-text" name="portal_cat" value="<?php echo esc_attr( get_the_author_meta( 'portal_cat', $user->ID ) ); ?>" id="portal_cat" /><br /> </td> </tr> </table> <?php } } 

2. Сохранить поля

Для добавления нового пользователя используйте действие user_register

Для использования пользователями профиля действия personal_options_update , edit_user_profile_update

Сохранить поля Фрагмент:

 /** * Save portal category field to user profile page, add new profile page etc */ if( !function_exists('m_register_profile_fields') ) { // This action for 'Add New User' screen add_action( 'user_register', 'cp_save_profile_fields' ); // This actions for 'User Profile' screen add_action( 'personal_options_update', 'cp_save_profile_fields' ); add_action( 'edit_user_profile_update', 'cp_save_profile_fields' ); function cp_save_profile_fields( $user_id ) { if ( !current_user_can( 'administrator', $user_id ) ) return false; update_usermeta( $user_id, 'portal_cat', $_POST['portal_cat'] ); } } 

Полный фрагмент кода:

 /** * Add fields to user profile screen, add new user screen */ if( !function_exists('m_register_profile_fields') ) { // This action for 'Add New User' screen add_action( 'user_new_form', 'm_register_profile_fields' ); // This actions for 'User Profile' screen add_action( 'show_user_profile', 'm_register_profile_fields' ); add_action( 'edit_user_profile', 'm_register_profile_fields' ); function m_register_profile_fields( $user ) { if ( !current_user_can( 'administrator', $user_id ) ) return false; ?> <h3>Client Portal</h3> <table class="form-table"> <tr> <th><label for="dropdown">Portal Category</label></th> <td> <input type="text" class="regular-text" name="portal_cat" value="<?php echo esc_attr( get_the_author_meta( 'portal_cat', $user->ID ) ); ?>" id="portal_cat" /><br /> </td> </tr> </table> <?php } } /** * Save portal category field to user profile page, add new profile page etc */ if( !function_exists('m_register_profile_fields') ) { // This action for 'Add New User' screen add_action( 'user_register', 'cp_save_profile_fields' ); // This actions for 'User Profile' screen add_action( 'personal_options_update', 'cp_save_profile_fields' ); add_action( 'edit_user_profile_update', 'cp_save_profile_fields' ); function cp_save_profile_fields( $user_id ) { if ( !current_user_can( 'administrator', $user_id ) ) return false; update_usermeta( $user_id, 'portal_cat', $_POST['portal_cat'] ); } } 

user_contactmethods фильтра user_contactmethods не user-new.php странице user-new.php поэтому не работает и, к сожалению, если вы посмотрите на источник, вы увидите, что нет крюка, который можно использовать для добавления дополнительных полей для добавления нового пользователя форма.

Так что это можно сделать только путем изменения файлов ядра (BIG NO NO) или добавления полей с помощью JavaScript или jQuery и захвата полей.

или вы можете создать билет на Trac

Следующий код отобразит «Биографическая информация» в форме «Добавить пользователя»

function display_bio_field() { echo "The field html"; } add_action('user_new_form', 'display_bio_field');
function display_bio_field() { echo "The field html"; } add_action('user_new_form', 'display_bio_field'); 

Крючки важны, независимо от того, как мы отсортировали поля формы внутри функции. Следуйте моим встроенным комментариям. Начиная с WordPress 4.2.2 у нас теперь много крючков:

 <?php /** * Declaring the form fields */ function show_my_fields( $user ) { $fetched_field = get_user_meta( $user->ID, 'my_field', true ); ?> <tr class="form-field"> <th scope="row"><label for="my-field"><?php _e('Field Name') ?> </label></th> <td><input name="my_field" type="text" id="my-field" value="<?php echo esc_attr($fetched_field); ?>" /></td> </tr> <?php } add_action( 'show_user_profile', 'show_my_fields' ); //show in my profile.php page add_action( 'edit_user_profile', 'show_my_fields' ); //show in my profile.php page //add_action( 'user_new_form_tag', 'show_my_fields' ); //to add the fields before the user-new.php form add_action( 'user_new_form', 'show_my_fields' ); //to add the fields after the user-new.php form /** * Saving my form fields */ function save_my_form_fields( $user_id ) { update_user_meta( $user_id, 'my_field', $_POST['my_field'] ); } add_action( 'personal_options_update', 'save_my_form_fields' ); //for profile page update add_action( 'edit_user_profile_update', 'save_my_form_fields' ); //for profile page update add_action( 'user_register', 'save_my_form_fields' ); //for user-new.php page new user addition 

Для этого вам придется вручную изменить страницу user-new.php. Это не правильный способ справиться с этим, но если вы в отчаянной нужде, так это то, как это делается.

я добавил

 <tr class="form-field"> <th scope="row"><label for="company_name"><?php _e('Company Name') ?> </label></th> <td><input name="company_name" type="text" id="company_name" value="<?php echo esc_attr($new_user_companyname); ?>" /></td> </tr> 

Я также добавил информацию к functions.php

  function my_custom_userfields( $contactmethods ) { $contactmethods['company_name'] = 'Company Name'; return $contactmethods; } add_filter('user_contactmethods','my_custom_userfields',10,1); 

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

 add_action( 'show_user_profile', 'my_show_extra_profile_fields' ); add_action( 'edit_user_profile', 'my_show_extra_profile_fields' ); function my_show_extra_profile_fields( $user ) { ?> <h3>Extra profile information</h3> <table class="form-table"> <tr> <th><label for="companyname">Company Name</label></th> <td> <input type="text" name="companyname" id="companyname" value="<?php echo esc_attr( get_the_author_meta( 'companyname', $user->ID ) ); ?>" class="regular-text" /><br /> <span class="description">Where are you?</span> </td> </tr> </table> <?php }