Eroare PHP fatală: Apel la funcția nedefinită download_url()
Mai întâi, iată eroarea completă:
PHP Fatal error: Call to undefined function download_url() in /path/to/wordpress/wp-admin/includes/media.php on line 562
Am inclus și funcțiile relevante la finalul întrebării.
Modific un script pentru site-ul companiei noastre care ne permite să automatizăm preluarea și încărcarea conținutului de la furnizorul nostru. Din cauza modului în care organizează XML-ul, trebuie să încărcăm imaginile asociate articolelor separat de corpul principal al articolelor. Am încercat să folosesc media_sideload_image() pentru asta, dar am primit eroarea:
Funcția (media_sideload_image()) care apelează download_url și generează eroarea:
PHP Fatal error: Call to undefined function download_url() in /path/to/wordpress/wp-admin/includes/media.php on line 562
După cum se poate vedea, am inclus cu succes media.php - iar restul scriptului meu este deja implementat pe site și nu am întâlnit alte probleme cu accesul la fișierele WordPress. Eroarea pare să fie în media.php însăși - ceea ce mi se pare neobișnuit.
Aveți idei despre cum aș putea rezolva această problemă? Alternativ, dacă cunoașteți o altă funcție pe care o pot folosi pentru asta, aș aprecia.
Desigur, dacă aveți nevoie de mai multe detalii despre problemă, spuneți-mi.
/**
* Descarcă o imagine de la URL-ul specificat și o atașează la un post.
*
* @since 2.6.0
*
* @param string $file URL-ul imaginii de descărcat
* @param int $post_id ID-ul postului cu care media va fi asociată
* @param string $desc Opțional. Descrierea imaginii
* @return string|WP_Error Cod HTML img populat la succes
*/
function media_sideload_image($file, $post_id, $desc = null) {
if ( ! empty($file) ) {
// Descarcă fișierul într-o locație temporară
$tmp = download_url( $file );
// Setează variabile pentru stocare
// corectează numele fișierului pentru query strings
preg_match('/[^\?]+\.(jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/', $file, $matches);
$file_array['name'] = basename($matches[0]);
$file_array['tmp_name'] = $tmp;
// Dacă apare eroare la stocarea temporară, șterge
if ( is_wp_error( $tmp ) ) {
@unlink($file_array['tmp_name']);
$file_array['tmp_name'] = '';
}
// face validarea și stocarea
$id = media_handle_sideload( $file_array, $post_id, $desc );
// Dacă apare eroare la stocarea permanentă, șterge
if ( is_wp_error($id) ) {
@unlink($file_array['tmp_name']);
return $id;
}
$src = wp_get_attachment_url( $id );
}
// Verifică în final dacă fișierul a fost salvat, apoi returnează html-ul
if ( ! empty($src) ) {
$alt = isset($desc) ? esc_attr($desc) : '';
$html = "<img src='$src' alt='$alt' />";
return $html;
}
}
Funcția în care apelez media_sideload_image() în codul meu:
//Încarcă imaginea dacă există și returnează post_id
function upload_image($post_id, $image_url) {
require_once('wp-admin/includes/media.php');
$image_url = 'http://admin.gkbusiness.com/gkbusiness/files/2011/04/LOGOGKMBUS1.jpg';
media_sideload_image($image_url, $post_id);
return $post_id;
}
Cum arată asta:
function attach_image_url($file, $post_id, $desc = null) {
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
require_once(ABSPATH . "wp-admin" . '/includes/file.php');
require_once(ABSPATH . "wp-admin" . '/includes/media.php');
if ( ! empty($file) ) {
// Descarcă fișierul într-o locație temporară
$tmp = download_url( $file );
// Setează variabilele pentru stocare
// corectează numele fișierului pentru query strings
preg_match('/[^\?]+\.(jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/', $file, $matches);
$file_array['name'] = basename($matches[0]);
$file_array['tmp_name'] = $tmp;
// Dacă apare o eroare la stocarea temporară, șterge fișierul
if ( is_wp_error( $tmp ) ) {
@unlink($file_array['tmp_name']);
$file_array['tmp_name'] = '';
}
// face validarea și stocarea
$id = media_handle_sideload( $file_array, $post_id, $desc );
// Dacă apare o eroare la stocarea permanentă, șterge fișierul
if ( is_wp_error($id) ) {@unlink($file_array['tmp_name']);}
add_post_meta($post_id, '_thumbnail_id', $id, true);
}
}

Dacă nu aveți nevoie de o soluție atât de detaliată sau întâmpinați probleme cu alte funcționalități lipsă în scriptul vostru 'extern', puteți include și scripturile de administrare.
Așadar, în partea de sus a scriptului vostru 'extern' care ar trebui să utilizeze funcționalități WordPress, includeți wp-load pentru funcționalitățile de frontend și admin.php pentru funcționalitățile de backend / administrare:
require_once ('wp-load.php');
require_once ('wp-admin/includes/admin.php');
Aceasta presupune că scriptul vostru se află la nivelul rădăcină al WordPress; dacă nu, va trebui să adaptați căile.
