Intereting Posts
Как добавить или удалить метабокс на каждой странице отдельно? Выполнить функцию PHP внутри области администратора Wp-admin использует разные php.ini, чем файлы тем Как заказывать сообщения по убыванию числа комментариев на странице таксономии? Идеальная настройка многосетевого сервера WP для до 1000 сайтов? При разбиении страницы на страницу с тегом <! – nextpage ->, как можно настроить индивидуальный и второй стили страниц? Экспорт таблицы wordpress в Excel Порядок сортировки wp_list_pages по пользовательскому порядку меню навигации Использование wp_redirect и .htaccess для повторного маршрута поиска (и передачи оставшихся GET-варов) Должен ли я использовать дополнительный столбец в БД? Показать все пользовательские поля и значения, если пусто Уникальный номер учетной записи пользователя + отображается по короткому коду Функция для вызова изображения вложения из сообщения Как загрузить SVG-изображения с помощью медиа-загрузчика? Как использовать значение Meta Value в WP_Query для чисел Max и Min

Обнаружить установку плагина / темы (через загрузку)

В настоящее время я пытаюсь обнаружить, когда администратор загружает (и устанавливает) тему или плагин.

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

function EventFileUploaded($attachmentID){ if(isset($_REQUEST['action'])){ $file = get_attached_file($attachmentID); switch($_REQUEST['action']){ case 'upload-theme': HandleThemeUpload($file); break; case 'upload-plugin': HandlePluginUpload($file); break; } } } add_action('delete_attachment', 'EventFileUploaded'); function HandleThemeUpload($fileName){ $themes = wp_get_themes(); // TODO somehow find which theme in $themes was installed from $fileName } function HandlePluginUpload($fileName){ $plugins = get_plugins(); // TODO somehow find which plugin in $plugins was installed from $fileName } 

Мне в основном нужно заполнить два TODO, отмеченные выше. Это образец кода, который я использовал:

 $fileName = explode('.', basename($fileName)); foreach(get_plugins() as $pluginFile => $plugin){ if(strtolower(str_replace(' ', '-', $plugin['Name'])) == $fileName){ $newPlugin = $plugin; break; } } // use $newPlugin if set 

Конечно, в некоторых ситуациях код выше не работает.

PS: Я не был уверен, какие теги использовать, не стесняйтесь предлагать лучшие.

Solutions Collecting From Web of "Обнаружить установку плагина / темы (через загрузку)"

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

Существует фильтр (строка 327, file.php):

 apply_filters( 'wp_handle_upload', array( 'file' => $new_file, 'url' => $url, 'type' => $type ), 'upload' ); 

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

 wp_get_themes(); wp_get_plugins(); 

то в рамках существующих функций

 HandleThemeUpload() { } HandlePluginUpload() { } 

вы снова получаете темы и плагины, а затем сравниваете эти результаты с вашими предыдущими глобальными результатами с помощью array_diff (): eg

 $NewPlugin = array_diff( $LatestPlugins, $OldGlobalPlugins ); 

Затем у вас есть новые плагины / темы.

Надеюсь, это поможет.