PHP файлы дочерней темы не переопределяют PHP файлы родительской темы
У меня есть PHP файл, расположенный по пути:
.../wp-content/themes/kallyas-child/pagebuilder/elements/TH_TeamBox/TH_TeamBox.php
Я пытаюсь использовать этот файл, чтобы переопределить родительский файл TH_TeamBox.php, который находится здесь:
.../wp-content/themes/kallyas/pagebuilder/elements/TH_TeamBox/TH_TeamBox.php
Моя дочерняя тема активна, и я создал структуру каталогов в дочерней теме, идентичную родительской теме. Я полагал, что если я сделаю это, то смогу редактировать PHP файлы в дочерней теме по своему усмотрению, не теряя изменений при обновлении родительской темы.
Я занимаюсь разработкой уже некоторое время, но, как видите, я относительно новичок в WordPress. Буду признателен за любые разъяснения, почему PHP файл дочерней темы не переопределяет PHP файл родительской темы. Я готов предоставить любую дополнительную информацию, которая может потребоваться для помощи, спасибо! : )

Дочерние темы позволяют переопределять шаблоны, а не произвольные PHP-файлы.
В WordPress тема состоит из набора PHP-файлов, которые используются как шаблоны. Список этих файлов можно найти в Иерархии шаблонов.
Эти конкретные файлы шаблонов могут быть заменены новыми, но если родительская тема не предоставляет специальных средств для переопределения других файлов, то файлы, просто подключаемые родительской темой в качестве вспомогательной структуры или библиотек для кода страницы (например, для конструктора страниц), не могут быть переопределены таким образом.

Не то, что я хотел услышать, но спасибо за информацию. Ценю это.

Здесь упомянуты несколько полезных функций, которые помогают переопределить файл родительской темы. (Всё равно потребуется небольшое изменение в файле родительской темы. Насколько я знаю, этого невозможно избежать на 100%.) Посмотрите на эти функции: locate_template()
, get_theme_file_path()
.

Решение заключается в переносе необходимых изменений в файл functions.php вашей дочерней темы.
Если это функция, обычно она будет содержать условный оператор, проверяющий, объявлена ли она уже. В этом случае вы можете скопировать функцию в functions.php с тем же именем и внести необходимые изменения — она будет иметь приоритет над остальными файлами темы. Если функция объявлена без условного оператора, тогда вам нужно изменить её имя в functions.php, найти файл шаблона, из которого она вызывается, скопировать его в дочернюю тему и изменить вызов функции в нём.
Если это виджет, скопируйте всё объявление класса в functions.php, измените его имя и внесите другие правки. Убедитесь, что вы также регистрируете новый виджет, и он станет доступен в области виджетов под новым именем с внесёнными изменениями.

Спасибо за ваш вклад. В момент вопроса я искал не способ перезаписать функцию, а именно перезаписать файл. Кроме того, правильный ответ уже предоставил Otto. Если только нет специальной функции шаблона, которую можно отфильтровать (например, wc_get_template в WooCommerce), перезаписать можно только основные файлы шаблонов (header.php, footer.php, page.php и т.д.).

У меня есть решение, которое может быть лучше, чем просто вносить изменения в файлы родительской темы, что, конечно, нежелательно по причинам, упомянутым Otto.
Если вы добавите эти две строки PHP в начало любого файла, который хотите модифицировать в структуре директорий дочерней темы:
<?php
$filepath = str_replace(get_option('template'), get_option('stylesheet'), __FILE__);
if (file_exists($filepath)) {include($filepath); return;}
?>
Вам, конечно, придется повторять это для каждого файла после обновления темы, поэтому рекомендуется вести список этих файлов и, возможно, больше не обновлять тему напрямую, а скачивать ее, добавлять эти строки локально и загружать обновленную версию через FTP.
Это может показаться слишком хлопотным, но что это дает - позволяет хранить ваши измененные файлы вместе в структуре дочерней темы, и они не будут перезаписаны при обновлениях темы. Просто нужно будет снова добавлять эти строки в начало любого родительского файла, который вы хотите продолжать переопределять.
Это также означает, что вы можете удалить модифицированную копию файла функций в дочерней теме без поломки сайта (например, для тестирования с обновленным файлом темы) - так как в этом случае будет использоваться оригинальный файл, если модифицированная копия не найдена.
(CEM Исправление опечатки: заменил первый вызов get_options
на get_option
.)
