Sono anni che bazzico sui forum di meta.discourse, raccogliendo frammenti e imparando come migliorare un sito cliente che utilizza Wordpress + Memberpress + Discourse (self-hosted).
Avevo bisogno (e ho ancora bisogno) di assegnare Gruppi di Discourse in base agli Abbonamenti di Memberpress.
Per riferimento:
- Il sito del cliente (fornitore SSO): https://secretsofsolo.com/
- Il sito Discourse: https://jamcircle.secretsofsolo.com/
In precedenza (per alcuni anni) ho utilizzato il metodo del filtro add_filter( 'wpdc_sso_params':
Lo svantaggio sembrava essere che i Gruppi di Discourse si aggiornavano solo al login dell’utente, io volevo qualcosa che avesse un effetto più immediato (ad esempio quando avviene una transazione di Memberpress).
Ammetto che le mie capacità di programmazione PHP sono piuttosto basilari. Sono più uno sviluppatore front-end HTML/CSS.
Ora ho riscritto le mie funzioni per il sito del cliente utilizzando una funzione migliore di WP Discourse descritta qui
Che utilizza le funzioni: \\WPDiscourse\\Utilities\\Utilities::add_user_to_discourse_group e: \\WPDiscourse\\Utilities\\Utilities::remove_user_from_discourse_group.
Ora posso ascoltare gli eventi di Memberpress e aggiungere i Gruppi di Discourse con questo blocco di codice (functions.php):
add_action('mepr-event-create', 'listen_to_mepr_events');
function listen_to_mepr_events($event) {
$obj = $event->get_data();
//$obj potrebbe essere un oggetto MeprTransaction o un oggetto MeprSubscription
if(!($obj instanceof MeprTransaction) && !($obj instanceof MeprSubscription)) {
return; // niente da fare qui se non stiamo trattando con una transazione o un abbonamento
}
$member = $obj->user(); // ottieni i dati dell'oggetto membro dall'oggetto evento
$user_id = $member->ID; // ottieni l'ID utente dall'oggetto
if($member->is_active_on_membership($obj)) { // abbonamento attivo
if(3780 == $obj->product_id) { // Abbonamento MENSILE
$add_group = 'Ksenia_Basic'; // Nome del Gruppo Discourse
$remove_groups = ['Ksenia_Essential','Ksenia_Premium','Ksenia_Free','Ksenia_Annual'];
// aggiungi al Gruppo Discourse
\\WPDiscourse\\Utilities\\Utilities::add_user_to_discourse_group( $user_id, $add_group );
// rimuovi dai Gruppi Discourse
\\WPDiscourse\\Utilities\\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
}
else if(3847 == $obj->product_id) { // Abbonamento di 6 mesi (Essential)
$add_group = 'Ksenia_Essential'; // Nome del Gruppo Discourse
$remove_groups = ['Ksenia_Basic','Ksenia_Premium','Ksenia_Free','Ksenia_Annual'];
// aggiungi al Gruppo Discourse
\\WPDiscourse\\Utilities\\Utilities::add_user_to_discourse_group( $user_id, $add_group );
// rimuovi dai Gruppi Discourse
\\WPDiscourse\\Utilities\\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
}
}
else { //nessuna corrispondenza
}
}
Riferimento aggiuntivo: L’hook di azione di Memberpress add_action('mepr-event-create', 'listen_to_mepr_events'); può essere trovato qui:
Per tua informazione, questa è una versione semplificata di ciò che sto usando sul sito del mio cliente. La versione completa (che include la gestione di Learndash + Mailster) può essere trovata qui: Memberpress + Learndash + Mailster + WP Discourse · GitHub
Grazie a tutti in questo forum che hanno fornito frammenti e supporto nel corso degli anni. So che ci sono molti lurker come me che trovano questa una risorsa estremamente preziosa e utile.
Se avete suggerimenti o vedete problemi nel mio esempio, fatemi sapere come posso migliorare.