Intereting Posts
wp_list_pages не показывает cpt, как я ожидал Отключить пользовательскую таксономию на панели администратора Профиль пользователя BuddyPress как показать категорию из CPT? Избранный снимок для обмена социальными сообщениями на странице архивного архива Как я могу отобразить список только категорий, которые отмечены как «признанные» в бэкэнд? Как я могу обновить ссылки dev для живого сайта? Отключить или перенаправить WP-login.php Как удалить действие, сделанное в плагине из functions.php в моей теме? wp_verify_nonce vs check_admin_referer Запросить пользователей по возможностям – удалить / деактивировать обратный вызов Должны ли мы доверять глобальным сообщениям? Должен ли я использовать пользовательские таксономии или нет? Как загрузить загрузку изображения из службы Вручную установите глобальные $ post vars с идентификатором, чтобы использовать теги шаблонов

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

Есть ли способ проверить, успешно ли запущена функция, работающая только с обновлением плагина? Прямо сейчас я вызываю функцию, если версия 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 } 

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

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