Как кодировать обновления плагинов WordPress одним щелчком мыши?
Мой клиент хочет, чтобы я сделал плагин и продал его через систему подписки на членство. Они спросили, как они могут выкатить обновления для этого плагина. Обычно у меня был плагин, перехватывающий просмотр панели мониторинга после входа в wp-admin. Затем он проверяет, есть ли на сервере более новая версия плагина. Если это так, он уведомляет пользователя, чтобы он мог загрузить его снова одним щелчком мыши. Проблема в том, что они должны разархивировать файлы, скопировать их и восстановить настройки плагина.
Есть ли способ закодировать обновление в один клик для плагина, когда он должен быть обновлен? Таким образом, он устраняет другие шаги, когда они загружают плагин, распаковывают, копируют старые файлы и повторно запускают панель администратора, сохраняя плагин.
1 ответ
Есть несколько шагов, которые вы, вероятно, захотите предпринять, большинство из которых можно легко позаимствовать из того, как WordPress обрабатывает свои собственные внутренние обновления.
Не запускайте ее каждый раз, когда загружается страница администратора, напишите свою собственную версию _maybe_update_plugins() и проверяйте ее через определенный интервал времени, вероятно, только один раз в день или около того.
класс WordPress WP_Upgrader в 'wp-admin/includes/class-wp-upgradeder.php' (я полагаю, что вам нужно будет включить это в свой плагин) делает то, что вы хотите. Взгляните на wp-admin / update.php и убедитесь, что вы очень тщательно эмулируете здесь меры предосторожности, так как вы можете создать огромные дыры в безопасности, если не будете делать это осторожно.
После того, как вы разобрались со своими уведомлениями и убедились, что процесс безопасен, это так же просто, как передать URL для новой версии вашего плагина в приведенный ниже код как "$download_link".
$upgrader = new WP_Upgrader;
$upgrader->run(array(
'package' => '', //this should be the name of your plugin
'destination' => '', //this should be defined to the directory you want to install the plugin to
'clear_destination' => false, //set this if you want to remove the old version first
'clear_working' => true, //change this if you want to leave a copy of the zip file
'is_multi' => false, //only change this if you're calling the function multiple times
));
Если это не сработает (у меня нет ни времени, ни мотива для его тестирования), покопайтесь еще немного в классе WP_Upgrader и позаимствуйте их функции для загрузки и извлечения файлов.