web-dev-qa-db-ja.com

ユーザー名とパスワードで保護されたプライベートページ

私たちはWordPressサイトを構築しています。そこにはユーザー名とパスワードでページの1つにアクセスする必要があります。

ユーザーが表示するパスワードを入力できる「プライベート」ページを作成できることを私は知っています。しかしながら、私たちのクライアントは私たちにこの特定のページのためにユニークなユーザー名/パスワードの組み合わせを作成する能力を求めています。このため、忘れたパスワードをリセットする機能も内蔵したいと思います。

私はオンラインで調査しましたが実行可能な解決策を見つけていません。これに対するベストプラクティスがあるかどうか私は思っています。おそらく、私たちは新しいユーザーロールを作成し、このタイプのユーザー用のWordPressダッシュボードを隠すと思いますか?私は正しい軌道に乗っていますか?どんな経験でも大歓迎です。

1
shackleton

だからここに私たちがやろうとしていることです:

IFユーザーがログインし、特定のロール(加入者)になっている場合は、それらを特定のページにリダイレクトします。

IFユーザーが管理パネルにアクセスし、特定のページにリダイレクトしようとしました。

上記の問題には3つのフックを使用します。

まず、リダイレクトを作成しましょう。

/**
 * Redirect subscribers to specific page
 * @param string $redirect
 * @param string $request
 * return string
 */
function member_redirect( $redirect, $request ) {
    if( current_user_can( 'subscriber' ) ) {
        return $specific_page
    }

    return $redirect;
}
add_filter( 'login_redirect', 'member_redirect', 10, 2 );

現在のユーザーが購読者の場合は、$specific_pageをページのURLに置き換えます。

次に、購読者が管理者パネルにアクセスできないようにしましょう。

/**
 * If user is subscriber AND trying to access admin panel, redirect them to specific page
 */
function subs_adminpanel_redirect(){
    if ( current_user_can( 'subscriber' ) ){
        wp_redirect( $specific_page );
        exit;
    }
}
add_action( 'admin_init', 'subs_adminpanel_redirect' );

$specific_pageを実際のURLに置き換えることもできます。

最後に、ユーザーがダッシュボードがあることさえ知らないように、管理バーを削除しましょう。

/**
 * Remove adminbar for Subscribers
 */
function subs_remove_adminbar() { 
    if( ! current_user_can( 'subscriber' ) ) {
        add_filter( 'show_admin_bar', '__return_false' );   
    }
}
add_action( 'after_setup_theme', 'subs_remove_adminbar' );

加入者であれば、これはかなり簡単です。管理者バーを削除します。

以下のコメントで指摘されているステップシャックルトンはデフォルトで、購読者は非公開ページを見るためのアクセスを持っていません。これを機能として追加する必要があります。

/**
 * Allow Subscribers to view Private Pages
 */
function add_theme_caps() {
    $role = get_role( 'subscriber' );
    $role->add_cap( 'read_private_pages' );
}
add_action( 'admin_init', 'add_theme_caps' );

あなたはどこかであなたのfunctions.phpファイルにこれらすべてを投げ込んでそれをテストするでしょう。繰り返しますが、これは購読者にのみ有効で、$specific_pageを実際のページのURLに置き換えた場合にのみ有効です。

1
Howdy_McGee