ウェブサイト検索

独自の 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、2 番目のパラメーターはフィールド ラベル、最後のパラメーターは、フィールドが登録ページに表示されるかどうかを定義するブール情報です。 。プレースホルダーや必須情報など、パラメーターを必要なだけ追加できます。

ステップ 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: 登録ページのフック

登録ページにフィールドを追加するには、少なくとも 2 つのフックにアクセスし、2 つの関数を作成する必要があります。 1 つはフィールドを表示するもので、2 つ目はフィールド データをデータベースに保存するものです。

関数をフックしましょう:

// 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: カスタムフィールド登録ページを表示する

上記のコードでは 2 つの関数を宣言しました。 1 つ目は、登録ページにフィールドを表示することです。この部分では、$extra_fields の各配列の 3 番目のパラメーターを処理する必要があります。このブール値パラメータは、フィールドを表示する必要があるかどうかを示します。 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 );