WP_DEBUG koşullu olarak / yalnızca yöneticiler için / günlük hataları tanımla (tüm bağlantılar için sorgu bağımsız değişkeni eklensin mi?)


20

Bir sunucu üzerinde istemcinin de erişebildiği bir site geliştiriyorum ve ne yapmak istiyorum WP_DEBUGsadece yöneticiler için göstermek . Yoast'ın bu konudaki bir makalesine atıfta bulunmak :

if ( isset($_GET['debug']) && $_GET['debug'] == 'true')
    define('WP_DEBUG', true);

WP_DEBUGyalnızca kendilerine ?debug=trueeklenmiş URL'ler için gösterilir (ör.http://domain.com/?debug=true

Hata Ayıklama Çubuğu varsayılan olarak bu bilgilerin bir kısmını orada tutabileceğini düşünüyordum (açık olsun ya da olmasın WP_DEBUG), ancak böyle olduğuna inanmadığım için delilik düşünmüştüm.

Yani, ne düşünüyordum yararlı olurdu, mevcut kullanıcı için bir kontrol ( manage_optionsyeteneğine sahip ve daha sonra aracılığıyla bağlantıları çalıştırmak olacaktır add_query_arg():

function zs_admin_debug() {
    if (!current_user_can('manage_options')) {
        add_query_arg('debug','true');
    }
}

ama emin değilim - bir sitedeki tüm bağlantıları etkilemek için kullanabileceğiniz bir kanca var mı? Bu şekilde, yöneticiler her zaman son derece yararlı olacağını düşündüğüm hata ayıklamasını görür. Her zamanki gibi herhangi bir yardım için teşekkürler!


Bu (Yoast) geçici çözüm anında hata ayıklama için son derece yararlıdır. Ayrıca iyi çalışan günlüğü etkinleştirdim. Kodumu biraz değiştirdim: if ( isset( $_GET['bug'] ) ) bu yüzden link /? Hata ayıklama görmek için ziyaret :)
Jarmerson

Yanıtlar:


18

Evrensel bir URL kancası olduğunu sanmıyorum. Bir sürü kanca var ve kaçırmış olabilirim, ama bir tane olduğunu düşünmüyorum. Adambrown.info adresindeki kancalara bakabilirsiniz . Çok sayıda URL kancası var, ancak evrensel bir kanca yok.

Başka bir çözüm önerebilirsem: Hataları bir dosyaya kaydedin.

/**
 * This will log all errors notices and warnings to a file called debug.log in
 * wp-content (if Apache does not have write permission, you may need to create
 * the file first and set the appropriate permissions (i.e. use 666) ) 
 */
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors',0);

Bu kod doğrudan wp-config.php dosyasının Codex öğesinde bulunur . Bunu yaparsanız, $_GETkimin ve kimin yönetici olmadığına dair hokkabazlık veya sıralama konusunda endişelenmenize gerek kalmaz.

Düzenle:

Olası bir çözümü unuttum. Bunu Javascript ile yapabilirsiniz. Kısa bir komut dosyası, parametrenizi sayfadaki tüm URL'lere ekleyebilir ve komut dosyasını yalnızca yöneticiler için kolayca yükleyebilirsiniz.

Herkes için hatalar günlüğe kaydedildiğinden hala 'log' çözümünü öneririm. Çalışanlarınız benimki gibi ve hata gibi 'raporlar' gönderirseniz " hey, bu formu yaptığınızda site bozulur " günlüğü takdir edersiniz. :)


Sanırım sadece onları ekranda görmeye şımarık :) ama bir günlük dosyası burada daha mantıklı. Sonunda biraz daha araştırma yapacağım, ancak bu şimdiye kadar karşılaştığım en iyi çözüm gibi görünüyor. Teşekkürler!
Zach

5
Yerel günlüğe kaydetmenin, web'de erişilebilen dosyada oturum açmak için sabit kodlanmış olduğunu unutmayın; bu da üretimde iyi bir fikir değildir. Özel (web klasörü dışında) günlük dosyası konumunu, canlı siteler için PHP araçları aracılığıyla yapılandırmak daha iyidir.
12'de

9

Her ne kadar ilk yaklaşımım çöp kutusu için olsa da ve s_ha_dums cevabı temiz ve muhtemelen en iyi yoldan gitmeme rağmen, bir çalışma senaryosu daha sunmama izin verin:

