以前書いた、「WordPressで会員制サイトを構築してみよう(事前準備)」という一連の記事ですが、またしてもプラグイン「Theme My Login」のバージョン 6.4.3において細かな仕様変更があったので追記します。
※ プロフィールページの内容を「profile-form.php」でカスタマイズしている片向けです。
これまでは「ニックネーム(パラメータ:nickname)」は、プロフィールページ用のカスタムテンプレート「profile.php」内に書かなくてもプロフィールを更新できていました。
<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”> にする方法です。
<input type="hidden" name="nickname" id="nickname" value="<?php echo esc_attr( $profileuser->nickname ); ?>" />
ただし、この方法だと、ニックネームの値を任意に書き換えられる可能性があります。
かといって「disabled=”disabled”」を追加しても、なぜかバリデーションエラーが発生してしまいます。なぜこんなことに。。。
おすすめはフックで解決する方法です。
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 ファイルを置けば適応されます。