Aggiornamenti per un plugin privato?

11 ago 2010, 22:43:40
Visualizzazioni: 41.8K
Voti: 135

Se sviluppo un plugin privato, c'è un modo per utilizzare il meccanismo di aggiornamento automatico di WordPress per aggiornarlo?

Voglio incapsulare la funzionalità, ma è specifica per i miei 5 o più blog, quindi non è un candidato adatto per il repository pubblico dei plugin. Però adoro il meccanismo di aggiornamento facilitato.

Esiste un modo per farlo?

2
Commenti

Se non vuoi creare la tua soluzione, puoi usare https://kernl.us per gli aggiornamenti dei plugin ospitati.

Jack Slingerland Jack Slingerland
8 mag 2015 17:01:14

Credo che questa opzione sia stata discussa come filtrabile nella mailing list wp-hackers tempo fa. Non è mai stata risolta, se ricordo bene. Penso che la discussione rilevante fosse in questo thread: http://lists.automattic.com/pipermail/wp-hackers/2009-February/024796.html ...ma potrei sbagliarmi.

ZaMoose ZaMoose
11 ago 2010 23:20:15
Tutte le risposte alla domanda 8
0
51

Sembra che il codice applicabile si trovi in 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);

Controlla specificamente api.wordpress.org. Tecnicamente parlando, sarebbe possibile passare una chiave all'interno di $to_send per delegare il controllo, ma per quanto ne so non è una funzionalità supportata.

Se agganci l'azione set_site_transient_update_plugins, potresti aggiungere i dettagli del tuo pacchetto in questa variabile. Sembra che questi valori saranno considerati attendibili quando esegui l'aggiornamento del plugin. Vedi wp-admin/update.php e wp-admin/includes/class-wp-upgrader.php. Dato il codice in queste due funzioni, penso che sarebbe possibile iniettare il tuo server di aggiornamento personalizzato, devi solo verificare come sono formattati i dettagli del pacchetto e adattarti a quello.

11 ago 2010 23:16:44
3
46

Questo plugin lo fa per te:

Aggiornamenti Automatici per Plugin Privati e Commerciali

Da tempo immemorabile, solo i plugin ospitati nella directory ufficiale di WordPress.org supportavano gli aggiornamenti automatici. Ora, ho scritto una libreria PHP che puoi utilizzare per aggiungere la funzionalità di aggiornamento automatico a qualsiasi plugin. Plugin pubblici, privati e commerciali - tutti possono ora beneficiare delle notifiche di aggiornamento automatico e degli aggiornamenti con un solo click.

Repository GitHub

12 dic 2010 17:58:17
Commenti

Potresti anche essere interessato a gestire i plugin sul tuo lato... magari con il pacchetto wp-update-server, scritto dallo stesso autore ;) https://github.com/YahnisElsts/wp-update-server Utilizzando questo server, puoi proteggere i tuoi plugin, come descritto qui: http://w-shadow.com/blog/2013/03/19/plugin-updates-securing-download-links/

SimonSimCity SimonSimCity
9 lug 2014 10:32:01

come posso disabilitare il controllo degli aggiornamenti predefinito di WordPress per i plugin gratuiti?

csandreas1 csandreas1
11 nov 2017 09:03:21

Anche se quel sito sembra datato, il progetto è molto attivamente supportato e funziona anche con repository privati Bitbucket/Github! Dai un'occhiata al loro repository Github per maggiori informazioni sulle diverse integrazioni disponibili https://github.com/YahnisElsts/plugin-update-checker

wp-overwatch.com wp-overwatch.com
5 set 2019 01:23:41
2
16

Dalla versione 5.8 di WordPress, è diventato molto più semplice creare una versione base di funzionalità personalizzata per gli aggiornamenti dei plugin.

Passo 1

Crea un file JSON sul tuo server. Conterrà informazioni sull'ultima versione del tuo plugin (o plugin) e il link al file ZIP che WordPress scaricherà automaticamente quando verrà attivato l'aggiornamento.

Esempio di percorso: https://my-domain.com/custom-plugins/plugins-info.json

Esempio di contenuto:

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

Puoi aggiungere informazioni per più plugin in questo JSON. Assicurati solo che la chiave per ogni plugin sia nel formato nome_directory/nome_file.php.

Naturalmente, solo quando la versione del plugin nel JSON è maggiore della versione installata, WordPress mostrerà che è disponibile un nuovo aggiornamento.

Per la lista completa dei dati che puoi impostare nel file JSON, controlla il parametro $update qui

Passo 2

Aggiungi "Update URI" al file principale del plugin (nella sezione dei commenti). Dovrebbe puntare al tuo file JSON personalizzato creato nel passo 1.

