WordPressのサブディレクトリ型の管理方法について
-
一番簡単な方法は各サブディレクトリーを固定ページとして作成して、各ページにパスワードを設定すれば閲覧時のパスワード入力は強制できます。
個別のユーザーを登録する必要もなく各生徒に各々のページのパスワードを教えてあげれば済みます。ただし、各生徒が各々のページを編集できるようにするためにはやはり権限のコントロールが必要になると思います。
-
saijiさん
こんにちは、すみませんマルチサイトという前提でお話しします。
基本的にはサイトIDで切り替え名がって感じにするとよいかもしれないです。
<?php switch_to_blog(サイトID); ?>
たとえば、親サイトなら
<?php switch_to_blog(1); ?>
1番目初めに使った子サイト(2番目のサイト)なら
<?php switch_to_blog(2); ?>
みたいな感じで切り替えれます。
元に戻すには<?php restore_current_blog(); ?>
でリセットするとよいらしいです。よいか悪いかわかりませんが(参考までに)
<?php $_SERVER[‘REQUEST_URI’] = ‘/wordpressのインストールディレクトリー/’; ?>
で定義したところうまく動いたこともあります。mura0403さま
いつも本当にありがとうございます。
マルチサイトです。
大変お恥ずかしい話なのですが、せっかくご連絡頂いたのに、私の実力不足で理解ができません(本当に申し訳ありません)。
恐れ入ります、例えば、この<?php switch_to_blog(サイトID); ?>というスクリプトをどこかに貼り付けると、閲覧者が
http://www.abc.com/yoshida/
というURLを指定してホームページに見ようとする(若しくはお気に入りで指定)と、ユーザー名とパスワードを入力する画面が出てきて、入力するとそのホームページを閲覧できるという意味なのでしょうか?
本当にすみません、よろしくおねがいいたします。マルチサイトはナンチャッテしか管理したことがないので全く自信がありません。(スミマセン…)
以下の内容でwp-content/mu-plugins/my-browse-restriction.php
を作成してみるとどうでしょう?<?php add_action( 'template_redirect', 'my_browse_restriction' ); function my_browse_restriction() { global $blog_id; if ( $blog_id == 1 ) /** * 親サイトなら何もしない */ return; if ( ! is_super_admin() && ! is_user_logged_in() ) // if ( ! is_super_admin() && ! current_user_can_for_blog( $blog_id, 'read' ) ) /* 上が駄目だったら... */ /** * 特権管理者でなく、かつ表示中の子サイトにログインしていない場合は(サイトのメンバーでない場合は?)ログイン画面にリダイレクト */ auth_redirect(); }
未検証なのでバグを含んでいるかもしれません… 恐れ入りますが自己責任で検証下さい。
なお、ダミーのURLですが、
example.com
を使用したほうが良いと思います。(参考: ブログとか文章で例として使えるドメインとかIPアドレス)saijiさん
あ、そういう意味ですね。
変な勘違いをしていました。こんな流れですか??
1.もし親サイト($GLOBALS[‘blog_id’]が「1」)ならば≫通常表示
2.もしもし親サイト($GLOBALS[‘blog_id’]が「1」)以外かつログインしていれば
YES≫表示
NO≫記事を非表示にしてログインのメッセージを表示させる
3.(必要であれば)ログインしない状態でX秒経った時、親サイトのトップへ戻すってかんじですか?
mimosafaさま
ご連絡ありがとうございます。
また、example.comの件、ご指摘頂きましてありがとうございました。
早速、トライしてみました。
「wp-content/mu-plugins/my-browse-restriction.phpを作成」とあったのですが、「mu-plugin」というディレクトリが無かったので、ディレクトリを作って、そして、my-browse-restriction.phpを作成しました。
それで直接、http://example.com/yoshida
と直接入力しましたが何事もなく、ホームページが出力されてしまいます(ユーザ名とパスワード入力を求められずに直接閲覧できてしまいます)。
それで、
wp-content/plugins/
というディレクトリは元々あったので、ここにmy-browse-restriction.phpをコピーしましたが、結果は同じでした。ご指導頂きましてありがとうございます。どのようにすればいいでしょうか。
以上、よろしくお願い致します。mura0403さま
いつもありがとうございます。
以下、お返事をさせて頂きます。よろしくお願い致します。
1.もし親サイト($GLOBALS[‘blog_id’]が「1」)ならば≫通常表示
そうです。
2.もしもし親サイト($GLOBALS[‘blog_id’]が「1」)以外かつログインしていれば
YES≫表示
NO≫記事を非表示にしてログインのメッセージを表示させる
ログインしていればという意味がよくわからないのですが、そういうことだと思います。
閲覧者が
http://example.com/yoshida/
に行くと、ユーザ名とパスワードの画面が出てきてきます。
wordpressで発行したユーザー名とパスワードを入力すると、はじめてホームページが見れるようにしたいです。
ユーザ名とパスワードとは、Wordpressの管理画面で[ユーザー]-[新規追加]で追加されたものです。
3.(必要であれば)ログインしない状態でX秒経った時、親サイトのトップへ戻す
問題ありません。
私の言葉足らずで大変ご迷惑をおかけして申し訳ありません。
よろしくお願い致します。ローカル環境で確認したところ下記の問題点を除いて想定通りの挙動を示してくれました。
if ( ! is_super_admin() && ! is_user_logged_in() ) // if ( ! is_super_admin() && ! current_user_can_for_blog( $blog_id, 'read' ) ) /* 上が駄目だったら... */
↑の条件分岐では、どちらとも、そのサイトのユーザーになっていようが居まいが親サイトのユーザーであれば誰でも閲覧が出来ました。。(ログインしていない場合はちゃんとログインページにリダイレクトされます。)
「wp-content/mu-plugins/my-browse-restriction.phpを作成」とあったのですが、「mu-plugin」というディレクトリが無かったので、ディレクトリを作って、そして、my-browse-restriction.phpを作成しました。
新規でディレクトリーを作成いただいて結構です。
mu-plugins が正しいディレクトリー名ですがそちらのタイポによるものではないでしょうか?mimosafaさま
大変大変失礼致しました。。。
管理者としてログインしながら操作していたので入れていました。
大変申し訳ありませんでした!!!
閲覧者としてURLに
http://example.com/yoshida/
を入力したところ、しっかりとWordpressのログインが出てきました。
お手数をおかけして大変申し訳ありませんでした。
また、このたびはありがとうございました。すみません、Wordpressの件で一点問題と思われることが出てきました。
実は下記のようにクラスの生徒一人一人HPを設置してマルチサイト管理をするつもりです。http://example.com/wordpress/oobamiho/
http://example.com/wordpress/kayamakeiko/
http://example.com/wordpress/kudoyumi/先ほど教えて頂いた方法だと、
1.例えば招待していない他の生徒がアドレスを予想してURLを入力して、
2.他の生徒のHPに自分のユーザ名とパスワードで入って閲覧することができてしまいます。
こういったことをなくすための方法はないものでしょうか?何度も恐れ入ります。
どんな些細なことでも結構ですのでアドバイス頂ければ助かります。
どうぞ、よろしくお願い致します。saijiさん
oogle Authenticatorプラグインとかどうでしょうか?https://www.suzukikenichi.com/blog/how-to-set-2-step-verification-for-wordpress/
@maru0403さん
二段階認証(2FA)はここでは関係ないですよね?___
上で提示されている
current_user_can
を使えばそのサイトに登録しているかどうかで分岐できるのでは?(そのままのコードだと無限ループでもしそうなのでエラー画面返すようにるなど?)mura0403さま Hinaloeさま
ご連絡本当にありがとうございます。
oogle Authenticatorについて少し調べました。
ユーザー側(生徒)に負担がかかってしまって、少し運用するにあたり面倒な感じがしました。例えばなのですが、サーバー側で
http://example.com/wordpress/oobamiho/
には、Aユーザ、Bユーザ、Cユーザだけが入れて、それ以外のユーザーは拒絶。
http://example.com/wordpress/kayamakeiko/
には、Dユーザ、EユーザとAユーザも入れて、それ以外のユーザは拒絶。
というようなことはできないものでしょうか?何度も本当に恐れ入ります。
よろしくお願い致します。Hinaloeさんのご指摘に沿って
auth_redirect
を別の処理に代えると思惑通りに動きました。<?php add_action( 'template_redirect', 'my_browse_restriction' ); function my_browse_restriction() { global $blog_id; if ( is_super_admin() || $blog_id == 1 ) /** * 特権管理者である、もしくは親サイトであればなにもしない */ return; /** * 以下、子サイトの場合の閲覧制限処理 */ if ( ! is_user_logged_in() ) /** * 未ログインの場合はログイン画面にリダイレクト */ auth_redirect(); if ( ! current_user_can_for_blog( $blog_id, 'read' ) ) /** * 子サイトのメンバーでない場合はエラー */ wp_die( '401 Unauthorized', '401 Unauthorized', array( 'response' => 401 ) ); }
wp_die
で処理している部分は’WordPress リダイレクト’などで検索すれば適切な代替手段など調べられると思います。Hinaloeさん ありがとうございました。
saijiさん
マルチサイトでしたよね?
そうなるとネットワーク管理者以外は、各子サイトにユーザー登録してあげれば
おそらく、標準機能で使えますの。
なので、上記のパターンですと、Aユーザーさんは両方に登録してあげる必要があります。
拒否するのであれば、IF文で、if (is_user_logged_in()) { // 投稿を表示 } else { // X秒たったらリダイレクトもしくはログインを促す文書 }
な感じでどうでしょうか?
いきなり振り分けるとインターフェイス的に不親切かなと思うところです。
(わたくし個人的な感覚ですが)
- トピック「WordPressのサブディレクトリ型の管理方法について」には新たに返信することはできません。