¿Cómo redirigir usuarios no conectados a una página específica?

30 ene 2014, 22:23:38
Vistas: 151K
Votos: 26

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.

0
Todas las respuestas a la pregunta 4
3
43

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.

http://codex.wordpress.org/Function_Reference/wp_redirect

31 ene 2014 10:03:01
Comentarios

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

user3187719 user3187719
31 ene 2014 11:15:58

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

Brad Dalton Brad Dalton
31 ene 2014 11:22:50

is_page('participate')

Brad Dalton Brad Dalton
31 ene 2014 11:23:28
0
23

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

17 nov 2017 18:00:57
0

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.

13 dic 2014 15:38:46
3

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).

  1. Jerarquía de Plantillas
  2. Etiquetas Condicionales
  3. El Bucle

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:

  1. Header - PHP
  2. wp_login_url
30 ene 2014 23:57:31
Comentarios

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.

user3187719 user3187719
31 ene 2014 06:14:38

¿Puedo hacerlo con $pagenow?

user3187719 user3187719
31 ene 2014 06:53:25

@user3187719 editó mi respuesta original y agregó la solución para redirigir. PD. ¿$pagenow? Estás intentando matar una mosca con un cañón, seguro que funcionará, pero ¿por qué tan complejo? Mantenlo simple. PD2: Aprende PHP y el Codex de WP.

Borek Borek
31 ene 2014 17:17:54