Actualizări pentru un plugin privat?

11 aug. 2010, 22:43:40
Vizualizări: 41.8K
Voturi: 135

Dacă scriu un plugin privat, există vreo modalitate de a folosi mecanismul de actualizare automată WordPress pentru a-l actualiza?

Vreau să încapsulez funcționalitatea, dar este specifică doar pentru cele aproximativ 5 bloguri ale mele, deci nu este un candidat bun pentru repository-ul public de plugin-uri. Dar îmi place foarte mult mecanismul simplu de actualizare.

Există vreo modalitate de a face acest lucru?

2
Comentarii

Dacă nu dorești să-ți creezi propria soluție, poți folosi https://kernl.us pentru actualizări găzduite ale pluginurilor.

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

Cred că această opțiune a fost discutată ca fiind filtrabilă pe lista de email wp-hackers acum ceva vreme. Nu a fost niciodată rezolvată, dacă îmi amintesc corect. Cred că discuția relevantă a fost în acest thread: http://lists.automattic.com/pipermail/wp-hackers/2009-February/024796.html ...dar s-ar putea să greșesc.

ZaMoose ZaMoose
11 aug. 2010 23:20:15
Toate răspunsurile la întrebare 8
0
51

Se pare că codul relevant se află în wp-includes/update.php, funcția 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);

Codul verifică în mod specific api.wordpress.org. Din punct de vedere tehnic, ar fi posibil să trimiteți o cheie în interiorul $to_send pentru a delega verificarea, dar din câte știu, aceasta nu este o funcționalitate oficial acceptată.

Dacă folosiți hook-ul set_site_transient_update_plugins, ați putea adăuga propriile detalii despre pachet în această variabilă. Se pare că aceste valori vor fi folosite în mod implicit când rulați actualizările plugin-urilor. Consultați wp-admin/update.php și wp-admin/includes/class-wp-upgrader.php. Analizând codul din aceste două funcții, cred că ar fi posibil să injectați propriul server de actualizări, trebuie doar să vă uitați la modul în care sunt formatate detaliile pachetelor și să le potriviți.

11 aug. 2010 23:16:44
3
46

Acest plugin face asta pentru tine:

Actualizări Automate pentru Plugin-uri Private și Comerciale

Din cele mai vechi timpuri, doar plugin-urile găzduite în directorul oficial de plugin-uri WordPress.org au suportat actualizări automate. Acum, am scris o bibliotecă PHP pe care o poți folosi pentru a adăuga capabilități de actualizare automată oricărui plugin. Plugin-uri publice, private și comerciale – toate pot beneficia acum de notificări de actualizare automată și upgrade-uri cu un singur click.

Depozit GitHub

12 dec. 2010 17:58:17
Comentarii

S-ar putea să fii interesat și de gestionarea plugin-urilor de pe partea ta... poate cu pachetul wp-update-server, scris de același autor ;) https://github.com/YahnisElsts/wp-update-server Folosind acest server, poți securiza plugin-urile tale, așa cum este descris aici: http://w-shadow.com/blog/2013/03/19/plugin-updates-securing-download-links/

SimonSimCity SimonSimCity
9 iul. 2014 10:32:01

cum pot dezactiva verificatorul implicit de actualizări din WordPress pentru plugin-urile gratuite?

csandreas1 csandreas1
11 nov. 2017 09:03:21

Chiar dacă acel site pare învechit, proiectul este foarte activ întreținut și funcționează și cu repo-uri private Bitbucket/Github! Vezi repo-ul lor de Github pentru mai multe informații despre diferitele integrări disponibile https://github.com/YahnisElsts/plugin-update-checker

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

Începând cu WordPress v5.8, este mult mai simplu să îți creezi o versiune de bază a funcționalității personalizate de actualizare a plugin-urilor.

Pasul 1

Creează un fișier JSON pe serverul tău. Acesta va conține informații despre cea mai recentă versiune a plugin-ului(urilor) tale și un link către fișierul ZIP pentru ca WordPress să îl descarce automat când este declanșată actualizarea.

Exemplu de locație: https://domeniul-meu.com/pluginuri-personalizate/informatii-pluginuri.json

Exemplu de conținut:

{
    "pluginul-meu/pluginul-meu.php":{
        "versiune":"1.1",
        "pachet":"https://domeniul-meu.com/pluginuri-personalizate/pluginul-meu.zip"
    }
}

Poți adăuga informații pentru mai multe plugin-uri în acel JSON. Doar asigură-te că cheia fiecărui plugin este în formatul nume_director/nume_fisier.php.

Desigur, WordPress va afișa că o nouă versiune este disponibilă doar atunci când versiunea din JSON este mai mare decât versiunea instalată.

Pentru lista completă de date ale plugin-ului(urilor) pe care le poți seta în fișierul JSON, verifică parametrul $update aici

Pasul 2

Adaugă "Update URI" în fișierul principal al plugin-ului (secțiunea de comentarii). Acesta ar trebui să se lege de fișierul JSON personalizat creat la pasul 1.

<?php
/**
 * Nume Plugin: Pluginul meu
 * Versiune:     1.0
 * Update URI:  https://domeniul-meu.com/pluginuri-personalizate/informatii-pluginuri.json
 * 
 */

Pasul 3

Adaugă acest cod în fișierul principal al plugin-ului personalizat (sau în functions.php)

