กำหนด WP_DEBUG ตามเงื่อนไข / สำหรับผู้ดูแลระบบเท่านั้น / ข้อผิดพลาดบันทึก (ต่อท้ายแบบสอบถามหาเรื่องสำหรับลิงก์ทั้งหมด?)


20

ฉันกำลังพัฒนาเว็บไซต์บนเซิร์ฟเวอร์ที่ลูกค้าสามารถเข้าถึงได้เช่นกันและสิ่งที่ฉันต้องการจะทำคือแสดงWP_DEBUGให้ผู้ดูแลระบบเท่านั้น การอ้างอิงบทความของ Yoastเกี่ยวกับเรื่องนี้:

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

จะแสดงWP_DEBUGเฉพาะ URL ที่?debug=trueแนบมาเท่านั้นhttp://domain.com/?debug=true

ฉันคิดว่าDebug Barอาจเก็บข้อมูลนี้ไว้เป็นค่าเริ่มต้น (ไม่ว่าWP_DEBUGจะเปิดหรือไม่ก็ตาม) แต่ฉันคิดว่าบ้าคลั่งเพราะฉันไม่เชื่อว่าเป็นเช่นนั้น

ดังนั้นสิ่งที่ฉันคิดว่าจะมีประโยชน์จะเป็นการตรวจสอบผู้ใช้ปัจจุบัน (มีmanage_optionsความสามารถแล้วเรียกใช้ลิงก์ผ่านadd_query_arg():

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

แต่สิ่งที่ฉันไม่แน่ใจเกี่ยวกับคือ - มีเบ็ดฉันสามารถใช้เพื่อผลลิงค์ทั้งหมดในเว็บไซต์ด้วยนี้ ด้วยวิธีนี้ผู้ดูแลระบบจะเห็นการดีบักซึ่งฉันคิดว่าจะมีประโยชน์อย่างยิ่ง ขอบคุณสำหรับความช่วยเหลือใด ๆ เช่นเคย!


วิธีแก้ปัญหา (Yoast) นี้มีประโยชน์อย่างมากสำหรับการแก้ไขจุดบกพร่องทันที ฉันยังเปิดใช้งานการบันทึกที่ใช้งานได้ดี ผมแก้ไขเล็กน้อยรหัสของฉัน: if ( isset( $_GET['bug'] ) ) ดังนั้นฉันไปที่ลิงค์ / ข้อผิดพลาดที่จะเห็นการแก้ปัญหา :)?
Jarmerson

คำตอบ:


18

ฉันไม่คิดว่ามีตะขอ URL สากล มีตะขอมากมายและฉันอาจจะพลาด แต่ฉันไม่คิดว่ามี คุณสามารถมองผ่านตะขอที่adambrown.info มีตะขอ URL จำนวนมาก แต่ไม่ใช่ตะขออเนกประสงค์

ถ้าฉันอาจแนะนำวิธีแก้ไขปัญหาอื่น: บันทึกข้อผิดพลาดไปยังไฟล์

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

รหัสนั่นคือตรงจากCodex สำหรับแฟ้ม หากคุณทำเช่นนั้นคุณจะไม่ต้องกังวลกับการเล่นปาหี่$_GETหรือการแยกแยะว่าใครเป็นใครและไม่ใช่ผู้ดูแล

แก้ไข:

ฉันลืมวิธีหนึ่งที่เป็นไปได้ คุณสามารถทำได้ด้วย Javascript สคริปต์สั้นสามารถแนบพารามิเตอร์ของคุณกับ URL ทั้งหมดในหน้าและคุณสามารถโหลดสคริปต์สำหรับผู้ดูแลระบบได้อย่างง่ายดาย

ฉันยังคงแนะนำวิธีการ 'ล็อก' เนื่องจากข้อผิดพลาดสำหรับทุกคนถูกบันทึกไว้ หากคนของคุณเป็นเหมือนของฉันและส่งข้อผิดพลาด 'รายงาน' เช่น " เฮ้ไซต์นั้นเสียเมื่อคุณทำแบบฟอร์มนั้น " คุณจะประทับใจกับบันทึก :)


ฉันเดาว่าฉันเพิ่งเห็นพวกมันเสียบนหน้าจอ :) แต่ไฟล์บันทึกมีความหมายมากกว่านี้ จะทำวิจัยเพิ่มเติมอีกเล็กน้อยในตอนท้ายของฉัน แต่นี่ดูเหมือนจะเป็นทางออกที่ดีที่สุดที่ฉันเคยพบมาก่อน ขอบคุณ!
Zach

5
โปรดทราบว่าการบันทึกเนทีฟนั้นฮาร์ดโค้ดเพื่อเข้าสู่ไฟล์ที่สามารถเข้าถึงได้บนเว็บซึ่งไม่ใช่ความคิดที่ดีในการผลิต มันเป็นการดีกว่าที่จะกำหนดค่าตำแหน่งล็อกไฟล์ส่วนตัว (นอกเว็บโฟลเดอร์) ผ่านทาง PHP หมายถึงไซต์สด
Rarst

9

แม้ว่าวิธีแรกของฉันคือสำหรับถังขยะและคำตอบ s_ha_dums เป็นวิธีที่สะอาดและอาจเป็นวิธีที่ดีที่สุดในการดำเนินการให้ฉันเสนอสถานการณ์การทำงานอีกหนึ่งอย่าง:

