{"id":3532,"date":"2024-12-19T00:00:00","date_gmt":"2024-12-19T00:00:00","guid":{"rendered":"https:\/\/attributesuseraccess.com\/?post_type=docs&amp;p=1043"},"modified":"2024-12-19T00:00:00","modified_gmt":"2024-12-19T00:00:00","slug":"debug-mode-instructions","status":"publish","type":"docs","link":"https:\/\/attributeswp.com\/docs\/debug-mode-instructions\/","title":{"rendered":"Debug Mode Instructions"},"content":{"rendered":"<div class=\"attrua-doc-article\">\n<div class=\"attrua-doc-meta\"><span class=\"doc-version\">Version: 1.2.1<\/span>\n<span class=\"doc-updated\">Last Updated: December 2025<\/span>\n<span class=\"doc-difficulty\">Difficulty: Intermediate<\/span>\n<span class=\"doc-time\">Time Required: 10 minutes<\/span><\/div>\n\n<div class=\"attrua-doc-content\">\n\n<h2>Overview<\/h2>\n\n<p>Debug mode reveals detailed error messages and logs that help diagnose issues. This guide shows how to enable WordPress debug mode and interpret error messages.\n<\/p>\n\n<h2>Enabling WordPress Debug Mode<\/h2>\n\n<h3>Step 1: Edit wp-config.php<\/h3>\n\n<strong>Access wp-config.php via:<\/strong>\n<ul>\n<li>FTP (FileZilla, WinSCP)<\/li><\/ul>\n\n<ul>\n<li>cPanel File Manager<\/li><\/ul>\n\n<ul>\n<li>SSH\/command line<\/li><\/ul>\n\n<strong>Find this line:<\/strong>\n\n<pre><code class=\"language-php\">\ndefine(&#039;WP_DEBUG&#039;, false);\n<\/code><\/pre>\n\n<strong>Replace with:<\/strong>\n\n<pre><code class=\"language-php\">\n\/\/ Enable debug mode\ndefine(&#039;WP_DEBUG&#039;, true);\n\n\/\/ Log errors to file\ndefine(&#039;WP_DEBUG_LOG&#039;, true);\n\n\/\/ Don&#039;t display errors on frontend (security)\ndefine(&#039;WP_DEBUG_DISPLAY&#039;, false);\n@ini_set(&#039;display_errors&#039;, 0);\n\n\/\/ Log database queries (optional, for performance issues)\ndefine(&#039;SAVEQUERIES&#039;, true);\n<\/code><\/pre>\n\n<strong>Save file and upload back to server.<\/strong>\n\n<h3>Step 2: Check Debug Log<\/h3>\n\n<strong>Log location:<\/strong>\n\n<p>\/wp-content\/debug.log\n<\/p>\n\n<strong>Access via:<\/strong>\n<ul>\n<li>FTP\/download file<\/li><\/ul>\n\n<ul>\n<li>cPanel File Manager<\/li><\/ul>\n\n<ul>\n<li>View in text editor<\/li><\/ul>\n\n<strong>Log grows large over time. Check regularly and delete when not debugging.<\/strong>\n\n<h2>Understanding Error Messages<\/h2>\n\n<h3>PHP Fatal Errors<\/h3>\n\n<strong>Example:<\/strong>\n\n<p>PHP Fatal error: Uncaught Error: Call to undefined function attrua_get_option() \n<\/p>\n<p>in \/wp-content\/plugins\/attributes-user-access-pro\/includes\/functions.php:45\n<\/p>\n\n<strong>What it means:<\/strong>\n\n<p>Function doesn&#8217;t exist\n<\/p>\n<p>Likely causes:\n<\/p>\n<ul>\n<li>Plugin file missing\/corrupt<\/li><\/ul>\n\n<ul>\n<li>Plugin not fully activated<\/li><\/ul>\n\n<ul>\n<li>PHP version incompatibility<\/li><\/ul>\n\n<strong>Solution:<\/strong>\n\n<ul>\n<li>Deactivate and reactivate plugin<\/li><\/ul>\n\n<ul>\n<li>Reinstall plugin from fresh download<\/li><\/ul>\n\n<ul>\n<li>Check PHP version meets requirements<\/li><\/ul>\n\n<h3>Database Errors<\/h3>\n\n<strong>Example:<\/strong>\n\n<p>WordPress database error Table &#8216;wp_attrua_audit_log&#8217; doesn&#8217;t exist \n<\/p>\n<p>for query SELECT * FROM wp_attrua_audit_log\n<\/p>\n\n<strong>What it means:<\/strong>\n\n<p>Database table missing\n<\/p>\n\n<strong>Solution:<\/strong>\n\n<ul>\n<li>Deactivate plugin<\/li><\/ul>\n\n<ul>\n<li>Reactivate (triggers table creation)<\/li><\/ul>\n\n<ul>\n<li>Or run table creation SQL manually<\/li><\/ul>\n\n<h3>JavaScript Errors<\/h3>\n\n<strong>Check browser console:<\/strong>\n\n<p>Chrome\/Edge: F12 \u2192 Console tab\n<\/p>\n<p>Firefox: F12 \u2192 Console tab\n<\/p>\n\n<p>Common errors:\n<\/p>\n<p>&#8220;$ is not defined&#8221; \u2192 jQuery not loaded\n<\/p>\n<p>&#8220;Uncaught TypeError&#8221; \u2192 Function doesn&#8217;t exist\n<\/p>\n<p>&#8220;Script error&#8221; \u2192 Cross-origin issue\n<\/p>\n\n<h2>Plugin-Specific Debug<\/h2>\n\n<h3>Attributes Debug Mode<\/h3>\n\n<strong>Enable additional plugin logging:<\/strong>\n\n<pre><code class=\"language-php\">\n\/\/ Add to wp-config.php\ndefine(&#039;ATTRUA_DEBUG&#039;, true);\n\n\/\/ This logs:\n\n&lt;ul&gt;\n&lt;li&gt;Login attempts&lt;\/li&gt;&lt;\/ul&gt;\n\n&lt;ul&gt;\n&lt;li&gt;2FA verification&lt;\/li&gt;&lt;\/ul&gt;\n\n&lt;ul&gt;\n&lt;li&gt;IP blocking checks&lt;\/li&gt;&lt;\/ul&gt;\n\n&lt;ul&gt;\n&lt;li&gt;Redirect decisions&lt;\/li&gt;&lt;\/ul&gt;\n\n&lt;ul&gt;\n&lt;li&gt;Database queries&lt;\/li&gt;&lt;\/ul&gt;\n<\/code><\/pre>\n\n<strong>View extended logs:<\/strong>\n\n<p>Users \u2192 Settings \u2192 Debug\n<\/p>\n\n<p>Recent Activity:\n<\/p>\n<p>[2025-12-19 14:30:15] Login attempt: username=john\n<\/p>\n<p>[2025-12-19 14:30:15] IP check: 203.0.113.50 &#8211; ALLOWED\n<\/p>\n<p>[2025-12-19 14:30:16] 2FA required: YES\n<\/p>\n<p>[2025-12-19 14:30:16] 2FA code sent to: &#x6a;&#x6f;&#x68;&#x6e;&#x40;&#x65;&#x78;&#x61;&#x6d;&#x70;&#x6c;&#x65;&#x2e;&#x63;&#x6f;&#x6d;\n<\/p>\n<p>[2025-12-19 14:30:45] 2FA verified: SUCCESS\n<\/p>\n<p>[2025-12-19 14:30:45] Redirect to: \/dashboard\/\n<\/p>\n\n<h2>Using Query Monitor Plugin<\/h2>\n\n<h3>Installation<\/h3>\n\n<strong>Install Query Monitor:<\/strong>\n\n<ul>\n<li>Go to Plugins \u2192 Add New<\/li><\/ul>\n\n<ul>\n<li>Search &#8220;Query Monitor&#8221;<\/li><\/ul>\n\n<ul>\n<li>Install and activate<\/li><\/ul>\n\n<strong>Benefits:<\/strong>\n\n<p>\u2713 See all database queries\n<\/p>\n<p>\u2713 See slow queries\n<\/p>\n<p>\u2713 See duplicate queries\n<\/p>\n<p>\u2713 See PHP errors\n<\/p>\n<p>\u2713 See hook usage\n<\/p>\n<p>\u2713 See HTTP API calls\n<\/p>\n<p>\u2713 See template hierarchy\n<\/p>\n\n<h3>Reading Query Monitor<\/h3>\n\n<strong>Admin toolbar shows:<\/strong>\n\n<p>\u26a0 45 queries in 0.85s\n<\/p>\n<p>\u26a0 2 errors\n<\/p>\n\n<strong>Click to see details:<\/strong>\n\n<p>Queries by Component:\n<\/p>\n<ul>\n<li>Attributes User Access: 12 queries (0.15s)<\/li><\/ul>\n\n<ul>\n<li>WordPress Core: 25 queries (0.50s)<\/li><\/ul>\n\n<ul>\n<li>Theme: 8 queries (0.20s)<\/li><\/ul>\n\n<p>Slow Queries (&gt;0.05s):\n<\/p>\n<p>SELECT * FROM wp_usermeta WHERE meta_key LIKE &#8216;attrua_%&#8217; (0.12s)\n<\/p>\n\n<h2>Common Debug Scenarios<\/h2>\n\n<h3>Scenario 1: Login Not Working<\/h3>\n\n<strong>Debug steps:<\/strong>\n\n<ul>\n<li>Enable WP_DEBUG<\/li><\/ul>\n\n<ul>\n<li>Attempt login<\/li><\/ul>\n\n<ul>\n<li>Check debug.log<\/li><\/ul>\n\n<ul>\n<li>Look for:<\/li><\/ul>\n\n<p>   &#8211; PHP errors\n<\/p>\n<p>   &#8211; Database errors\n<\/p>\n<p>   &#8211; Authentication failures\n<\/p>\n<ul>\n<li>Enable ATTRUA_DEBUG for details<\/li><\/ul>\n\n<strong>Typical log entries:<\/strong>\n\n<p>[19-Dec-2025 14:30:15] Attempting login for: john\n<\/p>\n<p>[19-Dec-2025 14:30:15] wp_authenticate_user: Invalid username\n<\/p>\n<p>\u2192 Username doesn&#8217;t exist\n<\/p>\n\n<p>OR:\n<\/p>\n\n<p>[19-Dec-2025 14:30:15] Attempting login for: john\n<\/p>\n<p>[19-Dec-2025 14:30:15] wp_check_password: FAILED\n<\/p>\n<p>\u2192 Wrong password\n<\/p>\n\n<h3>Scenario 2: Redirects Not Working<\/h3>\n\n<strong>Enable redirect debugging:<\/strong>\n\n<pre><code class=\"language-php\">\n\/\/ wp-config.php\ndefine(&#039;ATTRUA_DEBUG&#039;, true);\ndefine(&#039;ATTRUA_DEBUG_REDIRECTS&#039;, true);\n<\/code><\/pre>\n\n<strong>Check log:<\/strong>\n\n<p>[19-Dec-2025 14:30:45] Redirect check for user ID: 5\n<\/p>\n<p>[19-Dec-2025 14:30:45] User role: subscriber\n<\/p>\n<p>[19-Dec-2025 14:30:45] Redirect rule match: \/member-area\/\n<\/p>\n<p>[19-Dec-2025 14:30:45] Final redirect URL: https:\/\/example.com\/member-area\/\n<\/p>\n<p>[19-Dec-2025 14:30:45] Redirect executed: wp_redirect()\n<\/p>\n\n<h3>Scenario 3: Performance Issues<\/h3>\n\n<strong>Enable query logging:<\/strong>\n\n<pre><code class=\"language-php\">\n\/\/ wp-config.php\ndefine(&#039;SAVEQUERIES&#039;, true);\n<\/code><\/pre>\n\n<strong>Check query count:<\/strong>\n\n<pre><code class=\"language-php\">\n\/\/ Add to footer.php temporarily\nglobal $wpdb;\necho &quot;&lt;!-- &quot; . count($wpdb-&gt;queries) . &quot; queries --&gt;&quot;;\nforeach ($wpdb-&gt;queries as $q) {\n    if ($q[1] &gt; 0.05) { \/\/ Queries slower than 50ms\n        echo &quot;&lt;!-- SLOW: &quot; . $q[0] . &quot; (&quot; . $q[1] . &quot;s) --&gt;&quot;;\n    }\n}\n<\/code><\/pre>\n\n<h2>Browser DevTools<\/h2>\n\n<h3>Network Tab<\/h3>\n\n<strong>Monitor AJAX requests:<\/strong>\n\n<ul>\n<li>Open DevTools (F12)<\/li><\/ul>\n\n<ul>\n<li>Go to Network tab<\/li><\/ul>\n\n<ul>\n<li>Filter: XHR<\/li><\/ul>\n\n<ul>\n<li>Attempt action (login, register)<\/li><\/ul>\n\n<ul>\n<li>Check AJAX request status:<\/li><\/ul>\n\n<p>   &#8211; 200: Success\n<\/p>\n<p>   &#8211; 400: Bad request\n<\/p>\n<p>   &#8211; 403: Forbidden  \n<\/p>\n<p>   &#8211; 500: Server error\n<\/p>\n\n<h3>Console Tab<\/h3>\n\n<strong>Check for JavaScript errors:<\/strong>\n\n<ul>\n<li>Open Console tab<\/li><\/ul>\n\n<ul>\n<li>Attempt action<\/li><\/ul>\n\n<ul>\n<li>Look for red error messages<\/li><\/ul>\n\n<ul>\n<li>Note file and line number<\/li><\/ul>\n\n<h2>Sharing Debug Information<\/h2>\n\n<h3>When Contacting Support<\/h3>\n\n<strong>Provide this information:<\/strong>\n\n<div class=\"attrua-checklist\">\n<ul>\n<ul>\n<li>WordPress version<\/li><\/ul>\n\n<ul>\n<li>PHP version<\/li><\/ul>\n\n<ul>\n<li>Plugin version<\/li><\/ul>\n\n<ul>\n<li>Active plugins list<\/li><\/ul>\n\n<ul>\n<li>Active theme<\/li><\/ul>\n\n<ul>\n<li>Relevant debug.log entries<\/li><\/ul>\n\n<ul>\n<li>Browser console errors (if applicable)<\/li><\/ul>\n\n<ul>\n<li>Steps to reproduce issue<\/li><\/ul>\n\n<ul>\n<li>Screenshots of error messages<\/li><\/ul>\n\n<\/ul>\n<\/div>\n\n<h3>Sanitizing Sensitive Data<\/h3>\n\n<strong>Before sharing logs:<\/strong>\n\n<p>Remove:\n<\/p>\n<ul>\n<li>Passwords (should never be in logs anyway)<\/li><\/ul>\n\n<ul>\n<li>Email addresses (replace with &#117;&#115;&#x65;r&#64;&#x65;&#x78;a&#109;&#x70;&#x6c;e&#46;&#x63;o&#109;)<\/li><\/ul>\n\n<ul>\n<li>IP addresses (replace with 203.0.113.1)<\/li><\/ul>\n\n<ul>\n<li>API keys \/ license keys<\/li><\/ul>\n\n<ul>\n<li>Database credentials<\/li><\/ul>\n\n<p>Keep:\n<\/p>\n<ul>\n<li>Error messages<\/li><\/ul>\n\n<ul>\n<li>Stack traces<\/li><\/ul>\n\n<ul>\n<li>Query structures (without actual data)<\/li><\/ul>\n\n<ul>\n<li>Timestamps<\/li><\/ul>\n\n<h2>Disabling Debug Mode<\/h2>\n\n<h3>When Finished Debugging<\/h3>\n\n<strong>IMPORTANT: Disable debug on production sites<\/strong>\n\n<strong>Edit wp-config.php:<\/strong>\n\n<pre><code class=\"language-php\">\n\/\/ Change back to:\ndefine(&#039;WP_DEBUG&#039;, false);\n\n\/\/ Remove these:\n\/\/ define(&#039;WP_DEBUG_LOG&#039;, true);\n\/\/ define(&#039;WP_DEBUG_DISPLAY&#039;, false);\n\/\/ define(&#039;SAVEQUERIES&#039;, true);\n\/\/ define(&#039;ATTRUA_DEBUG&#039;, true);\n<\/code><\/pre>\n\n<strong>Delete debug.log:<\/strong>\n\n<p>Delete \/wp-content\/debug.log\n<\/p>\n<p>(May contain sensitive information)\n<\/p>\n\n<h2>Best Practices<\/h2>\n\n<div class=\"attrua-pro-tip\"><strong>Never Enable on Production Without Hiding Errors<\/strong><br>\n<p>Always use WP_DEBUG_DISPLAY = false on live sites. Only log to file.\n<\/p>\n<\/div>\n\n<div class=\"attrua-pro-tip\"><strong>Monitor Log File Size<\/strong><br>\n<p>debug.log can grow to hundreds of MB. Delete regularly.\n<\/p>\n<\/div>\n\n<div class=\"attrua-pro-tip\"><strong>Use Staging for Intensive Debugging<\/strong><br>\n<p>Clone production to staging. Debug there first.\n<\/p>\n<\/div>\n\n<div class=\"attrua-pro-tip\"><strong>Document Findings<\/strong><br>\n<p>Keep notes on errors found and solutions applied.\n<\/p>\n<\/div>\n\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Enable debug mode to diagnose plugin issues.<\/p>","protected":false},"featured_media":0,"parent":0,"template":"","meta":{"_acf_changed":false,"_surecart_dashboard_logo_width":"180px","_surecart_dashboard_show_logo":true,"_surecart_dashboard_navigation_orders":true,"_surecart_dashboard_navigation_invoices":true,"_surecart_dashboard_navigation_subscriptions":true,"_surecart_dashboard_navigation_downloads":true,"_surecart_dashboard_navigation_billing":true,"_surecart_dashboard_navigation_account":true,"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"footnotes":""},"chapter":[370],"class_list":["post-3532","docs","type-docs","status-publish","hentry","chapter-troubleshooting"],"acf":{"reading_time":"","difficulty":"beginner","plugin_version":"1.2.2","last_updated":null},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/attributeswp.com\/wp-json\/wp\/v2\/docs\/3532","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/attributeswp.com\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/attributeswp.com\/wp-json\/wp\/v2\/types\/docs"}],"version-history":[{"count":0,"href":"https:\/\/attributeswp.com\/wp-json\/wp\/v2\/docs\/3532\/revisions"}],"wp:attachment":[{"href":"https:\/\/attributeswp.com\/wp-json\/wp\/v2\/media?parent=3532"}],"wp:term":[{"taxonomy":"chapter","embeddable":true,"href":"https:\/\/attributeswp.com\/wp-json\/wp\/v2\/chapter?post=3532"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}