[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