ログインしたユーザーごとに表示される記事が異なるサイトを作ろうと実験しており、
基本は実現できたのですが、トップページに固定ページの内容を表示する所でつまづいています。
//固定ページの内容を表示
$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によって設定された
購読権限を取得する方法を皆様のお力でご教授頂ければ…!
長くなりましたが、よろしくお願いいたします。
データベースに直接問い合わせる方法になります。
利用しているテーマの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つ以上ある場合も同じように追記します。
ご回答ありがとうございます。
2012/10/03 10:29:46頂いたソースコードをもとに再度実験を試みたのですが、閲覧権限ごとに情報を切り分けることに成功しました!
なるほどDB上からユーザー情報を取得すればよいとは思い至りませんでした。未熟!
これでUser Access Managerでさまざまな応用ができそうです。
初心者でも理解しやすい丁寧なご解説とても助かりました。
重ね重ね本当にありがとうございました!!スッキリです。