Итак, поскольку ответ @2Fwebd является неполным (как отмечено в комментарии), вот более полный ответ (просто чтобы сделать его более понятным, чем ответ и его комментарий). Я предложил изменить его ответ, но пока это не так. не принято, вот более полный ответ:
Дочерние темы 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 {
Затем измените свою id_base в parent::_construct
на уникальный идентификатор (например:
parent::__construct( 'new_uniq_id', 'name of your widget', ...)
И где-нибудь (чаще всего в конце) вашего файла найдите register_widget( и отредактируйте имя класса:
register_widget( 'Widget_Name2' );
Это не самый удобный способ, так как у вас будет два одинаковых виджета, но это работает.
Надеюсь, это поможет кому-то.
12.03.2018
id_base
вашего виджетаparent::__construct()
, чтобы ваш виджет отображался в списке виджетов. 11.07.2017