lundi 9 mai 2016

How to download a ZIP file into the wp-plugins folder programmatically?

I am creating a WordPress plugin which should download a ZIP file from a remote location and place it into the wp-plugins folder. So I created a method which downloads the file using Curl (this works fine) and should then place the file into the wp-plugins folder. I am using the WP_Filesystem in order to make sure I have the rights to place a file on the server. This is what I have until now:

public function download_plugin($url, $path) 
{
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $data = curl_exec($ch);
    curl_close($ch);

    global $wp_filesystem;
    if(defined('FS_CHMOD_FILE'))
    {
        $chmod = FS_CHMOD_FILE;
    }
    else
    {
        $chmod = 0755;
    }
    if (empty($wp_filesystem))
    {
        require_once (ABSPATH . '/wp-admin/includes/file.php');
        WP_Filesystem();
    }
    if(!$wp_filesystem->put_contents(
      $path,
      $data,
      $chmod
    ))
    else
    {
        return new \WP_Error('writing_error', 'Error when writing file');
    }
}

When I run the method no file is being created on the server. The $path variable however has the right path and the $data variable does contain the ZIP file as a string. The WordPress method put_contents however does nothing. It returns null even when I change the method's parameter to something that should definitely work like $wp_filesystem->put_contents(WP_PLUGIN_DIR.'example.txt','Some text',FS_CHMOD_FILE));.

Is there anything I am doing wrong? It's really difficult to debug since I don't get any errors and put_contents always returns null.



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire