나만의 WordPress 사용자 연락처 필드 만들기
오늘 저는 여러분을 위해 새로운 플러그인을 만들었습니다. 사용자의 연락 방법을 다루는 플러그인입니다. 기본적으로 관리에서 사용자를 편집할 때 "연락처 정보" 블록이 있습니다. 글쎄, 나는 거기에 자신의 필드를 추가하는 방법과 좀 더 나아가 등록 페이지에 이러한 새 필드를 표시하거나 표시하지 않는 방법을 보여주고 싶습니다.
우리가 만들 내용의 미리보기는 다음과 같습니다.
그러기 위해 평소처럼 훌륭하고 간단한 플러그인을 만들겠습니다!
1단계: 플러그인 생성
wp-content/plugins에 새 폴더를 만들고 이름을 "custom-user-contact-methods"로 지정합니다. 새로 생성된 폴더 안에 "rc-custom-user-contact-methods.php"라는 파일을 생성하고 즐겨 사용하는 편집기 소프트웨어에서 엽니다.
이 콘텐츠를 빈 파일에 넣으세요. 이 코드는 단순히 플러그인을 등록합니다.
<?php
/*
Plugin Name: Custom User Contact Methods
Plugin URL: http://remicorson.com/
Description: Add custom fields to users "contact" section
Version: 1.0
Author: Remi Corson
Author URI: http://remicorson.com
Contributors: corsonr
*/
2단계: 사용자 정의 필드 정의
다음으로, 사용자 에디션 페이지와 등록 기본 페이지에서 사용할 사용자 정의 필드를 포함할 변수를 생성해야 합니다. 이 필드를 $extra_fields라는 변수에 저장해 보겠습니다.
$extra_fields = array(
array( 'facebook', __( 'Facebook Username', 'rc_cucm' ), true ),
array( 'twitter', __( 'Twitter Username', 'rc_cucm' ), true ),
array( 'googleplus', __( 'Google+ ID', 'rc_cucm' ), true ),
array( 'linkedin', __( 'Linked In ID', 'rc_cucm' ), false ),
array( 'pinterest', __( 'Pinterest Username', 'rc_cucm' ), false ),
array( 'wordpress', __( 'WordPress.org Username', 'rc_cucm' ), false ),
array( 'phone', __( 'Phone Number', 'rc_cucm' ), true )
);
우리는 3개의 매개변수가 있는 배열 내에 모든 필드를 저장합니다. 첫 번째 매개변수는 필드 ID, 두 번째 매개변수는 필드 레이블, 마지막 매개변수는 해당 필드가 등록 페이지에 표시되는지 여부를 정의하는 부울 정보입니다. . 자리 표시자나 필수 정보 등 원하는 만큼 매개변수를 추가할 수 있습니다.
3단계: 올바른 필터 연결
이제 올바른 필터에 함수를 연결해야 합니다. 우리의 특별한 경우 필터는 "user_contactmethods"이고 우리가 만들 함수의 이름은 "rc_add_user_contactmethods"입니다.
// Use the user_contactmethods to add new fields
add_filter( 'user_contactmethods', 'rc_add_user_contactmethods' );
4단계: 사용자 정의 필드 만들기
이제 "rc_add_user_contactmethods" 함수를 생성해야 합니다. 사용자 편집 페이지에 사용자 정의 필드를 추가하는 것입니다. 좋은 소식은 우리가 필드를 배열 내에 저장했다는 것입니다. 이는 다음 함수가 완전히 동적이며 $extra_fields 변수를 수정하는 것만으로도 새 필드를 추가하는 것이 매우 쉽다는 것을 의미합니다.
/**
* Add custom users custom contact methods
*
* @access public
* @since 1.0
* @return void
*/
function rc_add_user_contactmethods( $user_contactmethods ) {
// Get fields
global $extra_fields;
// Display each fields
foreach( $extra_fields as $field ) {
if ( !isset( $contactmethods[ $field[0] ] ) )
$user_contactmethods[ $field[0] ] = $field[1];
}
// Returns the contact methods
return $user_contactmethods;
}
이 단계에서 플러그인을 저장하고 활성화하면 사용자 편집 페이지에 사용자 정의 필드가 표시됩니다. 올바른 후크를 사용하고 있으므로 "저장" 필드 데이터를 생성할 필요가 없습니다. 따라서 플러그인은 현재 훌륭하게 작동하고 있습니다. 하지만 좀 더 나아가 등록 페이지에 해당 필드를 표시하는 옵션을 추가하고 싶습니다. 설정에서 "누구나 등록 가능" 확인란을 확인하세요. 그렇지 않으면 "등록" 링크를 볼 수 없습니다.
5단계: 등록 페이지 후크
등록 페이지에 필드를 추가하려면 최소한 두 개의 후크에 액세스하고 두 개의 기능을 생성해야 합니다. 하나는 필드를 표시하는 것이고, 두 번째는 필드 데이터를 데이터베이스에 저장하는 것입니다.
함수를 연결해 봅시다:
// Add our fields to the registration process
add_action( 'register_form', 'rc_register_form_display_extra_fields' );
add_action( 'user_register', 'rc_user_register_save_extra_fields', 100 );
6단계: 사용자 정의 필드 등록 페이지 표시
위의 코드에서는 두 가지 함수를 선언했습니다. 첫 번째는 등록 페이지에 필드를 표시하는 것입니다. 이 부분에서는 $extra_fields에 있는 각 배열의 세 번째 매개변수를 처리해야 합니다. 이 부울 매개변수는 필드를 표시해야 하는지 여부를 알려줍니다. True: 필드가 표시되고, false: 필드가 표시되지 않습니다.
/**
* Show custom fields on registration page
*
* Show custom fields on registration if field third parameter is set to true
*
* @access public
* @since 1.0
* @return void
*/
function rc_register_form_display_extra_fields() {
// Get fields
global $extra_fields;
// Display each field if 3th parameter set to "true"
foreach( $extra_fields as $field ) {
if ( $field[2] == true ) {
$field_value = isset( $_POST[ $field[0] ] ) ? $_POST[ $field[0] ] : '';
echo '<p>
<label for="'. esc_attr( $field[0] ) .'">'. esc_html( $field[1] ) .'<br />
<input type="text" name="'. esc_attr( $field[0] ) .'" id="'. esc_attr( $field[0] ) .'" class="input" value="'. esc_attr( $field_value ) .'" size="20" /></label>
</label>
</p>';
} // endif
} // end foreach
}
7단계: 등록 프로세스 시 필드 값 저장
이제 등록 페이지에 필드가 표시되었으므로 해당 값을 데이터베이스에 저장해야 합니다. 이것이 "rc_user_register_save_extra_fields" 함수의 목적입니다. 그러기 위해서는 “wp_update_user()” 함수를 사용해야 합니다.
/**
* Save field values
*
* @access public
* @since 1.0
* @return void
*/
function rc_user_register_save_extra_fields( $user_id, $password = '', $meta = array() ) {
// Get fields
global $extra_fields;
$userdata = array();
$userdata['ID'] = $user_id;
// Save each field
foreach( $extra_fields as $field ) {
if( $field[2] == true ) {
$userdata[ $field[0] ] = $_POST[ $field[0] ];
} // endif
} // end foreach
$new_user_id = wp_update_user( $userdata );
}
결론
글쎄, 우리는 사용자 연락 방법에 새 필드를 추가하는 방법에 대한 기본 사항을 살펴보았지만 그게 전부입니다. 예를 들어, 간단한 unset()을 수행하여 "Yahoo IM", "AIM" 및 "Jabber"와 같은 기존 필드를 제거할 수 있습니다. 하지만 예를 들어 전화번호가 적절한 형식인지, 필드가 필수인지 아닌지 등을 확인하기 위해 사용자 정의 필드를 정리하는 몇 가지 기능을 추가할 수도 있습니다. 주저하지 말고 댓글에서 특정 기능을 요청하세요!
아, 그리고 마지막으로… 필드의 데이터를 표시하려면 다음을 사용하세요.
// Param 1 is user ID
// Param 2 is field ID
// Param 3 is there to get a var or an array
echo get_user_meta( 1, 'twitter', true );