管理パネルの[ユーザーの追加]ページに[会社名]フィールドを追加します。私はかなりの検索をしましたが、その方法の詳細を見つけることができませんでした。私は簡単にプロフィールページに情報を追加して登録することができます。
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);
しかし、他に何もしない。
これを行うには、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);
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/
私は同じニーズを持ち、次のハックを作成しました。
<?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');
あなたは2つのことをする必要があります。
注: 以下の例はadministrator
ユーザーロールに対してのみ機能します。
新規ユーザーの追加 use action user_new_form
ユーザープロファイル use actions 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 }
}
新規ユーザーの追加 use action user_register
ユーザープロファイル use actions 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_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
は303行目のuser-new.php
にあります(少なくとも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 coreで宣言されたフィールドの前にフォームの最初に現れる必要があるということです。
フックは、関数内でフォームフィールドをどのように並べ替えたとしても重要です。私のインラインコメントに従ってください。 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_contactmethods
フィルタフックがuser-new.php
ページで呼び出されないため、 ソースを見ればうまく動かず、悲しいことに add new userに追加フィールドを追加するために使用できるフックがないことがわかります。形。
そのため、これはコアファイルを変更する(BIG NO NO)か、JavaScriptまたはjQueryを使用してフィールドを追加してフィールドをキャッチすることによってのみ実行できます。
またはTracで チケットを作成できます
次のコードは、「ユーザーの追加」フォームに「経歴情報」を表示します。
function display_bio_field() {
echo "The field html";
}
add_action('user_new_form', 'display_bio_field');
これは新しいユーザーの追加ページには適用されませんが、 "あなたのプロファイル"ページ(ユーザーが自分のプロファイルを編集できるページ)で表示させたい場合は、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 }