Skip to content

Tutto per WordPress, lo sviluppo web — e non solo

📝 WP-Recall: configurazione della pubblicazione di post privati da parte degli utenti

📝 WP-Recall: configurazione della pubblicazione di post privati da parte degli utenti

Gli utenti hanno compilato un modulo nel proprio account personale, cliccato «Invia» e la richiesta è finita nel feed pubblico del sito. Insieme a numero di telefono, indirizzo e dati del passaporto.

Questo accade quando un custom post type è configurato come pubblico. WordPress per impostazione predefinita mostra tutto ciò che viene creato con 'public' => true, che sia stato pubblicato da un amministratore o da un visitatore tramite un modulo frontend in WP-Recall.

Ecco una guida passo passo: creeremo un custom post type, gli assegneremo lo stato privato al momento della pubblicazione e configureremo un redirect all'account utente. Senza plugin all-in-one costosi: WP-Recall, MB Custom Post Type e tre funzioni in functions.php.

💡 Panoramica rapida:

  • Installa WP-Recall e MB Custom Post Type, due plugin gratuiti dal catalogo WordPress.org.
  • Crea un custom post type tramite l'interfaccia di MB Custom Post Type, senza scrivere una riga di codice.
  • Aggiungi tre funzioni a functions.php: registrazione CPT con codice (opzionale), redirect dopo la pubblicazione e transizione automatica allo stato private.
  • Verifica: l'utente pubblica una richiesta dal proprio account personale, è visibile solo ad amministratori ed editor.

Step 1: installa WP-Recall e MB Custom Post Type

Ti servono due plugin. Entrambi sono gratuiti e disponibili nel catalogo ufficiale di WordPress.org.

WP-Recall crea un account personale utente: registrazione, profilo, messaggi privati e, cosa importante per il nostro obiettivo, la pubblicazione di articoli dal frontend. L'utente accede al proprio account, compila il modulo e invia la richiesta. Niente pannello di amministrazione, tutto avviene sulle pagine del sito.

MB Custom Post Types & Custom Taxonomies, un'estensione del plugin Meta Box. Fornisce un'interfaccia visiva per creare custom post type e tassonomie. Al momento in cui scrivo, il plugin ha oltre 10.000 installazioni attive e una valutazione di 4,7 su WordPress.org. È aggiornato regolarmente, l'ultima versione è stata rilasciata a giugno 2026.

Entrambi i plugin si installano nel modo standard: Plugin → Aggiungi nuovo, cerca per nome, «Installa» → «Attiva».

Step 2: crea un custom post type tramite l'interfaccia di MB Custom Post Type

Dopo aver attivato il plugin, nel pannello di amministrazione compare il menu Meta Box → Tipi di contenuto. Clicca «Aggiungi nuovo» e compila i campi:

Interfaccia di creazione di un custom post type nel plugin MB Custom Post Types

Impostazioni principali da configurare subito:

  • ID tipo di contenuto, nome di sistema in latino, ad esempio claim o user_request. Questo slug apparirà negli URL e nel codice.
  • Etichette, il plugin compilerà automaticamente le etichette in italiano se inserisci il nome in italiano nel campo Nome singolare. Modifica manualmente ciò che non ti soddisfa.
  • Supporti, seleziona title, editor e custom-fields. Miniatura e commenti di solito non servono per le richieste.
  • Escludi dalla ricerca, attiva. Gli articoli degli utenti non devono essere indicizzati.
  • Pubblico, true (il modulo di WP-Recall deve poter vedere il post type). Gestiremo la privacy con il codice nello step 4.

