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)

Metadata

Metadata

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions