2013-04-10 11 views
5

私はWordPressのインストールといくつかのプラグインをインストールして起動しています。しかし、私は元のプラグイン.zipファイルを失ってしまった。私はいくつかのプラグインを新しいWordPressにインストールしたいと思っています。インストールされているプラ​​グインからWordPressプラグインのzipファイルを作成することはできますか?

現在のWPインストール全体を移行/移動/バックアップ/リストアしたいと考えています。私はちょうどインストールされているプラ​​グインのいくつかの元のプラグイン.zipファイルを再作成したいです。私はファイルツリー全体とデータベースにアクセスできます。それを行う方法はありますか?

答えて

0

実際には、既存のプラグインからzipファイルを作成するのは簡単です。

プラグインフォルダを含むzipファイルを作成するだけです。 UNIXは、それを行うためのコマンド:

あなたは、その後、新しいサイト(上のアップロードを経由してインストールWordPressのプラグインで使用することができたmy-plugin.zipファイルをダウンロードすることができます
$ cd wp-content/plugins 
$ zip -r my-plugin.zip my-plugin 

すなわち:WP管理 - >プラグイン - >新規追加 - >アップロード)をクリックします。

明らかに、zipファイルにはデータベーステーブル/改造者は含まれませんが、ほとんどのプラグインはインストール時にこれをテストし、インストール時に必要なデータベースアップグレードを実行します。残念ながら、プラグインのソースコードをテストしたりチェックしたりすることなく、これが問題になるかどうかを知る方法はありません。その後

/** 
* 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); 

スタイルをしてJSアクションを添付:

6

はい、最初のプラグインのアクションリンクにダウンロードリンクを追加

/** 
* 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 
}); 

は、カスタム$_POST編データをキャプチャし、プラグインディレクトリを処理してzipにします。

スタック上の zipping function found hereを使用して3210

そして最後に、

/** 
* 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(); 
    } 
} 
関連する問題