Saya perlu memaksa 404 pada beberapa posting berdasarkan kondisi. Saya berhasil melakukannya (walaupun saya tidak tahu apakah saya melakukannya dengan cara yang benar) dan saya mendapatkan 404.php
template saya untuk memuat seperti yang diharapkan.
Kode saya:
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 );
Kode 2 dari pertanyaan terkait ini - masalah yang sama:
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' );
Masalah saya:
Meskipun terlihat bagus, saya mendapatkan status 200 OK
jika saya memeriksa tab jaringan. Karena ini adalah status 200
, saya khawatir mesin pencari akan mengindeks halaman-halaman itu juga.
Perilaku yang Diharapkan:
Saya ingin status 404 Not Found
dikirim.
200
dengan itu.Jawaban:
Anda bisa mencoba fungsi Wordpress
status_header()
untuk menambahkanHTTP/1.1 404 Not Found
header;Jadi contoh Kode 2 Anda adalah:
Fungsi ini misalnya digunakan di bagian ini:
dari
wp
kelas di/wp-includes/class-wp.php
.Jadi coba gunakan contoh Kode 2 yang dimodifikasi ini selain
template_include
kode Anda .sumber
Code 2
potongan Anda diposting bekerja sempurna. Ituset_header()
yang hilang.set_header()
ditambahkanHTTP/1.1 404 Not Found
tetapi telah digunakanstatus_header()
dalam kode Anda?Kode ini berfungsi untuk saya:
sumber
global $wp_query;
$wp_query->is_404 = true;
Saya tidak akan merekomendasikan memaksa 404.
Jika Anda khawatir tentang mesin pencari, mengapa tidak melakukan meta "no-index, no-follow" di halaman-halaman itu dan memblokirnya dengan robots.txt?
Ini mungkin cara yang lebih baik untuk memblokir konten agar tidak dilihat
Anda mungkin juga dapat menggunakan metode ini untuk memuat
404.php
tetapi saya merasa bahwa menggunakan templat halaman mungkin merupakan opsi yang lebih baik.sumber
sumber
locate_template()
. Saya pikir iturobots.txt.
bukan cara yang dijamin untuk melindungi dari indeksasi. Beberapa mesin pencari mungkin masih mengambil halaman. Saya ingin halaman terlihat seperti halaman 404 normal. Juga posting akan ditambahkan secara dinamis, mengeditrobots.txt
file akan menambah lebih banyak masalah.Solusi saya:
sumber
Kode status dikirim di tajuk permintaan HTTP. Fungsi Anda saat ini terhubung ke hook yang akan dipanggil terlambat.
Anda harus mencoba menghubungkan fungsi Anda
rr_404_my_event()
menjadi tindakansend_headers
.Saya tidak yakin apakah pada saat itu bahkan mungkin untuk memeriksa ID Posting, tetapi coba ini:
sumber
404.php
Anda dapat memuat yang berbedaheader.php
, misalnya<?php get_header('404'); ?>
untuk memuatheader-404.php
. Di tajuk itu, Anda akan menambahkanheader('HTTP/1.0 404 Not Found');
di<head>
bagian.Saya ingin membagikan cara saya menggunakan solusi yang ditandai
Saya melakukan ini untuk memisahkan semua jenis pengguna dari administrator , dalam proyek ini, Hanya admin yang dapat melihat
author.php
halaman.Saya harap ini bisa membantu orang lain.
sumber