Redirigir la página restringida a 404

19

¿Hay alguna forma de mostrar una página 404 si el usuario que ha iniciado sesión actualmente no tiene la autorización adecuada para ver la página? Estoy buscando un método PHP, algo como

if( !current_user_can('administrator') ) { show_404(); exit(); }

He pensado en usar una redirección, pero me gustaría mantener la url igual.

    
pregunta Evan Yeung 04.08.2011 - 08:01

4 respuestas

47

Pude mostrar un error 404 al usar el siguiente código en mi encabezado.

<?php
  global $wp_query;
  $wp_query->set_404();
  status_header( 404 );
  get_template_part( 404 ); exit();
?>

Para descomponerlo:
$wp_query->set_404() : le dice a wp_query que esto es un 404, esto cambia el título
status_header() : envía un encabezado HTTP 404 y get_template_part() : muestra la plantilla 404

    
respondido por el Evan Yeung 28.08.2011 - 16:40
2

¿Por qué no creas una página que muestra un mensaje de error y luego redirecciona al usuario a esa página? Aquí hay una forma sencilla de lograrlo:

Abra el archivo 404.php y agregue estas líneas en la parte superior:

/**
 * Template Name: 404 Page
 */

Crea una página con la plantilla 404 Page . Luego redirigir a los usuarios:

if ( !current_user_can('administrator') ) {
    $404_page = get_permalink( $404_page_id );
    wp_redirect( $404_page );
    exit();
}

La razón por la que debe usar una página para la solicitud 404 es: en la página WP 404 en realidad es una página que no existe , WP tiene que buscar todo su contenido antes de devolver la página 404 y ese trabajo es un desperdicio de recursos. Usar una página preconfigurada que podría ayudarte a ejecutar tu blog más rápido.

    
respondido por el Anh Tran 04.08.2011 - 08:39
0

Puede escribir este código en el archivo 404.php en el directorio de tema realmente usado (wp-content / themes /..../ 404.php) :

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: ".get_bloginfo('url'));
exit();
?>

Este código debe comenzar desde el principio del archivo (sin ningún carácter antes) .

Enlace al original: Cómo redirigir su página 404 a la página de inicio en WordPress

    
respondido por el Jan Čejka 05.06.2017 - 16:39
0

Tenía un requisito similar en el que no debería permitir a los usuarios acceder a la página author.php en función del rol en el que estaba el usuario. Registro la acción template_redirect para realizar mis comprobaciones y redirigir a la página 404 incluso antes de que se cargue la página real .

Registro:

add_action( 'template_redirect', [ $this, 'handle_inactive_users']);

Controlador:

public function handle_inactive_users() {
    global $wp_query;
    if ( $wp_query->is_author() ) {
        $user = $wp_query->get_queried_object();
        if ( is_a( $user, \WP_User::class ) && $user->has_cap( 'inactive' ) ) {
            $wp_query->set_404();
            status_header( 404 );
            get_template_part( 404 );
            exit();
        }
    }
}

Si eligió usar solo el siguiente fragmento de código en el medio de la parte de la plantilla, es posible que la página ya se haya procesado parcialmente y que en realidad no se haya redirigido a una página 404. Así que mejor hacerlo en la acción template_redirect -

$wp_query->set_404();
status_header( 404 );
get_template_part( 404 );
exit();
    
respondido por el Kalyan 26.09.2017 - 18:52

Lea otras preguntas en las etiquetas