Ziyaretçileri Geçici Bakım Sayfasına Yönlendirme


13

Ziyaretçilerimin bakım sırasında sitemin bozuk bir sürümünü görmesini engellemek ve güncellemelere dikkat çekmek için onları otomatik olarak geçici bir bakım sayfasına yönlendirmek istiyorum. Sabit kodlama URL'leri olmadan herhangi bir sitede kullanılabilecek taşınabilir bir çözüm arıyorum.

Oturum açmış olan yöneticiler (veya seçtiğiniz başka bir kullanıcı düzeyi) arka uca ve ön uca tam erişime sahip olmalıdır. Orada bu işlevselliği sunan eklentileri bir sürü vardır, ama ben sadece bir kod çözümü arıyorum.


bir eklenti kodu kopyalamak?
Mark Kaplun

Neden tekerleği yeniden icat ettiniz? Bir eklenti kullanın. Özellikle, Kısıtlı Site Erişimi.
vancoder

2
Özel temam için mümkün olduğunca az eklenti kullanmaya çalışıyorum. "Daha az daha fazladır";)
NewUser

Yanıtlar:


24

WordPress, bakım modunu yönetmek için gömülü bir özelliğe sahiptir.

Bir eklentiyi veya WordPress çekirdeğini WP panosundan yükselttiğinizde, WordPress bakım moduna girer: maintenance.phpiçerik klasöründe (genellikle /wp-content) bulunan bir dosyayı yüklemeye çalışır ve bu dosya yoksa, WP varsayılan bir mesaj gösterir.

Bu dosyayı kullanmanızı öneririm, bu şekilde manuel olarak tetiklenen bakımınız ve WordPress tarafından kullanılan bakımınız için tutarlı olursunuz.

Nasıl

  1. Her şeyden önce maintenance.phpdosyayı oluşturun ve istediğiniz içeriği buraya koyun. Stil için <style>etiketi kullanarak CSS dosyasını dosyanın içine koymanızı öneririm ; genellikle bu iyi bir tavsiye değildir, ancak bu durumda, hiçbir tema yüklenmediğinde (ve tema yükseltiliyor olabilir, bu nedenle güvenilir değildir) dosyayı WordPress tarafından ele alınan bakım modu için kullanma yeteneği sağlar.

  2. Az önce oluşturulan dosyayı içerik klasörüne kaydedin (genellikle /wp-content).

  3. Sizin adınıza functions.php:

    add_action( 'wp_loaded', function() {
        global $pagenow;
        if(
            defined( 'IN_MAINTENANCE' )
            && IN_MAINTENANCE
            && $pagenow !== 'wp-login.php'
            && ! is_user_logged_in()
        ) {
            header( 'HTTP/1.1 Service Unavailable', true, 503 );
            header( 'Content-Type: text/html; charset=utf-8' );
            header( 'Retry-After: 3600' );
            if ( file_exists( WP_CONTENT_DIR . '/maintenance.php' ) ) {
                require_once( WP_CONTENT_DIR . '/maintenance.php' );
            }
            die();
        }
    });

    Bu kod bir sabiti kontrol eder (bir sonraki noktaya bakın) ve kullanıcı oturum açmadıysa, 1 numaralı noktada oluşturulan dosyayı yükleyin ve çıkın.

    Yalnızca belirli özelliklere sahip kullanıcılara izin vermek istiyorsanız, current_user_can('capability_to_allow')yerine kullanın is_user_logged_in(). Daha fazla bilgi için Kodeks'e bakınız .

    Belki maintenance.phpgiriş sayfasına bir bağlantı ekleyebilirsiniz ; bu şekilde oturum açmamış bir kullanıcı, adres çubuğuna giriş URL'sini manuel olarak girmek zorunda kalmadan tıklayabilir.

    3. tarafça geliştirilen bir tema kullanıyorsanız, bir alt tema kullanın ; bu şekilde, değişikliklerinizi kaybetmeden temayı güvenle güncelleyebileceksiniz.

  4. Bakım modunu etkinleştirmek istediğinizde, cihazınızı açın wp_config.phpve oraya koyun:

    define('IN_MAINTENANCE', true);

    Tekrar Sitenizi herkese açık hale hazır olduğunda Bundan sonra, sadece o satırı veya değişikliği kaldırmak trueiçin falseyeniden etkinleştirmeyi kolay için.


Bu çok ayrıntılı bir cevap ve sorunumu mümkün olan en az çabayla çözmek için harika bir yol! Daha sonra deneyeceğim ve işe yaradığında Cevabı kabul edeceğim. Çok teşekkür ederim GM!
NewUser

Merhaba GM - "wp-content" dizini adlı özel bir ad kullanın ama nasıl WP_CONTENT_DIR ..... değiştirmek için hiçbir fikrim yok? iyi
NewUser

Eski iş parçacığı, biliyorum .. ama birisinin bu cevaba ihtiyacı olması durumunda define('WP_CONTENT_DIR','/url/to/define/');, wp-config.phpdosyanıza eklemek kadar kolay .
GDO

@gmazzap, bu harika. Bu, yalnızca önceden oturum açtıysanız (yönetici olarak söylüyorsanız), yönetici konsolunda / üzerinde hala erişebileceğiniz ve üzerinde değişiklik yapabileceğiniz anlamına mı geliyor?
paranza

@paranza evet, doğru.
gmazzap

2

Önceki cevap tam ve iyi yazılmıştır. Her neyse, benim gibiyseniz ve her şeyin tek bir yerde olmasını istiyorsanız, aşağıdaki satırları function.phpdosyaya bırakabilir ve maintenance.phptema dizininizde bir dosya oluşturabilirsiniz .

Bu özellikle Git deponuz sadece tema dizinini gösteriyorsa kullanışlıdır.

add_action( 'wp_loaded', function() 
{
    global $pagenow;

    // - - - - - - - - - - - - - - - - - - - - - - 
    // Turn on/off you Maintenance Mode (true/false)
    define('IN_MAINTENANCE', true);
    // - - - - - - - - - - - - - - - - - - - - - - 

    if(
        defined( 'IN_MAINTENANCE' )
        && IN_MAINTENANCE
        && $pagenow !== 'wp-login.php'
        && ! is_user_logged_in()
    ) {
        header('HTTP/1.1 503 Service Temporarily Unavailable');
        header( 'Content-Type: text/html; charset=utf-8' );
        if ( file_exists( get_template_directory() . '/maintenance.php' ) ) {
            require_once( get_template_directory() . '/maintenance.php' );
        }
        die();
    }
});

NOTLAR

header('HTTP/1.1 503 Service Temporarily Unavailable');Yukarıdaki başlık benim için çalışmadığı için başlığı değiştirdim .


Bunun amacını görebiliyorum, ancak birkaç şeyi not ediyorum - WordPress, kendi bakımını yaparken bu bakım dosyasını tema dizininde kullanmayacaktır (bu yüzden wp-content / maintenance.php oluşturmak için iyi bir fikir olacaktır. iyi ve sonra () temanızın içine bir tane gerektirir); bunun gibi sabitleri tanımlamak, taahhütleri yaparak bakım modunun açık / kapalı olmasını yönetmek yerine genellikle wp-config.php dosyasında veya bir ortam değişkeni olarak oturur. :)
Tim Malone

@TimMalone, katılıyorum. Sonunda (geliştirici) tüm güncellemeleri yaparken, kısa bir süre içinde iyi çalışacak bir geçici çözümdür.
a.barbieri
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.