SummArg | Cursos y recursos para webmasters

16/04/2012

Posibilitar las actualizaciones de themes y plugins desde un servidor propio

Actualmente si un desarrollador desea que sus usuarios actualicen automáticamente desde el Escritorio, debe enviar sus themes y plugins al repositorio oficial (wordpress.org) y desde allí la plataforma efectuará los chequeos de versiones respectivo y ofrecerá a los usuarios las actualizaciones cuando corresponda.

Pero no siempre podemos enviar los recursos al repositorio oficial, ya que podemos desear generar un plugin premium, o un theme para un puñado de clientes particulares y no queremos hacer público el trabajo. Para ello es necesario hacer un hook (un enganche) con la función
pre_set_site_transient_update_themes que es la encargada de verificar si el theme necesita una actualización y apunta en la dirección deseada para descargar el paquete.

Existen varias soluciones dando vueltas en la web, pero la que mas nos gustó es el script que propone clark-technet.com, el cual es una modificación del realizado por konstruktors.com. Vamos a explicar aquí como hacer para instalar esta aplicación y que puedan actualizar sus themes y plugins desde el  Escritorio.

Colocar en línea el servidor

Descargamos el script desde github y lo descomprimimos. Creamos una base de datos e importamos el archivo download_table.sql que viene en el ZIP.

Editamos el archivo /api/download.php y modificamos la ruta relativa a la carpeta en donde alojaremos los archivos comprimidos correspondientes al theme.

$strDownloadFolder = "./theme/";

Luego completamos las credenciales para contectar a la base de datos:

$resDB = mysql_connect("DB_SERVER", "DB_USER", "DB_PASSWORD");
 mysql_select_db("DB_NAME", $resDB);

Actualizar themes

Guardamos y editamos el archivo /api/index.php, en la línea 72 que es en donde comienza la comprobación de themes para actualizar.

// Theme with update info
$packages['themeTaller6'] = array( // Reemplazar exactamente con el slug que tenga el theme.
'versions' => array(
'2.1' => array( // Ultima version disponible
'version' => '2.1', // Ultima version disponible
'date' => '2011-04-16', // Fecha de la version
'package' => 'http://www.dominio-del-servidor.com/theme/themeTaller.zip', // ruta a nuestro paquete con el theme
'file_name' => 'themeTaller.zip', //  nombre completo de nuestro theme comprimido
'author' => 'SummArg', // Autor del theme
'name' => 'themeTaller6', // Nombre del theme
'requires' => '2.8', // version de la plataforma minima requerida
'tested' => '2.8', // version de la plataforma en la que fue testeado el theme
'screenshot_url'=> 'http://www.dominio-del-servidor.com/theme/screenshot.png' // url de la miniatura
)
),
'info' => array(
'url' => 'http://www.midominio.com' // website del theme, si tiene
)
);

Es importante que el encabezado del style.css de nuestro theme coincida con los datos que ofrecemos en esta sección, especialmente el slug (themeTaller6 en nuestro caso) y el nombre del theme (utilizamos el mismo). Una aclaración: no observamos que la ruta a la miniatura funcione, sino que la plataforma intenta tomar el archivo screenshot.png de la raíz del theme.

El encabezado del style.css para nuestro caso es el siguiente:

/*
Theme Name: themeTaller6
Theme URI: www.sitefun.com.ar
Author: SummArg
Version: 1.0
Description: themeTaller clase 6
*/

Subimos toda la carpeta /api/ a nuestro servidor. Luego creamos una carpeta llamada /theme/ y dentro colocamos nuestro archivo comprimido para descargar.

Nuestro theme necesita además de un archivo update.php que lo colocaremos en el theme dentro de una carpeta llamada /includes/ para mantener el orden. Dentro del functions.php colocamos la siguiente línea:

include(TEMPLATEPATH . '/includes/update.php');

Y abrimos el archivo update.php para su edición. Reemplazaremos las primeras líneas 4 a 10 por esto:

set_site_transient('update_themes', null);
add_filter('pre_set_site_transient_update_themes', 'check_for_update');
/******************Change this*******************/
$api_url = 'http://www.dominio-del-servidor.com/api/';
/************************************************/

En donde básicamente eliminamos el comentario de la primera línea y reemplazamos la ruta del servidor por la nuestra.

Tras haber subido los archivos correspondientes al servidor (carpeta /api/ y la carpeta /theme/ que contiene nuestro zip), y haber subido el functions.php modificado a nuestro theme, con su respectivo /includes/update.php, procedemos a probar desde Escritorio > Actualizar si se observan las actualizaciones. Pueden ir modificando los archivos a medida que sea necesario y presionar el botón “Comprobar de nuevo”.

Deberíamos poder ver la actualización e instalarla sin inconvenientes.

Actualizar plugins

Editamos el archivo /api/index.php, en la línea 99 a 140 que es en donde se realiza la comprobación de plugins para actualizar.

/ Plugin with update info
$packages['test-plugin-update'] = array( // Colocar el slug exacto del plugin
 'versions' => array(
 '1.0' => array( // Numero de la version
 'version' => '1.1', // Version actual
 'date' => '2010-04-10', // Fecha de lanzamiento 
 'author' => 'Author Name', // Nombre del autor, soporta links usando html: <a href="http://link.com">Nombre del autor</a>
 'requires' => '2.8', // Version minima de WP requerida
 'tested' => '3.0.1', // Version en la que fue testeado
 'homepage' => 'http://www.misitio.com/', // Sitio oficial del plugin
 'downloaded'=> '1000', // Cantidad de veces descargado
 'external' => '', // Sin uso
 'package' => 'http://www.mi-servidor.com./plugins/plugin.zip', // El zip del plugin
'sections' => array(
'description' => 'Description of Plugin', // Descripcion del plugin
 'installation' => 'Install Info', // Pestañas de la instalacion
 'screen shots' => 'Screen Shots', // Capturas de pantalla
 'change log' => 'Change log', // Pestaña de Changelog
 'faq' => 'FAQ', // Pestaña de FAQ
 'other notes' => 'Other Notes' // Pestaña de otras notas
 )
 )
 ),
 'info' => array(
 'url' => 'http://your_plugin_webiste' // Sitio oficial del plugin
 )
);

Como dijimos antes, es importante que el slug del plugin esté correctamente indicado en la primer línea: $packages[‘test-plugin-update’]. El script viene con un plugin cuya única tarea es actualizarse a sí mismo a modo de prueba y su slug es ‘test-plugin-update’.

Subimos la carpeta /test-plugin-update/ tal cual está a nuestra carpeta de plugins. Lo activamos y comprobamos las actualizaciones.

Automatic theme plugin updater

Dejar un comentario

  1. Información Bitacoras.com…

    Valora en Bitacoras.com: Actualmente si un desarrollador desea que sus usuarios actualicen automáticamente desde el Escritorio, debe enviar sus themes y plugins al repositorio oficial (wordpress.org) y desde allí la plataforma efectuará los chequeos …..

  2. Podrías explicarme como mostrar el link de descarga del theme, es decir mostrar o activar esta opción? ‘package’ => ‘http://midominio/api/download.php?key=’ . $strKey,
    He intentado descomentándola pero nada =(
    Esto por si desea solo decargar solamente el archivo theme.zip

    Gracias!

  3. […] de clics ya esta actualizado. Pues lo mismo con mis propios temas y plugins. Encontre este tutorial Posibilitar las actualizaciones de themes y plugins desde un servidor propio | SummArg y un par mas que basicametne eran el mismo en ingles, con y sin la base de datos que no se muy bien […]

Dejar un comentario