Aşağıda, bir yönetici sistemde oturum açtığında sonraki 24 saat (86400 saniye) için geçerli olan bir çerez ayarlanır. Gelen WP-config.php sabit WP_DEBUGkoşullu varlığında ve sözü edilen tanımlama bilgisinin değerine bağlı olarak tanımlanmıştır.

Uyarı: WP_DEBUGbundan sonra trueaynı gün aynı makineden aynı tarayıcıdan giriş yapan herkes için ayarlanacaktır .

içinde functions.php (ya da bir eklenti olarak):

function wpse_69549_admin_debug( $user_login, $user )
{
    if ( in_array( 'administrator', $user->roles ) ) {
        setcookie( 'wp_debug', 'on', time() + 86400, '/', get_site_option( 'siteurl' ) );
    }
}
add_action( 'wp_login', 'wpse_69549_admin_debug', 10, 2 );

Bkz: Kodeks> Eylem Başvurusu> wp_login

içinde wp-config.php :

if ( isset( $_COOKIE['wp_debug'] ) && 'on' === $_COOKIE['wp_debug'] ) {
    define( 'WP_DEBUG', true );
} else {
    define( 'WP_DEBUG', false );
}

Andrew Nacin bu makaleyi yorumladı, initherhangi bir etki yaratmak için çok geç olduğunu belirtti. Bunu da denedim ve işe yaramadı.
Zach

Sabitler yeniden tanımlanamaz. Sabitine dokunmadan hata raporlama seviyesi değiştirilebilir ancak mükemmel değildir. Ayrıca, daha önce initilgi çekici olan birçok şey var .
12'de Rarst

Bence kabul edilen cevap, tamlık uğruna en uygun çözüm olmaya devam ediyor, bu yeni yaklaşım işi ekran hata ayıklama bildirimleriyle yapmalıdır.
Johannes Pille

Ah çok havalı bir çözüm - kesinlikle bunu
Zach

1
@s_ha_dum: Biri her cevabı hatırlıyor gibi değil - en azından ben (daha önce kendi cevabımı googledim). Bunu hatırlıyorum. İlk cevaplayan bendim ve mutlak saçmalık yazdım. Hiç başvurmadı. En az% 99,5 oranında kalifiye olduğumdan emin olmadığınız sürece cevap vermemek için bir politika izliyorum (sizin için de aynı şeyleri varsayalım) - burada hedefimden çok uzaktaydım. Bu, yaşayanları beni rahatsız etti, bu yüzden birkaç saat sonra, bu kabul edilmiş bir cevap aldıktan sonra, hala bunu düşünüyordum ve yukarıdakileri buldum. Ben de oldukça kaygan olduğunu düşünüyorum - fark ettiğiniz için teşekkürler.
Johannes Pille

3

Sorunuza tam olarak cevap vermiyor, ancak kişisel deneyimimden, URL yerine IP adresini eşleştirerek hata ayıklama modunu etkinleştirmenin daha iyi olduğunu buldum.

Bu, bağlantılarda değişiklik yapılmasını gerektirir ve WP gerekli kullanıcı işlevselliğini yüklemeden önce yöneticinin nasıl tanımlanacağını çözer.


Aslında bu fikri de seviyorum - bu yüzden pastebin.com/m22KNakh gibi bir şey yapsaydım ... teoride işe yarayabilir mi? Yerel ana bilgisayarda beklenen echo $_SERVER['REMOTE_ADDR']verim ::1? Dürüst olmak gerekirse ayrı bir günlük dosyası gibi geliyor ve bu şekilde (ev IP'leri her zaman değişiyor gibi) iyi bir fikir olabilir.
Zach

@Zach evet, ::1sadece IPv6 sürümüdür 127.0.0.1. Dinamik IP yapar daha az uygundur, ancak yine de bunu sadece canlı şeyler için geçici sorun giderme tekniği olarak görüyorum. Uygun yerel hata ayıklama kurulumunun yerini almaz.
12'de Rarst

Ah bana bildirdiğiniz için teşekkürler. Kesinlikle burada her iki seçenek gibi, ben de harika (@svha yorumunuzu ek olarak) s_ha_dum cevap ile gidiyorum. Tekrar teşekkürler, gerçekten takdir ediyorum!
Zach

1

Bu da mümkündür hüner, ancak bu koymak gerekir sizin wp-config.phpberi WP_DEBUGorada tanımlanır:

if ( isset( $_GET['debugsecret'] ) && 'debugsecret' == $_GET['debugsecret'] ) {
      define( 'WP_DEBUG', true );         
}

?debugsecret=debugsecretHata ayıklamak istediğiniz sayfa URL'sine ekleyin .


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.