I have WP discourse working for SSO and Restrict Content Pro for subscription, signup, but I am wondering how to set up levels during signup … That carry over to discourse?
Are you committed to using Restricted Content Pro? There are quite a few different WordPress membership plugins. My plan is to make a general wp-discourse-groups plugin that will work for most of them, but at the moment I’m making a plugin specifically for the WishList Member plugin. When it’s finished, I think it will do everything that you are looking for.
I’ve written code for some WordPress subscription manager that used API calls to manage groups on WordPress. It shouldn’t be hard to set up WordPress groups that whatever group manager you uses could connect to.
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!
Ops! Ho avuto un errore sul lato Restrict Content Pro, scusa. Il hook di azione che sto utilizzando richiede due argomenti-
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
// Aggiunge un utente al gruppo Discourse 'members'.
function rcpdc_add_member_to_group( $old_status, $membership_id ) {
$membership = rcp_get_membership( $membership_id );
$customer = $membership->get_customer();
$user_id = $customer->get_user_id();
DiscourseUtilities::add_user_to_discourse_group( $user_id, 'Members' );
}
// Assicurati di verificare che la classe Discourse esista. Se non esiste e disattivi wp-discourse, questo farà crashare il tuo sito.
if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {
add_action( 'rcp_transition_membership_status_active', 'rcpdc_add_member_to_group', 10, 2 );
}
Con la modifica sopra, l’add_action dovrebbe funzionare ora, ma non ho ancora avuto successo con la funzione add_user_to_discourse_group.
Le iscrizioni appena attivate non vengono ancora aggiunte con successo al gruppo Members, quindi sarei molto grato se qualcuno potesse darmi qualche consiglio. Saluti.
Se possibile, prova a creare un file debug.log sul tuo server WordPress e poi scrivici da dentro la tua funzione rcpdc_add_member_to_group. Puoi utilizzarlo per verificare che la funzione venga chiamata e per controllare che i valori corretti vengano assegnati alle variabili che stai creando.
Grazie, Simon! Ha funzionato alla grande. Sono riuscito a far funzionare il codice. Si è scoperto che il codice che avvolgeva l’azione impediva a add_action di eseguire la funzione. Una volta rimosso
if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {
e incluso solo l’add_action stesso, il plugin ha funzionato correttamente. Non mi preoccupa molto il controllo, dato che sono l’unica persona che amministra questo sito. Quindi sì, ora la sincronizzazione funziona perfettamente sia per l’aggiunta che per la rimozione dei membri dai gruppi.
Grazie per averci dato un’occhiata. Ho aggiunto un’opzione al plugin per gestire i commenti presenti in categorie private. Purtroppo non sono riuscito a completarlo questa settimana. L’opzione verrà aggiunta nel prossimo aggiornamento del plugin. Cercherò di portarlo a termine all’inizio della prossima settimana.