WordpressのUser Access Managerという会員制サイト構築プラグインに関する質問です。


ログインしたユーザーごとに表示される記事が異なるサイトを作ろうと実験しており、
基本は実現できたのですが、トップページに固定ページの内容を表示する所でつまづいています。

//固定ページの内容を表示
$content = get_page(10);
echo $content->post_content;

上記の記述方法では全ユーザーに対して内容が開示されてしまうため、
User Access ManagerのFunctionを利用して
User Access Managerによって設定されたユーザーの閲覧権限を取得し、
条件分岐をかけようかなと考えています。
ですが、UserAccessManager.class.phpをいまいち解読しきれずに
「ログインしているユーザーの閲覧権限は?」という情報を取得できずにいます。

http://wordpress.org/support/topic/plugin-user-access-manager-functions
こちらのフォーラムに答えがありそうな予感もしつつ、
小学生レベルの英語力+プログラミング能力により答えに辿り着けずにいます。

ログインしているユーザーのUser Access Managerによって設定された
購読権限を取得する方法を皆様のお力でご教授頂ければ…!
長くなりましたが、よろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/10/03 10:28:45
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351

ポイント500pt

データベースに直接問い合わせる方法になります。
利用しているテーマのfunctions.phpに以下の関数※(関数名は何でもいいのですが・・・)を追加します。

function get_usergroups() {
	global $wpdb, $current_user;
	$groups = array();
	if($current_user) {
		$q = "SELECT ID, groupname FROM ". $wpdb->prefix . "uam_accessgroups AS acg JOIN " . $wpdb->prefix . "uam_accessgroup_to_object AS acgto ON acg.ID = acgto.group_id WHERE acgto.object_type = 'user' AND acgto.object_id = " . $current_user->ID;
		$res = $wpdb->get_results($q);
		if(isset($res) && !empty($res)) {
			foreach($res as $grp) {
				$groups[] = esc_html($grp->groupname);
			}
		}
	}
	return $groups;
}


次のトップページのテンプレートの任意の箇所で次のようにします。

	$uam_grp = get_usergroups();
	if(!empty($uam_grp) && in_array("表示を許可するグループ名", $uam_grp)) {
		echo "<div>\n";
		$page_id = 10;
		$page = get_page($page_id);
		echo apply_filters('the_content', $page->post_content);
		echo "</div>\n";
	} else {
		/* 許可されないユーザーに対する処理 */
	}



【※追記※】

サイト管理人にも表示する場合は次のようにするといいです。

	if($current_user->ID == 1 || !empty($uam_grp) && in_array("許可するグループ名", $uam_grp)) {


表示許可するグループが複数ある場合は次のようにしてみてください。

	if($current_user->ID == 1 || !empty($uam_grp) && (in_array("グループ名1", $uam_grp) || in_array("グループ名2", $uam_grp))) {


※許可するグループが3つ以上ある場合も同じように追記します。

id:mizi

ご回答ありがとうございます。
頂いたソースコードをもとに再度実験を試みたのですが、閲覧権限ごとに情報を切り分けることに成功しました!
なるほどDB上からユーザー情報を取得すればよいとは思い至りませんでした。未熟!
これでUser Access Managerでさまざまな応用ができそうです。
初心者でも理解しやすい丁寧なご解説とても助かりました。
重ね重ね本当にありがとうございました!!スッキリです。

2012/10/03 10:29:46
  • id:rouge_2008
    > トップページに固定ページの内容を表示

    その固定ページには、AccessできるUser Groupを設定していないという事でしょうか?
    この場合、トップページには表示されなくても、固定ページに直接アクセスされたら表示されるように思いますが、その辺りの動作はどのようにする予定なのでしょうか?
  • id:mizi
    固定ページには個別にUser Groupを設定しているため、トップページのメニューにはページ名は非表示ですし、固定ページにアクセスした際には内容が表示されない挙動に設定しています。

    phpファイルで直にget_pageしてしまうと非表示設定をすりぬけてしまうようです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません