[BuddyPress] 拡張プロフィールの数字型項目は表示されない
BuddyPress の拡張プロフィールに、数字型のフィールドを作成するとプロフィールタブで表示はできるが、 編集画面では入力欄が表示されない。 BuddyPress の仕様…? バグっぽいんだけど。
起きている現象
「ユーザー」⇨「プロフィール欄」から「欄を追加」をクリック
「タイプ:数字」で「保存」

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

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

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

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

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

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

原因
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; ?>