サポート » 使い方全般 » 会員制サイト構築について

  • 解決済 tkj_tkj

    (@tkj_tkj)


    お世話になっております、表題の件で御相談がございます。

    ○今回実装したい会員制サイト
     ・会員のみ見られるページを作成。
     ・トップページ、及び、会員ページを除く下層ページは閲覧可。
     ※サイトイメージ
      http://www.shumatsu.net/

     上記サイトは.htaccessと思われるベーシック認証を利用しておりますが
     以前、ワードプレスサイトで.htaccessを利用し、
     CSSが反映されず断念した経緯がございます。
      ※ダッシュボードにログインした状態でないと
       サイトのCSSが崩れて表示されてしまう。

    ○お伺いしたいこと
      もし、上記のような会員制サイトの構築経験のある方おられましたら
      大まかな流れ、このプラグインで出来た、とか、ワードプレスじゃ無理だったのでこうした、とか本当にざくっとで構いません、のでご教示頂ければ幸いでございます。

    ○ご参考
    以前、WP-MEMBERSとMENBERS-ONLYというプラグインを使用し、
    会員制サイトを構築した経験はございますが、

     ・トップページは誰でも閲覧可
     ・下層ページはログインメンバーのみ閲覧可
     ・ログインメンバー以外が下層ページのリンクをクリックしてもトップページへリダイレクトされる。

    というもので、今回のような仕様では作成出来ておりません・・・

    どうぞ宜しくお願い致します。

