{"id":1041,"date":"2024-12-17T00:00:00","date_gmt":"2024-12-17T00:00:00","guid":{"rendered":"https:\/\/attributesuseraccess.com\/?post_type=docs&amp;p=1041"},"modified":"2024-12-17T00:00:00","modified_gmt":"2024-12-17T00:00:00","slug":"plugin-conflict-resolution","status":"publish","type":"docs","link":"https:\/\/attributeswp.com\/docs\/plugin-conflict-resolution\/","title":{"rendered":"Plugin Conflict Resolution"},"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><\/div>\n\n<div class=\"attrua-doc-content\">\n\n<h2>Overview<\/h2>\n\n<p>WordPress plugins sometimes conflict due to overlapping functionality, JavaScript conflicts, or hook priority issues. This guide helps identify and resolve conflicts between Attributes User Access and other plugins.\n<\/p>\n\n<h2>Identifying Conflicts<\/h2>\n\n<h3>Symptoms of Plugin Conflicts<\/h3>\n\n<strong>Common signs:<\/strong>\n\n<pre><code>\n\u2717 Features stop working after activating another plugin\n\u2717 JavaScript errors in browser console\n\u2717 White screen or fatal PHP errors\n\u2717 Login forms display incorrectly\n\u2717 Redirects stop working\n\u2717 Settings won&#039;t save\n\u2717 Performance suddenly degrades\n<\/code><\/pre>\n\n<h3>Systematic Testing<\/h3>\n\n<strong>Isolation method:<\/strong>\n\n<strong>Step 1: Backup site<\/strong>\n\n<p>Always backup before troubleshooting\n<\/p>\n<p>Database + files + current state\n<\/p>\n\n<strong>Step 2: Deactivate all other plugins<\/strong>\n\n<ul>\n<li>Go to Plugins \u2192 Installed Plugins<\/li><\/ul>\n\n<ul>\n<li>Deactivate ALL plugins except Attributes User Access<\/li><\/ul>\n\n<ul>\n<li>Test if issue persists<\/li><\/ul>\n\n<strong>Step 3: Reactivate one by one<\/strong>\n\n<ul>\n<li>Activate first plugin<\/li><\/ul>\n\n<ul>\n<li>Test feature that was broken<\/li><\/ul>\n\n<ul>\n<li>If still works, move to next plugin<\/li><\/ul>\n\n<ul>\n<li>If breaks, you found conflicting plugin<\/li><\/ul>\n\n<ul>\n<li>Document which plugin causes issue<\/li><\/ul>\n\n<strong>Step 4: Test with default theme<\/strong>\n\n<p>Sometimes themes cause issues\n<\/p>\n<p>Switch to Twenty Twenty-Four\n<\/p>\n<p>Test again\n<\/p>\n\n<h2>Common Plugin Conflicts<\/h2>\n\n<h3>Security Plugins<\/h3>\n\n<strong>Wordfence, Sucuri, iThemes Security:<\/strong>\n\n<strong>Common issues:<\/strong>\n\n<ul>\n<li>Login form blocked as &#8220;brute force attempt&#8221;<\/li><\/ul>\n\n<ul>\n<li>AJAX requests blocked by firewall<\/li><\/ul>\n\n<ul>\n<li>2FA conflicts (both plugins try to handle 2FA)<\/li><\/ul>\n\n<ul>\n<li>IP blocking conflicts<\/li><\/ul>\n\n<ul>\n<li>Rate limiting conflicts<\/li><\/ul>\n\n<strong>Solutions:<\/strong>\n\n<ul>\n<li>Whitelist Attributes User Access plugin files<\/li><\/ul>\n\n<ul>\n<li>Exclude login pages from security scanning<\/li><\/ul>\n\n<ul>\n<li>Disable duplicate features (keep only one 2FA system)<\/li><\/ul>\n\n<ul>\n<li>Add plugin AJAX endpoints to allowed list<\/li><\/ul>\n\n<ul>\n<li>Coordinate IP allow\/block lists<\/li><\/ul>\n\n<strong>Wordfence specific:<\/strong>\n\n<p>Wordfence \u2192 Firewall \u2192 Rate Limiting\n<\/p>\n\n<p>Whitelist AJAX actions:\n<\/p>\n<ul>\n<li>attrua_login<\/li><\/ul>\n\n<ul>\n<li>attrua_register  <\/li><\/ul>\n\n<ul>\n<li>attrua_verify_2fa<\/li><\/ul>\n\n<p>Wordfence \u2192 All Options \u2192 Advanced Blocking\n<\/p>\n\n<p>Exclude pages from blocking:\n<\/p>\n<p>\/login\/\n<\/p>\n<p>\/my-account\/\n<\/p>\n\n<h3>Caching Plugins<\/h3>\n\n<strong>WP Rocket, W3 Total Cache, WP Super Cache:<\/strong>\n\n<strong>Common issues:<\/strong>\n\n<ul>\n<li>Login forms cached (shows logged-in state to logged-out users)<\/li><\/ul>\n\n<ul>\n<li>Redirects cached incorrectly<\/li><\/ul>\n\n<ul>\n<li>Dynamic content not updating<\/li><\/ul>\n\n<ul>\n<li>Sessions not preserved<\/li><\/ul>\n\n<strong>Solutions:<\/strong>\n\n<p>Never cache these pages:\n<\/p>\n<p>\/login\/\n<\/p>\n<p>\/register\/\n<\/p>\n<p>\/my-account\/\n<\/p>\n<p>\/dashboard\/\n<\/p>\n<p>\/user-profile\/\n<\/p>\n<p>\/wp-admin\/\n<\/p>\n\n<p>Never cache query strings:\n<\/p>\n<p>?action=login\n<\/p>\n<p>?action=logout\n<\/p>\n<p>?action=register\n<\/p>\n\n<strong>WP Rocket config:<\/strong>\n\n<p>Settings \u2192 Advanced Rules\n<\/p>\n\n<p>Never Cache URL(s):\n<\/p>\n<p>\/login(.*)\n<\/p>\n<p>\/my-account(.*)\n<\/p>\n<p>\/dashboard(.*)\n<\/p>\n\n<p>Never Cache Cookies:\n<\/p>\n<p>wordpress_logged_in_(.*)\n<\/p>\n<p>wordpress_sec_(.*)\n<\/p>\n<p>attrua_session_(.*)\n<\/p>\n\n<strong>W3 Total Cache:<\/strong>\n\n<p>Performance \u2192 Page Cache \u2192 Advanced\n<\/p>\n\n<p>Never cache these pages:\n<\/p>\n<p>\/login\/\n<\/p>\n<p>\/my-account\/\n<\/p>\n\n<p>Don&#8217;t cache for logged-in users:\n<\/p>\n<p>\u2611 Enabled\n<\/p>\n\n<h3>Membership Plugins<\/h3>\n\n<strong>MemberPress, Restrict Content Pro, Paid Memberships Pro:<\/strong>\n\n<strong>Common issues:<\/strong>\n\n<ul>\n<li>Conflicting login pages<\/li><\/ul>\n\n<ul>\n<li>Duplicate registration forms<\/li><\/ul>\n\n<ul>\n<li>User role sync issues<\/li><\/ul>\n\n<ul>\n<li>Redirect conflicts<\/li><\/ul>\n\n<strong>Resolution strategies:<\/strong>\n\n<p>Strategy 1: Use Attributes for login, Membership for content\n<\/p>\n<ul>\n<li>Attributes: Handles authentication<\/li><\/ul>\n\n<ul>\n<li>Membership: Handles access control<\/li><\/ul>\n\n<p>Strategy 2: Coordinate redirects\n<\/p>\n<ul>\n<li>Set redirect priority in settings<\/li><\/ul>\n\n<ul>\n<li>Document which plugin handles what<\/li><\/ul>\n\n<p>Strategy 3: Sync user roles\n<\/p>\n<ul>\n<li>Map Attributes roles to membership levels<\/li><\/ul>\n\n<ul>\n<li>Use hooks to keep roles synchronized<\/li><\/ul>\n\n<strong>Example role sync:<\/strong>\n\n<pre><code class=\"language-php\">\n\/\/ functions.php\nadd_action(&#039;attrua_user_registered&#039;, function($user_id) {\n    \/\/ Assign MemberPress membership after Attributes registration\n    $member = new MeprUser($user_id);\n    $member-&gt;set_membership_level(123); \/\/ Your membership ID\n});\n<\/code><\/pre>\n\n<h3>WooCommerce<\/h3>\n\n<strong>Common issues:<\/strong>\n\n<ul>\n<li>My Account page conflict<\/li><\/ul>\n\n<ul>\n<li>Checkout redirect issues<\/li><\/ul>\n\n<ul>\n<li>Customer role conflicts<\/li><\/ul>\n\n<ul>\n<li>Email template conflicts<\/li><\/ul>\n\n<strong>Solutions:<\/strong>\n\n<ul>\n<li>Enable WooCommerce integration in Attributes settings<\/li><\/ul>\n\n<ul>\n<li>Choose redirect priority (WooCommerce or Attributes)<\/li><\/ul>\n\n<ul>\n<li>Coordinate customer role assignment<\/li><\/ul>\n\n<ul>\n<li>Use consistent email templates<\/li><\/ul>\n\n<strong>Configuration:<\/strong>\n\n<p>Users \u2192 Login Settings \u2192 Integrations\n<\/p>\n\n<p>WooCommerce Integration:\n<\/p>\n<p>\u2611 Enable WooCommerce support\n<\/p>\n\n<p>Login Priority:\n<\/p>\n<p>\u25cf Attributes User Access\n<\/p>\n<p>\u25cb WooCommerce default\n<\/p>\n\n<p>Customer Role:\n<\/p>\n<p>\u25cf Keep WooCommerce &#8220;Customer&#8221; role\n<\/p>\n<p>\u25cb Replace with Attributes roles\n<\/p>\n\n<h3>Translation Plugins<\/h3>\n\n<strong>WPML, Polylang, TranslatePress:<\/strong>\n\n<strong>Common issues:<\/strong>\n\n<ul>\n<li>Translated pages don&#8217;t show login form<\/li><\/ul>\n\n<ul>\n<li>Language switcher breaks redirects<\/li><\/ul>\n\n<ul>\n<li>User roles not translated<\/li><\/ul>\n\n<ul>\n<li>Email templates wrong language<\/li><\/ul>\n\n<strong>Solutions:<\/strong>\n\n<ul>\n<li>Register login\/register pages in translation plugin<\/li><\/ul>\n\n<ul>\n<li>Create translated versions of destination pages<\/li><\/ul>\n\n<ul>\n<li>Use language-specific redirects<\/li><\/ul>\n\n<ul>\n<li>Translate email templates for each language<\/li><\/ul>\n\n<strong>WPML configuration:<\/strong>\n\n<p>WPML \u2192 Translation Options\n<\/p>\n\n<p>Translatable pages:\n<\/p>\n<p>\u2611 Login page\n<\/p>\n<p>\u2611 Register page\n<\/p>\n<p>\u2611 Dashboard page\n<\/p>\n\n<p>URL format:\n<\/p>\n<p>\u25cf Different domains per language\n<\/p>\n<p>\u25cb Directory for languages\n<\/p>\n\n<h3>Form Builder Conflicts<\/h3>\n\n<strong>Contact Form 7, Gravity Forms, WPForms:<\/strong>\n\n<strong>Common issues:<\/strong>\n\n<ul>\n<li>jQuery version conflicts<\/li><\/ul>\n\n<ul>\n<li>Form validation conflicts<\/li><\/ul>\n\n<ul>\n<li>AJAX submission conflicts<\/li><\/ul>\n\n<ul>\n<li>CSS conflicts<\/li><\/ul>\n\n<strong>Solutions:<\/strong>\n\n<ul>\n<li>Load Attributes forms in different container<\/li><\/ul>\n\n<ul>\n<li>Use unique CSS classes<\/li><\/ul>\n\n<ul>\n<li>Namespace JavaScript functions<\/li><\/ul>\n\n<ul>\n<li>Test form submission thoroughly<\/li><\/ul>\n\n<h2>JavaScript Conflicts<\/h2>\n\n<h3>Detecting JS Errors<\/h3>\n\n<strong>Open browser console:<\/strong>\n\n<p>Chrome\/Edge: F12 \u2192 Console tab\n<\/p>\n<p>Firefox: F12 \u2192 Console tab\n<\/p>\n<p>Safari: Develop \u2192 Show JavaScript Console\n<\/p>\n\n<p>Look for:\n<\/p>\n<ul>\n<li>&#8220;$ is not defined&#8221; (jQuery not loaded)<\/li><\/ul>\n\n<ul>\n<li>&#8220;Uncaught TypeError&#8221; (function doesn&#8217;t exist)<\/li><\/ul>\n\n<ul>\n<li>&#8220;Script error&#8221; (CORS or load failure)<\/li><\/ul>\n\n<h3>Common JS Issues<\/h3>\n\n<strong>jQuery not loaded:<\/strong>\n\n<pre><code class=\"language-php\">\n\/\/ functions.php - Ensure jQuery loaded\nadd_action(&#039;wp_enqueue_scripts&#039;, function() {\n    wp_enqueue_script(&#039;jquery&#039;);\n}, 1);\n<\/code><\/pre>\n\n<strong>jQuery version conflict:<\/strong>\n\n<pre><code class=\"language-php\">\n\/\/ Some plugins load old jQuery\n\/\/ Force WordPress jQuery\nadd_action(&#039;wp_enqueue_scripts&#039;, function() {\n    wp_deregister_script(&#039;jquery&#039;);\n    wp_register_script(&#039;jquery&#039;, includes_url(&#039;\/js\/jquery\/jquery.min.js&#039;), false, null, false);\n    wp_enqueue_script(&#039;jquery&#039;);\n}, 0);\n<\/code><\/pre>\n\n<strong>Script loading order:<\/strong>\n\n<pre><code class=\"language-php\">\n\/\/ Ensure Attributes scripts load after dependencies\nadd_action(&#039;wp_enqueue_scripts&#039;, function() {\n    wp_enqueue_script(&#039;attrua-login&#039;, \n        plugin_dir_url(__FILE__) . &#039;js\/login.js&#039;,\n        array(&#039;jquery&#039;), \/\/ Dependencies\n        &#039;1.2.1&#039;,\n        true \/\/ Load in footer\n    );\n}, 20); \/\/ High priority number = loads later\n<\/code><\/pre>\n\n<h2>CSS Conflicts<\/h2>\n\n<h3>Identifying CSS Issues<\/h3>\n\n<strong>Symptoms:<\/strong>\n\n<ul>\n<li>Login form layout broken<\/li><\/ul>\n\n<ul>\n<li>Buttons wrong color\/size<\/li><\/ul>\n\n<ul>\n<li>Text overlapping<\/li><\/ul>\n\n<ul>\n<li>Form fields not visible<\/li><\/ul>\n\n<ul>\n<li>Mobile responsive issues<\/li><\/ul>\n\n<h3>Debugging CSS Conflicts<\/h3>\n\n<strong>Browser DevTools:<\/strong>\n\n<ul>\n<li>Right-click on broken element<\/li><\/ul>\n\n<ul>\n<li>Select &#8220;Inspect&#8221; or &#8220;Inspect Element&#8221;<\/li><\/ul>\n\n<ul>\n<li>Check &#8220;Styles&#8221; panel<\/li><\/ul>\n\n<ul>\n<li>Look for crossed-out styles (overridden)<\/li><\/ul>\n\n<ul>\n<li>Note which stylesheet overrides<\/li><\/ul>\n\n<strong>Common conflicts:<\/strong>\n\n<p>Theme CSS:\n<\/p>\n<p>input[type=&#8221;text&#8221;] { width: 100%; }\n<\/p>\n<p>\u2193 Overrides plugin CSS\n<\/p>\n\n<p>Solution: Add !important or increase specificity\n<\/p>\n<p>.attrua-login-form input[type=&#8221;text&#8221;] { width: 300px !important; }\n<\/p>\n\n<h3>CSS Conflict Solutions<\/h3>\n\n<strong>Increase specificity:<\/strong>\n\n<pre><code class=\"language-css\">\n\/&lt;em&gt; Instead of &lt;\/em&gt;\/\n.login-form { ... }\n\n\/&lt;em&gt; Use more specific selector &lt;\/em&gt;\/\n.attrua-login-form.custom-login { ... }\n\n\/&lt;em&gt; Or ID (highest specificity) &lt;\/em&gt;\/\n#attrua-login-wrapper .login-form { ... }\n<\/code><\/pre>\n\n<strong>Use !important (last resort):<\/strong>\n\n<pre><code class=\"language-css\">\n.attrua-login-form input[type=&quot;text&quot;] {\n    width: 300px !important;\n    background: #fff !important;\n}\n<\/code><\/pre>\n\n<strong>Namespace your styles:<\/strong>\n\n<pre><code class=\"language-css\">\n\/&lt;em&gt; Wrap all plugin styles in unique container &lt;\/em&gt;\/\n.attrua-wrapper {\n    \/&lt;em&gt; All styles here won&#039;t affect other plugins &lt;\/em&gt;\/\n}\n<\/code><\/pre>\n\n<h2>Database Conflicts<\/h2>\n\n<h3>Table Prefix Conflicts<\/h3>\n\n<strong>Issue: Another plugin uses same table names<\/strong>\n\n<strong>Check table prefixes:<\/strong>\n\n<pre><code class=\"language-sql\">\nSHOW TABLES LIKE &#039;wp_attrua%&#039;;\n\n-- If you see unexpected tables from other plugins\n-- Attributes uses:\n-- wp_attrua_audit_log\n-- wp_attrua_ip_whitelist\n-- wp_attrua_ip_blacklist\n-- wp_attrua_sessions\n<\/code><\/pre>\n\n<strong>Resolution:<\/strong>\n\n<p>Very rare issue\n<\/p>\n<p>Contact support if occurs\n<\/p>\n<p>May need to change plugin table prefix\n<\/p>\n\n<h2>Hook Priority Conflicts<\/h2>\n\n<h3>WordPress Hook System<\/h3>\n\n<strong>Understanding priority:<\/strong>\n\n<pre><code class=\"language-php\">\n\/\/ Lower number = runs earlier\nadd_action(&#039;init&#039;, &#039;function1&#039;, 10);  \/\/ Runs first\nadd_action(&#039;init&#039;, &#039;function2&#039;, 20);  \/\/ Runs second\n\n\/\/ Default priority is 10\n\/\/ Use higher priority to run after other plugins\n<\/code><\/pre>\n\n<h3>Login Redirect Conflicts<\/h3>\n\n<strong>Multiple plugins trying to redirect:<\/strong>\n\n<pre><code class=\"language-php\">\n\/\/ Plugin A redirects to \/dashboard\/\n\/\/ Plugin B redirects to \/my-account\/\n\/\/ Who wins? Last one hooked or highest priority\n\n\/\/ Solution: Set Attributes priority higher\nadd_filter(&#039;login_redirect&#039;, &#039;attrua_login_redirect&#039;, 999, 3);\n<\/code><\/pre>\n\n<h2>Resolution Strategy<\/h2>\n\n<h3>Systematic Approach<\/h3>\n\n<div class=\"attrua-checklist\">\n<ol>\n<\/ol><ul>\n<li>Identify which plugin conflicts<\/li><\/ul>\n\n<ul>\n<li>Check both plugins&#8217; settings for overlap<\/li><\/ul>\n\n<ul>\n<li>Disable duplicate features<\/li><\/ul>\n\n<ul>\n<li>Coordinate configurations<\/li><\/ul>\n\n<ul>\n<li>Test thoroughly<\/li><\/ul>\n\n<ul>\n<li>Document resolution for future reference<\/li><\/ul>\n\n<ul>\n<li>Contact both plugin authors if unsure<\/li><\/ul>\n\n\n<\/div>\n\n<h2>Getting Help<\/h2>\n\n<h3>Information to Provide Support<\/h3>\n\n<strong>When reporting conflicts:<\/strong>\n\n<ul>\n<li>List ALL active plugins (name + version)<\/li><\/ul>\n\n<ul>\n<li>WordPress version<\/li><\/ul>\n\n<ul>\n<li>PHP version<\/li><\/ul>\n\n<ul>\n<li>Theme name + version<\/li><\/ul>\n\n<ul>\n<li>Exact steps to reproduce<\/li><\/ul>\n\n<ul>\n<li>Error messages (if any)<\/li><\/ul>\n\n<ul>\n<li>Browser console errors<\/li><\/ul>\n\n<ul>\n<li>What you&#8217;ve already tried<\/li><\/ul>\n\n<ul>\n<li>Does it work with other plugins deactivated?<\/li><\/ul>\n\n<h2>Best Practices<\/h2>\n\n<div class=\"attrua-pro-tip\"><strong>Test on Staging First<\/strong><br>\n<p>Always test plugin combinations on staging site before production.\n<\/p>\n<\/div>\n\n<div class=\"attrua-pro-tip\"><strong>Keep Plugins Updated<\/strong><br>\n<p>Many conflicts resolved in updates. Keep everything current.\n<\/p>\n<\/div>\n\n<div class=\"attrua-pro-tip\"><strong>Avoid Redundancy<\/strong><br>\n<p>Don&#8217;t use two plugins for same feature (2\u00d7 2FA plugins, 2\u00d7 security, etc.)\n<\/p>\n<\/div>\n\n<div class=\"attrua-pro-tip\"><strong>Document Configurations<\/strong><br>\n<p>Keep notes on which features each plugin handles.\n<\/p>\n<\/div>\n\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Identify and resolve conflicts with other WordPress plugins.<\/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-1041","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\/1041","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\/1041\/revisions"}],"wp:attachment":[{"href":"https:\/\/attributeswp.com\/wp-json\/wp\/v2\/media?parent=1041"}],"wp:term":[{"taxonomy":"chapter","embeddable":true,"href":"https:\/\/attributeswp.com\/wp-json\/wp\/v2\/chapter?post=1041"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}