¿Hay alguna manera de mostrar una página 404 si el usuario conectado actualmente no tiene la autorización correcta para ver la página? Estoy buscando un método PHP, algo así como
if( !current_user_can('administrator') ) { show_404(); exit(); }
He pensado en usar una redirección, pero me gustaría mantener la URL igual.
Respuestas:
Pude mostrar un error 404 usando el siguiente código en mi encabezado.
Para desglosarlo::
$wp_query->set_404()
le dice a wp_query que este es un 404, esto cambia el títulostatus_header()
: envía un encabezado HTTP 404get_template_part()
: muestra la plantilla 404fuente
http_status_code(404);
antes de configurar la plantilla para asegurarme de que el encabezado sea correcto (que es significativamente más rápido que lastatus_header( 404 );
función wordpress ). Si le preocupa el rango de la página, también debe poner unaDisallow
regla en su robots.txt para indicar que no es un recurso público.¿Por qué no crea una página que muestra un mensaje de error y luego redirige al usuario a esa página? Aquí hay una manera simple de lograr eso:
Abra el
404.php
archivo y agregue estas líneas en la parte superior:Crea una página con
404 Page
plantilla. Luego redirija a los usuarios: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 una pérdida de recursos. Usar una página preconfigurada que pueda ayudarlo a ejecutar su blog más rápido.
fuente
http_response_code(404); exit();
. Si quieres una página, úsalaget_template_part( 404 );
antes de salir. Eso también es mucho más rápido que cualquier funcionalidad de WordPress.Puede escribir este código en el archivo 404.php en el directorio de temas realmente utilizado (wp-content / themes /..../ 404.php) :
Este código debe comenzar desde el comienzo 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
fuente
Location: xxx
establece un encabezado 301, que le dice a los rastreadores que realmente hay un recurso válido, y mata su clasificación cuando determinan que no lo hay.Tenía un requisito similar en el que no debía permitir que los usuarios accedieran a la página author.php en función del rol en el que se encontraba el usuario. Registro la acción template_redirect para hacer mis comprobaciones y redirigir a la página 404 incluso antes de que se cargue la página real.
Registro:
Manipulador:
Si elige 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 lo redirija a una página 404. Así que mejor hacerlo en la
template_redirect
acción -fuente