timgrahl
(Tim Grahl)
2021 年 12 月 21 日午後 3:35
1
WordPress/WooCommerce システムで会員制度を運営しています。数年前から SSO を使用してサブドメインで Discourse を利用しており、順調に機能しています。人が参加/キャンセルした際にグループアクセスを追加/削除するコードを functions ファイルに入れています。
会員制度に、週次の Zoom 通話のために 6〜8 人の小グループに参加できる機能を追加しました。
これを管理するために、「コホート」という WordPress の投稿タイプを作成し、週次の通話情報をそこに含め、カスタムユーザーフィールドを使用してそれらのコホートをユーザーに割り当てました。
以下を行いたいと考えています。
各コホートのグループを作成する
#1 のグループのみがアクセスできる、各コホートのサブカテゴリを作成する
各メンバーをそれぞれのグループに配置し、コホートのサブカテゴリへのアクセス権を付与する
#3 は方法を知っていますが、グループとサブカテゴリ(セキュリティ設定を含む)をプログラムで追加する方法はありますか?
WP-Discourse のユーティリティにはこの機能が見つかりません。API を見ても、カテゴリの追加方法はわかりますが、セキュリティ機能についてはわかりません。
私がやりたいことは可能ですか?
angus
(Angus McLeod)
2021 年 12 月 22 日午前 3:36
2
はい、可能です。WordPressからDiscourseへのAPIリクエストは、discourse_requestユーティリティメソッドを使用して行うことができます。たとえば、次のようになります。
use WPDiscourse\\Utilities\\Utilities as DiscourseUtilities;
$args = array(
"body" => "",
"type" => "post"
);
$response = DiscourseUtilities::discourse_request( $path, $args );
これにより、リクエストが正しくフォーマットされ、WP Discourseの設定で提供されたAPIキーとユーザーが使用されます。参照しているアクションには、グローバルキーが必要になります(通常のWP Discourse機能にも同じキーを使用している場合)。
グループの作成
必要なエンドポイントは次のとおりです: Discourse API Docs discourse/app/controllers/admin/groups_controller.rb at main · discourse/discourse · GitHub
カテゴリの作成
必要なエンドポイントは次のとおりです: Discourse API Docs discourse/app/controllers/categories_controller.rb at main · discourse/discourse · GitHub
「セキュリティ設定」はpermissionsパラメータを介して処理されることに注意してください。グループ名をキー、権限レベルの整数を値とするオブジェクトを指定するだけです。たとえば、次のようになります。
{
"cohort1": 2,
"staff": 1
}
権限レベルの整数のリストは次のとおりです: discourse/app/models/category_group.rb at main · discourse/discourse · GitHub
「いいね!」 2
timgrahl
(Tim Grahl)
2021 年 12 月 24 日午後 12:38
3
@Angus 、本当にありがとうございます!まさに必要としていたものでした!
グループを作成し、ユーザーをグループに割り当て、適切なセキュリティでカテゴリを作成することができました。
ご協力に心より感謝いたします。
もう一つ質問があります…カテゴリまたはグループを更新するためにPUTを実行しようとすると、このエラーが発生します。
致命的なエラー :未定義の関数wp_remote_put()への呼び出し Error: Call to undefined function wp_remote_put() in […]/public/wp-content/plugins/wp-discourse/lib/plugin-utilities.php:393
新しい名前でカテゴリID 61を更新しようとしているテストコードを以下に示します。
$path = "/categories/61.json";
$args = array(
"type" => "put",
"body" => array (
"name" => "Cohorts 1",
)
);
$response = DiscourseUtilities::discourse_request( $path, $args )
何が間違っていますか?
timgrahl
(Tim Grahl)
2021 年 12 月 28 日午後 3:22
4
何かアイデアはありますか?本当にありがとうございます!
angus
(Angus McLeod)
2021 年 12 月 30 日午前 1:27
5
申し訳ありません、ティム。ここ数日留守にしていました。このサポートには discourse_request メソッドの調整が必要なようです。来週PRを作成しますが、マージされるまでさらに1週間かかるでしょう。
それよりも早く必要な場合は、次のようにWPの基盤となるメソッドを使用できます。
$api_credentials = DiscourseUtilities::get_api_credentials();
if ( is_wp_error( $api_credentials ) ) {
return $api_credentials;
}
$headers = array(
'Api-Key' => sanitize_key( $api_credentials['api_key'] ),
'Api-Username' => sanitize_text_field( $api_credentials['api_username'] ),
'Accept' => 'application/json',
);
$body = array( /* 使用しているエンドポイントに固有 */ );
$url = /* 使用しているエンドポイントの絶対URL */;
$opts = array(
'headers' => $headers,
'body' => json_encode( $body ),
'method' => 'PUT'
);
$result = wp_remote_request( $url, $opts );
tom00953
(Tom Robak)
2022 年 5 月 17 日午前 10:48
6
@timgrahl さん、WordPressとWooCommerceでユーザーをグループに追加/削除するための動作する関数を共有していただけますか?
メンバーシップを利用したWooCommerceを使用しており、これを機能させようとしています。WordPressユーザーがアクティブなWooCommerceメンバーシップを持っている場合、そのユーザーは「Xグループ」に追加されます…メンバーシップがキャンセルまたは期限切れになった場合、ユーザーは「Xグループ」から削除されます。
angus
(Angus McLeod)
2022 年 5 月 17 日午後 12:13
7
Tomさん、DiscourseグループとWooCommerceメンバーシップを同期するには、こちらで説明されているアプローチを使用してください。
WP Discourse functions
The WP Discourse plugin has a couple of functions that can be used to associate WordPress users with Discourse groups.
These functions are only enabled on sites that are using WordPress as the SSO provider for Discourse.
add_user_to_discourse_group( $user_id, $group_names ) View Code
remove_user_from_discourse_group( $user_id, $group_names ) View Code
Each of these functions take the same two parameters:
$user_id: the WordPress user’s id
$group_names: a comma separat…
tom00953
(Tom Robak)
2022 年 5 月 17 日午後 12:27
8
ええ、それを見ましたが、それでもコードスニペットを作成するにはあまりにも愚かです