ต่อไปนี้ตั้งค่าคุกกี้ที่ถูกต้องสำหรับ 24 ชั่วโมงถัดไป (86400 วินาที) เมื่อผู้ดูแลระบบล็อกอินเข้าสู่ระบบ ในwp-config.phpค่าคงที่WP_DEBUGจะถูกกำหนดเงื่อนไขขึ้นอยู่กับการมีอยู่และคุณค่าของคุกกี้ดังกล่าว

Caveat: WP_DEBUGหลังจากนั้นจะถูกตั้งค่าให้trueทุกคนเข้าสู่ระบบจากเบราว์เซอร์เดียวกันบนเครื่องเดียวกันในวันเดียวกัน

ในfunctions.php (หรือเป็นปลั๊กอิน):

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

ดู: Codex> ข้อมูลอ้างอิงการดำเนินการ> wp_login

ในwp-config.php :

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

แอนดรูว์นาซินแสดงความคิดเห็นในบทความดังกล่าวการกล่าวถึงinitสายเกินไปที่จะมีผลกระทบใด ๆ ฉันก็ลองสิ่งนี้และมันก็ใช้ไม่ได้
Zach

ค่าคงที่ไม่สามารถนิยามใหม่ได้ หนึ่งสามารถแก้ไขระดับการรายงานข้อผิดพลาดโดยไม่ต้องสัมผัสคงที่ แต่ก็ไม่สมบูรณ์ นอกจากนี้ยังมีสิ่งต่าง ๆ ที่เกิดขึ้นก่อนหน้าinitนี้ที่น่าสนใจ
Rarst

ฉันคิดว่าคำตอบที่ได้รับการยอมรับยังคงเป็นทางออกที่ดีที่สุดอย่างไรก็ตามเพื่อความสมบูรณ์แนวทางใหม่นี้ควรทำงานด้วยการแจ้งการดีบักบนหน้าจอ
Johannes Pille

วิธีแก้ปัญหาที่น่าสนใจมาก ๆ - จะให้ช็อตนี้แน่นอน
ซัค

1
@s_ha_dum: มันไม่เหมือนใครจำทุกคำตอบ - อย่างน้อยฉันไม่ได้ (ฉันเคยตอบคำถามของตัวเองก่อน) อันนี้ฉันจำได้ ฉันเป็นคนแรกที่ตอบและเขียนอึแน่นอน ไม่ได้ใช้เลย ฉันปฏิบัติตามนโยบายที่จะไม่ตอบเว้นแต่ว่าฉันจะมีอย่างน้อย 99.5% ที่แน่นอนว่าฉันผ่านการรับรอง (ฉันคิดว่าเรื่องนี้จะเหมือนกันสำหรับคุณ) - ที่นี่ฉันออกห่างจากเป้าหมายแล้ว นั่นรบกวนชีวิตที่มีอยู่ออกไปฉันอีกสองสามชั่วโมงต่อมาหลังจากนี้ได้รับคำตอบที่ยอมรับได้ฉันยังคงคิดถึงเรื่องนี้อยู่ ฉันก็คิดว่ามันค่อนข้างเนียน - ขอบคุณที่สังเกต
Johannes Pille

3

ไม่ตอบคำถามของคุณอย่างแม่นยำ แต่จากประสบการณ์ส่วนตัวฉันพบว่าเป็นการดีกว่าที่จะเปิดใช้งานโหมดแก้ไขข้อบกพร่องโดยจับคู่ที่อยู่ IP แทน URL

ที่ต้องมีการปรับเปลี่ยนการเชื่อมโยงและแก้ไขวิธีการระบุผู้ดูแลก่อนที่จะโหลด WP ฟังก์ชั่นของผู้ใช้ที่ต้องการ


ฉันชอบความคิดนี้จริง ๆ - ดังนั้นถ้าฉันทำอะไรบางอย่างเช่นpastebin.com/m22KNakhที่สามารถ ... ในงานทฤษฎีได้ถูกต้องไหม เล่นecho $_SERVER['REMOTE_ADDR']อัตราผลตอบแทน::1ที่คาดว่าใน localhost? มันฟังดูเหมือนไฟล์บันทึกแยกต่างหากและด้วยวิธีนี้ (เนื่องจาก IP ที่บ้านดูเหมือนจะเปลี่ยนตลอดเวลา) อาจเป็นความคิดที่ดี
ซัค

@Zach ใช่::1เป็นเพียงรุ่น IPv6 127.0.0.1ของ Dynamic IP ทำให้สะดวกน้อยลง แต่อย่างไรก็ตามฉันถือว่านี่เป็นเทคนิคการแก้ปัญหาชั่วคราวสำหรับสิ่งของสดเท่านั้น ไม่แทนที่การตั้งค่าการแก้ไขข้อบกพร่องในระบบที่เหมาะสม
Rarst

อ่าขอบคุณที่บอกให้ฉันรู้ แน่นอนว่าตัวเลือกทั้งสองที่นี่ฉันจะไปกับ @s_ha_dum คำตอบ (นอกเหนือจากความคิดเห็นของคุณที่ฉัน upvoted) ซึ่งเป็นสิ่งที่ดี ขอบคุณอีกครั้งฉันซาบซึ้งจริงๆ!
ซัค

1

นี่เป็นเคล็ดลับที่เป็นไปได้เช่นกัน แต่คุณต้องใส่สิ่งนี้ไว้ในของคุณwp-config.phpเนื่องจากWP_DEBUGมีการกำหนดไว้ใน:

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

เพิ่ม?debugsecret=debugsecretไปยัง URL ของหน้าเว็บที่คุณต้องการแก้ไขข้อบกพร่อง


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.