• Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Сохранение внесенных изменений в код плагинов при их обновлении

Ataboy

Новичок
#1
Приветствую!

Собственно вопрос озвучен в заголовке топика. Как это достигается в WooCommerce, мы знаем. Сразу после установки Woo обычно копируют содержимое wp-content/plugins/woocommerce/templates в папку с темой.

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

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

Ведь в Woo это как-то реализовано. У кого есть подобный опыт ?
 

Stork.71

Гуру
Местный
#2
Вопрос интересный!
скорее всего никак :(
Почему? Потому что как правило плагин состоит из нескольких файлов всего, и изменения при обновлении затрагивают хотя бы один из них. То есть как правило это бессмысленно.
Для woocommerce точно так же. По сути, можно сохранить только шаблоны, которые могут определяться и самим woocommerce, и темами, и дочерними темами.
Хотя, насколько мне помнится, дочерняя тема "подменяет" любые файлы php - хоть плагинов, хоть тем, хоть wordpress. Только нужно сохранить иерархию папок (кажется :) ). Поищите больше про дочерние темы.
 

ADv

Гуру
Местный
#3
Я храню измененные файлы локально, после вынудженного обновления плагина синхронизирую изменения.
Меня больше волнует другой вопрос: перевел я плагин на рус, закинул языковой файл. При обновлении через админку - скачивается авторский ланг-пак , а мои пару файлов - вытираются.
 

Ataboy

Новичок
#4
Вопрос интересный!
скорее всего никак :(
Почему? Потому что как правило плагин состоит из нескольких файлов всего, и изменения при обновлении затрагивают хотя бы один из них. То есть как правило это бессмысленно.
Для woocommerce точно так же.
А смотрите, как же тогда папка template, которую переносят в тему, переименовывают в woocommerce и там находятся все группы файлов, отвечающие за функционал магазина:
- cart
- checkout
- myaccount
- emails
- orders

и т.д.

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

В итоге эти файлы загружаются В ДОПОЛНЕНИЕ к родным и обновляемым файлам Woo.

А вот css-файл woocommerce.css, перенесенный в папку с темой наоборот ЗАМЕНЯЕТ собой родной файл стилей.



Рассмотрим теперь принцип создания родительских тем в вордпресе.

Стили родительской темы задаются подобной конструкцией:

Код:
/*

Theme Name: Twenty Ten Child
Description: Дочерняя тема для темы Twenty Ten
Author: Ваше имя
Template: twentyten
*/

@import url("../twentyten/style.css");

#site-title a {
    color: #009900;
}
Template: объявляет родительскую тему, т.е. название папки родительской темы в правильном регистре.

Отличие функционала Woo от функционала вордпресса в том, что это где-то прописано в ядре Woo, в стилях не нужно указывать вышеупомянутые настройки, файл пользовательских стилей просто помещают в папку с темой.

Далее. Файл functions.php из дочерней темы загружается первым по к отношению родительской теме.

Шаблоны, такие как index.php, page.php и прочие ведут себя аналогично стилям, т.е. заменяют собой файлы родительской темы.

Шаблоны, которых нет в родительской теме, то бишь созданные пользователем, подключаются через
Код:
require_once
По сути, можно сохранить только шаблоны, которые могут определяться и самим woocommerce, и темами, и дочерними темами.
Хотя, насколько мне помнится, дочерняя тема "подменяет" любые файлы php - хоть плагинов, хоть тем, хоть wordpress.
Возможно я что-то не так делаю, но файлы плагинов не хотят подключаться из родительской или дочерней темы через require_once.

Как бы это сделали Вы ? Если можно, пример кода.


Так вот теперь главный вопрос. Где в ядре Woo находится код, ответственный за вышеперечисленные возможности ?

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

Взять к примеру Affiliates, плагин партнерской програмы.

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

Просьба к опытным товарищам, отзовитесь!
 
Последнее редактирование:

Ataboy

Новичок
#5
Вобщем решение найдено!

Берете файлы плагинов, в которые вносили изменения. Копируете их в папку с дочерней темой. Затем в functions.php дочерней темы прописываете следующие конструкции:

Код:
include( plugin_dir_path( __FILE__ ) . 'файл плагина.php');
У меня все заработало. Как проверил ? Установил старую версию плагина. В дочерней теме сложил заранее скопированные кастомизированные файлы. И они же были в директории плагина wp-content/plugins/мой плагин . Затем обновил плагин. Изменения в его ядре потерлись. Но мои кастомизированные файлы подключаются, как и положено, в порядке приоритета из дочерней темы.
 
Последнее редактирование:
Сверху Снизу