WP_DEBUG को केवल / लॉग त्रुटियों के लिए सशर्त रूप से परिभाषित करें (सभी लिंक के लिए परिशिष्ट क्वेरी arg?)


20

मैं एक सर्वर पर एक साइट विकसित कर रहा हूं जिसका क्लाइंट के पास भी पहुंच है और मैं जो करना चाहता हूं, वह WP_DEBUGकेवल प्रशासकों के लिए है। इस पर एक तरह से योआस्ट के लेख को संदर्भित करना :

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

WP_DEBUGकेवल उन्हीं URL के लिए दिखाया जाएगा जो उनके ?debug=trueसाथ संलग्न हैं, जैसेhttp://domain.com/?debug=true

मैं सोच रहा था कि डिबग बार डिफ़ॉल्ट रूप से (या नहीं 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);

यह कोड wp-config.php फ़ाइल के लिए कोडेक्स से सीधा है । यदि आप ऐसा करते हैं, तो आपको यह सोचने की चिंता नहीं होगी कि $_GETकौन है और कौन व्यवस्थापक नहीं है।

संपादित करें:

मैं एक संभव समाधान भूल गया। आप इसे जावास्क्रिप्ट के साथ कर सकते हैं। एक छोटी स्क्रिप्ट आपके पैरामीटर को पृष्ठ के सभी URL से जोड़ सकती है, और आप स्क्रिप्ट के लिए केवल आसानी से लोड कर सकते हैं।

मैं अभी भी 'लॉग' समाधान का सुझाव दूंगा क्योंकि सभी के लिए त्रुटियां लॉग इन हैं। यदि आपके लोग मेरे जैसे हैं और त्रुटि रिपोर्ट भेजते हैं, जैसे " हे, तो साइट टूट जाती है जब आप उस फॉर्म को करते हैं" तो आप लॉग की सराहना करेंगे। :)


मुझे लगता है कि मैं उन्हें स्क्रीन पर देखने के लिए खराब हो गया हूँ :) लेकिन एक लॉग फ़ाइल यहाँ अधिक समझ में आता है। मेरे अंत पर थोड़ा और शोध करेंगे, लेकिन इस तरह से मैं इस सबसे बेहतर समाधान के रूप में सामने आया हूं। धन्यवाद!
Zach

5
ध्यान दें कि मूल लॉगिंग वेब एक्सेस फ़ाइल में लॉग करने के लिए हार्डकोड किया गया है, जो उत्पादन में इतना अच्छा विचार नहीं है। लाइव साइटों के लिए PHP के माध्यम से निजी (वेब ​​फ़ोल्डर से बाहर) लॉग फ़ाइल स्थान को कॉन्फ़िगर करना बेहतर है।
रारस्ट

9

भले ही मेरा पहला दृष्टिकोण कचरा बिन के लिए था और s_ha_dums का उत्तर एक साफ है, और शायद सबसे अच्छा तरीका है, इसके बारे में जाने का तरीका, मुझे एक और काम करने का परिदृश्य प्रदान करता है:

जब कोई व्यवस्थापक सिस्टम में लॉग इन करता है, तो निम्न कुकी 24 घंटे (86400 सेकंड) के लिए मान्य होती है। में WP-config.php , निरंतर WP_DEBUGसशर्त उपस्थिति और कहा कुकी के मूल्य के आधार पर परिभाषित किया गया है।

कैविएट: 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 );

देखें: कोडेक्स> एक्शन संदर्भ> 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हैं जो पहले से ही रुचि की हैं।
रारस्ट

मुझे लगता है कि स्वीकार किया गया उत्तर सबसे व्यवहार्य समाधान बना हुआ है, फिर भी, पूर्णता के लिए, इस नए दृष्टिकोण को ऑन-स्क्रीन डिबग नोटिस के साथ काम करना चाहिए।
जोहान्स पिल

आह बहुत अच्छा वर्कअराउंड - निश्चित रूप से यह एक शॉट देगा
Zach

1
@s_ha_dum: यह हर जवाब को याद रखने जैसा नहीं है - कम से कम मैं नहीं (इससे पहले मैंने अपना जवाब नहीं दिया है)। यह एक मुझे याद है। मैं जवाब देने वाला पहला व्यक्ति था और निरपेक्ष बकवास लिखा था। बिलकुल नहीं लगाया। मैं जवाब देने के लिए एक नीति का पालन करता हूं जब तक कि मैं कम से कम 99.5% निश्चित नहीं हूं कि मैं योग्य हूं (मैं आपके बारे में उसी के बारे में अनुमान लगाता हूं) - यहां मैं लक्ष्य से दूर हो गया था। इससे जीवित श * को परेशान किया गया, इसलिए कुछ घंटों बाद, इसके बाद एक स्वीकृत जवाब मिला, मैं अभी भी इस बारे में सोच रहा था और ऊपर के साथ आया था। मुझे भी लगता है कि यह बहुत चालाक है - ध्यान देने योग्य है।
जोहान्स पिल

3

यह आपके प्रश्न का सटीक उत्तर नहीं देता है, लेकिन व्यक्तिगत अनुभव से मैंने पाया कि URL के बजाय IP पते से मिलान करके डिबग मोड को सक्षम करना बेहतर है।

यह आवश्यक है कि लिंक को संशोधित करने के लिए और WP की लोड करने से पहले उपयोगकर्ता की कार्यक्षमता के लिए व्यवस्थापक की पहचान कैसे करें।


मैं वास्तव में इस विचार को पसंद करता हूं - इसलिए अगर मैंने pastebin.com/m22KNakh जैसा कुछ किया है ... सिद्धांत रूप में, सही काम कर सकता है? रनिंग echo $_SERVER['REMOTE_ADDR']पैदावार ::1जो कि लोकलहोस्ट पर अपेक्षित है? यह ईमानदारी से एक अलग लॉग फ़ाइल की तरह लगता है और इस तरह (जैसा कि होम आईपी हर समय बदलते हैं) एक अच्छा विचार हो सकता है।
Zach

@Zach हाँ, ::1का सिर्फ IPv6 संस्करण है 127.0.0.1। डायनेमिक आईपी बनाता है कम सुविधाजनक है, लेकिन वैसे भी मैं इसे केवल जीवित सामान के लिए अस्थायी समस्या निवारण तकनीक के रूप में मानता हूं। उचित स्थानीय डिबग सेटअप को प्रतिस्थापित नहीं करता है।
रारस्ट

आह मुझे बताने के लिए धन्यवाद। निश्चित रूप से यहां दोनों विकल्प पसंद हैं, मैं @s_ha_dum उत्तर (आपकी टिप्पणी के अलावा कि मैंने उत्थान किया है) के साथ जाने वाला हूं जो कि बहुत अच्छा है। धन्यवाद फिर से, मैं वास्तव में इसकी सराहना करता हूं!
Zach

1

यह भी संभव चाल है, लेकिन आप में इस डाल करने के लिए की जरूरत है अपने wp-config.phpके बाद से WP_DEBUGवहाँ में परिभाषित किया गया है:

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

?debugsecret=debugsecretउस पृष्ठ URL में जोड़ें जिसे आप डीबग करना पसंद करते हैं।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.