Общая функциональность моих собственных плагинов

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

Solutions Collecting From Web of "Общая функциональность моих собственных плагинов"

1.

Прежде всего functions.php для тем, которые являются разными, чем плагины.

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

Если вы хотите, вы можете использовать темы для функциональности, но не должны. На самом деле, темы и плагины – это только файлы php, которые в определенный момент запроса WordPress загружаются. (WordPress загружает только один файл, то есть functions.php для тем и основной файл плагина для плагинов, загружает все остальные файлы, которые вам нужны, зависит от вас).

Проблема в том, что в WordPress вы можете иметь неограниченное количество плагинов, но только одну тему. Итак, если вы хотите изменить тему, и у вас есть функциональность на functions.php вы потеряете ее: в нескольких словах именно поэтому лучше использовать функциональность плагинов и использовать тему только для презентации.

2.

Да, все в ядре WordPress находится в глобальном пространстве имен, и есть большое использование глобальных переменных, но это ядро, никто не заставляет вас следовать тем же правилам, вы можете использовать пространства имен (если ваша версия PHP – 5.3+), а также 't использовать любую глобальную переменную: когда WordPress загружает ваш плагин, он загружает PHP-файл, поэтому вы можете делать все, что может сделать ваша версия PHP: если вы хотите, вы можете написать себе все функции, но это не имеет смысла: вы используете WordPress из-за всех функций, которые он имеет, поэтому попробуйте использовать основные функции / классы, когда то, что вам нужно, покрывается ядром, но не стесняйтесь писать код PHP, который делает то, что не делает WordPress. И чтобы сделать это, не стесняйтесь использовать все методы PHP, которые вы знаете.

3.

Я прочитал в вашем вопросе

Примером этого может служить функция, которая сохраняется в базе данных

Я не знаю, что вы сохраняете в базе данных и почему, но если вам нужно сохранить объекты WordPress: post, таксономические условия, мета, параметры, пользователи, преходящие … WordPress уже имеет функции для сохранения и извлечения из базы данных всех них , поэтому нет необходимости писать для этого специальные функции. Если вы имеете в виду некоторые пользовательские таблицы , да, если вы хотите, вы можете написать код, который абстрактно и облегчит создание и манипулирование пользовательскими таблицами, но в этом случае:

  • использование пользовательских таблиц в WordPress иногда полезно, но если вашему приложению нужно слишком много настраиваемых таблиц, возможно, WordPress не является правильной основой, есть очень приятные рамки ( Symphony , Laravel , Sylex и другие)
  • прежде чем писать пользовательские функции, посмотрите на огромные плагины WordPress, возможно, есть тот, который уже делает то, что вам нужно
  • при написании пользовательской функции WordPress имейте в виду, что это не отдельное приложение, оно будет использоваться внутри WordPress с другими темами и плагинами, поэтому, чтобы сохранить разумность приложения, вам необходимо следовать некоторым правилам сосуществования , например, использовать правый крючок для конкретные задачи. Или просто для того, чтобы что-то сказать по конкретной задаче, если вам нужно создать пользовательскую таблицу, используйте db_delta
  • Создайте плагин только для одной функции. Я не думаю, что это хорошая идея: использовать плагин из другого, он требует немного усилий и не стоит того, чтобы использовать только одну функцию. Если есть некоторые общие функции, которые вы используете в своих плагинах, вы можете создать плагин, содержащий их все …

4.

Теперь поговорим об извлечении общей функции из плагина в другой. Да, это выполнимо, и имхо, это честно. Есть другой способ сделать это:

4.1: просто создайте разные плагины и установите их все

Как и уже сказано, плагин – это только файлы php, которые в определенное время во время загрузки WordPress загружаются с помощью require_once , так что, когда установлены 2 плагина, нет разницы в том, что 2 файла находятся в одном и том же плагине и загружены вами самим, или два файлы загружаются WordPress. Конечно, вы не можете сказать, какой файл загружен первым, а позже, но благодаря крючкам WordPress вы можете знать, когда загружается весь плагин, и начинайте делать что-то с этого момента. Конечно, прежде чем использовать функцию, размещенную в другом плагине, просто убедитесь, что доступен плагин / функция. Доказательство кода концепции:

 // plugin-one.php namespace PluginOne class Foo { function do_something () { return 'Foo!'; } } // plugin-two.php namespace PluginTwo class Bar { function do_something ( PluginOne\Foo $foo ) { echo $foo->do_something(); } } add_action('plugins_loaded', function() { // when WordPress fires 'plugins_loaded' all plugin files are required // so we can check if the class PluginOne\Foo exists and use it if ( class_exists( 'PluginOne\Foo' ) ) { $bar = new Bar; $bar->do_something( new PluginOne\Foo ); } }); 

4.2: Композитор

Я не знаю, слышали ли вы когда-либо о композиторе . Это инструмент управления зависимостями.

Когда вам нужно написать плагин, для которого требуется другой плагин, если оба поддерживают Composer, все, что делается, просто добавляет строку в файл composer.json .

Как использовать Composer для плагинов не сложно, но слишком сложно для ответа здесь.

В последние месяцы интерес к Composer вырос в сообществе WordPress (в сообществе PHP он вырос некоторое время назад), и теперь вы можете найти полезные ресурсы. Начните смотреть композитор.rarst.net , это ресурс, который разделяет Rarst , один из этих модов сайта.