Kısıtlanmış Sayfayı 404'e yönlendir


21

Oturum açmış olan kullanıcının sayfayı görüntülemek için doğru izni yoksa 404 sayfa göstermenin bir yolu var mı? Ben bir PHP yöntemi, gibi bir şey arıyorum

if( !current_user_can('administrator') ) { show_404(); exit(); }

Bir yönlendirme kullanmayı düşündüm, ancak URL'yi aynı tutmak istiyorum.


Varolan bir sayfa için bir kullanıcıya erişimi reddediyorsanız, 404 kullanılacak yanlış hata kodudur. 401 veya 403 daha anlamlı olur.
moopet

1
Haklısın. İstemciden, sayfanın var olduğunu bile bilmeyen, 401'i atmak için var olmadığını ancak yasak olduğunu söyleyeceğini istemediği izlenimindeydim. Bununla birlikte, bunun yerine 401 atmak kolay bir değişiklik olacaktır.
Evan Yeung

Yanıtlar:


52

Başlığımda aşağıdaki kodu kullanarak bir 404 hatası görüntüleyebildim.

<?php
  global $wp_query;
  $wp_query->set_404();
  status_header( 404 );
  get_template_part( 404 ); exit();
?>

Bunu yıkmak için:
$wp_query->set_404(): Bu başlık bunun bir 404 olduğunu WP_Query değiştirir anlatıyor
status_header(): HTTP 404 başlık gönderir
get_template_part()görüntüler 404 şablonu:


Bu iyi bir cevaptır, ancak http_status_code(404);üstbilginin doğru olduğundan emin olmak için şablonu ayarlamadan önce de kullanırım (wordpress status_header( 404 );işlevinden önemli ölçüde daha hızlıdır ). Sayfa sıralamasıyla ilgileniyorsanız Disallow, robots.txt dosyasına genel bir kaynak olmadığını belirten bir kural koymalısınız .
mopsyd

2

Neden hata mesajı gösteren bir sayfa oluşturmuyorsunuz ve kullanıcıyı bu sayfaya yönlendirmiyorsunuz? İşte bunu başarmanın basit bir yolu:

404.phpDosyayı açın ve bu satırları en üstüne ekleyin:

/**
 * Template Name: 404 Page
 */

Şablonlu bir sayfa 404 Pageoluşturun. Ardından kullanıcıları yeniden yönlendirin:

if ( !current_user_can('administrator') ) {
    $404_page = get_permalink( $404_page_id );
    wp_redirect( $404_page );
    exit();
}

Eğer 404 istek için bir sayfa kullanmalıdır nedeni: WP 404 sayfa aslında bir sayfası da mevcut değil WP aramak zorundadır içeriğinin tüm 404 sayfası dönmeden önce ve işin de kaynak israfıdır. Blogunuzu daha hızlı çalıştırmanıza yardımcı olabilecek önceden yapılandırılmış bir sayfa kullanma.


Bunu kullanmayı düşündüm. Ancak gördüğüm birkaç düşüş, iki 404 şablonun oluşturulması ve sürdürülmesi gerektiğidir (sayfa ve gerçek). İstemcinin 404 sayfası oluşturması gerekir. Ve URL'yi aynı tutmak istiyorum. Örnek, example.com/restricted adresine gidersem ... / 404 /
Evan Yeung

Aslında 404.php'nin şablon olduğunu fark ettim. Benim hatam.
Evan Yeung

Hayır, herhangi bir sayfa sıralamasından hoşlanıyorsanız oldukça korkunç bir fikir. Arama motorları yalnızca bir 404 veya herhangi bir 4xx aralık üstbilgisi döndüren sayfaları görüntüleyici hatası olarak görür ve 200 sayfayı döndüren her şeyi mutlu bir şekilde dizine ekler. Yeniden yönlendirme yaparsanız, tarayıcılara, bulunmayan sayfanızın geçerli bir sayfa olduğunu ve sayfa sıralamanızı kötü bir şekilde bozacağını söylersiniz. Bir 404 sayfası aldığınızda gerçekten yapmanız gereken tek şey http_response_code(404); exit();. Bir sayfa istiyorsanız, get_template_part( 404 );çıkmadan önce kullanın . Bu aynı zamanda herhangi bir wordpress işlevinden çok daha hızlıdır.
mopsyd

0

Dosyanın için bu kodu yazabilirsiniz 404.php aslında kullanılan tema dizininde (wp-content / themes /..../ 404.php) :

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: ".get_bloginfo('url'));
exit();
?>

Bu kod dosyanın başından başlamalıdır (daha önce herhangi bir karakter olmadan) .

Orijinaline bağlantı: 404 sayfanızı WordPress'teki Ana Sayfaya Yönlendirme


OP aslında belirli ölçütleri karşılamayan kullanıcılar için 404 görüntülenmesinin bir yolunu arıyor.
phatskat

404'leri yönlendirmeyin. Location: xxxtarayıcılara gerçekte geçerli bir kaynak olduğunu söyleyen bir 301 üstbilgisi ayarlar ve bulunmadığını belirlediklerinde sıralamanızı öldürür.
mopsyd

0

Kullanıcıların bir kullanıcının rolüne göre author.php sayfasına erişmesine izin vermemem gereken benzer bir gereksinimim vardı. Denetimlerimi yapmak ve gerçek sayfa yüklenmeden önce bile 404 sayfaya yönlendirmek için template_redirect eylemini kaydediyorum.

Kayıt:

add_action( 'template_redirect', [ $this, 'handle_inactive_users']);

işleyici:

public function handle_inactive_users() {
    global $wp_query;
    if ( $wp_query->is_author() ) {
        $user = $wp_query->get_queried_object();
        if ( is_a( $user, \WP_User::class ) && $user->has_cap( 'inactive' ) ) {
            $wp_query->set_404();
            status_header( 404 );
            get_template_part( 404 );
            exit();
        }
    }
}

Aşağıdaki kod snippet'ini yalnızca şablon parçasının ortasında kullanmayı seçtiyseniz, sayfa kısmen oluşturulmuş olabilir ve aslında bir 404 sayfasına yönlendirilmezsiniz. Bunu template_redirecteylemde yapmak daha iyi -

$wp_query->set_404();
status_header( 404 );
get_template_part( 404 );
exit();
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.