サポート » プラグイン » User Access Manager 投稿ページ内に閲覧権限のあるメンバーの一覧を表示させたい

  • 解決済 mnb3654

    (@mnb3654)


    これまで多くの疑問はこちらのフォーラムでの過去の質問とその回答を閲覧するだけで大抵解決でき、大変お世話になっておりました。
    今回実現を試みている件は、当初単純なことかと思っていたのですが数日間解決に至らず四苦八苦しております。お力をお貸しいただければと思い投稿します。

    現在プラグイン『User Access Manager』を用いて、投稿毎に閲覧制限を与えた社内用のプロジェクト管理のサイトを構築しています。各プロジェクト毎に作成された投稿に対しプラグインで作成したグループを設定し、ログインした上での各ユーザーの閲覧制限は実現できています。

    例えば『防災訓練』というプロジェクト=投稿があり、その投稿はグループ『防災訓練』に紐付けられたユーザー『ユーザーA』『ユーザーB』『ユーザーC』のみ閲覧可能です。その際に投稿内(single.php)に「このプロジェクトに参加する全メンバー」として『ユーザーA』『ユーザーB』『ユーザーC』の名前を表示させたいのです。

    <?php $users = get_users( array('orderby'=>ID,'order'=>ASC) ); ?>
    
    <table>
      <tr>
        <th>ユーザーID</th>
        <th>登録名</th>
        <th>サイト上の表示名</th>
        <th>登録メールアドレス</th>
      </tr>
    <?php foreach($users as $user) {
    $uid = $user->ID; ?>
      <tr>
        <td><?php echo $user->id ; ?></td>
        <td><?php echo $user->last_name ; ?> <?php echo $user->first_name ; ?></td>
        <td><?php echo $user->display_name ; ?></td>
        <td><?php echo $user->user_email; ; ?></td>
      </tr>
    <?php } ?>

    などとしてユーザー情報の取得はできるのですが、これですとサイトに登録されているユーザーの全てが表示されてしまい、グループ『防災訓練』に紐付けられたユーザー情報のみの取得ができません。

    当該プラグインのスニペット『Get all user of a user group』あたりが手がかりになるかと思っているですが思うようにデータが抽出できません。英語版のフォーラムで似たような質問はあったのですが、回答が付いておらず難儀しています。

    これまで検索して見つけた方法を切り貼りして、と根本的なところの知識が欠如したままであったことを痛感しています。どうかお力をお貸しください。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • こんにちは

    ここの uamIsUserInGroup() を使用するのはどうでしょうか?
    https://github.com/GM-Alex/user-access-manager/wiki/Code-Snippets

    <?php foreach($users as $user) {

    <?php foreach( $users as $user ) {
    	if ( ! uamIsUserInGroup( '防災訓練', $user->ID ) ) continue;

    もっとスマートな方法がありそうですが・・・

    トピック投稿者 mnb3654

    (@mnb3654)

    ishitakaさま

    早速ありがとうございます。ご教示いただいたコードでメンバーの絞り込みが実現できました。勉強になります。
    が、このような形ですとキーである『防災訓練』部分が決め打ちになるのですね。このキーをsingle.php内で現在のカテゴリ名を取得し代入するなどできれば意図する動きが実現できそうです。
    後出しのようで恐縮ですが、全ての投稿に対して与えられたカテゴリはグループと同名となっています(投稿名『防災訓練2019』、カテゴリ『防災訓練』、閲覧可能なグループ名『防災訓練』。例えば他に投稿名『新年会2019』があれば、そのカテゴリは『新年会』、閲覧可能なグループ名は『新年会』となります)。
    このキー『’防災訓練’』部分にget_the_categoryで取得する現在のカテゴリ名をecho "$cat->cat_name "で出力し、それを代入することなどは可能でしょうか?
    これこそ基礎中の知識の無さ故と思います。どうかお助けください。

    get_the_category() はカテゴリーのオブジェクトの配列を返します。
    https://wpdocs.osdn.jp/テンプレートタグ/get_the_category

    例:

    $group_name = ( $cat = get_the_category() ) ? $cat[0]->cat_name : '';
    foreach( $users as $user ) {
    	if ( ! uamIsUserInGroup( $group_name, $user->ID ) ) continue;
    トピック投稿者 mnb3654

    (@mnb3654)

    ishitakaさま

    早速の再度のご教示ありがとうございます。お示しいただいたコードで希望していた表示が実現できました!おんぶに抱っことなり申し訳ありません。本当にありがとうございます。
    コードを拝見すれば、逆引きというか実に腑に落ちるのですが、自分の中からは出てこないものでした。今回のことで基礎的な知識不足を痛感しました。改めてPHP、Wordpressについて勉強し直そうと思った次第です。精進します。
    貴重な場をお借りし、大変助かりました。これにて解決済みとさせていただきます。この度は誠にありがとうございました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「User Access Manager 投稿ページ内に閲覧権限のあるメンバーの一覧を表示させたい」には新たに返信することはできません。