Category : WordPress

WordPressで会員制サイトを構築してみよう(Theme My Loginの仕様変更について)

以前書いた、「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を削除している場合、ユーザーがプロフィールを更新できなくなります。

解決方法1

ニックネームのフィールドを <input type=”hidden”> にする方法です。

<input type="hidden" name="nickname" id="nickname" value="<?php echo esc_attr( $profileuser->nickname ); ?>" />

ただし、この方法だと、ニックネームの値を任意に書き換えられる可能性があります。
かといって「disabled=”disabled”」を追加しても、なぜかバリデーションエラーが発生してしまいます。なぜこんなことに。。。

解決方法2

おすすめはフックで解決する方法です。

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 ファイルを置けば適応されます。

関連記事一覧