wp_handle_upload() - come caricare in una sottocartella personalizzata all'interno di uploads
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:
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).
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?

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' );

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.

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."
