以前書いた、「WordPressで会員制サイトを構築してみよう(事前準備)」という一連の記事ですが、またしてもプラグイン「Theme My Login」のバージョン 6.4.3において細かな仕様変更があったので追記します。
※ プロフィールページの内容を「profile-form.php」でカスタマイズしている片向けです。
これまでは「ニックネーム(パラメータ:nickname)」は、プロフィールページ用のカスタムテンプレート「profile.php」内に書かなくてもプロフィールを更新できていました。
1 | <input type= "text" name= "nickname" id= "nickname" value= "<?php echo esc_attr( $profileuser->nickname ); ?>" class = "regular-text" /> |
利用する会員制サイトでこの値が不要な時、このHTMLを削除していたのですが・・・(おそらく)バージョン6.4.3 から更新時に「nickname」をポストしないとバリデーションエラーが発生するようになってしまいました。
→ ニックネームのinputを削除している場合、ユーザーがプロフィールを更新できなくなります。
ニックネームのフィールドを <input type=”hidden”> にする方法です。
1 | <input type= "hidden" name= "nickname" id= "nickname" value= "<?php echo esc_attr( $profileuser->nickname ); ?>" /> |
ただし、この方法だと、ニックネームの値を任意に書き換えられる可能性があります。
かといって「disabled=”disabled”」を追加しても、なぜかバリデーションエラーが発生してしまいます。なぜこんなことに。。。
おすすめはフックで解決する方法です。
1 2 3 4 5 6 7 8 9 | function my_user_postregister( $tml ) { if ( $tml ->request_action == 'profile' ) { if ( $_SERVER [ 'REQUEST_METHOD' ] == 'POST' ) { $_POST [ 'nickname' ] = $_POST [ 'email' ]; } } } add_action( 'tml_request' , 'my_user_postregister' ); |
(このフックはこちらの記事でも定義しています。)
上記では、ユーザーのemailアドレスと同じ値をnicknameに入れています。
この方法なら、profile-form.phpのHTMLを書き換えずに対応することが可能です。
6.4.3にアップデート後にプロフィールページの更新ができなくなった場合、上記が参考になればと。
以下のサイトで6.4.3対応の日本語化ファイルを配布してくれていました。
これまでのバージョンでは、plugins/theme-my-login/language/ に日本語化ファイルを置いても日本語化できていたのですが、その場所では適応されなくなっていました。
上記に置いていた場合、pluginsディレクトリ直下に po、mo ファイルを置けば適応されます。