Поддержка Темы и шаблоны Подключение файлов в контексте дочерней темы

  • Во многих темах, в том числе дефолтных (н-р, twentyfifteen) файлы подключаются такой конструкцией.
    require get_template_directory() . '/inc/template-tags.php';
    При этом, когда нужно переопределить такого рода файл сделать это нельзя.
    Ответ Константина: https://wpmag.ru/2013/dochernie-temy-wordpress/#comment-2220740152

    В инклуды изменения вносить с помощью дочерних тем нельзя, т.к. они загружаются напрямую через include() или require(), а не через locate_template().

    В тоже время в темах активно используют get_template_part() (работает на основе locate_template()), которая корректно работает в контексте переопределения в дочерней теме.

    Знаю, что во многих случаях можно переопределять через хуки или если есть конструкция if ( ! function_exists() ), но иногда этого недостаточно.

    Вопрос: Зачем разработчики WordPress в дефолтных темах продолжают использовать прямое подключение файлов через require?
    Очень интересно послушать мнение разработчиков, н-р, Сергея Бирюкова.

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Вопрос: Зачем разработчики WordPress в дефолтных темах продолжают использовать прямое подключение файлов через require?

    Через require() подключаются файлы с функциями, а get_template_part() предназначена для подключения частей шаблонов.

    Разработчики стремятся соблюсти баланс между лёгкостью изменения темы через дочернюю и возможностью вносить обновления в родительскую тему для совместимости со следующими версиями WordPress.

    Если дочерняя будет целиком заменять не только шаблоны, но и файлы функций, вносить обновления в родительскую становится проблематично.

    Большинство функций в том же файле inc/template-tags.php, однако, заключены в условие ! function_exists(), т.е. их при желании можно переопределять в дочерней теме по отдельности.

    Благодарю за ответ.

    Будьте добры, подскажите, как можно сохранить изменения файла стилей какого-либо плагина (в частности wp-shop) в дочерней теме? Я знаю, что файл style.css в дочерней теме может дополнять файл стилей родительской темы, если в него подключить файл родительской темы с помощью директивы @import.
    Есть ли подобная возможность для плагинов? И если есть, то как это сделать? Возможно ли подключить файл с изменениями стилей плагина в файле functions.php, положив при этом сам файл стилей с изменениями в папку с дочерней темой?

    Я имею ввиду, что если править файл стилей плагина, то при его обновлении все исправленные стили тоже пропадут. И я бы хотела знать как можно этого избежать.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Возможно ли подключить файл с изменениями стилей плагина в файле functions.php, положив при этом сам файл стилей с изменениями в папку с дочерней темой?

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

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

    Сергей, хотелось бы уточнить. Могу ли я подключить файл стилей плагина, лежащий в дочерней теме в файле functions.php дочерней темы с помощью функции wp_enqueue_style? Простите чайника, я не очень хорошо ещё пока разбираюсь в wordpress и PHP.
    И, если да, то тогда выглядеть эта запись должна примерно так:
    wp_enqueue_style( ‘myPluginStylesheet’, WP_PLUGIN_URL . ‘/myPlugin/stylesheet.css’ )
    Или мне надо использовать другую функцию?

    Можете использовать.
    Если ваш файл стилей находится в вашей дочерней теме, то для пути можете использовать
    get_stylesheet_directory_uri() .’/ПутьКФайлуСтилейВДочернейТеме.css’

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Тема «Подключение файлов в контексте дочерней темы» закрыта для новых ответов.