Tetapkan WP_DEBUG secara kondisional / hanya untuk admin / kesalahan log (tambahkan kueri argumen untuk semua tautan?)

20

Saya sedang mengembangkan situs di server yang juga dapat diakses oleh klien dan apa yang ingin saya lakukan WP_DEBUGhanya ditampilkan untuk administrator. Referensi artikel Yoast ini pada jalan di sekitar ini:

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

WP_DEBUGhanya akan menampilkan URL yang telah ?debug=truedilampirkan padanyahttp://domain.com/?debug=true

Saya berpikir bahwa Bar Debug mungkin menyimpan beberapa informasi ini di sana secara default (apakah WP_DEBUGdinyalakan atau tidak ), tetapi saya berpikir kegilaan karena saya tidak percaya itu masalahnya.

Jadi, apa yang saya pikir akan bermanfaat, akan menjadi pemeriksaan untuk pengguna saat ini (memiliki manage_optionskemampuan dan kemudian menjalankan tautan melalui add_query_arg():

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

tapi yang saya tidak yakin adalah - apakah ada kait yang bisa saya gunakan untuk memberi efek pada semua tautan di situs dengan ini? Dengan cara ini, admin selalu melihat debug yang saya pikir akan sangat berguna. Terima kasih atas bantuannya seperti biasa!

Zach
sumber
Solusi (Yoast) ini sangat berguna untuk debugging sambil jalan. Saya juga mengaktifkan logging yang berfungsi dengan baik. Saya sedikit mengubah kode saya: if ( isset( $_GET['bug'] ) ) jadi saya mengunjungi tautan /? Bug untuk melihat debug :)
Jarmerson

Jawaban:

18

Saya tidak berpikir ada pengait URL universal. Ada banyak kait dan saya mungkin melewatkannya, tapi saya rasa tidak ada. Anda dapat melihat melalui kait di adambrown.info . Ada banyak kait URL, tetapi bukan yang universal.

Jika saya dapat menyarankan solusi lain: Log kesalahan ke file.

