Обновления для приватного плагина?

11 авг. 2010 г., 22:43:40
Просмотры: 41.8K
Голосов: 135

Если я разрабатываю приватный плагин, есть ли способ использовать механизм автоматического обновления WordPress для его обновления?

Я хочу инкапсулировать функциональность, но она специфична только для моих 5 блогов, поэтому плагин не подходит для публичного репозитория. Но мне очень нравится механизм простого обновления.

Есть ли способ это реализовать?

2
Комментарии

Если вы не хотите создавать собственное решение, вы можете использовать https://kernl.us для размещённых обновлений плагинов.

Jack Slingerland Jack Slingerland
8 мая 2015 г. 17:01:14

Кажется, это обсуждалось как настраиваемая опция в рассылке wp-hackers в своё время. Насколько я помню, вопрос так и не был решён. Думаю, соответствующее обсуждение было в этой ветке: http://lists.automattic.com/pipermail/wp-hackers/2009-February/024796.html ...но могу ошибаться.

ZaMoose ZaMoose
11 авг. 2010 г. 23:20:15
Все ответы на вопрос 8
0
51

Похоже, что соответствующий код находится в wp-includes/update.php, функция wp_update_plugins():

$to_send = (object) compact('plugins', 'active');

$options = array(
    'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 3), 
    'body' => array( 'plugins' => serialize( $to_send ) ),
    'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' )
);  

$raw_response = wp_remote_post('http://api.wordpress.org/plugins/update-check/1.0/', $options);

Он явно проверяет api.wordpress.org. Технически возможно передать ключ внутри $to_send для делегирования проверки, но насколько мне известно, это не поддерживаемая функция.

Если подключиться к хуку set_site_transient_update_plugins, можно добавить свои собственные данные о пакете в эту переменную. Похоже, эти значения будут доверенными при запуске обновления плагина. Смотрите wp-admin/update.php и wp-admin/includes/class-wp-upgrader.php. Исходя из кода в этих двух функциях, я думаю, что можно внедрить свой собственный сервер обновлений, вам просто нужно изучить, как форматируются данные о пакете, и соответствовать этому формату.

11 авг. 2010 г. 23:16:44
3
46

Этот плагин сделает это за вас:

Автоматические обновления для приватных и коммерческих плагинов

С незапамятных времён автоматические обновления поддерживали только плагины, размещённые в официальном каталоге WordPress.org. Теперь я написал PHP-библиотеку, которую вы можете использовать, чтобы добавить возможность автоматического обновления любому плагину. Публичные, приватные и коммерческие плагины — все теперь могут пользоваться преимуществами автоматических уведомлений об обновлениях и обновлений в один клик.

Репозиторий на GitHub

12 дек. 2010 г. 17:58:17
Комментарии

Возможно, вам также будет интересно управлять плагинами на своей стороне... например, с помощью пакета wp-update-server, написанного тем же автором ;) https://github.com/YahnisElsts/wp-update-server Используя этот сервер, вы можете защитить свои плагины, как описано здесь: http://w-shadow.com/blog/2013/03/19/plugin-updates-securing-download-links/

SimonSimCity SimonSimCity
9 июл. 2014 г. 10:32:01

как я могу отключить стандартную проверку обновлений WordPress для бесплатных плагинов?

csandreas1 csandreas1
11 нояб. 2017 г. 09:03:21

Хотя сайт выглядит устаревшим, проект активно поддерживается и работает с приватными репозиториями Bitbucket/Github! Подробнее о доступных интеграциях смотрите в их репозитории на Github https://github.com/YahnisElsts/plugin-update-checker

wp-overwatch.com wp-overwatch.com
5 сент. 2019 г. 01:23:41
2
16

Начиная с WordPress версии 5.8, стало значительно проще создать базовую версию функционала для обновления пользовательских плагинов.

Шаг 1

Создайте JSON-файл на вашем сервере. Он будет содержать информацию о последней версии вашего плагина (или плагинов) и ссылку на ZIP-архив(ы), чтобы WordPress мог автоматически загрузить его при запуске обновления.

Пример расположения: https://my-domain.com/custom-plugins/plugins-info.json

Пример содержимого:

{
    "my-plugin/my-plugin.php":{
        "version":"1.1",
        "package":"https://my-domain.com/custom-plugins/my-plugin.zip"
    }
}

Вы можете добавить информацию о нескольких плагинах в этот JSON. Убедитесь, что ключ каждого плагина имеет формат имя_папки/имя_файла.php.

Конечно, WordPress покажет доступность новой версии только в том случае, если версия плагина в JSON больше, чем установленная у вас.

Для полного списка данных плагина(ов), которые можно указать в JSON-файле, ознакомьтесь с параметром $update здесь.

Шаг 2

Добавьте "Update URI" в основной файл плагина (секция комментариев). Он должен ссылаться на ваш пользовательский JSON-файл, созданный на шаге 1.

<?php
/**
 * Plugin Name: Мой плагин
 * Version:     1.0
 * Update URI:  https://my-domain.com/custom-plugins/plugins-info.json
 * 
 */

Шаг 3

Добавьте этот код в основной файл вашего пользовательского плагина (или в functions.php)

ВАЖНО: Замените "my-domain.com" внутри функции add_filter на фактический домен, который вы используете для JSON-файла.

