2013-04-10 1 views
5

Ho un'installazione di WordPress e alcuni plugin installati e attivati. Ma ho perso i plugin originali .zip file. Vorrei installare alcuni dei plugin in un nuovo WordPress.È possibile creare un file zip del plugin WordPress da un plugin installato?

I non desidera migrare/spostare/ripristinare-ripristinare l'intera installazione WP corrente. Voglio solo ricreare i file originali del plugin .zip per alcuni dei plug-in installati. Ho accesso all'intero albero dei file e al database. C'è qualche metodo per farlo?

risposta

0

Stranamente, in realtà è banale creare un file zip da un plug-in esistente.

Basta creare un file zip contenente la cartella del plugin. I comandi UNIX per farlo sono:

$ cd wp-content/plugins 
$ zip -r my-plugin.zip my-plugin 

È quindi possibile scaricare il file my-plugin.zip risultante, che possono poi essere utilizzati in WordPress Plugin installare mediante caricamento su nuovi siti (es: WP Admin -> Plugin - > Aggiungi nuovo -> Carica).

Ovviamente il file zip non conterrà alcuna tabella/mod di database, ma la maggior parte dei plug-in verifica questo durante l'installazione ed esegue gli aggiornamenti del database necessari al momento dell'installazione. Sfortunatamente non c'è modo di sapere se questo sarà un problema senza testare o controllare il codice sorgente del plugin, o entrambi.

6

Sì, prima aggiungere un link di download per i collegamenti di azione plugin:

/** 
* Add action links to each plugin 
* @author brasofilo 
*/ 
add_filter('plugin_action_links', function ($plugin_meta, $plugin_file, $plugin_data, $status) 
{ 
    $plugin_dir = dirname($plugin_file); 
    if(!empty($plugin_dir) && '.' !== $plugin_dir) 
     $plugin_meta[] = sprintf( 
      "<a href='#' class='down-zip down-icon' data-file='%s' title='%s'></a>", 
      $plugin_dir, 
      'Download zip file for ' . $plugin_data['Name'] 
     ); 
    else 
     $plugin_meta[] = "Root plugin, cannot zip"; 

    return $plugin_meta; 
}, 10, 4); 

Poi lo stile e allegare azioni JS:

/** 
* Style and actions for wp-admin/plugins.php 
* @author brasofilo 
*/ 
add_action('admin_footer-plugins.php', function() { 
    ?> 
    <style> 
    .down-icon:before { /* http://melchoyce.github.io/dashicons/ */ 
     content: "\f316"; 
     display: inline-block; 
     -webkit-font-smoothing: antialiased; 
     font: normal 20px/1 'dashicons'; 
     vertical-align: top; 
    } 
    </style> 
    <script> 
    root_wp = '<?php echo WP_PLUGIN_DIR; ?>' + '/'; 

    /** 
    * Virtual $_POST 
    * creates form, appends and submits 
    * 
    * @author https://stackoverflow.com/a/9815335/1287812 
    */ 
    function b5f_submit_form_post(path, params, method) 
    { 
     $ = jQuery; 
     method = method || "post"; // Set method to post by default, if not specified. 

     var form = $(document.createElement("form")) 
      .attr({"method": method, "action": path}); 

     $.each(params, function(key,value) 
     { 
      $.each(value instanceof Array? value : [value], function(i,val) 
      { 
       $(document.createElement("input")) 
        .attr({ "type": "hidden", "name": key, "value": val }) 
        .appendTo(form); 
      }); 
     }); 

     form.appendTo(document.body).submit(); 
    } 

    jQuery(document).ready(function($) 
    { 
     /** 
     * Fire a plugin download 
     */ 
     $("a.down-zip").click(function() 
     { 
      event.preventDefault(); 

      b5f_submit_form_post('', { 
       action: 'zip_a_plugin', 
       plugin_to_zip: root_wp + $(this).data('file'), 
       plugin_name: $(this).data('file') 
      }); 
     }); 
    });    
    </script> 
    <?php 
}); 

cattura l'usanza $_POST dati ED e elaborare la directory del plug-in per comprimere:

/** 
* Dispatch $_POST['action']=>'zip_a_plugin' custom action 
* @author brasofilo https://stackoverflow.com/a/23546276/1287812 
*/ 
add_action('admin_action_zip_a_plugin', function() 
{ 
    if(empty($_REQUEST['plugin_to_zip'])) 
     return; 

    zipFile($_REQUEST['plugin_to_zip'], $_REQUEST['plugin_name'], false); 
}); 

E, infine, utilizzando un zipping function found here sullo stack

/** 
* Makes zip from folder 
* @author https://stackoverflow.com/a/17585672/1287812 
*/ 
function zipFile($source, $destination, $flag = '') 
{ 
    if (!extension_loaded('zip')) { 
     return false; 
    } 

    $zip = new ZipArchive(); 
    $tmp_file = tempnam(WP_CONTENT_DIR,''); 
    if (!$zip->open($tmp_file, ZIPARCHIVE::CREATE)) { 
     return false; 
    } 

    $source = str_replace('\\', '/', realpath($source)); 
    if($flag) 
    { 
     $flag = basename($source) . '/'; 
     //$zip->addEmptyDir(basename($source) . '/'); 
    } 

    if (is_dir($source) === true) 
    { 
     $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST); 
     foreach ($files as $file) 
     { 
      $file = str_replace('\\', '/', realpath($file)); 

      if (is_dir($file) === true) 
      { 
       $src = str_replace($source . '/', '', $flag.$file . '/'); 
       if(WP_PLUGIN_DIR.'/' !== $src) # Workaround, as it was creating a strange empty folder like /www_dev/dev.plugins/wp-content/plugins/ 
        $zip->addEmptyDir($src); 
      } 
      else if (is_file($file) === true) 
      { 
       $src = str_replace($source . '/', '', $flag.$file); 
       $zip->addFromString($src, file_get_contents($file)); 
      } 
     } 
    } 
    else if (is_file($source) === true) 
    { 
     $zip->addFromString($flag.basename($source), file_get_contents($source)); 
    } 

    $tt = $zip->close(); 
    if(file_exists($tmp_file)) 
    { 
     // push to download the zip 
     header('Content-type: application/zip'); 
     header('Content-Disposition: attachment; filename="'.$destination.'"'); 
     readfile($tmp_file); 
     // remove zip file is exists in temp path 
     exit(); 
    } 
    else { 
     echo $tt; 
     die(); 
    } 
}