Intereting Posts
Почему и как двадцать тринадцать добавляет верхний край к нижнему колонтитулу? Как включить HTML в выдержки? Пользовательский шаблон страницы с совершенно другим дизайном. Возможно ли это? Помогите упорядочить цикл Post на два мета значения Как локализовать массив данных на странице опций плагина Определение того, какая публикация отображается из общих сообщений Как я могу отменить одно сообщение и сделать его отображением для другого сообщения? Заставить пользователей переходить Перенос базы данных / содержимого сайта, отличного от CMS, в WordPress Установка тегов META, таких как описание и название при создании пост-программных сообщений WordPress, oEmbed и видео YouTube с тире, WordPress Multisite – настройка локальной копии разработки Использование add_theme_support внутри плагина Как отключить кнопку tinyMCE, добавленную плагином? Дублирование полной версии WordPress для разработки, а затем перераспределения?

Что происходит, когда два плагина имеют один и тот же сторонний класс, включенный в них?

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

Нужно ли мне пространство пространств имен? Это целесообразно? Я предполагаю, что это кошмар для обслуживания, если я когда-либо захочу перейти на более новую версию библиотеки Stripe.

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

Благодаря! Тони

Solutions Collecting From Web of "Что происходит, когда два плагина имеют один и тот же сторонний класс, включенный в них?"

Я пошел вперед, а имена переместились на полосу. Все отлично работает. И теперь мне не нужно беспокоиться о том, чтобы какая-либо другая библиотека Stripe испортила мои вещи.

Оригинал:

namespace Stripe; 

Новое:

 namespace MyRadNamespace\Stripe; 

Если кто-то заинтересован в том, как это делается, не стесняйтесь просматривать мое репо:

https://github.com/Spokane-Wordpress-Development/Freezy-Stripe

Ура!

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

Когда вы начинаете использовать Composer для управления вложениями, вы обнаружите, что он создает файл autoload.php для каждого отдельного пакета, который вы пишете (или выбираете). Затем вы можете создавать полные проекты, используя Composer в качестве диспетчера пакетов, который в качестве приятного побочного эффекта также создает централизованный файл autoload.php вместо одного автозагрузчика для каждого включенного пакета (плагин / тема / etc). В дополнение к этому одиночному автозагрузчику Composer также создает карту «Class> File» в качестве «кеша», чтобы избежать как можно большего количества чтения на диске, что позволит как можно быстрее отслеживать класс.

Это позволит избежать использования пространства имен, помещаемых в именах поставщиков. Это означает, что в случае, если в нескольких пакетах есть файл composer.json , будет только одно место, где эти пакеты поставщиков будут сохранены (следовательно, сохраняются полосы пропускания и места на диске) и извлекаются из. Даже если вы не игнорировали файлы поставщиков в контролируемом VCS пакете, их больше не нужно загружать.

 # Before in Package (A) $stripe = new \MyRadNamespace\Stripe; # Before in Package (B) $stripe = new \MyFunkyNamespace\Stripe; # After – anywhere! $stripe = new \Stripe; 

Если плагин или тема еще не поддерживают Composer, вы можете просто получить его через службу прокси / зеркало WPackagist .

Чтобы быстро начать работу с менеджером пакетов Composer, я предлагаю использовать wecodemore / wpstarter by @gmazzap – docs здесь .