[BuddyPress] 拡張プロフィールの数字型項目は表示されない

2019-04-13WordPressBuddyPress,プラグイン

BuddyPress の拡張プロフィールに、数字型のフィールドを作成するとプロフィールタブで表示はできるが、 編集画面では入力欄が表示されない。 BuddyPress の仕様…? バグっぽいんだけど。

起きている現象

「ユーザー」⇨「プロフィール欄」から「欄を追加」をクリック
「タイプ:数字」で「保存」

BuddyPress_profile_number
BuddyPress_profile_number

画面を確認すると説明とかは表示されるのに、入力欄が表示されない

bp_profile_edit
bp_profile_edit

管理画面からだと、入力が可能

bp-admin-profile-edit
bp-admin-profile-edit
ちゃんと数値型のみ入力できるようになっている

数値入力後、「プロフィールを更新」をクリックするとエラーがでる

bp_admin_profile_edit_error
bp_admin_profile_edit_error

しかし、画面上のプロフィール欄には表示される

bp_profile_disp
bp_profile_disp

Phone Number タイプも同様に表示されない
その他のフィールドは問題なく表示された

bp-profile-field
bp-profile-field

日本語化によるのかとも思ったが、 WordPress の言語設定を「 English 」にして、 BuddyPress プラグインを再インストールしてみたけど変わらない

bd-profile-en
bd-profile-en

原因

BuddyPress のフォーラムで聞いてみた

自分:「プロフィールに数字型フィールドを追加すると、プロフィールの編集画面に表示されないんですけど、どうしたら直りますか?
環境 : ホゲホゲ…
theme : bp-default」

Moderator:「現象が再現できないんだけど、環境グレードダウンしてみたら?WPのテーマ書いてないけど、テーマのせいぢゃね?」

自分:(えーテーマ書いてんだけど…)「テーマは同梱されてたbp-default使ってます。でも、テーマTwenty Seventeenにしたら数字型表示されました。bp-default使わない方がいいんですか?」

Moderator:「もー何年もbp-default系のスレッドとか見ないな。通常、WPのデフォルトテーマでテストするよう推奨してるけど。bp-defaultを使わない方がいいかは知らんけど、使ってる奴なんてほとんどいないと思うけどね」

原因はテーマ「 bp-default 」だった。

同梱のテーマ「 bp-default 」は、消えゆく運命でかなり前からバグ修正とかは行われていない。 Phone Number などの数字型フィールドは、この後に追加されたようで「 bp-default 」に修正が入っていない。

今は、 /plugins/buddypress/bp-templates フォルダにある、「 bp-legacy 」か「 bp-nouveau 」というテンプレートを自分のテーマに入れて使うらしい。

テーマ修正で対応

このテーマで本番で動いちゃってるから、使ってる人がいなくてもテーマを修正して対応することにした。

修正するファイル
/wp-content/themes/bp-default(の子テーマ)/members/single/profile/edit.php

if ( 'textbox' == bp_get_the_profile_field_type() ) な感じで、型ごとに条件分岐されているので、Number 型だったら、 <input type="number"... を出力するコードを追加する。

// if ( 'url' == bp_get_the_profile_field_type() ) の下とかに追加
<?php if ( 'number' == bp_get_the_profile_field_type() ) : ?>
  <label for="<?php bp_the_profile_field_input_name(); ?>"><?php bp_the_profile_field_name(); ?> <?php if ( bp_get_the_profile_field_is_required() ) : ?><?php _e( '(required)', 'buddypress' ); ?><?php endif; ?></label>
  <input type="number" name="<?php bp_the_profile_field_input_name(); ?>" id="<?php bp_the_profile_field_input_name(); ?>" value="<?php bp_the_profile_field_edit_value(); ?>" <?php if ( bp_get_the_profile_field_is_required() ) : ?>aria-required="true"<?php endif; ?>/>
<?php endif; ?>

Posted by Agopeanuts