Envato Toolkit
Это библиотека из 3 файлов + визуальный интерфейс для проверки кодов покупок ваших клиентов, получения сведений о конкретном пользователе Envato (страна, город, общее количество подписчиков, общий объем продаж, аватар), получение его лицензии и даты истечения срока поддержки, тип лицензии. он купил, проверьте обновления приобретенных плагинов и тем и получите ссылки для их скачивания. Плюс - эта библиотека имеет функцию поиска Envato Item Id, предоставляя имя и автора плагина или темы. Итак - да, это инструмент, который вы, как разработчик / автор, искали месяцами. Если вы ищете версию только для библиотеки для интеграции в свой плагин / тему, она находится на GitHub: Envato Toolkit (автономный). Основная цель этого плагина - помочь вам начать намного проще, не испытывая головной боли, пытаясь понять WordPress - Код плагинов Envato Market, который является единственным, созданным Envato, имеет настолько сложный и непонятный код, что вы никогда не поймете, как он работает (см. Пример ниже). Когда я сам попытался создать функциональные кнопки плагина [Проверить наличие обновлений] и [Проверить код покупки], и я увидел код плагина WordPress - Envato Market, я был шокирован, насколько плохо он написан и как вы должны не кодировать. Например, вы хотели бы выдать сообщение об ошибке, если токен пользователя Envato пуст, что является обязательной строкой, то есть - pAA0aBCdeFGhiJKlmNOpqRStuVWxyZ44. Если вам нравятся KISS, PSR-2, DRY, стандарты и парадигмы кодирования чистого кода, у вас, вероятно, будут просто эти пять строк кода, чтобы каждый разработчик получил их: $ token = get_user_meta (get_current_user_id (), 'envato_token' , ИСТИННЫЙ); if ($ token == "") {return new WP_Error ('api_token_error', __ ('Требуется токен API.', 'envato-toolkit')); } Теперь давайте посмотрим, как та же самая задача трассировки выглядит в WordPress - плагин Envato Market: [Api.php -> request (..)] Проверьте, пуст ли токен: if (empty ($ token)) {return new WP_Error ( 'api_token_error', __ ('Требуется токен API.', 'envato-market')); } [Api.php -> request (..)] Разберите его из другой строки: $ token = trim (str_replace ('Bearer', '', $ args ['headers'] ['Authorization'])); [Api.php -> request (..)] Проанализируйте его еще раз - на этот раз из массива аргументов: запрос публичной функции ($ url, $ args = array ()) {$ defaults = array ('timeout' => 20 ,); $ args = wp_parse_args ($ args, $ по умолчанию); } [Api.php -> download (..)] Еще раз перенесите переменную токена - на этот раз через params: class Envato_Market_API {public function download ($ id, $ args = array ()) {$ url = 'https: //api.envato.com/v2/market/buyer/download?item_id= '. $ id. '& short_url = true'; вернуть $ this-> request ($ url, $ args); }} [admin.php -> might_deferred_download (..)] Передайте его снова - на этот раз получите его в массив args из другого вызова метода: function might_deferred_download ($ options) {$ args = $ this-> set_bearer_args (); $ options ['package'] = envato_market () -> api () -> скачать ($ vars ['item_id'], $ args); return $ options; } [admin.php -> set_bearer_args (..)] Оберните токен в многомерный массив строк: $ args = array ('headers' => array ('Authorization' => 'Bearer'. $ token,),) ; [admin.php -> set_bearer_args (..)] Передайте завернутый токен еще раз - на этот раз получите его из get_option: foreach (envato_market () -> get_option ('items', array ()) as $ item) {if ($ item ['id'] === $ id) {$ token = $ item ['токен']; сломать; }} [admin.php -> get_option (..)] Так что в этом get_option? - Правильно, еще один вызов другого метода - get_options (): public function get_option ($ name, $ default = '') {$ options = self :: get_options (); $ name = self :: sanitize_key ($ имя); return isset ($ options [$ name])? $ options [$ name]: $ default; } [admin.php -> get_options ()] Наконец, после почти 10 шагов в дереве, мы наконец получаем вызов исходного метода WordPress, но теперь я снова запутался - что это за переменная option_name здесь: общедоступная функция get_options () {return get_option ($ this-> option_name, array ()); (); } [envato-market.php -> init_globals ()] Вот оно - имя ключа имя опции ... Ой, подождите ... Нет, здесь его нет. Это равно другой переменной, которая помещена в другую функцию очистки - похоже, я вижу это уже 2 раза в дереве - очистка очистки: $ this-> option_name = self :: sanitize_key ( $ this-> slug); [envato-market.php -> init_globals ()] Итак, имя ключа имени параметра - это имя $ this-> slug. Теперь посмотрим, каково значение $ this-> slug: $ this-> slug = 'envato-market'; Итак, чтобы понять одну переменную, требуется одиннадцать (!) Шагов. И весь код этого плагина такой. Приведенный выше пример был моей головной болью, пока я не понял, что должен написать новый Envato API Management Toolkit вместо того, чтобы пытаться использовать то, что дает Envato, потому что в противном случае у меня ничего не заработает. И я считаю, что у многих других разработчиков была такая же проблема, когда они пытались создать функцию проверки обновлений для своих плагинов или тем. Поэтому вместо того, чтобы использовать эту библиотеку для себя, я решил, что хочу помочь всем этим разработчикам сэкономить их время, и делюсь этим кодом с вами. Я выпускаю его под лицензией MIT, которая позволяет вам использовать этот код в своем плагине без каких-либо ограничений как для бесплатного, так и для коммерческого использования. Плюс - я обещаю вам, что этот плагин является и всегда будет на 100% бесплатным, без рекламы, «Подпишитесь», «Следуйте за нами», «Посетите нашу страницу», «Получить версию Pro» или аналогичные ссылки. . Если вы создали в высококачественном коде ценную дополнительную функциональность для библиотеки и хотите поделиться ею со всеми - я открыт здесь, чтобы поддержать ваши усилия и добавить ваш код в библиотеку плагина, чтобы мы все вместе сделали это плагин лучше для авторов - чем лучше плагин, тем лучше авторы плагинов сделают для своих клиентов. Чем более качественные товары будут у нас в Интернете, тем счастливее будут люди во всем мире. Наконец, код - это поэзия - чем лучше плагин, тем счастливее мир. Псевдокод примера вывода плагина следующий: Подробная информация о вас: --------------------------------- ------------------------- Список всех купленных вами плагинов: Php foreach ($ plugins AS $ pluginId => $ plugin):? > = 'Идентификатор плагина:'. $ PluginId. ', Имя:'. $ Plugin ['name'];?>, Лицензии: Php foreach ($ plugin ['licenses'] AS $ license):? > Код: = $ License ['Purchase_code'];?>, Лицензия: = $ License ['license'];?>, Куплено: = $ License ['license_purchase_date'];?> = $ license ['license_purchase_time'];?>, Истекает: = $ license ['support_expiration_date'];?> = $ license ['support_expiration_time'];?>, Статус поддержки: = $ license [ 'support_active'];?> php endforeach; ?> php endforeach; ?> Список всех купленных вами тем: Php foreach ($ themes AS $ themeId => $ theme):?> = 'Theme Id:'. $ ThemeId. ', Name:'. $ Theme [' name '];?>, Лицензии: php foreach ($ theme [' licenses '] AS $ license):?> Код: = $ license [' Purchase_code '];?>, Лицензия: = $ лицензия ['лицензия'];?>, Куплено: = $ license ['license_purchase_date'];?> = $ license ['license_purchase_time'];?>, Истекает: = $ license ['support_expiration_date' ];?> = $ license ['support_expiration_time'];?>, Статус: = $ license ['support_active'] == 1? «Поддерживается»: «Поддержка истекла»;?> Php endforeach; ?> php endforeach; ?> Ваше резюме: Ваше местоположение: = $ AuthorCity;?>, = $ AuthorCountry;?>. Вы продали свои товары = $ AuthorSales;?> Раз, и у вас есть = $ AuthorFollowers;?> Подписчиков на Envato. 1. Сведения о лицензии вашего клиента -------------------------------------------- -------------- Код покупки: = $ TargetPurchaseCode;?> Действует ли лицензия: = $ IsValidTargetLicense? 'Да': 'Нет';?> Имя пользователя покупателя: = $ TargetLicenseBuyer;?> Тип лицензии: = $ TargetLicenseType;?> Приобретено в: = $ TargetLicensePurchasedAt;?> Поддерживается до: = $ targetLicenseSupportedUntil;?> Статус поддержки: = $ targetLicenseSupportActive == 1? «Поддерживается»: «Поддержка истекла»;?> 2. Подробная информация о целевом пользователе Envato - = $ TargetUsername;?> ----------------------- ----------------------------------- = $ targetUsername;?> находится в = $ targetUserCity;?>, = $ targetUserCountry;?>. Он продал свои товары = $ TargetUserSales;?> Раз и имеет = $ TargetUserFollowers;?> Подписчиков на Envato. 3. Статус приобретенного идентификатора подключаемого модуля - = $ TargetPluginId;?> ---------------------------------- ------------------------ Имя плагина: = $ NameOfTargetPluginId;?> Доступно обновление плагина: = $ PluginUpdateAvailable? 'Да': 'Нет';?> Установленная версия подключаемого модуля: = $ InstalledPluginVersion;?> Доступная версия подключаемого модуля: = $ AvailablePluginVersion;?> URL-адрес загрузки обновления подключаемого модуля: Загрузить новейшую версию 4. Статус идентификатора приобретенной темы - = $ targetThemeId;?>: ---------- ------------------------------------------------ Название темы : = $ nameOfTargetThemeId;?> Доступно обновление темы: = $ themeUpdateAvailable? 'Да': 'Нет';?> Установленная версия темы: = $ InstalledThemeVersion;?> Доступная версия темы: = $ AvailableThemeVersion;?> URL для загрузки обновления темы: Загрузить новейшую версию 5. Идентификатор элемента Envato для приобретенного подключаемого модуля ------------------- --------------------------------------- Поиск по имени: = $ TargetPluginName ;? > Поиск автора: = $ TargetPluginAuthor;?> Найден идентификатор плагина: = $ FoundPluginId;?> 6. Идентификатор элемента Envato приобретенной темы ----------------- ----------------------------------------- Поиск по имени: = $ TargetThemeName ;?> Поиск автора: = $ TargetThemeAuthor;?> Найден идентификатор темы: = $ FoundThemeId;?> И пример ввода вывода выше, это: $ objToolkit = new EnvatoAPIManager ($ toolkitSettings); // Подробная информация о вас $ PurchasePlugins = $ objToolkit-> getPurchasedPluginsWithDetails (); $ plugins = array (); foreach ($ купленныеПлагины AS $ pluginId => $ купленныеПлагин) {$ купленныеПлагин ['лицензии'] = $ objToolkit-> getLicensesByItemId ($ pluginId); $ plugins [$ pluginId] = $ купленныйPlugin; } $ PurchaseThemes = $ objToolkit-> getPurchasedThemesWithDetails (); $ themes = array (); foreach ($ купленные темы как $ themeId => $ купленные темы) {$ купленные темы ['лицензии'] = $ objToolkit-> getLicensesByItemId ($ themeId); $ themes [$ themeId] = $ PurchaseTheme; } $ authorDetails = $ objToolkit-> getUserDetails ($ sanitizedEnvatoUsername); // Просмотр переменных $ view-> plugins = $ plugins; $ view-> themes = $ themes; if ($ authorDetails! = FALSE) {$ view-> authorCity = $ authorDetails ['город']; $ view-> authorCountry = $ authorDetails ['страна']; $ view-> authorSales = $ authorDetails ['продажи']; $ view-> authorFollowers = $ authorDetails ['подписчики']; } еще {$ view-> authorCity = ''; $ view-> authorCountry = ''; $ view-> authorSales = 0; $ view-> authorFollowers = 0; } // 1. Подробная информация о целевом коде покупки $ targetLicenseDetails = $ objToolkit-> getLicenseDetails ($ sanitizedTargetPurchaseCode); // Просмотр переменных $ view-> targetPurchaseCode = esc_html ($ sanitizedTargetPurchaseCode); // Готов к печати $ view-> isValidTargetLicense = $ objToolkit-> isValidLicense ($ sanitizedTargetPurchaseCode); $ view-> targetLicenseBuyer = $ targetLicenseDetails ['имя_пользователя-покупателя']; $ view-> targetLicense = $ targetLicenseDetails ['лицензия']; $ view-> targetLicensePurchasedAt = $ targetLicenseDetails ['license_purchase_date']. ' '. $ targetLicenseDetails [' license_purchase_time ']; $ view-> targetLicenseSupportedUntil = $ targetLicenseDetails ['support_expiration_date']. ' '. $ targetLicenseDetails [' время_поддержки ']; $ view-> targetLicenseSupportActive = $ targetLicenseDetails ['support_active']; // 2. Подробная информация о целевом пользователе Envato $ targetUserDetails = $ objToolkit-> getUserDetails ($ sanitizedTargetUsername); // Просмотр переменных $ view-> targetUsername = esc_html ($ sanitizedTargetUsername); // Готов к печати $ view-> targetUserCity = $ targetUserDetails ['city']; $ view-> targetUserCountry = $ targetUserDetails ['страна']; $ view-> targetUserSales = $ targetUserDetails ['продажи']; $ view-> targetUserFollowers = $ targetUserDetails ['подписчики']; // 3. Статус приобретенного идентификатора плагина $ availablePluginVersion = $ objToolkit-> getAvailableVersion ($ sanitizedTargetPluginId); $ pluginUpdateAvailable = version_compare ($ sanitizedInstalledPluginVersion, $ availablePluginVersion, '<'); // Просмотр переменных $ view-> targetPluginId = intval ($ sanitizedTargetPluginId); // Готов к печати $ view-> installedPluginVersion = esc_html ($ sanitizedInstalledPluginVersion); // Готов к печати $ view-> nameOfTargetPluginId = esc_html ($ objToolkit-> getItemName ($ sanitizedTargetPluginId)); $ view-> availablePluginVersion = $ availablePluginVersion; $ view-> pluginUpdateAvailable = $ pluginUpdateAvailable; $ view-> pluginUpdateDownloadUrl = $ pluginUpdateAvailable? $ objToolkit-> getDownloadUrlIfPurchased ($ sanitizedTargetPluginId): ''; // 4. Статус ID приобретенной темы $ availableThemeVersion = $ objToolkit-> getAvailableVersion ($ sanitizedTargetThemeId); $ themeUpdateAvailable = version_compare ($ sanitizedInstalledThemeVersion, $ availableThemeVersion, '<'); // Просмотр переменных $ view-> targetThemeId = intval ($ sanitizedTargetThemeId); // Готов к печати $ view-> installedThemeVersion = esc_html ($ sanitizedInstalledThemeVersion); // Готов к печати $ view-> nameOfTargetThemeId = esc_html ($ objToolkit-> getItemName ($ sanitizedTargetThemeId)); $ view-> availableThemeVersion = $ availableThemeVersion; $ view-> themeUpdateAvailable = $ themeUpdateAvailable; $ view-> themeUpdateDownloadUrl = $ themeUpdateAvailable? $ objToolkit-> getDownloadUrlIfPurchased ($ sanitizedTargetThemeId): ''; // 5. Идентификатор элемента Envato приобретенного плагина $ view-> targetPluginName = esc_html ($ sanitizedTargetPluginName); // Готов к печати $ view-> targetPluginAuthor = esc_html ($ sanitizedTargetPluginAuthor); // Готов к печати $ view-> foundPluginId = $ objToolkit-> getItemIdByPluginAndAuthorIfPurchased ($ sanitizedTargetPluginName, $ sanitizedTargetPluginAuthor); // 6. Идентификатор элемента Envato приобретенной темы $ view-> targetThemeName = esc_html ($ sanitizedTargetThemeName); // Готов к печати $ view-> targetThemeAuthor = esc_html ($ sanitizedTargetThemeAuthor); // Готов к печати $ view-> foundThemeId = $ objToolkit-> getItemIdByThemeAndAuthorIfPurchased ($ sanitizedTargetThemeName, $ sanitizedTargetThemeAuthor);
Автор: KestutisIT
Версия: 1.4
Последнее обновление: 2021-04-26 6:00pm GMT