WordPressのサブディレクトリ型の管理方法について
-
一番簡単な方法は各サブディレクトリーを固定ページとして作成して、各ページにパスワードを設定すれば閲覧時のパスワード入力は強制できます。
個別のユーザーを登録する必要もなく各生徒に各々のページのパスワードを教えてあげれば済みます。ただし、各生徒が各々のページを編集できるようにするためにはやはり権限のコントロールが必要になると思います。
-
例えばなのですが、サーバー側で
http://example.com/wordpress/oobamiho/
には、Aユーザ、Bユーザ、Cユーザだけが入れて、それ以外のユーザーは拒絶。
http://example.com/wordpress/kayamakeiko/
には、Dユーザ、EユーザとAユーザも入れて、それ以外のユーザは拒絶。
というようなことはできないものでしょうか?maru0403さんの仰る通り、あとは各サイトでユーザーを追加していけば要件通りになると思います。
—
現行のマルチサイト機能については WordPress でローンチされてすぐに導入したのですが、正直なところあまりメリットのない使い方だったため、その後自力で子サイトを個別の WordPress に切り分けた経験があります。
なかなか使いドコロが無いなァ、というのが感想だったのですが、今回のsaijiさんの要件のようにクラスの生徒たちにブログを持たせる、っていうのはマルチサイトの長所を活かした素敵な使い方だと思います。これから生徒さんから先生にああして欲しい、こうして欲しい、この機能はいらない、とかいろんな要望が出てくるかと思います。WordPress カスタマイズのモチベーションとしては最高ではないでしょうか!
ご健闘をお祈りいたします!
mura0403さま mimosafaさま
ご連絡、本当にありがとうございます。
以下、2点について私の理解で問題ないでしょうか?1.my-browse-restriction.phpの設定
以下、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();}
2.auth_redirectを別の処理に変更します
wp-blog-header.phpの中はデフォルトでは下記のような設定ですが、<?php
if ( !isset($wp_did_header) ) {
$wp_did_header = true;
require_once( dirname(__FILE__) . ‘/wp-load.php’ );
wp();
require_once( ABSPATH . WPINC . ‘/template-loader.php’ );
}
下記のように書き換えます。
<?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()) {
// 投稿を表示
} else {
// X秒たったらリダイレクトもしくはログインを促す文書
}if ( ! current_user_can_for_blog( $blog_id, ‘read’ ) )
/**
* 子サイトのメンバーでない場合はエラー
*/
wp_die( ‘401 Unauthorized’, ‘401 Unauthorized’, array( ‘response’ => 401 ) );
}何度も恐れ入ります。
よろしくお願い致します。my-browse-restriction.php
の内容をまるっとこちらのコードに書き換えるだけで大丈夫です。WordPress のコアに手を入れちゃうとアップデートの際にカスタマイズした内容が消えてしまうので避けたほうがいいですね。
saijiさん
/** * 以下、子サイトの場合の閲覧制限処理 */ if (is_user_logged_in()) { // 投稿を表示 } else { // X秒たったらリダイレクトもしくはログインを促す文書 } if ( ! current_user_can_for_blog( $blog_id, 'read' ) ) /** * 子サイトのメンバーでない場合はエラー */ wp_die( '401 Unauthorized', '401 Unauthorized', array( 'response' => 401 ) ); }
ここの部分が多分似たような処理になってますので
子サイトのメンバーではない=子サイトでログインしてない
の認識でよろしいと思います。そうなると、具体的なログインのタイミングと処理の仕方のイメージだと思います。
たとえば、ブラウザーした状態をイメージします。
当然、起動時にはログイン情報は持っていませんので各子サイトでログイン処理を行いますが、その状態でエラーとして返すと、永遠とログインできないことも想像できます。
(あらかじめwp-adminからログインすれば問題ありませんが)
そのような場合、フロント側でログイン処理をさせるのか?マイページ(ログインページ)に処理をさせるのかによって、ユーザー操作が変わってきます。
(リダイレクトすればよろしいのですが)wp_die( '401 Unauthorized', '401 Unauthorized', array( 'response' => 401 ) );
こちらの処理はすみません、勉強不足であまりわかっていないのですが。
ログイン時のタイミングやイメージなど教えて頂ければと思います。
mimosafaさま
ご連絡頂いた方法で試してみました。
理想通りでした。
申し訳ありません、ただ、一点気になることがあります。それは例えばchromブラウザで
http://localhost/wordpress/oobamiho/
のホームページに他のユーザでログインすると
401 Unauthorized
というエラーが出力されます。
これは正常です。
そして、そこからURLの画面に他のURL(例えば下記2つのアドレス)を入れると、少し待ってからログイン画面が出力されず、いきなり
401 Unauthorized
が出力されます。
—————————————-
http://localhost/wordpress/kayamakeiko/
http://localhost/wordpress/kudoyumi/
—————————————-
こうなるともうひとつのURLを入れても同じ現象が出続けます。とにかくログインを間違えるとこういう現象が出るようです。
それで、ブブラウザーをFirefoxに変えると問題なくログイン画面が出力されます。
ブラウザの問題かと思い、Firefoxで同じことをするとFirefoxでも同じ問題が出てきます。
ブラウザを終了して、もう一度起動して、再度URLに入力するとログイン画面が出てきます。
それで、Wordpress側の問題ではないかと思って上記ご連絡を差し上げた次第です。
これはWordpress側の仕様なのでしょうか?それと問題なのでしょうか?
もし、仕様でしたらすみません。
どうぞ、よろしくお願い致しいます。mimosafaさま
すみません、何度も。
先ほどの件ですが、もしかしたら1台のPCで何人ものユーザーでログインログアウトを繰り返していて混乱していただけかもしれません。
同じ問題は出ているのですが、ブラウザで戻るとなぜかログアウトされていない状態で、それをログアウトすると正常にログイン画面が出てきます。
お騒がせして大変申し訳ありません。
ただ、もし心当たりのある問題でしたらご連絡頂ければ幸いです。
本当にこのたびはご親切にご指導頂きましてありがとうございました。こうなるともうひとつのURLを入れても同じ現象が出続けます。とにかくログインを間違えるとこういう現象が出るようです。
私の環境では再現ができませんでした。
先ほどの件ですが、もしかしたら1台のPCで何人ものユーザーでログインログアウトを繰り返していて混乱していただけかもしれません。
これであれば幸いです。
そうでなければブラウザのキャッシュの問題と想像できますが、その辺り(も)いまいち明るくないのでなんとも明確に案内差し上げられることがありませぬ…orz適切なのか否かわかりませんが
wp_die
の上にnocache_headers();
の一行を加えてみるのはどうなんでしょう?(詳しい方Help…)if ( ! current_user_can_for_blog( $blog_id, 'read' ) ) { /** * 子サイトのメンバーでない場合はエラー */ nocache_headers(); wp_die( '401 Unauthorized', '401 Unauthorized', array( 'response' => 401 ) ); }
- トピック「WordPressのサブディレクトリ型の管理方法について」には新たに返信することはできません。