¿Cómo redirigir usuarios no conectados a una página específica?
Cómo redirigir usuarios no conectados que solicitan una página/URL específica a otra página/URL y mostrar un mensaje como "solo para miembros". Sé que es bastante fácil de programar usando la función !is_user_logged_in() pero no sé cómo codificarlo porque soy nuevo en WordPress. Me gustaría saber también en qué archivo colocar el código.

Aquí hay 2 ejemplos que necesitarás modificar ligeramente para que funcionen según tus necesidades específicas.
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('agrega el slug o ID de la página aquí') && $_SERVER['PHP_SELF'] != '/wp-admin/admin-ajax.php' ) {
wp_redirect( 'http://www.example.dev/pagina/' );
exit;
}
}
Coloca esto en el archivo functions.php de tu tema hijo, cambia el ID o slug de la página y la URL de redirección.
También podrías usar un código como este:
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/tu-pagina/', 301 );
exit;
}
}
Puedes agregar el mensaje directamente a la página o si deseas mostrar el mensaje para todos los usuarios no conectados, agrégalo al código.

Gracias por tu respuesta, lo hice así `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; } }` Pero no está funcionando

Usa el ID o el slug de la página aquí, no la URL http://mydomain.com/participate http://codex.wordpress.org/Conditional_Tags

Esto sería mejor:
if ( !is_user_logged_in() ) {
auth_redirect();
}
// continuar normalmente para usuarios autenticados
Lo que hace esto es redirigir al usuario a la página de inicio de sesión. Una vez que el usuario ha iniciado sesión, se le redirige de vuelta a la página segura a la que intentaba acceder inicialmente.
Documentación aquí:
https://codex.wordpress.org/Function_Reference/auth_redirect

No puedes redirigir a una página específica, pero cada usuario no autenticado será redirigido a la pantalla de Inicio de Sesión.
<?php auth_redirect(); ?>
Referencia de WordPress: auth_redirect()
Solo para mencionar otra solución.

Consulta el enlace de referencia 1 a continuación. Esto te indicará qué archivo necesitas editar.
Las referencias en los enlaces 2 y 3 proporcionan información sobre el flujo de control.
En general, debería verse algo así:
if ( is_user_logged_in() ) {
the_content();
} else {
echo 'Solo para miembros';
}
Por supuesto, el código anterior debe ir dentro de un bucle. Puedes construirlo tan complejo o simple como desees. Por ejemplo, en lugar de mostrar un texto simple si no está logueado, puedes mostrar un formulario de registro completo o - como sugeriría - una pantalla dividida donde el usuario pueda iniciar sesión (en caso de que tenga una cuenta pero haya olvidado hacer login) o registrarse (si no tiene una).
Agregado después de los comentarios a continuación:
Para redireccionar usa header
con wp_login_url
- de nuevo, revisa las referencias 1 y 2 a continuación:
if ( is_user_logged_in() ) {
the_content();
} else {
header('Location: ' . wp_login_url());
}
Referencia:

Actualmente no conozco la función en WordPress que devuelve la URL solicitada o el enlace permanente. Y sobre el mensaje de visualización, déjalo, solo quiero redirigirlos cuando soliciten cierta URL sin haber iniciado sesión.
