Necesito forzar un 404 en algunas publicaciones según las condiciones. Logré hacerlo (aunque no sé si lo hice de la manera correcta) y estoy haciendo que mi 404.php
plantilla se cargue como se esperaba.
Mi código:
function rr_404_my_event() {
global $post;
if ( is_singular( 'event' ) && !rr_event_should_be_available( $post->ID ) ) {
include( get_query_template( '404' ) );
exit; # so that the normal page isn't loaded after the 404 page
}
}
add_action( 'template_redirect', 'rr_404_my_event', 1 );
Código 2 de esta pregunta relacionada - mismo problema:
function rr_404_my_event() {
global $post;
if ( is_singular( 'event' ) && !rr_event_should_be_available( $post->ID ) ) {
global $wp_query;
$wp_query->set_404();
}
}
add_action( 'wp', 'rr_404_my_event' );
Mi problema:
Aunque se ve bien, obtengo un estado 200 OK
si reviso la pestaña de red. Como es un estado 200
, me temo que los motores de búsqueda también pueden indexar esas páginas.
Comportamiento esperado:
Quiero 404 Not Found
que se envíe un estado .
200
con eso.Respuestas:
Puede probar la función Wordpress
status_header()
para agregar elHTTP/1.1 404 Not Found
encabezado;Entonces su ejemplo de Código 2 sería:
Esta función se usa, por ejemplo, en esta parte:
de la
wp
clase en/wp-includes/class-wp.php
.Intente usar este ejemplo modificado del Código 2 además de su
template_include
código.fuente
Code 2
fragmento que publicaste funciona perfectamente. Elset_header()
era lo que faltaba.set_header()
agregarHTTP/1.1 404 Not Found
pero has usadostatus_header()
en tu códigoEste código funcionó para mí:
fuente
global $wp_query;
$wp_query->is_404 = true;
No recomendaría forzar un 404.
Si le preocupan los motores de búsqueda, ¿por qué no simplemente hacer un meta "sin índice, sin seguimiento" en esas páginas y bloquearlo con robots.txt?
Esta puede ser una mejor manera de bloquear la visualización del contenido.
Probablemente también podría usar este método para cargar,
404.php
pero creo que usar una plantilla de página podría ser una mejor opción.fuente
fuente
locate_template()
. Creo que esarobots.txt.
no es una forma garantizada de protegerse de la indexación. Algunos motores de búsqueda aún pueden recoger la página. Quiero que la página se vea como una página 404 normal. Además, las publicaciones se agregarán dinámicamente, editar elrobots.txt
archivo agregará más problemas.Mi solución:
fuente
Los códigos de estado se envían en los encabezados de las solicitudes HTTP. Su función actual está enganchada en un gancho que se llamará demasiado tarde.
Debes intentar conectar tu función
rr_404_my_event()
a la acciónsend_headers
.No estoy seguro de si en ese momento es posible verificar la ID de la publicación, pero inténtelo:
fuente
404.php
podría cargar una diferenteheader.php
, por ejemplo,<?php get_header('404'); ?>
para cargarheader-404.php
. En ese encabezado, agregaríaheader('HTTP/1.0 404 Not Found');
en la<head>
sección.Quería compartir la forma en que usé la solución marcada
Hice esto para separar todos los tipos de usuarios del administrador , en este proyecto, solo el administrador puede ver la
author.php
página.Espero que pueda ayudar a alguien más.
fuente