Actualizări pentru un plugin privat?
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?

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.

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.

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/

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

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

Î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);
}

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):

Mă uit și eu în aceeași direcție. Am găsit câteva linkuri care ar putea fi utile:
- Documentația API pentru informații despre pluginuri WordPress.org
- Funcția get_api_data() pe Pastebin
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);
}

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.

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.

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:
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

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

Î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; }
