Ciao a tutti, sto rispolverando questo vecchio post perché la mia domanda riguarda Restrict Content Pro, quindi è simile a quella dell’OP. In sostanza, sto collaborando a un sito in cui il sistema di membership è Restrict Content Pro e sto cercando di integrare la sincronizzazione dei gruppi di Discourse per le membership RCP a pagamento: in pratica, chiunque abbia una membership deve essere sincronizzato con il gruppo Members sul forum Discourse.
Ho dedicato molto tempo a cercare di far funzionare qualcosa di simile all’esempio di Simon Gestione dell’iscrizione ai gruppi di Discourse con WP Discourse SSO. L’SSO funziona correttamente, ma le membership non vengono ancora sincronizzate (aggiungere gli utenti a un gruppo all’attivazione della membership o rimuoverli dal gruppo alla scadenza).
Per questo post mi sto concentrando solo sull’aggiunta di nuovi membri a un gruppo di Discourse. I forum Discourse del sito hanno un solo gruppo: Members. (La rimozione dei gruppi dovrebbe essere abbastanza semplice, dato che il hook di Restrict Content Pro è lo stesso, basta sostituire il suffisso active con expired). Restrict Content Pro elenca l’hook d’azione rcp_transition_membership_status_active come attivato ogni volta che lo stato di una membership cambia. Ha parametri per $old_status e $membership_id. La funzione rcp_get_membership() restituisce un oggetto RCP_Membership (che contiene, tra le altre cose, un riferimento all’$user_id di WordPress).
Ecco la versione più semplificata che sono riuscito a creare:
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
// Aggiunge un utente al gruppo Discourse 'members'.
function rcpdc_add_member_to_group( $membership_id ) {
$membership = rcp_get_membership( $membership_id );
$user_id = $membership->get_user_id();
DiscourseUtilities::add_user_to_discourse_group( $user_id, 'Members' );
}
// Assicurati di verificare che la classe Discourse esista.
if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {
// L'azione rcp con il suffisso {active} viene eseguita ogni volta che viene aggiunta una nuova membership
add_action( 'rcp_transition_membership_status_active', 'rcpdc_add_member_to_group' );
}
Se notate qualcosa che sto evidentemente sbagliando e che impedisce a questa azione di funzionare correttamente, apprezzerei molto il vostro aiuto. Grazie!