웹사이트 검색

나만의 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 );