Темы WordPress для детей не работают таким образом. Единственными файлами, которые вы можете переопределить, используя один и тот же путь в дочерних темах, являются «базовые» файлы: index.php, page.php, style.css ... В основном файлы шаблонов.
Когда дело доходит до переопределения функций или классов в детской теме. Вы имеете несколько способов справиться с его:
- повторное декларирование функции/классы
- дублирующие функции/классы
Но это зависит от того, как строится ваша тема и если это «детская тема» готова. Давайте посмотрим на проблему с виджетами.
Если открыть файл объявления виджета в вашей родительской теме, вы увидите что-то вроде:
class Widget_Name extends WP_Widget {
...
CODE OF THE WIDGET
...
См: https://codex.wordpress.org/Widgets_API
Идеальный случай вы не видите эти строки первой но:
if(!class_exists('Widget_Name')) {
class Widget_Name extends WP_Widget {
...
CODE OF THE WIDGET
...
что значит, вы можете просто скопировать/прошлый файл и что будет работать нормально, то виджет будет переопределить родитель один и не будет выброшена никакой ошибки поскольку родительский виджет не будет выполнен. Это тема «детская тема готова». Обратите внимание, что это то же самое с функциями (if(!function_exists('function_name')
).
Не забудьте позвонить по своему файлу из вашего файла child-theme/functions.php
, поскольку он не будет вызываться по умолчанию.
Как:
require_once('path/to/your/widget_class.php');
Другой способ, если вы не имеете class_exists вызов просто продублировать файл, назовем его с require_once. Вы должны увидеть ошибку, поскольку вы определяете 2 раза тот же класс. PHP не допустит, чтобы это произошло, фатальная ошибка.
Просто переименуйте:
class Widget_Name2 extends WP_Widget {
И где-то (большую часть времени в конце) вашего файла, искать register_widget(
и изменить имя класса:
register_widget('Widget_Name2');
Это не самый удобный так как у вас будет 2 раза один и тот же виджет, но это работает.
Спасибо @ 2Fwebd за ваш ответ. Сейчас я столкнулся с задачей, описанной в этом посте. Ваш ответ помог мне. Я также хочу добавить, что если у вас нет темы «тема для детей», и вы используете ** дублирование ** своей темы, помимо переименования вашего класса виджета, вы должны дать уникальную 'id_base' вашего виджета для' parent :: __ construct() ', чтобы ваш виджет отображался в списке виджетов. – Edward