2013-04-10 2 views
5

WordPress 설치 및 일부 플러그인이 설치되어 활성화되었습니다. 하지만 원래의 플러그인을 분실했습니다 .zip 파일. 새로운 WordPress에 플러그인을 설치하고 싶습니다.설치된 플러그인에서 WordPress 플러그인 zip 파일을 만들 수 있습니까?

전체 WP 설치를 이전/이동/백업 - 복원하려고합니다. 난 그냥 원래의 플러그인 .zip 일부 플러그인에 대한 파일을 다시 만들고 싶어요. 데이터베이스뿐만 아니라 전체 파일 트리에도 액세스 할 수 있습니다. 그 일을하기위한 방법이 있습니까?

답변

0

재미있게도 실제로는 기존 플러그인에서 zip 파일을 만드는 것이 쉽습니다.

단순히 플러그인 폴더가 포함 된 zip 파일을 만듭니다. 유닉스는 그렇게 명령 :

그런 다음 다음 새 사이트 (에 업로드를 통해 설치 워드 프레스 플러그인에서 사용할 수있는 결과 my-plugin.zip 파일을 다운로드 할 수 있습니다
$ cd wp-content/plugins 
$ zip -r my-plugin.zip my-plugin 

예 : WP 관리자 -> 플러그인 - > 새로 추가 -> 업로드).

분명히 zip 파일에는 데이터베이스 테이블/개조 물이 포함되어 있지 않지만 대부분의 플러그인은 설치시이를 테스트하고 설치시 필요한 데이터베이스 업그레이드를 수행합니다. 불행하게도 이것이 플러그인 소스 코드를 테스트하거나 검사하지 않고 문제가 될지 또는 둘 다 알 수있는 방법이 없습니다.

6

예, 먼저 플러그인 액션 링크 다운로드 링크를 추가

/** 
* 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 조치 :

/** 
* 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 에드 데이터와 플러그인 디렉토리를 처리하여 압축합니다.

스택에 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(); 
    } 
} 
관련 문제