• 解決済 JunichiK

    (@junichik)


    お世話になります。

    カスタムタクソノミーを利用してユーザーをグループ分けしております。
    それで、同じグループに属しているユーザーのIDをすべて変数に格納したく、方法をいろいろと検索してみたのですが分かりません。

    ご存知の方がいらっしゃいましたら、ご教示願います。
    何卒よろしくお願いいたします。

11件の返信を表示中 - 16 - 26件目 (全26件中)
  • 複数グループを選択出来ないような処置が必要になってきますが、これはプラグインの範囲になるでしょうか。

    お使いの user-groups プラグインが、チェックボックスで複数のグループを選べるようになっているのですよね。それならプラグインを修正する等の方法になります。後からフォーラムを読む方のことを考えて、新しくトピックを立てて頂ければと思います。

    アドバイスいただいた上記方法で、ユーザーIDを取り出すには、どのような関数を使用すれば良いでしょうか?

    ここまでのやりとりで出てきた関数を使ってできると思いますよ。get_current_user_id でログインユーザーのid、wp_get_object_terms でそのユーザーのターム(グループ)、get_objects_in_term でそのタームが付いたオブジェクト(ユーザー)を取得できます。get_objects_in_term の戻り値はユーザーidの配列です。ショートコードの中に出てきた使い方が参考になります。

    トピック投稿者 JunichiK

    (@junichik)

    gblsmさん、お世話になります。

    プラグインの修正につきましては、仰せのとおり、別にトピックを立てさせていただきます。

    ユーザーIDを取り出す方法は、下記のようにしてみましたが、うまくいきません。
    どこが間違っているのでしょうか?根本的に間違っているのでしょうか?

    <?php
    $user_id = get_current_user_id();
    $myTerms = get_the_terms( $user_id, 'user-group' );
     foreach( $myTerms as $myTerm ) {
      $tempUsers = get_objects_in_term( $myTerm, 'user-group' );
       foreach( $tempUsers as $tempUser ) {
        $user = get_user_by( 'ID', $tempUser );
        $userIDs = $user->ID;
       }
     }
    echo $userIDs;
    ?>

    よろしくお願い致します。

    下記のコードを試してみて頂けますか?

    <?php
    $user_id = get_current_user_id();
    $myTerms = wp_get_object_terms( $user_id, 'user-group' );
    $userIDs = get_objects_in_term( $myTerms, 'user-group' );
    echo var_dump($userIDs);
    ?>

    get_the_terms は投稿に付けられたタームしか扱えない筈なので、ユーザーオブジェクトに対しては wp_get_object_terms を使います。
    get_objects_in_term は(本家Codexを改めて読んでみたところ)1番目の引数にタームの配列を与えても大丈夫でしたので、二重ループを止めて一重ループで行けそうです。

    # 追記 13:56
    # 一重ループですらなく、ループなしですね。それから、一つ前の私のコメントで
    # 最初は間違って get_the_terms と書いてしまったのですが、
    # 後から気づいて wp_get_object_terms にコメントを修正しました。
    # 何れもミスが多くて申し訳ありません。

    トピック投稿者 JunichiK

    (@junichik)

    gblsmさん、こちらこそお手数おかけしてすみません。

    上記を試してみましたが、
    array(0) { }
    となります。

    $user_id と $myTerms の値はどうなっていますか、var_dump で確かめてみて下さい。

    トピック投稿者 JunichiK

    (@junichik)

    gblsmさん、お世話になります。

    var_dumpで確認しましたところ、

    $user_idは、
    int(1)

    $myTermsは、
    array(1) { [0]=> object(stdClass)#2854 (10) { [“term_id”]=> int(5) [“name”]=> string(21) “テストグループ” [“slug”]=> string(6) “group1” [“term_group”]=> int(0) [“term_taxonomy_id”]=> int(5) [“taxonomy”]=> string(10) “user-group” [“description”]=> string(0) “” [“parent”]=> int(0) [“count”]=> int(3) [“filter”]=> string(3) “raw” } }

    と、なっております。(テストグループはターム名です)

    よろしくお願いいたします。

    JunichiKさん、申し訳ありません。
    wp_get_object_terms の戻り値のデフォルトを勘違いしていました。
    下記のように三番目の引数を足してください。

    $myTerms = wp_get_object_terms( $user_id, 'user-group', 'fields=names' );

    トピック投稿者 JunichiK

    (@junichik)

    いえいえ、ありがとうございます。
    仰せの通りにしましたら、var_dumpでの値は、
    $myTermsは、

    array(1) { [0]=> string(21) “テストグループ” }

    となりましたが、
    $userIDsはやはり、

    array(0) { }

    のままです。

    $myTerms = wp_get_object_terms( $user_id, 'user-group', 'fields=ids' );

    ミスが多くてすみません、三番目の引数の names を ids に変えれば大丈夫と思います。

    関数 wp_get_object_terms と get_objects_in_term の Codex を和訳してみました。参考になれば幸いです。

    トピック投稿者 JunichiK

    (@junichik)

    gblsmさん、ありがとうございます!
    正常に取得することが出来ました。

    <?php
    $user_id = get_current_user_id();
    $myTerms = wp_get_object_terms( $user_id, 'user-group','fields=ids' );
    $userIDs = get_objects_in_term( $myTerms, 'user-group' );
    echo $userIDs[0]."<br>";
    echo $userIDs[1]."<br>";
    echo $userIDs[2]."<br>";
    echo $userIDs[3]."<br>";
    echo $userIDs[4]."<br>";
    ?>

    Codexの和訳も非常に分かりやすくて助かります!
    私でも理解できそうです。

    やろうとしていることには、まだまだ問題があるのですが、おかげ様で1つはクリアできました。
    その他の問題はプラグインやデータベース関係が多いので、新たにトピックを立てさせていただきます。
    既に立てているプラグインのトピックはレスポンスが皆無なので、それが心配ですが・・・。
    引き続き、ご指導いただければ幸いです。

    この度は親切丁寧にご対応いただき、本当にありがとうございました。

11件の返信を表示中 - 16 - 26件目 (全26件中)
  • トピック「同じカスタムタクソノミーに属しているユーザーIDを変数に格納」には新たに返信することはできません。