몇 년째 meta.discourse 포럼을 잠복으로 지켜보며 스니펫을 수집하고, WordPress + Memberpress + Discourse(자체 호스팅)를 사용하는 클라이언트 사이트를 개선하는 방법을 배우고 있습니다.
저는 Memberpress 멤버십에 따라 Discourse 그룹을 지정해야 했습니다(아직도 필요합니다).
참고:
- 클라이언트 사이트(SSO 제공자): https://secretsofsolo.com/
- Discourse 사이트: https://jamcircle.secretsofsolo.com/
과거(수년간) 저는 add_filter( 'wpdc_sso_params' 필터 메서드를 사용했습니다:
이 방식의 단점은 Discourse 그룹이 사용자 로그인 시에만 업데이트된다는 것이었습니다. 저는 Memberpress 거래가 발생하는 시점과 같이 즉각적인 효과가 있는 방식을 원했습니다.
솔직히 제 PHP 코딩 실력은 매우 기초적인 수준입니다. 저는 더 프론트엔드 HTML/CSS 개발자에 가깝습니다.
이제 저는 여기에서 설명된 더 나은 WP Discourse 함수를 사용하여 클라이언트 사이트용 함수를 다시 작성했습니다.
이 함수는 \WPDiscourse\Utilities\Utilities::add_user_to_discourse_group 및 \WPDiscourse\Utilities\Utilities::remove_user_from_discourse_group 함수를 사용합니다.
이제 Memberpress 이벤트를 수신하여 다음 코드 블록(functions.php)으로 Discourse 그룹을 추가할 수 있습니다:
add_action('mepr-event-create', 'listen_to_mepr_events');
function listen_to_mepr_events($event) {
$obj = $event->get_data();
//$obj might be a MeprTransaction object or a MeprSubscription object
if(!($obj instanceof MeprTransaction) && !($obj instanceof MeprSubscription)) {
return; // nothing here to do if we're not dealing with a txn or sub
}
$member = $obj->user(); // get member object data from event object
$user_id = $member->ID; // get user ID from object
if($member->is_active_on_membership($obj)) { //active membership
if(3780 == $obj->product_id) { //MONTHLY Membership
$add_group = 'Ksenia_Basic'; // Discourse Group Name
$remove_groups = ['Ksenia_Essential','Ksenia_Premium','Ksenia_Free','Ksenia_Annual'];
// add to Discourse Group
\WPDiscourse\Utilities\Utilities::add_user_to_discourse_group( $user_id, $add_group );
// remove from Discourse Groups
\WPDiscourse\Utilities\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
}
else if(3847 == $obj->product_id) { //6 Month (Essential) Membership
$add_group = 'Ksenia_Essential'; // Discourse Group Name
$remove_groups = ['Ksenia_Basic','Ksenia_Premium','Ksenia_Free','Ksenia_Annual'];
// add to Discourse Group
\WPDiscourse\Utilities\Utilities::add_user_to_discourse_group( $user_id, $add_group );
// remove from Discourse Groups
\WPDiscourse\Utilities\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
}
}
else { //no matches
}
}
추가 참고: Memberpress 액션 훅 add_action('mepr-event-create', 'listen_to_mepr_events');의 예제는 여기에서 찾을 수 있습니다:
참고 - 이것은 제 클라이언트 사이트에서 사용하는 것의 단순화된 버전입니다. 전체 버전(Learndash + Mailster 관리 포함)은 여기에서 찾을 수 있습니다: Memberpress + Learndash + Mailster + WP Discourse · GitHub
수년간 스니펫과 지원을 제공해 주신 이 포럼의 모든 분들에게 감사드립니다. 저와 같은 많은 잠복자들이 이 자원을 매우 가치 있고 유용한 것으로 인식하고 있다는 것을 알고 있습니다.
제 예제에 대해 제안 사항이나 문제를 보신다면, 어떻게 개선할 수 있는지 알려주세요.