if( ! function_exists( 'my_plugin_check_for_updates' ) ){
    
    function my_plugin_check_for_updates( $update, $plugin_data, $plugin_file ){
        
        static $response = false;
        
        if( empty( $plugin_data['UpdateURI'] ) || ! empty( $update ) )
            return $update;
        
        if( $response === false )
            $response = wp_remote_get( $plugin_data['UpdateURI'] );
        
        if( empty( $response['body'] ) )
            return $update;
        
        $custom_plugins_data = json_decode( $response['body'], true );
        
        if( ! empty( $custom_plugins_data[ $plugin_file ] ) )
            return $custom_plugins_data[ $plugin_file ];
        else
            return $update;
        
    }
    
    add_filter('update_plugins_my-domain.com', 'my_plugin_check_for_updates', 10, 3);
    
}
11 апр. 2022 г. 03:31:30
Комментарии

Это было очень полезно, спасибо!

Gavin Gavin
9 янв. 2023 г. 14:32:55

Как защитить это от скачивания плагина любым пользователем?

Toniq Toniq
11 янв. 2024 г. 21:26:43
3
10

Если вам нравится бесплатный ... и вы хотите использовать что-то вроде GitHub, GitLab или BitBucket, это качественный и поддерживаемый плагин для работы с ними (поддерживает приватные и корпоративные репозитории):

https://github.com/afragen/github-updater

20 сент. 2016 г. 03:34:28
Комментарии

Вау! Выглядит как хорошо поддерживаемый и зрелый проект!

Armstrongest Armstrongest
12 окт. 2016 г. 23:44:00

Зависимость от другого плагина не выглядит самым чистым решением.

kontur kontur
13 февр. 2018 г. 13:25:34

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

sMyles sMyles
13 февр. 2018 г. 16:28:36
2

Я тоже изучаю этот вопрос. Вот несколько ссылок, которые могут быть полезными:

Первая ссылка содержит информацию и указания по API обновлений. Вторая - фрагмент кода, показывающий, как фактически запрашивать информацию из API.

get_api_data()

<?php
/*
Получение данных из API плагинов
*/
function get_api_data($per_page, $page)
{
    $fields = array(
        'downloaded' => true,
        'author' => false,
        'author_profile' => false,
        'contributors' => false,
        'requires' => true,
        'tested' => false,
        'compatibility' => false,
        'homepage' => false,
        'description' => false,
        'last_updated' => true,
        'added' => true
    );
    $body = (object) array('browse' => 'new', 'page' => $page, 'per_page' => $per_page, 'fields' => $fields);
    $post_data = array('action' => 'query_plugins', 'request' => serialize($body));
 
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_URL, 'http://api.wordpress.org/plugins/info/1.0/');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $return = curl_exec($ch);
    curl_close($ch);
 
    return unserialize($return);
}
12 авг. 2010 г. 15:44:42
Комментарии

@Dougal - Отличные ссылки!

MikeSchinkel MikeSchinkel
21 окт. 2010 г. 11:53:57

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

Cyclonecode Cyclonecode
16 янв. 2021 г. 15:03:51
1

Если вам нужно готовое решение без необходимости самостоятельного управления, обратите внимание на Kernl (https://kernl.us). Это сервис, который предоставляет инфраструктуру для обновления плагинов и упрощает интеграцию в ваши собственные плагины.

8 мая 2015 г. 17:02:38
Комментарии

Это выглядит жизнеспособным.

kontur kontur
13 февр. 2018 г. 20:33:31
0

Возможно, вам стоит ознакомиться с плагином WordPress Development Kit. Я недавно перенёс свою проприетарную систему обновлений на этот плагин. Теперь он служит бэкенд-обработчиком для обновлений моего премиум-плагина.

Это решение схоже по настройке с тем, что предложил agileapricot выше. Плагин устанавливается как стандартный на сайт WordPress. Вы размещаете свои премиум-архивы .zip и файл plugins.json в рабочих или тестовых директориях на вашем сервере (указывается в настройках плагина).

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

Я использую этот плагин уже несколько месяцев для публикации списка изменений моих премиум-дополнений, списка текущих версий и загрузок для владельцев Premier-подписки. Теперь, начиная с версии 0.7.01, он также работает как конечная точка запросов для встроенных обновлений WordPress.

Надеюсь, кому-то это окажется полезным.

5 мая 2015 г. 23:26:02
3

Если вы хотите создать собственный сервер обновлений, это достаточно легко сделать без использования библиотек, используя всего два хука: plugins_api и site_transient_update_plugins.

plugins_api — используется для получения информации о плагине и отображения её в модальном окне, например:

Пример модального окна с информацией о плагине

site_transient_update_plugins — необходим для отправки обновления с вашего сервера.

Подробнее об этом в этом руководстве: https://rudrastyh.com/wordpress/self-hosted-plugin-update.html

1 авг. 2021 г. 12:58:36
Комментарии

Я попробовал ваш код, но получаю ошибку Parse error: syntax error, unexpected '{' in

Naren Verma Naren Verma
24 нояб. 2022 г. 04:56:24

В этом коде я получаю ошибку // ничего не делать, если мы не получаем корректный ответ от сервера if( is_wp_error( $remote ) || 200 !== wp_remote_retrieve_response_code( $remote ) || empty( wp_remote_retrieve_body( $remote ) ) { return $res; }

Naren Verma Naren Verma
24 нояб. 2022 г. 04:56:59

) отсутствует в вашем коде

Naren Verma Naren Verma
24 нояб. 2022 г. 05:00:58