web-dev-qa-db-ja.com

登録後、ユーザーに自分のプロフィールの入力を強制しますか?の仕方

私は私のワードプレスサイトにカスタム(クイック)登録ページを作成しています。ユーザー名と電子メールを入力して自分のパスワードを選択するだけですぐに登録できるようにします。

私はtpl-edit-profile.phpを持っています、

私が達成する必要があるのは、彼らがそのページに登録した後にユーザーをリダイレクトすることです(tpl-edit-profile.php

登録にアクティベーションは必要ありません。

その後、ユーザーは他のサイトにリダイレクトされる前に、すべてのプロファイルデータを入力して完成させる必要があります。言い換えれば、もし彼らがプロフィール情報を完成しなければ、彼らはサイトを使い続けることができないので、すべての行動はtpl-edit-profile.phpに固執します。プロフィール情報が完成すると、サイト全体にアクセスして使用できるようになります。

ありがとうございました。

3
fritids

あなたはuser_registerアクションにフックするべきです。

私は最近のサイトで同様のことをしました(プロフィール欄に記入する必要はありませんが、メンバーシップを更新する必要があることを含みます)。

私はマルチパートの解決策を提案します(それのどれかが混乱しているなら、私に知らせてください。

編集: それをさらに考えて、私はあなたがそのPHPファイルをテンプレートに変えて、それをページとしても設定することを勧めます。 Wordpressがそこにユーザーをリダイレクトすることをより簡単にします。 (以下のコードのために、それを/ registration-step-2 /に設定したとしましょう)

まず、wp_redirectを使用してリダイレクトするuser_registerフックにアクションを追加します([プロファイル編集ページのURLをここに挿入])。

何かのようなもの:

//run this when a new user registers
add_action('user_register','continue_to_registration');
//redirects user to registration form
function continue_to_registration() {
     wp_redirect(get_option('siteurl') . '/registration-step-2/');
     exit();
}

第二に、ユーザーがその登録を終了したときにカスタムのuser_metaオプションを設定するかユーザー機能を追加すると、ここでの私の個人的な好みは機能になりますが、どちらにしても構いません。これにより、ユーザーが登録を終了したかどうかを確認できます。

以下のコードのために、フォームの送信用に$ Verifiedという変数があり、フォームが正常に処理されるとtrueに設定されるとしましょう。

フォームの処理部分にコードを追加する必要があります。何かのようなもの:

//set user capability on finished registration
if($verified) {
     $user_id = get_current_user_id();
     $user = new WP_User($user_id);
     $user->add_cap('finished_registration');
}

3つ目は、2つのアクションにフックする必要があります。wp_login(ログインしているユーザーにカスタムのメタオプションまたは機能があるかどうかを確認する)と、おそらくpre_get_postsにも同様の確認を追加します。登録が完了していない場合は、どこに移動しようとするたびにプロンプ​​トが表示されます。

何かのようなもの:

//run this function when a user logs in
add_action('wp_login','check_reg');
//check if user has finished registration when logging in
function check_reg($login) {
     $user = get_userdatabylogin($login);
     if(!$user->has_cap('finished_registration')) {
          wp_redirect(get_option('siteurl') . '/registration-step-2/');
          exit();
     }
}

//run this function when a user tries to load a page
add_action('pre_get_posts','check_reg_on_page');
//check if user has finished registration before loading a page
function check_reg_on_page() {
     if(is_user_logged_in()) {
          if(!is_page('Registration Step 2') && !is_admin()) {
               $user_id = get_current_user_id();
               $user = new WP_User($user_id);
               if(!$user->has_cap('finished_registration')) {
                    wp_redirect(get_option('siteurl') . '/registration-step-2/');
                    exit();
               }
          }
     }
}

Is_user_logged_in()をチェックするpre_get_postsアクションと、カスタムメタオプションまたは機能があることを確認してください。

オフィスにいるときに明日コードを提供することもできますが、WordPressの操作に慣れていれば大丈夫です。

また、補足として、私はこれを単純な機能のプラグインにしたので、テーマを変更した場合にfunctions.phpのものをコピーすることを忘れないようにする必要はありません。

しかし、彼らが実際にそれを記入することを確実にするために、私は彼らがそれを記入した後にユーザー能力またはカスタムのuser_metaオプションも設定するでしょう。

編集: GravityFormsを使用している場合は、それらが起動される順序が異なるため、別のアクションにフックすることをお勧めします。重力フォームアクションgform_user_registeredは、user_register関数の後に起動され、それをアタッチする特定のフォームからのすべてのデータを含みます。これにより、フォームを処理し、フォームに基づいてユーザーを変更する際の柔軟性が高まります。

編集2: 私は言っていたことをより明確にするためにコードを追加しました。説明や説明が必要な場合はお知らせください。それは明らかにあなたのコードにフィットするためにいくらかの微調整を必要とするでしょう、しかしあなたがちょうどあなたがリダイレクトのページ名を調整するならば私が含めた機能はあなたにうまく役立つはずです。

批評家による更新:

//run this function when a user tries to load a page
 add_action('appthemes_before_header','check_reg_on_page'); // appthemes_before_header     built-in action hook for jobroller theme
//add_action('pre_get_posts','check_reg_on_page'); // causes redirections loop  error  with jobroller theme
//check if user has finished registration before loading a page
function check_reg_on_page() {
     if(is_user_logged_in()) {
      if(!is_page('Registration Step 2') && !current_user_can( 'administrator' ))       {//!is_admin() is not workin replaced by !current_user_can
           $user_id = get_current_user_id();
           $user = new WP_User($user_id);
            $redirect = get_option('siteurl') . '/registration-step-2/';
           if(!$user->has_cap('finished_registration')) {
                wp_safe_redirect($redirect);

              exit();


           }

      }

 }

}
5
Eric Allen