WP0円マッチングサイト作成プロジェクト第1弾の作り方④


【会員プロフィールページを作る】


WP-Membersドキュメントには会員プロフィールには[wpmem_profile]ショートコードを埋め込めとある。
しかし「会員プロフィールの編集」「パスワードの変更」の2つのリンクが表示されるだけ。(ログイン時)
もちろんそれぞれのリンクをクリックするとそれぞれページ遷移されるが、UI/UXは良くないので全面的に変更する。

②「登録情報の編集」③「パスワードを変更」に①「現在の登録情報」を加えてページ遷移ではなくタブ切り替えにする。


・WP-Membersのフィールド設定で必要に応じてフィールドを作り一覧で「Profile」にチェックが入っていれば会員プロフィールページでフィールドが表示される。 また一覧上での順番もそのまま反映される。
・一覧で「必須」にチェックが入っていればinputタグに「required」が付加される。


タブ切り替え部分のコード

//page-profile.php
//会員プロフィールを表示
$caution = '

ログインしてください!

'; echo do_shortcode('[wpmem_logged_out]' . $caution . '[/wpmem_logged_out]'); $loggedin = '<div class="tab-container"> <div class="tab active">現在の登録情報</div> <div class="tab">登録情報の編集</div> <div class="tab">パスワードを変更</div> </div>'; echo do_shortcode('[wpmem_form login]' . $loggedin . '[/wpmem_form]');

①現在の登録情報のコード1

//page-profile.php
$prof_fieldsArr = array();
$mem_fieldsArr = wpmem_fields();
foreach( $mem_fieldsArr as $k => $v ){
	$label = "";
	$type = "text";
	$prof = false;
	foreach( $v as $k2 => $v2 ){
		if ( $k2 == "label" ){
			$label = $v2;
		}
		if ( $k2 == "type" ){
			$type = $v2;
		}
		if ( $k2 == "profile" && $v2){
			$prof = true;
		}
	}
	if ( $prof ){$prof_fieldsArr[$k] = array($label, $type);}
}
$cssArr = array("age", "sex", "place");
$no_labelArr = array("nickname", "age", "sex", "place");
$suffixArr = array(
	"age" => "歳",
	"height" => "cm",
);
$prefixArr = array(
	"height" => "身長",
);

①現在の登録情報のコード2

//page-profile.php
$html = "";//<h3>現在の登録情報</h3>
$current_user = wp_get_current_user();
$user_id = $current_user->ID;
if ( !$user_id ) {// User is not logged in.
	//echo "ログインしてません!";
} else {// User is logged in.
	$html .= '<ul class="each_userprof"><li class="l">';

foreach( $prof_fieldsArr as $k => $v ){
	if ( empty(get_user_meta( $user_id, $k ,true)) ) {
		//continue;//user_emailは空文字を返すためスルーになる
	}
	$css = $prefix = $suffix = "";
	if (in_array($k, $cssArr)) {$css = " inline";}
	if (in_array($k, $no_labelArr)) {$prefix = "";}else{$prefix = $v[0];}
	if (array_key_exists($k, $prefixArr)) {
		$prefix = $prefixArr[$k];
	}
	if (array_key_exists($k, $suffixArr)) {
		$suffix = $suffixArr[$k];
	}
	if ( $k == "user_avatar_img" ) {
		$img = get_user_meta( $user_id, $k ,true);
		$imgurl = wp_get_attachment_url( $img );
		$html .=  '<div class="imgBox"><img alt="user img" class="userface" src="' . $imgurl .'"></div>';
	}elseif($v[1] == "select") {
		$metaV = @wpmem_get_user_meta_select( $user_id, $k );
		if ( !empty($metaV) ) {
			if ( !empty($prefix) ) {
				$html .= '<div class="'.$k.$css.' flex"><p>'.$prefix.'</p><p>' . $metaV . $suffix . '</p></div>';
			}else{
				$html .= '<div class="'.$k.$css.'">' . $prefix . $metaV . $suffix . '</div>';
			}
		}
	}elseif($v[1] == "checkbox") {
		$metaV = @wpmem_get_user_meta_checkbox( $user_id, $k );
		if ( !empty($metaV) ) {
			if ( !empty($prefix) ) {
				$html .= '<div class="'.$k.$css.' flex"><p>'.$prefix.'</p><p>' . $metaV . $suffix . '</p></div>';
			}else{
				$html .= '<div class="'.$k.$css.'">' . $prefix . $metaV . $suffix . '</div>';
			}
		}
	}elseif($v[1] == "multicheckbox") {
		$metaV = @wpmem_get_user_meta_multi( $user_id, $k );
		if ( !empty($metaV) ) {
			if ( !empty($prefix) ) {
				$html .= '<div class="'.$k.$css.' flex"><p>'.$prefix.'</p><p>' . $metaV . $suffix . '</p></div>';
			}else{
				$html .= '<div class="'.$k.$css.'">' . $prefix . $metaV . $suffix . '</div>';
			}
		}
	}elseif($v[1] == "radio") {
		$metaV = @wpmem_get_user_meta_radio( $user_id, $k );
		if ( !empty($metaV) ) {
			if ( !empty($prefix) ) {
				$html .= '<div class="'.$k.$css.' flex"><p>'.$prefix.'</p><p>' . $metaV . $suffix . '</p></div>';
			}else{
				$html .= '<div class="'.$k.$css.'">' . $prefix . $metaV . $suffix . '</div>';
			}
		}
	}elseif($v[1] == "textarea") {
		$metaV = @do_shortcode('[wpmem_field field="'.$k.'" id="'.$user_id.'"]');
		if ( !empty($metaV) ) $html .= '<div class="'.$k.$css.'">' . $metaV . '</div>';
	}else{
		$metaV = @get_the_author_meta( $k, $user_id );
		if ( !empty($metaV) ) {
			if ( !empty($prefix) ) {
				$html .= '<div class="'.$k.$css.' flex"><p>'.$prefix.'</p><p>' . $metaV . $suffix . '</p></div>';
			}else{
				$html .= '<div class="'.$k.$css.'">' . $prefix . $metaV . $suffix . '</div>';
			}
		}
	}
}
	$html .= '</li></ul>';
	echo $html;
}

②登録情報の編集のコード

//page-profile.php
echo do_shortcode('[wpmem_logged_in][wpmem_form user_edit][/wpmem_logged_in]');

③パスワードを変更のコード

//page-profile.php
echo do_shortcode('[wpmem_logged_in][wpmem_form password][/wpmem_logged_in]');

※2025年8月時の情報