wp_handle_upload() - come caricare in una sottocartella personalizzata all'interno di uploads

12 apr 2014, 13:09:56
Visualizzazioni: 15K
Voti: 5

wp_handle_upload() funziona per me, ma carica i file dove vuole (uploads/anno/mese).

Domanda: C'è un modo per dirgli di caricare i file in una cartella personalizzata (uploads/miacartellapersonalizzata)? O esiste qualche altra funzione che potrebbe farlo?

Quello che ho provato:

  1. move_uploaded_file() di PHP (non sono riuscito a capire il parametro della directory di destinazione - questo è per un plugin e ho bisogno che funzioni per tutti indipendentemente dalla loro struttura di directory).

  2. https://yoast.com/smarter-upload-handling-wp-plugins

Ho incollato questo codice nel file principale del mio plugin. Non è successo nulla. Ma vedo nei commenti che sembra funzionare per altre persone.

PER FAVORE se hai una risposta, fornisci una risposta completa. Sono in grado di ottenere $_FILES['myfile']. Quali passi devo fare da lì per far sì che quel file vada in uploads/miacartellapersonalizzata?

0
Tutte le risposte alla domanda 1
2

Puoi lavorare sull'idea fornita da Joost e utilizzare il filtro upload_dir per impostare temporaneamente il percorso di caricamento in un'altra posizione.

/**
 * Sovrascrive il percorso di caricamento predefinito.
 * 
 * @param   array   $dir
 * @return  array
 */
function wpse_141088_upload_dir( $dir ) {
    return array(
        'path'   => $dir['basedir'] . '/mycustomdir',
        'url'    => $dir['baseurl'] . '/mycustomdir',
        'subdir' => '/mycustomdir',
    ) + $dir;
}

E poi nella pratica, è semplice come:

// Registriamo l'override del percorso.
add_filter( 'upload_dir', 'wpse_141088_upload_dir' );

// Facciamo il nostro lavoro. WordPress sposterà il file in 'uploads/mycustomdir'.
$result = wp_handle_upload( $_FILE['myfile'] );

// Ripristiniamo tutto alla normalità.
remove_filter( 'upload_dir', 'wpse_141088_upload_dir' );
12 apr 2014 13:49:24
Commenti

Grazie mille per la guida. Questo quasi funziona, ma ora ottengo: "Impossibile creare la directory wp-content/uploads/mycustomdir. La sua directory genitore è scrivibile dal server?". A me sembra ovvio che la directory genitore sia scrivibile dal server, dato che i caricamenti lì funzionano perfettamente.

CodeVirtuoso CodeVirtuoso
12 apr 2014 14:02:17

Nel tentativo di risolvere il problema sopra, ho provato a creare mycustomdir all'attivazione del plugin, usando questo snippet: http://www.wpmayor.com/code-snippet-to-create-a-directory-within-uploads-folder/ Risultato: sul mio localhost funziona (e così anche il tuo codice) - ma sul server di produzione dice: "Il plugin ha generato 233 caratteri di output inatteso durante l'attivazione. Se noti messaggi 'headers already sent', problemi con i feed di syndication o altri problemi, prova a disattivare o rimuovere questo plugin."

CodeVirtuoso CodeVirtuoso
12 apr 2014 14:51:05