Clicca «Salva», il custom post type è registrato. Lo stesso risultato si può ottenere con il codice (un'alternativa per chi preferisce functions.php):

1function sdstudio_register_private_cpt() {
2 $args = array(
3 'label' => 'Applications',
4 'public' => true,
5 'exclude_from_search' => true,
6 'publicly_queryable' => true,
7 'show_ui' => true,
8 'show_in_rest' => false,
9 'menu_icon' => 'dashicons-lock',
10 'capability_type' => 'post',
11 'hierarchical' => false,
12 'has_archive' => false,
13 'supports' => array( 'title', 'editor', 'author', 'custom-fields' ),
14 'rewrite' => array( 'slug' => 'claims' ),
15 );
16
17 register_post_type( 'user_claim', $args );
18}
19add_action( 'init', 'sdstudio_register_private_cpt' );

Aggiungi questo codice al functions.php del tema child o tramite il plugin Code Snippets. Dopo aver salvato, vai al pannello di amministrazione, nella barra laterale comparirà una sezione «Richieste».

Step 3: configura il redirect dopo la pubblicazione

Per impostazione predefinita, WP-Recall mostra all'utente l'articolo stesso dopo l'invio. Per le richieste questo non ha senso, la persona ha bisogno del proprio account personale, non di una pagina con il modulo che ha appena inviato.

La funzione qui sotto intercetta l'hook update_post_rcl (evento di WP-Recall dopo la pubblicazione) e reindirizza l'utente alla propria sezione delle richieste:

1/**
2 * Redirect to personal account after publishing a post via WP-Recall.
3 * Add to functions.php of the child theme.
4 */
5function sdstudio_redirect_after_rcl_publish() {
6 $user_id = get_current_user_id();
7 wp_redirect( '/account/?user=' . $user_id . '&tab=publics' );
8 exit;
9}
10add_action( 'update_post_rcl', 'sdstudio_redirect_after_rcl_publish' );

Qui get_current_user_id() è chiamato all'interno della funzione, a differenza del pattern comune con una variabile esterna, questo è affidabile indipendentemente dall'ordine di caricamento dei file. Sostituisci il percorso /account/ con l'URL del tuo account personale nella tua installazione di WP-Recall.

Verifica: accedi come utente di test, pubblica un articolo dall'account, il browser dovrebbe tornare alla pagina con l'elenco delle richieste.

Step 4: rendi l'articolo privato automaticamente

Questo è il passaggio chiave. Anche se il custom post type è nascosto dalla ricerca, l'articolo stesso con post_status = 'publish' è accessibile tramite link diretto. E ci sono abbastanza modi per trovare questo link: dai feed RSS all'API REST wp-json.

L'hook transition_post_status si attiva a ogni cambio di stato di un articolo. Catturiamo il momento in cui lo stato passa a publish e lo impostiamo forzatamente a private:

1/**
2 * Automatically makes a post private upon publication.
3 * Checks that it is our custom post type — user_claim.
4 * Source: https://stackoverflow.com/questions/54508808/
5 */
6function sdstudio_force_private_status( $new_status, $old_status, $post ) {
7 if ( 'user_claim' === $post->post_type
8 && 'publish' === $new_status
9 && $old_status !== $new_status ) {
10 $post->post_status = 'private';
11 wp_update_post( $post );
12 }
13}
14add_action( 'transition_post_status', 'sdstudio_force_private_status', 10, 3 );
Impostazioni del custom post type per candidature private degli utenti

Cosa succede qui riga per riga:

  • transition_post_status, un hook di WordPress che viene chiamato a ogni transizione di un articolo da uno stato a un altro.
  • La prima condizione controlla post_type per evitare di influenzare articoli e pagine normali.
  • La seconda condizione cattura il momento della pubblicazione (publish), non della rimozione.
  • La terza condizione ($old_status !== $new_status) previene attivazioni ripetute quando wp_update_post stesso chiama questo stesso hook.

Assicurati di sostituire 'user_claim' con l'ID del tuo custom post type. Se non sei sicuro dell'ID, controllalo nella barra degli indirizzi quando modifichi il post type in Meta Box → Tipi di contenuto.

Il video qui sopra è una guida dettagliata alla creazione di custom post type in WordPress: dalla teoria al codice funzionante sullo schermo. Se preferisci un formato visivo, l'autore mostra ogni passaggio con la spiegazione degli argomenti di register_post_type().

⁉️🤔 Domande frequenti

Perché usare lo stato privato se l'articolo è escluso dalla ricerca?

L'esclusione dalla ricerca (exclude_from_search) rimuove l'articolo solo dai risultati di WP_Query sul frontend. URL diretti, API REST e feed RSS continuano a servire il contenuto. Lo stato private chiude l'accesso a livello di core di WordPress, l'articolo è visibile solo agli utenti con la capacità read_private_posts (amministratori ed editor).

L'utente può cambiare lo stato dell'articolo dopo la pubblicazione?

Tramite l'interfaccia standard di WP-Recall, no. Il modulo frontend non fornisce accesso alla selezione dello stato. Ma se l'utente ottiene in qualche modo accesso al pannello di amministrazione (ruolo Autore e superiori), può modificare i propri articoli. Quindi per i siti che accettano richieste, non assegnare agli utenti un ruolo superiore a Sottoscrittore.

Cosa fare se WP-Recall non vede il mio custom post type?

Controlla due parametri nelle impostazioni del post type: public deve essere true, e show_ui, true. Poi vai nelle impostazioni di WP-Recall → «Pubblicazione» e assicurati che il tuo post type sia selezionato nell'elenco dei tipi consentiti. Dopo aver modificato le impostazioni, svuota la cache dei permalink: Impostazioni → Permalink → Salva modifiche.

È obbligatorio usare proprio MB Custom Post Type?

No. Qualsiasi metodo di registrazione di un custom post type funziona: codice in functions.php (come nello step 2), il plugin Custom Post Type UI o ACF. MB Custom Post Type è stato scelto per la combinazione di interfaccia visiva e costo zero. Se stai già usando ACF Pro, crea i post type al suo interno, la logica non cambia.

Il codice funziona, ma i vecchi articoli sono rimasti pubblici, come nasconderli?

La funzione dello step 4 si attiva solo sull'evento di pubblicazione. Gli articoli esistenti devono essere elaborati separatamente. Il modo più sicuro è andare nel pannello di amministrazione, selezionare tutti gli articoli del tipo desiderato e tramite Modifica rapida cambiare lo stato in Privato. Per centinaia di articoli, usa WP-CLI: wp post list --post_type=user_claim --format=ids | xargs -I {} wp post update {} --post_status=private. Prima dell'aggiornamento massivo, fai un backup del database.

Questo approccio funziona su decine di siti: gli utenti inviano richieste tramite il proprio account personale e gli amministratori le vedono nel pannello di amministrazione. Per la tipica configurazione «WP-Recall + articoli privati», non serve altro.

Se intendi accettare dati di pagamento o scansioni di passaporti tramite il custom post type, configura anche SSL e la crittografia dei campi. Ma questo è un argomento per un articolo a parte.

Cosa abbiamo ottenuto: checklist per il lancio

  • WP-Recall e MB Custom Post Type sono installati e attivati.
  • Il custom post type è creato, tramite l'interfaccia del plugin o con il codice.
  • Nelle impostazioni di WP-Recall → «Pubblicazione», il post type desiderato è selezionato.
  • La funzione di redirect dello step 3 è aggiunta a functions.php.
  • La funzione per lo stato privato dello step 4 è aggiunta, post_type è sostituito con il tuo.
  • I permalink sono stati svuotati: Impostazioni → Permalink → Salva modifiche.
  • Un utente di test ha inviato una richiesta dal proprio account personale, il redirect funziona, l'articolo è privato.

Un singolo test di invio richiesta fa risparmiare un'ora di debug del «perché non funziona» in produzione. Non saltare questo passaggio.

Inizia installando MB Custom Post Type, il builder visivo ti eviterà la seccatura degli argomenti di register_post_type(). E se stai già usando un altro builder di post type (ACF, CPT UI), prendi semplicemente le funzioni degli step 3 e 4: redirect e stato privato funzionano indipendentemente dal metodo di registrazione del CPT.

E tu che metodo usi per accettare richieste dagli utenti sui tuoi siti WordPress? Condividi nei commenti, è interessante confrontare gli approcci.