Intereting Posts
Страницы и сообщения на слайдере ElegantTheme Автоматически использовать определенный шаблон для загрузки подстраниц последний Измененный и последний, последний вопрос! Можно ли сравнить текущее время с пользовательскими «начальными» и «конечными датами» как вы создаете интерфейс администратора в плагине для своей темы Как получить кнопку ретвита на моем блоге wordpress.com? Каким будет URL-адрес для отображения редактора изображений WordPress с изображением из медиа-библиотеки? Веб-страница не найдена при вводе неправильного имени пользователя и пароля в пользовательской форме входа? Поиск функций Ajax загружает результаты на пустой странице Отображение 3 сообщений категории по-разному Почему показана множественная версия той же таблицы стилей Запрос Mysql для удаления дубликатов сообщений WordPress? Требуется обновление базы данных – обновление из командной строки API настроек WordPress не сохраняет параметры

Есть ли способ проверить, успешно ли запущена функция, работающая только с обновлением плагина?

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

Solutions Collecting From Web of "Есть ли способ проверить, успешно ли запущена функция, работающая только с обновлением плагина?"

Есть ли способ проверить, успешно ли запущена функция, работающая только с обновлением плагина?

Да.

Задний план

Когда вы обновляете плагин, WordPress выполняет несколько действий за кулисами.

  1. Загрузите новую версию плагина
  2. Отключить старую версию плагина
  3. Удалить версию старого плагина
  4. Извлеките новую версию
  5. Активировать новую версию

В дополнение к upgrader_process_complete которые срабатывает WordPress во время этих действий, он запускает upgrader_process_complete . Этот крючок передает два параметра $options['hook_extra'] вызову: $this , который является, очевидно, экземпляром объекта, и $options['hook_extra'] , которые являются дополнительными аргументами, передаваемыми WP_Upgrader::install_package() фильтра, вызываемым WP_Upgrader::install_package() . Класс Plugin_Upgrader передает следующий массив:

 array( 'plugin' => $plugin, 'type' => 'plugin', 'action' => 'update', ) 

Крючок апгрейдера

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

 add_action( 'upgrader_process_complete', 'wpse_262412_upgrader_process_complete' ); function wpse_262412_upgrader_process_complete( $instance, $extras ) { //* Only interesting when 'our' plugin updates if( 'plugin' !== $extras[ 'type' ] && 'update' !== $extras[ 'action' ] && 'my-plugin-name' !== $extras[ 'plugin' ] ) { return; } //* Do something useful after your plugin updates wpse_262412_something_useful(); } 

проверка

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

 function wpse_262412_something_useful() { include_once( ABSPATH . '/wp-admin/includes/plugin.php' ); $data = get_plugin_data( 'my-plugin-name' ); update_option( 'my-plugin-update-option', $data[ 'version' ] ); } 

Затем мы можем добавить действие init, которое проверяет это значение параметра. Если значение параметра равно текущей версии плагина, то мы знаем, что функция запущена. Затем мы можем убедиться, что мы видим, что функция была запущена, например, добавить уведомление администратора.

 add_action( 'init', 'wpse_262412_init' ); function wpse_262412_init() { $data = get_plugin_data( 'my-plugin-name' ); $option = get_option( 'my-plugin-update-option' ); if( $data[ 'version' ] === $option ) { //* The plugin update function ran successfully add_action( 'admin_notices', 'wpse_262412_update_notice' ); } } function wpse_262412_update_notice() { ?> <div class="updated notice"> <p><?php _e( 'The function has run correctly.', 'wpse-262412' ); ?></p> </div> <?php } 

Но есть ли другой лучший подход?

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