Closed sergey-s-betke closed 10 years ago
Дополнительные плагины в большинстве случаев зависят от "главного", и должны при активации проверять его активацию, и, возможно, - активировать главный плагин. А главный плагин, в свою очередь, при деактивации должен деактивировать дочерние плагины.
Сейчас такой возможности в WPF нет, но необходимо добавить.
Для этих целей определим отдельные компоненты в admin-part плагина - главный плагин, дочерний плагин. Потому как если он один в пакете - нет смысла грузить лишний код и выполнять лишние проверки. Если же их несколько - тогда и нужно выполнять все указанные выше проверки и действия.
Необходимо продумать механизм, позволяющий определить главному плагину активированные дочерние плагины. Пока вижу достаточно простой способ - запросить активированные плагины, и проверить директорию. Если она совпадает с директорией главного плагина - нашли активированный дочерний плагин.
Сложнее из дочернего плагина найти главный. Как вариант - всегда искать главный плагин в файле main.php
в каталоге плагина.
Ну и последний момент - что делать с удалением. Вероятнее всего, обработчик удаления отработает корректно только для удаляемого плагина, но при этом будет удалён весь каталог. То есть удаление необходимо обрабатывать в одном плагине - в главном.
Необходимо найти решение проблемы с удалением...
wordpress не предполагает наличия нескольких плагинов в одном каталоге. Удаление не проверяет наличия других плагинов в том же каталоге. Может, не рушить логику wordpress?
Можно фильтром убрать действие "удалить", однако - фильтр то можно повесить только после активации плагина. А делать для этого отдельный плагин совершено ни к чему.
Можно удаление обрабатывать через uninstall.php
... Он один, на весь каталог набора плагинов, он в любом случае будет вызван...
Итого, в любом случае WordPress не подразумевает активации и удаление других плагинов из процедуры удаления. Посему пока откажусь от этой идеи.
Необходимо обеспечить поддержку нескольких плагинов в одном пакете. Для каждого плагина будет свой "главный" файл, остальное будет общим.