Si trabajas realizando proyectos en WordPress en el que el código se aloja en un servidor usando SVN, una forma sencilla de actualizar tu theme con los últimos cambios es mediante este sencillo y no-seguro plugin.
El plugin añade una opción de menú al Settings del Dashboard de WP, el cual te servirá para indicar el servidor SVN, usuario, contraseña y el path que corresponde a la carpeta themes de WP. El plugin se conectará al repositorio SVN y recuperará las carpetas que se encuentran en el path anterior y comprobará si las carpetas corresponden a themes instalados, mostrarás una lista con los themes encontrados junto a un botón que permite actualizar todo el theme.
Digo que no es seguro porque no controlo los permisos de los usuarios ni otras cuestiones, pero si estás interesado en ello supongo que no te costará mucho meterle mano al código:
// Adding Admin menu
if ( is_admin() ){
add_action('admin_menu', 'svn_update_menu');
add_action( 'admin_init', 'svn_update_register_settings' );
}
function svn_update_register_settings() {
register_setting( 'svn_up_option-group', 'svn_username' );
register_setting( 'svn_up_option-group', 'svn_password' );
register_setting( 'svn_up_option-group', 'svn_repository' );
register_setting( 'svn_up_option-group', 'svn_theme_path' );
if ($_GET['page'] == 'svn-update/svn-update.php') {
require ('phpsvnclient/phpsvnclient.php');
$phpsvnclient = new phpsvnclient(get_option('svn_repository'), get_option('svn_username'), get_option('svn_password'));
$files = $phpsvnclient->getDirectoryFiles('/');
$svn_themes = array();
$themes = array();
foreach(get_themes() as $k=>$t) $themes[$t['Template']] = array($k, $t["Template Dir"]);
if (is_array($files)) {
foreach($files as $f) {
if ($f['type'] == 'directory') {
if (isset($themes[$f['path']])) $svn_themes[$f['path']] = $themes[$f['path']];
}
}
}
update_option('svn_themes', $svn_themes);
if (isset($_GET['svn_update'])) {
$path = $_GET['svn_update'];
$theme_path = WP_CONTENT_DIR . '/themes/';
$files = $phpsvnclient->getDirectoryFiles($path);
foreach($files as $f) {
if ($f['type'] == 'file') {
file_put_contents($theme_path.$f['path'], $phpsvnclient->getFile($f['path']));
}
}
add_action('admin_notices', 'showSVNUpdated');
}
}
}
function showSVNUpdated() {
echo '<div id="message" class="updated fade"><p><strong>Theme updated</strong></p></div>';
}
function svn_update_menu() {
add_options_page('SVN Update Options', 'SVN Update', 8, __FILE__, 'svn_update_options');
}
function svn_update_options() {
?>
<div class="wrap">
<h2>SVN Update Options</h2>
<form method="post" action="options.php">
<?php settings_fields('svn_up_option-group'); ?>
<table class="form-table">
<tr>
<th scope="row" valign="top">Username</th>
<td>
<input id="svn_username" name="svn_username" value="<?php echo get_option('svn_username'); ?>" type="text"/>
<label for="svn_username">Write your SVN username</label>
</td>
</tr>
<tr>
<th scope="row" valign="top">Password</th>
<td>
<input id="svn_username" name="svn_password" value="<?php echo get_option('svn_password'); ?>" type="password" />
<label for="svn_password">Write your SVN password</label>
</td>
</tr>
<tr>
<th scope="row" valign="top">Repository</th>
<td>
<input id="svn_username" name="svn_repository" value="<?php echo get_option('svn_repository'); ?>" type="text" />
<label for="svn_reposotoy">for example: <em>http://domain.com/svn_path/project</em></label>
</td>
</tr>
<tr>
<th scope="row" valign="top">Theme path</th>
<td>
<input id="svn_username" name="svn_theme_path" value="<?php echo get_option('svn_theme_path'); ?>" type="text" />
<label for="svn_theme_path">for example: <em>/trunk/my_project/themes</em></label>
</td>
</tr>
</table>
<p class="submit">
<input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
</p>
</form>
</div>
<h3>Available Themes</h3>
<?php
$themes = get_option('svn_themes');
if (empty($themes)) {
echo '<p>No themes found in SVN repository instaled in WordPress</p>';
} else {
echo '<ul>';
foreach($themes as $k=>$t) {
echo '<li>/'.$k.' => '.$t[0].' <a href="'.admin_url('options-general.php?page=svn-update%2Fsvn-update.php&svn_update=/'.$k).'" class="button-primary">Update</a></li>';
}
echo '</ul>';
}
?>
<?php
}
Este plugin necesita la librería PHP SVN Client para acceder al SVN, tan solo hay que meterlo en el mismo directorio que el plugin. Le faltan muchas cosas al plugin, pero ni tengo ganas ni tengo tiempo.