Cosa dovrei passare per $needed_dirs quando chiamo _unzip_file_pclzip (alias PclZip)?
Sto cercando di creare un metodo di fallback quando ZipArchive non è presente. Vorrei utilizzare la funzione _unzip_file_pclzip() contenuta in wp-admin/includes/file.php
Tuttavia, non sono sicuro di cosa ci si aspetta per l'argomento $needed_dirs.
La cartella di destinazione per il file zip sarà la cartella "styles" sotto la cartella del mio tema, quindi il percorso sarebbe "wp-content/themes/mytheme/styles/"
È questo che ci si aspetta per $needed_dirs?
function openZip($file_to_open) {
global $wp_filesystem;//richiesto se _unzip_file_pclzip viene usato direttamente
global $target;
if(class_exists('ZipArchive'))
{
$zip = new ZipArchive();
$x = $zip->open($file_to_open);
if($x === true)
{
$zip->extractTo($target);
$zip->close();
unlink($file_to_open);
} else {
die("Si è verificato un problema. Per favore riprova!");
}
}
else
{
$needed_dirs = array();
_unzip_file_pclzip($file_to_open, $target, $needed_dirs);
}
}

@Scott B Non ho testato questo script, preso da includes/file.php -> linea 559
_unzip_file_pclzip
presuppone che WP_Filesystem() sia già stato chiamato, quindi devi impostare global $wp_filesystem
global $wp_filesystem;
$needed_dirs = array();
$target = trailingslashit($target);
// Determina le eventuali directory genitore necessarie (della directory di aggiornamento)
if ( ! $wp_filesystem->is_dir($target) ) { //Esegue solo i genitori se non esistono figli
$path = preg_split('![/\\\]!', untrailingslashit($target));
for ( $i = count($path); $i >= 0; $i-- ) {
if ( empty($path[$i]) )
continue;
$dir = implode('/', array_slice($path, 0, $i+1) );
if ( preg_match('!^[a-z]:$!i', $dir) ) // Salta se sembra una lettera di unità Windows.
continue;
if ( ! $wp_filesystem->is_dir($dir) )
$needed_dirs[] = $dir;
else
break; // Esiste una cartella, quindi non è necessario controllare i livelli sottostanti
}
}

Ho aggiunto il globale al mio codice della domanda. Non sono ancora sicuro di cosa passare per $needed_dirs. Stai dicendo che posso semplicemente passare un array vuoto?

Ricevo l'errore > Call to a member function mkdir() on a non-object in C:\xampplite\htdocs\mysite\wp-admin\includes\file.php on line 703... Hai qualche idea?
