Preciso forçar um 404 em algumas postagens com base nas condições. Consegui fazer isso (embora não saiba se fiz da maneira certa) e estou carregando meu 404.php
modelo para carregar conforme o esperado.
Meu 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 desta pergunta relacionada - mesmo 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' );
Meu problema:
Embora pareça bom, recebo um status 200 OK
se verificar a guia de rede. Como é um status 200
, receio que os mecanismos de pesquisa também possam indexar essas páginas.
Comportamento esperado:
Quero que um status 404 Not Found
seja enviado.
200
com isso.Respostas:
Você pode tentar a função Wordpress
status_header()
para adicionar oHTTP/1.1 404 Not Found
cabeçalho;Portanto, seu exemplo do Code 2 seria:
Esta função é usada, por exemplo, nesta parte:
da
wp
classe em/wp-includes/class-wp.php
.Portanto, tente usar este exemplo de código 2 modificado, além do seu
template_include
código.fonte
Code 2
trecho que você postou funciona perfeitamente. Aset_header()
era o que estava faltando.set_header()
adicionar,HTTP/1.1 404 Not Found
mas já usoustatus_header()
em seu código?Este código funcionou para mim:
fonte
global $wp_query;
$wp_query->is_404 = true;
Eu não recomendaria forçar um 404.
Se você está preocupado com os mecanismos de pesquisa, por que não fazer uma meta "sem índice, sem seguir" nessas páginas e bloqueá-la com robots.txt?
Pode ser uma maneira melhor de impedir que o conteúdo seja visualizado
Você provavelmente também pode usar esse método para carregar,
404.php
mas acho que usar um modelo de página pode ser uma opção melhor.fonte
fonte
locate_template()
lugar. Eu acho querobots.txt.
não é uma maneira garantida de se proteger da indexação. Alguns mecanismos de pesquisa ainda podem pegar a página. Eu quero que a página pareça uma página 404 normal. Além disso, as postagens serão adicionadas dinamicamente; a edição dorobots.txt
arquivo causará mais problemas.Minha solução:
fonte
Os códigos de status são enviados nos cabeçalhos das solicitações HTTP. Sua função atual está conectada a um gancho que será chamado tarde demais.
Você deve tentar ligar sua função
rr_404_my_event()
à açãosend_headers
.Não tenho certeza se, nesse momento, é possível verificar o ID da postagem, mas tente:
fonte
404.php
você possa carregar um diferenteheader.php
, por exemplo,<?php get_header('404'); ?>
para carregarheader-404.php
. Nesse cabeçalho, você adicionariaheader('HTTP/1.0 404 Not Found');
na<head>
seção.Eu queria compartilhar a maneira como usei a solução marcada
Fiz isso para separar todos os tipos de usuários do administrador . Neste projeto, apenas o administrador pode ver a
author.php
página.Espero que possa ajudar outra pessoa.
fonte