wp_handle_upload() - cum să încarci într-un subdirector personalizat în uploads

12 apr. 2014, 13:09:56
Vizualizări: 15K
Voturi: 5

wp_handle_upload() funcționează pentru mine, dar încarcă fișierele acolo unde vrea (uploads/an/lună).

Întrebare: Există vreo metodă de a-i spune să încarce fișierele într-un director personalizat (uploads/directorulmeu)? Sau există vreo altă funcție care ar putea face asta?

Ce am încercat:

  1. move_uploaded_file() din PHP (nu am reușit să înțeleg parametrul pentru directorul țintă - acest lucru este pentru un plugin și trebuie să funcționeze pentru toți, indiferent de structura directorilor).

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

Am inserat acest cod în fișierul principal al pluginului meu. Nu s-a întâmplat nimic. Dar în comentarii văd că pentru alții pare să funcționeze.

TE ROG, dacă ai un răspuns, oferă-l complet. Pot obține $_FILES['fisierulmeu']. Ce pași trebuie să urmez de aici pentru a muta acel fișier în uploads/directorulmeu?

0
Toate răspunsurile la întrebare 1
2

Puteți lucra la ideea oferită de Joost și utiliza filtrul upload_dir pentru a seta temporar calea de încărcare într-o altă locație.

/**
 * Suprascrie calea implicită de încărcare.
 * 
 * @param   array   $dir
 * @return  array
 */
function wpse_141088_upload_dir( $dir ) {
    return array(
        'path'   => $dir['basedir'] . '/mycustomdir',
        'url'    => $dir['baseurl'] . '/mycustomdir',
        'subdir' => '/mycustomdir',
    ) + $dir;
}

În practică, este la fel de simplu ca:

// Înregistrăm suprascrierea căii.
add_filter( 'upload_dir', 'wpse_141088_upload_dir' );

// Facem operațiunea. WordPress va muta fișierul în 'uploads/mycustomdir'.
$result = wp_handle_upload( $_FILE['myfile'] );

// Resetăm totul la normal.
remove_filter( 'upload_dir', 'wpse_141088_upload_dir' );
12 apr. 2014 13:49:24
Comentarii

Mulțumesc mult pentru îndrumare. Acest lucru aproape funcționează, dar acum primesc: "Nu se poate crea directorul wp-content/uploads/mycustomdir. Directorul părinte este accesibil pentru scriere de către server?". Pentru mine, pare evident că directorul părinte este accesibil pentru scriere, deoarece încărcările acolo funcționează fără probleme.

CodeVirtuoso CodeVirtuoso
12 apr. 2014 14:02:17

Încercând să rezolv problema de mai sus, am încercat să creez mycustomdir la activarea pluginului, folosind acest fragment de cod: http://www.wpmayor.com/code-snippet-to-create-a-directory-within-uploads-folder/ Rezultat: pe localhost funcționează (la fel ca și codul tău) - dar pe serverul de producție apare mesajul: "Pluginul a generat 233 de caractere de ieșire neașteptată în timpul activării. Dacă observați mesaje 'headers already sent', probleme cu fluxurile de sincronizare sau alte probleme, încercați dezactivarea sau eliminarea acestui plugin."

CodeVirtuoso CodeVirtuoso
12 apr. 2014 14:51:05