<?php
/**
 * Plugin Name: My plugin
 * Version:     1.0
 * Update URI:  https://my-domain.com/custom-plugins/plugins-info.json
 * 
 */

Passo 3

Aggiungi questo codice al file principale del tuo plugin personalizzato (o a functions.php)

IMPORTANTE: Cambia "my-domain.com" all'interno della funzione add_filter con il dominio effettivo che stai utilizzando per il file 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 apr 2022 03:31:30
Commenti

È stato davvero utile, grazie!

Gavin Gavin
9 gen 2023 14:32:55

Come potresti proteggerlo dal download del plugin da parte di chiunque?

Toniq Toniq
11 gen 2024 21:26:43
3
10

Se ti piacciono i servizi gratuiti ... e vuoi usare qualcosa come GitHub, GitLab o BitBucket, questo è un plugin di buona qualità e supportato per gestirli (supporta anche privati ed enterprise):

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

20 set 2016 03:34:28
Commenti

Wow! Sembra un progetto ben supportato e maturo!

Armstrongest Armstrongest
12 ott 2016 23:44:00

Affidarsi a un altro plugin non sembra una soluzione molto pulita.

kontur kontur
13 feb 2018 13:25:34

@kontur molto vero, ma dato che questo è open source e viene costantemente aggiornato, potrebbe essere usato come framework o semplicemente come esempio di codice per crearne uno proprio.

sMyles sMyles
13 feb 2018 16:28:36
2

Sto esaminando la stessa cosa. Ecco un paio di link che ho trovato e che potrebbero essere utili:

Il primo contiene alcune informazioni e riferimenti all'API degli aggiornamenti. Il secondo è un frammento di codice che mostra come effettivamente richiedere informazioni dall'API.

get_api_data()

<?php
/*
Recupera elementi dall'API dei plugin
*/
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 ago 2010 15:44:42
Commenti

@Dougal - Ottimi link!

MikeSchinkel MikeSchinkel
21 ott 2010 11:53:57

Il secondo link non funziona, ecco perché dovresti davvero cercare di includere il contenuto dai link esterni fin dall'inizio, se possibile.

Cyclonecode Cyclonecode
16 gen 2021 15:03:51
1

Se desideri una soluzione ospitata che non devi gestire, dai un'occhiata a Kernl (https://kernl.us). È un servizio che fornisce l'infrastruttura per aggiornare i plugin e rende semplice l'integrazione nei tuoi plugin personalizzati.

8 mag 2015 17:02:38
Commenti

Sembra fattibile.

kontur kontur
13 feb 2018 20:33:31
0

Potresti voler dare un'occhiata al plugin WordPress Development Kit. Recentemente ho migrato il mio sistema di aggiornamento proprietario a questo plugin. Ora il plugin funge da processore back-end per gli aggiornamenti dei miei plugin premium.

Questa configurazione è simile alla soluzione fornita da agileapricot sopra. Si installerà come un plugin standard su un sito WordPress. Ospiterai i tuoi file .zip premium e il plugins.json in directory di produzione o prerelease sul tuo server (specificate nelle impostazioni del plugin).

Il plugin ti permette anche di elencare le versioni dei plugin e può persino fornire un download dei file su pagine pubbliche, protette da password o da abbonamento. Puoi vedere un esempio della lista delle versioni in pagina qui.

Sto utilizzando questo plugin da mesi per pubblicare il changelog dei miei add-on premium, la lista delle versioni correnti e le liste di download per i detentori del mio Abbonamento Premier. Ora, con la versione 0.7.01, funziona come destinazione delle query per gli aggiornamenti inline di WordPress.

Spero che alcuni di voi lo trovino utile.

5 mag 2015 23:26:02
3

Se sei interessato a creare il tuo server di aggiornamento, è abbastanza semplice farlo senza utilizzare librerie, usando solo due hook dei filtri: plugins_api e site_transient_update_plugins

plugins_api – utilizzato per ottenere le informazioni del plugin e visualizzarle nella finestra modale, esempio:

Finestra modale con informazioni del plugin

site_transient_update_plugins è necessario per inviare l'aggiornamento dal tuo server.

Maggiori informazioni in questo tutorial: https://rudrastyh.com/wordpress/self-hosted-plugin-update.html

1 ago 2021 12:58:36
Commenti

Ho provato il tuo codice ma ricevo l'errore Parse error: syntax error, unexpected '{' in

Naren Verma Naren Verma
24 nov 2022 04:56:24

In questo codice sto ricevendo l'errore // non fare nulla se non riceviamo la risposta corretta dal server 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 nov 2022 04:56:59

) mancante nel tuo codice

Naren Verma Naren Verma
24 nov 2022 05:00:58