web-dev-qa-db-ja.com

ログインしているユーザーが特定のページにいる場合はリダイレクトします

管理者以外のユーザーがアクセスして登録ページにアクセスできないようにし、パスワードページが既にログインしている場合はリセットするようにしています。

function redirect_loggedin_users() {
// Maybe use is_user_logged_in() instead?
if (!current_user_can('manage_options') && is_page(array(2090, 2092))) {
    wp_redirect(home_url());
            exit();
    }
}
add_action('init', 'redirect_loggedin_users');

私はそれをテストしましたが、うまくいきません。誰かが私を助けてもらえますか?ありがとう。

3
rolu

1つ問題は、あなたが早すぎる時期に夢中になるということです。 フックAPIアクションリファレンス を参照してください。 is_page()のようなテンプレート条件は、クエリが設定され解析された後にのみ利用可能です。通常、クエリ条件に安全に頼ることができる最も早いアクションはpre_get_postsです。あなたはinitに夢中になっています。

  • muplugins_loaded必須プラグインが読み込まれた後
  • registered_taxonomy category、post_tagなど.
  • registered_post_type投稿、ページなど.
  • plugins_loadedアクティブなプラグインとプラグイン可能な関数がロードされた後
  • sanitize_comment_cookies
  • setup_theme
  • load_textdomainデフォルトドメインの場合
  • after_setup_theme一般的にテーマ設定/オプションを初期化するために使われます。
  • auth_cookie_malformed
  • auth_cookie_valid
  • set_current_user
  • init初期化のためにプラグインによって通常使用されます。現在のユーザーはこの時点までに既に認証されています。
  • widgets_initサイドバーを登録するために使用されます。これは 'init'で発生し、優先度は1です。
  • register_sidebar各サイドバーとフッター領域
  • wp_register_sidebar_widget各ウィジェット用
  • wp_default_scripts(参照配列)
  • wp_default_styles(参照配列)
  • admin_bar_init
  • add_admin_bar_menus
  • WordPressが完全にロードされた後wp_loaded
  • parse_requestHTTPリクエスト処理(ref配列)の操作を許可します
  • send_headers HTTPヘッダのカスタマイズを可能にします(ref配列)
  • parse_query(参照配列)
  • pre_get_postsクエリが実行される前にクエリ変数オブジェクトを公開します。 (参照配列)
  • posts_selection
  • WPオブジェクトが設定された後のwp(参照配列)
  • template_redirect
  • get_header
  • wp_enqueue_scripts

あなたがやろうとしていることの性質を考えると、私はtemplate_redirectにフックすることをお勧めします。

5
Chip Bennett