Come mostrare messaggi privati solo agli utenti loggati

Il private posting è quella funzione di WordPress che permette di creare articoli e pagine privati visibili soltanto tra l’autore che li ha creati e l’amministratore. Si trova nel box “Publish” nella sezione “Visibility“.

Tale funzione può essere utile per comunicazioni riservate tra autore ed amministratore, per creare reti di collaborazione private ed altro. I messaggi possono venire visualizzati solo all’interno della “Dashboard” (bacheca) del programma.

Tuttavia è possibile mostrare tutti i post privati a tutti gli utenti loggati, vediamo come fare.

Bisogna specificare che ci sono vari metodi per porre luogo a tale operazione: plugin appositi, campi personalizzati ed altro. Oggi utilizzeremo la funzione “capability” di WordPress.

Come indica la parola stessa, la funzione “capability” denota la capacità operativa che ogni utente ha o che gli viene assegnata. Tale varia da ruolo a ruolo.

Supponiamo di voler permettere agli “Authors” di voler leggere le nostre comunicazioni o i nostri post privati. Ricordiamo che di default gli “Authors” non hanno questo permesso.

[PASSO 1] – Cerchiamo il file functions.php ed apriamolo. La “capability” da aggiungere sarà

read_private_posts

[PASSO 2] –  Dobbiamo creare ora il nostro codice supplementare per potenziare il ruolo: sempre all’interno di functions.php scriviamo queste stringhe:

function fb_add_cap2role() {
    global $wp_roles;
    $wp_roles->add_cap('author', 'read_private_posts');
}
add_action( 'init', 'fb_add_cap2role' );

e salviamo il file. La modifica principale risiede in questa variabile

$wp_roles->add_cap('author', 'read_private_posts');

Salvate il file. Successivamente è anche possibile cancellare questo codice, in quanto tale capacità viene memorizzata nel database MySql.

[PASSO 3] – Possiamo intervenire anche a ritroso sul codice, eliminando i permessi precedentemente creati. Come fare? Basta fare qualche piccola modifica al codice create in precedenza.

function fb_remove_cap2role() {
    global $wp_roles;
    $wp_roles->remove_cap('author', 'read_private_posts');
}
add_action( 'init', 'fb_remove_cap2role' );