Почему добавление файла шаблона в дочернюю тему может вызвать ошибку в template-loader.php?

Вопрос или проблема

Согласно лучшим практикам WordPress, я создал дочернюю тему для существующей темы. Все работает хорошо, пока я не пытаюсь добавить файл шаблона, который соответствует иерархии шаблонов WP. Например, если я добавлю category.php или archive.php, я получаю белый экран смерти, и вот ошибка, которую я получаю в Apache:

    [:error] [pid 2919] [client 98.24.106.38:64974] PHP Warning:  include(): 
Failed opening '/home/www-dev/beokinawa/wp-content/themes/x-child/index.php' for
 inclusion (include_path=".:/usr/share/php") in /home/www-dev/beokinawa/wp-
includes/template-loader.php on line 74, referer: 
http://dev.bluepresley.com/beokinawa/wp-admin/edit-tags.php?taxonomy=category

Когда я пытаюсь просмотреть категорию после загрузки любого из этих файлов, система, похоже, хочет загрузить URL экрана редактирования категории. Что может это вызвать? Из ошибки также видно, что она пытается найти index.php, последний в иерархии шаблонов. Если category.php или archive.php существуют, не было бы причины искать этот файл, верно?

То, что проблема может быть связана с разрешениями, интересно. Вот разобранные права доступа.

  • файлы находятся в chown’е user:www-root
  • согласно документации WordPress, файлы имеют права 664 (даже временно изменил директорию и файлы на 777, но это тоже не сработало)

Похоже, я не могу добавить никаких дополнительных файлов из схемы иерархии шаблонов WordPress. Но редактирование частей шаблонов работает нормально. Родительская тема поставляется с wp-header.php, wp-footer.php и т.д., и я могу добавить их, и переопределения работают правильно.

Ваша первоначальная идея правильная, WordPress не должен искать index.php, если он находит category.php для архива категории. Однако это может измениться, если у вас неправильно настроены разрешения и право собственности на файлы, или если кеш файловой системы мешает проверке file_exists().

Следуйте этим шагам:

  1. Убедитесь, что файлы вашей дочерней темы доступны для чтения пользователем веб-сервера. Проверьте как разрешения на файлы, так и право собственности.

  2. Проверьте, правильно ли связана ваша дочерняя тема с родительской темой, и может ли она получать шаблоны из родительской темы, если в дочерней теме отсутствует конкретный шаблон.

  3. В wp-config.php используйте функцию clearstatcache(); (до require_once(ABSPATH . 'wp-settings.php');), чтобы очистить кеш файловой системы.

    В случае, если вы добавляли и удаляли эти файлы во время тестирования, и файловая система кешировала эти файлы, clearstatcache(); поможет вам очистить эти кеши файловой системы, которые могут сбивать с толку ядро WordPress. После этого удалите вызов clearstatcache();.

Ответ или решение

Ошибка, возникающая при добавлении файлов шаблона в дочернюю тему WordPress, может быть связана с несколькими факторами. Давайте разберемся в том, почему проявляется ошибка в файле template-loader.php, когда вы пытаетесь добавить файл шаблона, как, например, category.php или archive.php.

Теория: Процесс загрузки шаблонов в WordPress

WordPress использует иерархию шаблонов для определения, какой файл должен отображаться для различных типов страниц, таких как категории, архивы и прочие. Когда WordPress загружает страницу категории, он сперва пытается найти файл category.php в активной теме. Если он не находит соответствующего файла, он продолжает поиск по иерархии до тех пор, пока не дойдет до index.php.

Ошибка, возникающая на уровне template-loader.php, указывает на то, что WordPress не смог правильно определить наличие файла category.php, и в итоге пытается загружать index.php, но не может этого сделать по причине ошибки доступа.

Пример: Ошибка доступа в Apache

Предоставленный вами лог ошибки Apache говорит о том, что проблема заключается в невозможности открыть файл для включения. Это может быть связано с разрешениями на уровне файловой системы или с правами на доступ к файлам.

[:error] [pid 2919] [client 98.24.106.38:64974] PHP Warning:  include(): 
Failed opening '/home/www-dev/beokinawa/wp-content/themes/x-child/index.php' for
 inclusion (include_path=".:/usr/share/php") in /home/www-dev/beokinawa/wp-
includes/template-loader.php on line 74...

Применение: Как устранить причину ошибки

  1. Проверка прав доступа: Убедитесь, что файлы вашей дочерней темы имеют корректные права доступа. Стандартное значение 664 должно быть достаточным, но если есть сомнения, можно временно установить 775 для директорий и 664 для файлов, а потом вернуть прежние настройки.

  2. Владение файлами: Проверьте, что файлы принадлежат правильному пользователю серверного веб-приложения (обычно www-data или apache, в зависимости от конфигурации сервера). Ваш случай предполагает использование пользователя user, но у него могут быть ограничения.

  3. Очистка кэша файловой системы: Добавьте clearstatcache(); в wp-config.php перед строкой require_once(ABSPATH . 'wp-settings.php');. Это поможет очистить кэш, если вы недавно добавляли или удаляли файлы и система неправильно их распознала. Не забудьте удалить этот вызов после тестирования, чтобы избежать ненужной нагрузки на систему.

  4. Проверка структуры темы: Убедитесь, что ваша дочерняя тема правильно связана с родительской и наследует нужные шаблоны. Для этого проверяйте директиву Template в файле style.css вашей дочерней темы.

  5. Обновление файлов WordPress: Иногда обновления ядра WordPress или тем могут требовать обновлений. Убедитесь, что все ваши версии в актуальном состоянии.

Таким образом, решая ошибку на уровне прав доступа и контроля версий, вы можете избежать ситуации, когда WordPress неверно интерпретирует иерархию шаблонов и не может корректно загрузить необходимые файлы.

Оцените материал
Добавить комментарий

Капча загружается...