IMPORTANT: Schimbă "domeniul-meu.com" din funcția add_filter cu domeniul real pe care îl folosești pentru fișierul JSON.

if( ! function_exists( 'verificare_actualizari_plugin' ) ){
    
    function verificare_actualizari_plugin( $actualizare, $date_plugin, $fisier_plugin ){
        
        static $raspuns = false;
        
        if( empty( $date_plugin['UpdateURI'] ) || ! empty( $actualizare ) )
            return $actualizare;
        
        if( $raspuns === false )
            $raspuns = wp_remote_get( $date_plugin['UpdateURI'] );
        
        if( empty( $raspuns['body'] ) )
            return $actualizare;
        
        $date_plugin_personalizate = json_decode( $raspuns['body'], true );
        
        if( ! empty( $date_plugin_personalizate[ $fisier_plugin ] ) )
            return $date_plugin_personalizate[ $fisier_plugin ];
        else
            return $actualizare;
        
    }
    
    add_filter('update_plugins_domeniul-meu.com', 'verificare_actualizari_plugin', 10, 3);
    
}
11 apr. 2022 03:31:30
Comentarii

Aceasta a fost cu adevărat utilă, mulțumesc!

Gavin Gavin
9 ian. 2023 14:32:55

Cum ai proteja acest lucru împotriva descărcării pluginului de către oricine?

Toniq Toniq
11 ian. 2024 21:26:43
3
10

Dacă îți place gratuitul... și vrei să folosești ceva de genul GitHub, GitLab sau BitBucket, acesta este un plugin de calitate și bine susținut pentru gestionarea acestora (suportă private și enterprise):

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

20 sept. 2016 03:34:28
Comentarii

Uau! Pare un proiect bine susținut și matur!

Armstrongest Armstrongest
12 oct. 2016 23:44:00

Dependența de un alt plugin nu pare o soluție prea elegantă.

kontur kontur
13 feb. 2018 13:25:34

@kontur foarte adevărat, dar având în vedere că acesta este open source și este actualizat constant, poate fi folosit ca un cadru de lucru sau pur și simplu ca un exemplu de cod pentru a-ți construi propria soluție.

sMyles sMyles
13 feb. 2018 16:28:36
2

Mă uit și eu în aceeași direcție. Am găsit câteva linkuri care ar putea fi utile:

Primul conține informații și indicații către API-ul pentru actualizări. Al doilea este un fragment de cod care arată cum să ceri efectiv informații de la API.

get_api_data()

<?php
/*
Preia elemente din API-ul pentru pluginuri
*/
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 aug. 2010 15:44:42
Comentarii

@Dougal - Linkuri grozave!

MikeSchinkel MikeSchinkel
21 oct. 2010 11:53:57

Al doilea link nu funcționează, acesta este motivul pentru care ar trebui să încercați să includeți conținutul din linkurile externe de la bun început, dacă este posibil.

Cyclonecode Cyclonecode
16 ian. 2021 15:03:51
1

Dacă dorești o soluție găzduită pe care nu trebuie să o administrezi, verifică Kernl (https://kernl.us). Este un serviciu care oferă infrastructura pentru actualizarea plugin-urilor și facilitează integrarea în propriile tale plugin-uri.

8 mai 2015 17:02:38
Comentarii

Aceasta pare viabilă.

kontur kontur
13 feb. 2018 20:33:31
0

Poate doriți să verificați pluginul WordPress Development Kit. Recent am migrat sistemul meu proprietar de actualizări la acest plugin. Acum pluginul funcționează ca procesor back-end pentru actualizările pluginurilor mele premium.

Această configurare este similară cu soluția oferită de agileapricot mai sus. Se va instala ca un plugin standard pe un site WordPress. Găzduiți fișierele premium .zip și plugins.json în directoare de producție sau pre-release pe serverul dvs. (specificate în setările pluginului).

Pluginul vă permite de asemenea să listați versiunile pluginurilor și poate oferi chiar descărcări pentru fișiere pe pagini publice, protejate prin parolă sau prin abonament. Puteți vedea un exemplu al listei de versiuni pe pagină aici.

Am folosit acest plugin de luni de zile pentru a publica jurnalul de modificări pentru add-on-urile mele premium, lista versiunilor curente și listele de descărcări pentru deținătorii abonamentului Premier. Acum, cu versiunea 0.7.01, funcționează ca destinație de interogare pentru actualizările inline WordPress.

Sper că unii dintre voi îl vor găsi util.

5 mai 2015 23:26:02
3

Dacă sunteți interesat să vă creați propriul server de actualizări, acest lucru este destul de ușor de realizat fără biblioteci, folosind doar două hook-uri de filtrare plugins_api și site_transient_update_plugins

plugins_api – utilizat pentru a obține informațiile despre plugin și pentru a le afișa în fereastra modală, exemplu:

Informații plugin în fereastra modală

site_transient_update_plugins este necesar pentru a trimite actualizarea de la serverul dumneavoastră.

Mai multe detalii în acest tutorial: https://rudrastyh.com/wordpress/self-hosted-plugin-update.html

1 aug. 2021 12:58:36
Comentarii

Am încercat codul tău dar primesc eroarea Parse error: syntax error, unexpected '{' in

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

În acest cod primesc eroarea // nu face nimic dacă nu primim răspunsul corect de la 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

) lipsește în codul tău

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