Apakah ada kait yang mengubah logika 404?

27

Asalkan Anda memiliki halaman 404 yang ditentukan dalam tema Anda, Wordpress akan menampilkan halaman 404 jika "tag" didefinisikan dalam $ wp_query-> query_vars, dan tidak ada tulisan yang cocok dengan tag itu.

Saya sedang menulis plugin yang menampilkan beberapa informasi di setiap halaman, di samping posting. Saya ingin mengubah logika 404 sehingga halaman 404 ditampilkan jika tidak ada posting yang cocok dengan tag dan plugin tidak dapat menarik data apa pun yang cocok dengan tag itu. Jika plugin dapat menemukan data, saya ingin menampilkan halaman normal, terlepas dari apakah ada posting di halaman itu atau tidak ...

Saya sudah Googling, membaca kode, membaca codex, dan mencari-cari di sini, dan belum bisa menemukan di mana Wordpress memicu 404 itu, dan bagaimana saya bisa menimpanya. (Saya punya perasaan itu mungkin ada hubungannya dengan status_header () di functions.php, tapi tidak jelas bagaimana dan kapan saya harus menghubungkannya).

Setiap bantuan / ide / pencerahan dihargai.

Terima kasih,

~ Tempel

Tambalan
sumber

Jawaban:

29

Setelah lebih sedikit slogging melalui kode dan Googling, saya menemukan jawabannya. Itu terkandung dalam utas ini (lihat posting Otto42), tetapi sebagai catatan, menambahkan berikut ini ke plugin Anda akan menimpa penanganan 404 untuk kondisi yang Anda tentukan:

add_filter('template_redirect', 'my_404_override' );
function my_404_override() {
    global $wp_query;

    if (<some condition is met>) {
        status_header( 200 );
        $wp_query->is_404=false;
    }
}

Perhatikan bahwa Anda perlu mengatur "is_404" menjadi false sebelum header keluaran PHP, itulah sebabnya mengaitkannya dalam logika template_redirect adalah ide yang bagus.

~ Tempel

Tambalan
sumber
5

Saya perlu melakukan hal yang sama untuk proyek kustom di mana selalu ada 200 halaman, dan menemukan Anda juga bisa menambahkan ini ke bagian atas file template Anda (di atas get_header ();)

global $wp_query;
status_header( 200 );
$wp_query->is_404=false;
noinput
sumber
1
Besar! Ini berhasil untuk saya. Saya membuat skrip saya dan menghasilkan 404. Saya mencoba skrip runnig dari wp-> main tetapi itu bukan solusi yang bersih. Ini bekerja untuk saya:// configuration require('./wp-load.php'); // init WP (inits objects, language and stuff). wp(); // fix title (this is not 404) $wp_query->is_404 = false; // doesn't fix the actual 404 status status_header( 200 ); // but this does :-)
Nux
1

Buat 404.phpfile template dalam tema Anda dan sesuaikan sesuai kebutuhan (menambahkan output plugin Anda atau apa pun). Anda menyebutkan didefinisikan dalam tema Anda , apa sebenarnya yang salah dengan pendekatan ini untuk Anda?

Codex Membuat Halaman Kesalahan 404

Jarang
sumber
Apa yang saya cari adalah cara untuk mengubah keadaan di mana halaman 404 dipicu. Saat ini, jika Wordpress tidak dapat menemukan posting yang cocok dengan tag di vars permintaan, halaman 404 muncul. Saya ingin memasukkan beberapa kode tambahan yang memastikan halaman 404 hanya muncul jika Wordpress tidak dapat menemukan posting dan plugin saya tidak dapat menemukan informasi tambahan untuk ditampilkan.
Tambal
Tujuan 404 adalah agar pengunjung tahu bahwa tautannya salah dan bagi Anda untuk mencatat dan memperbaikinya (jika perlu). Anda tidak ingin memberi tahu pengunjung bahwa dia menggunakan tautan rusak atau menyadarinya sendiri. Menampilkan informasi tentang 404 berfungsi dengan baik, membajak itu bukan keharusan, jadi mengapa repot-repot? Hanya mencoba memahami logika dan / atau teknis Anda.
Jarang
1
Apa yang saya cari adalah cara untuk mengubah definisi halaman apa yang "salah". Situs yang saya bangun memiliki komponen blog, tetapi tidak semua situs itu. Saya menggunakan tag Wordpress baik untuk menampilkan posting Wordpress, dan menarik konten tambahan melalui plugin. Saya ingin mengembalikan kode status 200 jika a) ada posting atau b) plugin saya dapat menemukan hal-hal untuk ditampilkan yang cocok dengan tag. Maka dari itu perlu di rewire logika. Bagaimanapun juga, terima kasih telah meluangkan waktu untuk menulis jawaban - maaf bahwa masalah saya cukup aneh untuk memerlukan jawaban yang lebih terlibat :-)
Patch