404 mantığını değiştiren herhangi bir kanca var mı?


27

Temanızda tanımlanmış bir 404 sayfanız varsa, $ wp_query-> query_vars içinde "etiket" tanımlanmışsa ve bu etiketle eşleşen yayın yoksa Wordpress bir 404 sayfa görüntüler.

Mesajların yanı sıra her sayfada bazı bilgileri gösteren bir eklenti yazıyorum. 404 mantığını değiştirmek istiyorum, böylece bir etiketle eşleşen mesaj yoksa ve eklenti bu etiketle eşleşen veri alamazsa, 404 sayfasının görüntülenmesi sağlanır . Eklenti veri bulabilirse, o sayfada yayın olup olmamasına bakılmaksızın normal bir sayfa göstermek istiyorum.

Googling'im, kod okudum, kodeksi okudum ve burada dolaşıyorum ve Wordpress'in bu 404'ü nerede tetiklediğini ve onu nasıl geçersiz kılabileceğimi çözemedim. (İşlev.php'deki status_header () ile ilgisi olabileceğini hissediyorum, ancak ne zaman ve nasıl bağlanmam gerektiği belli değil).

Herhangi bir yardım / fikir / aydınlanma takdir.

Teşekkür ederim,

~ Yama

Yanıtlar:


29

Biraz daha kod ve Googling'i okuduktan sonra cevabı buldum. Bu içerdiği oluyor bu iş parçacığı (Otto42 adlı kullanıcının yayınını bakınız), ancak kayıt için Eklentinizde için aşağıdakileri ekleyerek belirttiğiniz koşulları için 404 işlenmesini geçersiz kılar:

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;
    }
}

PHP'nin başlıklar vermeden önce "is_404" değerini false olarak ayarlamanız gerektiğini unutmayın, bu yüzden template_redirect mantığına takmak iyi bir fikirdir.

~ Yama


5

Her zaman 200 sayfalık özel bir proje için aynı şeyi yapmam gerekiyordu ve bunu şablon dosyanızın en üstüne de ekleyebileceğinizi buldum (yukarıda get_header ();)

global $wp_query;
status_header( 200 );
$wp_query->is_404=false;

1
Harika! Bu benim için çalıştı. Senaryomu yazıyordum ve 404'ü üretiyordu. Wp-> main'den runnig scriptleri denedim ama bu ver temiz bir çözüm değildi. Bu benim için çalıştı:// 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

yaratmak 404.php şablon dosyası ve gerektiği gibi özelleştirin (eklenti çıktınızı ya da her neyse ekleyin). Temanızda tanımlanmış olandan bahsediyorsunuz , bu yaklaşımda tam olarak yanlış olan nedir?

Kodeks Hata 404 Sayfası Oluşturma


Aradığım şey, bu 404 sayfanın hangi koşullarda tetiklendiğini değiştirmenin bir yolu. Şu anda, Wordpress vars sorgusunda bir etiketle eşleşen hiçbir gönderi bulamıyorsa, 404 sayfası görünür. 404 sayfasının yalnızca Wordpress herhangi bir yazı bulamıyorsa ve eklentim görüntülenecek ek bilgiler bulamıyorsa görünmesini sağlayan bazı ek kodları bırakmak istiyorum .
Yama

404'ün amacı, ziyaretçinin bağlantının yanlış olduğunu bilmesi ve giriş yapıp düzeltmeniz (gerekirse). Ne ziyaretçiye, kopuk bağlantı kullandığını ya da kendisinin farkında olduğunu söylemek istemezsin. 404 hakkında bilgi göstermek gayet iyi, kaçırmak şart değil, öyleyse neden rahatsız ediyorsun? Sadece mantığınızı ve / veya tekniklerinizi kavramaya çalışıyorum.
Rarst

1
Aradığım şey, hangi sayfaların "yanlış" olduğunun tanımını değiştirmenin bir yoluydu. Oluşturduğum sitenin bir blog bileşeni var, ancak tüm site bu değil. Wordpress yazılarını görüntülemek için Wordpress etiketlerini kullanıyorum ve eklenti aracılığıyla ek içerikler alıyorum. A) yazılar varsa veya b) 200 durum kodunu döndürmek istiyorum, eklentim etiketle eşleşen öğeleri bulabilir. Böylece mantığı yeniden canlandırmaya ihtiyaç duyulur. Ne olursa olsun, cevap yazmak için zaman ayırdığınız için teşekkür ederiz - üzgünüm sorunum daha ilgili bir cevaba ihtiyaç duyacak kadar garipti :-)
Patch
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.