Skip to content

Autoloader fatals when nav_walker.php is unavailable #4579

Description

@pirate-bot

Summary

A frontend request can terminate with a fatal error when the theme attempts to load its navigation walker and the mapped class file is unavailable.

Expected behavior: an unavailable mapped class file is handled without a PHP require() fatal.

Actual behavior: loading the navigation walker reaches a required-file error for nav_walker.php, preventing the frontend request from completing.

Impact: the affected site returned a fatal error on the frontend.

Customer context

  • Product / area: Neve navigation menu autoloading
  • Version: 4.2.10
  • Environment: WordPress 6.9.5; PHP 7.4.33
  • Integration / third party: Themeisle SDK 3.3.59 reported, but the crash is outside SDK code
  • Reported error / symptom: require(): Failed opening required '.../nav_walker.php'
  • Impact: One frontend fatal across one distinct production site in the telemetry query window.

Reproduction notes

  1. Use Neve 4.2.10 with the navigation component active on the frontend.
  2. In a controlled copy, make the mapped nav_walker.php unavailable or unreadable.
  3. Render a primary navigation menu.

Reported production result: a shutdown-detected fatal at autoloader.php:148 stating that nav_walker.php could not be opened. The precise deployment condition that made the file unavailable was not captured.

Diagnosis

Conclusion

Telemetry identifies a fatal at autoloader.php:148 while loading nav_walker.php. The inspected 4.2.10 source maps Neve\Views\Nav_Walker to that file and its autoloader invokes require unconditionally, despite its documented boolean missing-file contract. This directly explains why an unavailable mapped file produces a fatal rather than an autoload failure.

Where this likely occurs

  • autoloader.phpNeve\Autoloader::load_mapped_file() lines 120-137 derives a lower-case PHP path for registered Neve classes and delegates it to require_file().
  • autoloader.phpNeve\Autoloader::require_file() lines 141-150 calls require $file without an existence/readability guard; telemetry reports the fatal at line 148.
  • start.phpneve_run() lines 49-57 registers the Neve namespace against the theme's inc/ directory, making Neve\Views\Nav_Walker resolve to inc/views/nav_walker.php.
  • header-footer-grid/templates/components/component-nav.php — navigation template lines 34-45 passes \Neve\Views\Nav_Walker to wp_nav_menu() on frontend rendering.
  • Git history shows commit 6567e40d24f6219b08323f8f33cdcc967ebad4eb (perf: PHP optimizations, 2019-08-07) removed the prior file_exists() check from require_file(). The source currently identifies itself as 4.2.10 in functions.php line 11.

Engineering notes

  • inc/views/nav_walker.php is present in the inspected 4.2.10 checkout at lines 1-21, so the telemetry alone does not establish why the affected production copy lacked or could not read it. A partial update, altered deployment, or filesystem condition remains an inference.
  • The failure is outside the bundled Themeisle SDK according to the telemetry and the relevant autoloader is Neve code.
  • The observed frontend path uses the primary navigation component. The secondary navigation component names a subclass that also depends on this base file, but that path was not runtime-verified.

Test coverage status

tests/test-neve-loaders.php lines 18-23 verifies successful autoloading of several available classes. No relevant coverage was found during inspection for a missing mapped class file or for the navigation walker path.

What to verify or explore next

  • May be worth reproducing with a test theme copy where inc/views/nav_walker.php is unavailable and a frontend primary menu renders.
  • Check whether package installation, update, or deployment logs for the affected environment indicate an incomplete or modified theme directory.
  • Run the existing PHP loader test suite alongside a missing-file autoload scenario.

Unknowns / follow-up

  • The telemetry redacts the full filesystem path and contains no structured stack trace, so the exact deployed directory state is unavailable.
  • The report records one occurrence on one site; broader frequency is unknown.

Confidence

Confidence: 95/100

The production fatal is directly attributable to Neve's autoloader requiring a mapped class file without checking that it exists. The matching nav_walker.php is present in the inspected 4.2.10 source, which points to a partial or inconsistent deployed theme copy as the trigger; the unguarded autoloader turns that condition into a frontend fatal.

Crash telemetry

Occurrences 1
Distinct sites 1
First seen 2026-08-05 22:26 UTC
Last seen 2026-08-05 22:26 UTC
Crash location product:autoloader.php:148
Request context frontend
Inside Themeisle SDK no
Product versions 4.2.10
WP versions 6.9.5
PHP versions 7.4.33
SDK versions 3.3.59

Source: automated crash report — neve, fingerprint 77a475d801fccb939830cab3c000ee09
Generated by bug-report-triage (ID: bug-report-triage_6a7c0c0977b985.30108432)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions