同じカスタムタクソノミーに属しているユーザーIDを変数に格納
-
複数グループを選択出来ないような処置が必要になってきますが、これはプラグインの範囲になるでしょうか。
お使いの user-groups プラグインが、チェックボックスで複数のグループを選べるようになっているのですよね。それならプラグインを修正する等の方法になります。後からフォーラムを読む方のことを考えて、新しくトピックを立てて頂ければと思います。
アドバイスいただいた上記方法で、ユーザーIDを取り出すには、どのような関数を使用すれば良いでしょうか?
ここまでのやりとりで出てきた関数を使ってできると思いますよ。get_current_user_id でログインユーザーのid、wp_get_object_terms でそのユーザーのターム(グループ)、get_objects_in_term でそのタームが付いたオブジェクト(ユーザー)を取得できます。get_objects_in_term の戻り値はユーザーidの配列です。ショートコードの中に出てきた使い方が参考になります。
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 にコメントを修正しました。
# 何れもミスが多くて申し訳ありません。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' );
いえいえ、ありがとうございます。
仰せの通りにしましたら、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 を和訳してみました。参考になれば幸いです。
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つはクリアできました。
その他の問題はプラグインやデータベース関係が多いので、新たにトピックを立てさせていただきます。
既に立てているプラグインのトピックはレスポンスが皆無なので、それが心配ですが・・・。
引き続き、ご指導いただければ幸いです。この度は親切丁寧にご対応いただき、本当にありがとうございました。
- トピック「同じカスタムタクソノミーに属しているユーザーIDを変数に格納」には新たに返信することはできません。