Come reindirizzare gli utenti non loggati a una pagina specifica?
Come reindirizzare gli utenti non loggati che richiedono una pagina/URL specifica verso un'altra pagina/URL e mostrare un messaggio del tipo "solo per membri". So che è abbastanza facile da programmare usando la funzione !is_user_logged_in() ma non so come codificarlo perché sono nuovo su WordPress. Potreste dirmi anche in quale file inserire il codice.

Ecco 2 esempi che dovrai modificare leggermente per adattarli alle tue esigenze specifiche.
add_action( 'admin_init', 'redirect_non_logged_users_to_specific_page' );
function redirect_non_logged_users_to_specific_page() {
if ( !is_user_logged_in() && is_page('inserisci qui lo slug o ID della pagina') && $_SERVER['PHP_SELF'] != '/wp-admin/admin-ajax.php' ) {
wp_redirect( 'http://www.example.dev/pagina/' );
exit;
}
}
Inserisci questo nel file functions del tuo child theme, modifica l'ID o lo slug della pagina e l'URL di reindirizzamento.
Potresti anche usare un codice come questo:
add_action( 'template_redirect', 'redirect_to_specific_page' );
function redirect_to_specific_page() {
if ( is_page('slug') && ! is_user_logged_in() ) {
wp_redirect( 'http://www.example.dev/tua-pagina/', 301 );
exit;
}
}
Puoi aggiungere il messaggio direttamente alla pagina o, se vuoi mostrare il messaggio per tutti gli utenti non loggati, aggiungilo al codice.

Grazie per la tua risposta, ho fatto così `add_action('template_redirect', 'redirect_to_specific_page');
function redirect_to_specific_page() {
if ( is_page('http://mydomain.com/participate') && !is_user_logged_in()) {
wp_redirect('http://mydomain.com/login', 301); exit; } }` Ma non funziona

Usa l'ID o lo slug della pagina qui, non l'URL http://mydomain.com/participate http://codex.wordpress.org/Conditional_Tags

Questo sarebbe meglio:
if ( !is_user_logged_in() ) {
auth_redirect();
}
// continua normalmente per gli utenti autenticati
Questo codice reindirizza l'utente alla pagina di login. Una volta effettuato l'accesso, l'utente viene reindirizzato automaticamente alla pagina protetta che stava tentando di raggiungere inizialmente.
Documentazione qui:
https://codex.wordpress.org/Function_Reference/auth_redirect

Non puoi reindirizzare a una pagina specifica, ma ogni utente non loggato verrà reindirizzato alla schermata di accesso.
<?php auth_redirect(); ?>
Riferimento WordPress: auth_redirect()
Solo per menzionare un'altra soluzione.

Consulta il link di riferimento 1 qui sotto. Questo ti indicherà quale file devi modificare.
I riferimenti nei link 2 e 3 qui sotto ti forniranno informazioni sul flusso di controllo.
Nel complesso dovrebbe apparire più o meno così:
if ( is_user_logged_in() ) {
the_content();
} else {
echo 'Solo per membri';
}
Ovviamente il codice sopra deve essere inserito in un loop. Puoi renderlo più complesso o semplice come preferisci. Ad esempio, invece di un semplice testo se non loggato, puoi mostrare un intero modulo di registrazione oppure - come suggerirei - una schermata divisa dove l'utente può accedere (nel caso abbia già un account ma si sia dimenticato di effettuare il login) o registrarsi (se non ne ha uno).
Aggiunto dopo i commenti qui sotto:
Per reindirizzare usa header
con wp_login_url
- ancora una volta, controlla i riferimenti 1 e 2 qui sotto:
if ( is_user_logged_in() ) {
the_content();
} else {
header('Location: ' . wp_login_url());
}
Riferimenti:

In realtà non conosco la funzione su WordPress che restituisce l'URL richiesto o il permalink. Per quanto riguarda il messaggio di visualizzazione, lascia perdere, voglio solo reindirizzarli quando richiedono un certo URL senza essere loggati.

@user3187719 ha modificato la mia risposta originale e aggiunto la soluzione per il reindirizzamento. PS. $pagenow
? Stai cercando di uccidere una mosca con un cannone - sicuramente funzionerà, ma perché complicarsi la vita? Mantienilo semplice. PS2: Impara PHP e il WP Codex.
