Intereting Posts

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

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

Код, который я написал, очень хрупок, потому что это зависит от того, что имя плагина / темы совпадает с загруженным 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 ); 

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

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