An Avada global header may fail only on certain templates, devices, roles, or cache states after a child-theme change. The child theme can remove a callback before it exists, add a replacement twice, use a priority that runs after output has started, or apply conditions that disagree with Avada Layout assignment. Copying another parent template into the child theme often freezes old markup and adds a second source of truth.
Use this when an Avada global header disappears, duplicates, loses navigation, or renders the wrong layout after functions.php, a child-theme update, or custom hook code changes.
Quick answer
Capture the failing URL, template, layout assignment, device, login state, language, cache status, and Avada versions. Search the parent theme, child theme, mu-plugins, snippets, and plugins for add_action, remove_action, header templates, and Avada layout filters. Log the relevant callback names and priorities on staging. Confirm the callback exists before removing it, register the replacement once at a deliberate priority, and keep the server capability and layout conditions aligned. Remove copied parent templates unless they are intentionally maintained.
Test scenarios to run
Run the same controlled fixture across these branches. Write down the expected result before testing so a surprising response is easy to identify.
| Scenario | Fixture | Expected result |
| Parent only | Child theme inactive | Global header renders |
| Child no hook | Custom callback disabled | Assignment still correct |
| One callback | Known priority | Header renders once |
| Cache cycle | Origin and CDN miss/hit | Same header and assets |
Diagnostic table
Use this table to connect the observed behavior to evidence and a verification step.
| Action | Evidence | Verification |
| Freeze the failing fixture | Record Avada, Avada Core, Avada Builder, WordPress, PHP, child-theme commit, active layout, conditions, and cache versions. | The intended header renders once on every assigned route. |
| Inventory callbacks and templates | Search every owned code location for header hooks, callback removals, filters, template copies, output buffering, and mobile-specific branches. | Callback order and conditions are documented and stable. |
| Compare hook order | Dump the relevant hook callbacks and priorities on staging for a working URL and failing URL, then compare order and conditions. | Parent, child, Core, Builder, and generated asset versions agree. |
| Keep one supported owner | Test parent theme alone, child theme with hooks disabled, one callback restored, and caches cleared in a controlled sequence. | Origin and CDN miss and hit responses match across roles and devices. |
What to check first
- Record Avada, Avada Core, Avada Builder, WordPress, PHP, child-theme commit, active layout, conditions, and cache versions.
- Search every owned code location for header hooks, callback removals, filters, template copies, output buffering, and mobile-specific branches.
- Dump the relevant hook callbacks and priorities on staging for a working URL and failing URL, then compare order and conditions.
- Test parent theme alone, child theme with hooks disabled, one callback restored, and caches cleared in a controlled sequence.
- Verify desktop, mobile, logged-out, logged-in, language, archive, singular, WooCommerce, error page, and direct uncached paths.
Field notes
- Write the expected result before changing anything and keep one repeatable synthetic fixture for the full test window.
- Record exact versions and UTC timestamps because caches, retries, scheduled actions, and deployments can change the evidence between checks.
- Test the public path and the stored server-side result, not only an admin preview, isolated command, or API response.
- Review the result again after the relevant cache, queue, cron, webhook, and observation window has completed.
Useful command or data shape
Adapt paths, IDs, and privacy handling to the site before running commands or storing data on production.
global $wp_filter;
$hook = 'wp_head';
error_log( print_r( $wp_filter[ $hook ] ?? null, true ) );
# Use staging and remove temporary callback logging after the comparison.
# Compare working and failing URLs with the same cache state.
Why this usually happens
- remove_action runs before the parent callback is registered or uses the wrong priority.
- A snippet plugin and the child theme both register the same replacement.
- A copied header template no longer matches the current Avada parent version.
- Dynamic CSS or CDN HTML preserves the broken state after PHP code is corrected.
Decision rule
Keep one explicit owner for header output. Do not patch CSS around missing markup or copy a parent template until callback order, layout assignment, and cache state explain the failure.
Production verification checklist
- The intended header renders once on every assigned route.
- Callback order and conditions are documented and stable.
- Parent, child, Core, Builder, and generated asset versions agree.
- Origin and CDN miss and hit responses match across roles and devices.
Safe fix order
Use a sequence that makes each result easy to prove. Stop when new evidence changes the scope or owner of the problem.
- Freeze the failing fixture
- Inventory callbacks and templates
- Compare hook order
- Keep one supported owner
- Regenerate assets and verify
Mistakes to avoid
- Changing production before recording exact versions, UTC timestamps, a stable fixture, the expected result, and a tested rollback point.
- Treating one successful screen as proof while logs, stored records, background jobs, caches, emails, APIs, and downstream systems remain unchecked.
- Testing only as an administrator instead of using the role, device, locale, cache state, request path, and failure branch that users actually reach.
- Leaving debug output, temporary exclusions, helper accounts, duplicate hooks, broad permissions, or relaxed firewall rules active after verification.
Questions teams ask during testing
Can I test this directly in production?
Start with read-only evidence. Use staging for code, package, security, checkout, form, privacy, or cache changes. If a production canary is necessary, make it identifiable, reversible, monitored, and incapable of exposing personal data or charging a customer.
How do I avoid a false positive?
Repeat the same fixture with the same versions, URL, role, locale, cache state, and downstream integration. Compare the public result, stored result, and logs instead of relying on one browser view.
What evidence should I retain?
Keep UTC time, exact versions, request or record ID, expected result, actual result, relevant log lines, change made, rollback point, owner, and final verification. Redact credentials, tokens, and personal data.
When is the work complete?
Close it when the primary path passes, failure branches are understood, stored and downstream records reconcile, temporary changes are removed, monitoring is active, and the owner has the evidence packet.
What to tell the client or owner
Give the owner a concise packet with the affected workflow, exact versions, UTC test time, synthetic fixture ID, expected result, actual result, key logs, change made, rollback point, final result, unresolved risks, owner, and next review date. Remove credentials and personal data before sharing it.
When HandL WP should help
Bring in help when this affects leads, checkout, search visibility, security, paid media reporting, or a client production site. HandL WP can trace the issue through WordPress, hosting, cache, tracking, and Search Console, then verify the workflow after the technical fix.
If this is active on a production site, have HandL WP repair an Avada global header.
Related HandL WP guides
Use these related guides when the same issue touches tracking, security, checkout, or crawler visibility.
Helpful references