¿Cómo redirigir a los usuarios que no han iniciado sesión a una página específica?

16

Cómo redirigir a los usuarios no registrados 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 codificar usando la función! Is_user_logged_in () pero no sé cómo codificarlo porque soy un novato en WordPress. Cuidado de decirme el archivo para poner el código también.

usuario3187719
fuente

Respuestas:

30

Aquí hay 2 ejemplos que deberá modificar ligeramente para que funcione según sus 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('add page slug or ID here') && $_SERVER['PHP_SELF'] != '/wp-admin/admin-ajax.php' ) {

wp_redirect( 'http://www.example.dev/page/' ); 
    exit;
   }
}

Ponga esto en el archivo de funciones de su tema secundario, cambie la ID de la página o la barra y la URL de redireccionamiento.

También podría 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/your-page/', 301 ); 
  exit;
    }
}

Puede agregar el mensaje directamente a la página o, si desea mostrar el mensaje a todos los usuarios no registrados, agréguelo al código .

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

Brad Dalton
fuente
Gracias por su respuesta. Me gustó esto, 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 funciona
User3187719
Use la identificación de la página o la ficha aquí, no la url mydomain.com/participate codex.wordpress.org/Conditional_Tags
Brad Dalton
is_page ('participa')
Brad Dalton
9

Esto sería mejor:

if ( !is_user_logged_in() ) {
    auth_redirect();
} 

// continue as normal for authenticated users

Lo que esto hace es redirigir al usuario a la página de inicio de sesión. Una vez que ha iniciado sesión, el usuario es redirigido a la página segura a la que intentaban acceder inicialmente.

Documentación aquí:

https://codex.wordpress.org/Function_Reference/auth_redirect

Yahya Uddin
fuente
4

¿Cómo podemos decirle dónde colocarlo si no nos dijo qué y dónde desea mostrarlo? Publicaciones completas? Páginas? ¿Partes personalizadas de páginas? Lo siento ... supongo que mi bola de cristal no está funcionando bien hoy.

Como eres, y te cito: "un novato en wordpress", deberías aprender, en lugar de pedir una respuesta directa.

En cuanto a dónde debe leer el enlace de referencia 1. Esto le dirá en qué archivo necesita colocarlo.

En cuanto a cómo hacerlo, primero debe leer el enlace de referencia 2 y 3.

En general, debería verse así:

if ( is_user_logged_in() ) {
    the_content();
} else {
    echo 'For members only';
}

Por supuesto, el código anterior debe entrar en un bucle . Puedes construirlo tan complejo o tan simple como quieras. Por ejemplo, en lugar de texto simple si no está conectado, puede mostrar un formulario de registro completo, por ejemplo, o, como sugeriría, una pantalla dividida donde el usuario puede iniciar sesión (ya que el usuario puede tener una cuenta pero olvidó iniciar sesión) o registrarse (si no tiene uno)

  1. Jerarquía de plantilla
  2. Etiquetas condicionales
  3. El lazo

Agregado después de los comentarios a continuación:

Para redirigir el uso headercon wp_login_url- nuevamente, verifique las referencias 1 y 2 a continuación:

if ( is_user_logged_in() ) {
    the_content();
} else {
    header('Location: ' . wp_login_url());
}

Referencia:

  1. Encabezado - PHP
  2. wp_login_url
Borek
fuente
En realidad, no sé la función en WordPress que devuelve la URL solicitada o el enlace permanente. Y sobre el mensaje de pantalla, déjelo, solo quiero redirigirlos cuando soliciten cierta URL sin haber iniciado sesión.
user3187719
¿Puedo hacerlo con $ pagenow?
user3187719
@ user3187719 editó mi respuesta original y agregó la solución para redirigir. PD. $pagenow? Estás tratando de matar una mosca con un cañón seguro de que funcionará, pero ¿por qué tan complejo? Mantenlo simple. PS2: Aprende PHP y WP Codex.
Borek
4

No puede redirigir a una página específica, pero todos los usuarios que no hayan iniciado sesión serán redirigidos a la pantalla de inicio de sesión.

<?php auth_redirect(); ?>

Referencia de Wordpress: auth_redirect()

Solo por mencionar otra solución.

MCG
fuente