/**
 * 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);

Kode itu langsung dari Codex untuk file wp-config.php . Jika Anda melakukan itu, Anda tidak perlu khawatir tentang juggling $_GETatau memilah siapa dan siapa yang bukan admin.

Edit:

Saya lupa satu solusi yang mungkin. Anda dapat melakukan ini dengan Javascript. Sebuah skrip pendek dapat melampirkan parameter Anda ke semua URL pada halaman, dan Anda dapat dengan mudah memuat skrip hanya untuk admin.

Saya masih menyarankan solusi 'log' karena kesalahan untuk semua orang dicatat. Jika orang-orang Anda seperti milik saya dan mengirim 'laporan' yang salah seperti " hei, situs ini rusak ketika Anda melakukan formulir itu " Anda akan menghargai log tersebut. :)

s_ha_dum
sumber
Saya kira saya hanya manja melihat mereka di layar :) tetapi file log lebih masuk akal di sini. Akan melakukan sedikit lebih banyak penelitian pada akhir saya, tetapi ini tampaknya menjadi solusi terbaik yang saya temui sejauh ini. Terima kasih!
Zach
5
Perhatikan bahwa logging asli di-hardcoded untuk masuk ke file yang dapat diakses web, yang bukan ide yang baik dalam produksi. Lebih baik mengkonfigurasi lokasi file log pribadi (keluar dari folder web) melalui sarana PHP untuk situs langsung.
Jarang
9

Meskipun pendekatan pertama saya adalah tempat sampah dan jawaban s_ha_dums adalah cara yang bersih, dan mungkin cara terbaik untuk melakukannya, izinkan saya menawarkan satu skenario kerja lagi:

Yang berikut ini mengatur cookie yang valid untuk 24 jam berikutnya (86400 detik) ketika seorang administrator login ke sistem. Di wp-config.php , konstanta WP_DEBUGdidefinisikan secara kondisional tergantung pada keberadaan dan nilai cookie tersebut.

Peringatan: WP_DEBUGselanjutnya akan ditetapkan trueuntuk semua orang yang masuk dari peramban yang sama di mesin yang sama pada hari yang sama.

di functions.php (atau sebagai plugin):

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

Lihat: Codex> Referensi Tindakan> wp_login

di wp-config.php :

if ( isset( $_COOKIE['wp_debug'] ) && 'on' === $_COOKIE['wp_debug'] ) {
    define( 'WP_DEBUG', true );
} else {
    define( 'WP_DEBUG', false );
}
Johannes Pille
sumber
Andrew Nacin mengomentari artikel itu, mengatakan initsudah terlambat untuk memiliki efek apa pun. Saya juga mencoba ini dan tidak berhasil.
Zach
Konstanta tidak dapat didefinisikan ulang. Seseorang dapat memodifikasi tingkat pelaporan kesalahan tanpa menyentuh konstan tetapi itu tidak sempurna. Juga ada banyak hal yang terjadi sebelum inititu menarik.
Paling lambat
Saya pikir jawaban yang diterima tetap menjadi solusi yang paling layak, namun, demi kelengkapan, pendekatan baru ini harus melakukan pekerjaan dengan pemberitahuan debug di layar.
Johannes Pille
Ah solusi yang sangat keren - pasti akan mencoba ini
Zach
1
@ s_ha_dum: Ini tidak seperti satu mengingat setiap jawaban - setidaknya saya tidak (saya sudah googled jawaban saya sendiri sebelumnya). Yang ini saya ingat. Saya adalah orang pertama yang menjawab dan telah menulis omong kosong. Tidak berlaku sama sekali. Saya mengikuti kebijakan untuk tidak menjawab kecuali saya setidaknya 99,5% yakin saya memenuhi syarat untuk (saya berasumsi tentang hal yang sama berlaku untuk Anda) - di sini saya telah jauh dari target. Itu mengganggu hidup yang tidak keluar dari saya, jadi beberapa jam kemudian, setelah ini mendapat jawaban yang diterima, saya masih memikirkan yang ini dan datang dengan yang di atas. Saya juga berpikir itu cukup apik - terima kasih telah memperhatikan.
Johannes Pille
3

Itu tidak menjawab pertanyaan Anda dengan tepat, tetapi dari pengalaman pribadi saya menemukan lebih baik mengaktifkan mode debug dengan mencocokkan alamat IP daripada URL.

Untuk itu diperlukan modifikasi tautan dan pecahkan cara mengidentifikasi admin sebelum WP memuat fungsionalitas pengguna.

Jarang
sumber
Saya sebenarnya menyukai ide ini juga - jadi jika saya melakukan sesuatu seperti pastebin.com/m22KNakh yang bisa ... dalam teori, betul? Menjalankan echo $_SERVER['REMOTE_ADDR']hasil ::1yang diharapkan di localhost? Jujur kedengarannya seperti file log yang terpisah dan dengan cara ini (karena IP rumah tampaknya berubah sepanjang waktu) mungkin ide yang bagus.
Zach
@Zach ya, ::1hanya versi IPv6 127.0.0.1. Dynamic IP membuat kurang nyaman, tapi bagaimanapun saya hanya memperlakukan ini sebagai teknik pemecahan masalah sementara untuk barang-barang hidup. Tidak mengganti pengaturan debug lokal yang tepat.
Jarang
Ah, terima kasih sudah memberi tahu saya. Jelas seperti kedua opsi di sini, saya akan pergi dengan jawaban @s_ha_dum (selain komentar Anda yang saya undur) juga sangat bagus. Terima kasih sekali lagi, saya sangat menghargainya!
Zach
1

Ini juga trik yang mungkin, tetapi Anda harus memasukkan ini ke dalam wp-config.phpkarena WP_DEBUGsudah didefinisikan di sana:

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

Tambahkan ?debugsecret=debugsecretke URL halaman yang ingin Anda debug.

prosti
sumber