12件の返信を表示中 - 1 - 12件目 (全12件中)
  • モデレーター gatespace

    (@gatespace)

    こんにちは。
    手前味噌で恐縮ですが、以下のサイトをWordPressで作成しました。
    特定のカスタム投稿タイプ(受講者専用)のみ、ログインしないと閲覧できません。

    http://www.fukkou-daigaku-jinzai.jp/

    制限しているカスタム投稿はタイトルのみトップページやフィードにも配信していますが、
    本文を見ることはできません。(初めから含めないと言うこともできます)

    基本的にテンプレートファイルで、特定のカスタム投稿タイプの場合のみログインの判定をし、ログインしていなければログインフォームへリダイレクトさせています。
    条件分岐タグauth_redirect()をつかう)

    ログインフォームについては「Theme My Login」を使っています。
    このプラグインでは提示していただいたサイトのように
    サイドバー部分にログインフォームのウィジェットを表示させたり、
    権限毎にログイン後のリダイレクト先を変えたり、様々なことが可能です。

    このサイトはPC、スマートフォン、携帯にも対応しています。
    携帯のみ、WordPressのログインフォームは使わず、Basic認証での閲覧制限としましたが、
    それもWordPressの登録ユーザー情報と連動させています。
    コード自体は自作し、携帯用テーマに記述しています。

    もう一つ、ユーザーの権限については基本的にWordPressが初めから持っている権限を使っています。
    tkj_tkjさんが会員専用ページでどのようなコンテンツを提供するか分かりませんが、
    必要に応じて、独自の権限を作った方が良いかもしれません。
    これについてはプラグインもありますが、私の場合は自前のコードを書きました。

    結論から言えば、最終的な仕様が固まっているのならば、プラグインを使おうが自前でコードを書こうができるのではないでしょうか?

    こんにちは、

    トップページ以外の投稿やページにアクセスがあった場合に、トップページや、ログインページにリダイレクトすることは、index.phpの先頭に、以下のコードを記述すれば、実現できます。

    if( ! is_front_page() and ! is_user_logged_in() ){
        //wp_redirect( home_url() ); //トップページにりダイレクト
        auth_redirect(); //ログインページにりダイレクト
        exit;
    }

    しかし、このコードを書いても、たぶん「会員制」とまではいえません。

    index.phpを経由しない、attachmentファイル等への直接アクセスが可能だからです。

    他にも、feedに、会員用のコンテンツが流出しないかとか、コメントや、設定によっては、XML-RPC等も考慮する必要があるかもしれません。

    members-onlyプラグインがあるなら、確かめてみてほしいのですが、

    MENBERS-ONLY プラグインを使った場合は attachmentファイルへのアクセスが、直接URLをたたくと可能です。

    http://example.com/wp/wp-content/uploads/2012/06/example.jpg

    「会員制」といっても、様々な条件があると思いますが、ヒントになればうれしいです

    トピック投稿者 tkj_tkj

    (@tkj_tkj)

    gatespaceさん

    ご回答有難うございます!

    「Theme My Login」について色々調べ、
    ログインフォームを出現させるところまでは実装出来たのですが

    特定のページをログインしないと見られないようにするやり方が良く分からなかったです。

    基本的にテンプレートファイルで、特定のカスタム投稿タイプの場合のみログインの判定をし、ログインしていなければログインフォームへリダイレクトさせています。
    (条件分岐タグとauth_redirect()をつかう)

    おそらくここのことだと思うのですが
    例えば固定ページを全てログインしなければ見えないようにしようと思った場合は

    最初のpage.phpに

    `<?php
    if (!is_user_logged_in()){auth_redirect();}
    }
    ?>`

    とか書いてしまえばいいのだと思うのですが

    ログアウトした状態で固定ページをクリックしても普通にページが開いてしまうんですよね・・・

    もう少し頑張ってみます。
    もし、Theme My Loginの条件分岐の仕方が載っているサイトなどございましたらご紹介頂ければ幸いです。。。(見つからなかったんですよね・・・)

    トピック投稿者 tkj_tkj

    (@tkj_tkj)

    nobitaさん

    いつもありがとうございます。

    index.phpを経由しない、attachmentファイル等への直接アクセスが可能だからです。

    ちなみにattachmentファイルとは・・・下層ページのテンプレートページのことでしょうか?
    ※page.phpやsingle.phpのような。。。

    ちなみにMEMBERS-ONLYのサイトでログアウトした状態で、
    下層ページのURLをアドレスバーに直打ちするとログインページへリダイレクトされました。

    少し私の解釈がおかしいのでしょうか?
    いつまでたっても初心者のようなご質問で本当に申し訳ございません。

    こんにちは

    解り難くてごめんなさい。

    投稿エディタに画像などがアップロードできるようになっていますよね
    アップロードした画像に直接アクセスしてみると、表示できてしまいませんか?
    という意味でした
    ( wp-content/uploads 内の画像ファイル )

    もし、リダイレクトされているなら、私の申し上げた事は誤りです。

    index.phpの先頭に、以下のコードを記述すれば、実現できます。

    ここ、訂正します。
    「index.php」を「テンプレートファイル」に読み替えてください

    いつまでたっても初心者のようなご質問で本当に申し訳ございません。

    私には、教えているという意識はありません。
    思った事を申し上げているだけなので、間違いもあると思います。
    失礼と、感じることもあると思いますが、
    「問題解決のためになる」と思い、発言しています、お許しください。

    トピック投稿者 tkj_tkj

    (@tkj_tkj)

    nobitaさん

    画像のURLに直接アクセスできるため
    セキュリティ面が少し問題、ということですね。

    理解致しました!

    <失礼と、感じることもあると思いますが、
    <「問題解決のためになる」と思い、発言しています、お許しください。

    いえいえ!全くそんなことはありません!

    何度もハマッているところでヒントを頂いておりますので
    nobitaさんのコメント本当に助かっております、、、

    トピック投稿者 tkj_tkj

    (@tkj_tkj)

    ちなみに何ですが・・・少しはまっておりまして・・・
    ログインしていないと固定ページに入れないようにしたいのですが

    page.phpの

    `<?php get_header(); ?>
    <!– コンテンツ –>
    <div id=”content”>
    </div><!– コンテンツ –>
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>`

    というコードの場合、
    どこに

    `<?php
    if (!is_user_logged_in()){auth_redirect();}
    }
    ?>`

    を記述すればよいのでしょうか?

    <?php get_header(); ?>
    の前に挿入するとリダイレクトループが発生してしまいます。

    ご教示頂ければ幸いでございます。

    こんにちは

    $flag = false;
    if(!is_user_logged_in() and $flag == false ){
        auth_redirect(); //ログインページにりダイレクト
    	$flag = true;
        exit;
    }

    で、どうですか?

    モデレーター gatespace

    (@gatespace)

    こんにちは。
    auth_redirect()はWordPressへのログイン画面に遷移させますが、
    「Theme My Login」を有効化した場合、プラグインが固定ページにログイン画面を作成してしまうため、条件分岐を工夫しないとリダイレクトがループします。
    作成される固定ページはLoginという名前で、IDは「Theme My Login」の設定画面から確認できます。

    固定ページをすべてログインしないと見られないようにしたいが、
    ログインページも固定ページにあるという状況です。

    プラグインを使わないなら、header.phpの一番先頭で

    if(!is_user_logged_in() and is_page() ){ // ←ログインしていないかつ固定ページを表示のとき
        auth_redirect(); // ログインページにリダイレクト
        exit;
    }

    でOKですが、「Theme My Login」を使うなら

    if(!is_user_logged_in() and is_page() ){ // ←ログインしていないかつ固定ページを表示のとき
        if (!is_page('login')) { // ←スラッグが「login」以外
            auth_redirect(); // ログインページにリダイレクト
            exit;
        }
    }

    としてみてください。

    条件分岐タグは日本語Codexを参照してください。
    (条件分岐タグにプラグインは関係ありません)
    http://wpdocs.sourceforge.jp/Conditional_Tags

    トピック投稿者 tkj_tkj

    (@tkj_tkj)

    nobitaさん

    有難うございます。

    page.phpに貼って試してみました。

    <?php get_header(); ?>の前に貼った場合、

    <?php $flag = false;
    if(!is_user_logged_in() and $flag == false ){
    auth_redirect(); //ログインページにりダイレクト
    $flag = true;
    exit;
    }?>
    <?php get_header(); ?>
    <!– コンテンツ –>
    <div id=”content”>
    </div><!– コンテンツ –>
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>

    リダイレクトループが発生し、
    ウェブサイトにも、ダッシュボードにも入れない状況が発生しました。

    また
    <?php get_header(); ?>の後ろに貼った場合、

    <?php get_header(); ?>
    <?php $flag = false;
    if(!is_user_logged_in() and $flag == false ){
    auth_redirect(); //ログインページにりダイレクト
    $flag = true;
    exit;
    }?>
    <!– コンテンツ –>
    <div id=”content”>
    </div><!– コンテンツ –>
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>`

    content以下が

    Warning: Cannot modify header information – headers already sent by (output started at /home/users/0/XXXXXXXX/web/wp-content/themes/YYYYYYYYYYYY/header.php:4) in /home/users/0/XXXXXXXXXX/web/wp-includes/pluggable.php on line 866

    と表示されました。
    固定ページへ入れる状況ということです。

    取り急ぎ結果のみご報告を致します。
    もう少し色々試してみます。
    有難うございました。

    トピック投稿者 tkj_tkj

    (@tkj_tkj)

    gatespaceさん

    有難うございます。
    header.phpのDOCTYPE宣言の前に

    <?php
    if(!is_user_logged_in() and is_page_template(‘content-about.php’) ){ // ←ログインしていないかつ固定ページを表示のとき
    if (!is_page(‘login’)) { // ←スラッグが「login」以外
    auth_redirect(); // ログインページにリダイレクト
    exit;
    }
    }
    ?>

    で思い通りの仕様が完成できました!
    有難うございます。

    結局、
    ただの固定ページではなく、
    content-about.phpという別テンプレートを反映した固定ページのみ、
    ログインしないと入れないようにする仕様にするため
    http://wpdocs.sourceforge.jp/Conditional_Tags
    CODEXを参考にしました。

    実は複数のテンプレートの違う固定ページを指定して
    ログインしないと入れないようにしようと考えておりましたので
    たいへんためになりました!有難うございます。

    こんにちは

    <del>私の環境では、リダイレクトは発生しないのですが、パーマリンク構造など他の設定によっては、そのような事がおきるのかもしれないですね。</del>

    <del>このままでは、対策出来ないので、</del><ins>あほな事を書いてしまったので</ins>他の方法をお知らせします。

    if(!is_user_logged_in()){
    	get_header();
    	wp_login_form();
    	get_footer();
        exit;
    }

    このコードを既存の、get_header()の前に貼り付けてみてください。
    ログインしていない場合は、通常のページに代わって、ログインフォーム付のページを表示します。

    あ、解決したみたいですね

12件の返信を表示中 - 1 - 12件目 (全12件中)
  • トピック「会員制サイト構築について」には新たに返信することはできません。