Errore PHP Fatale: Chiamata a funzione non definita download_url()
Innanzitutto, ecco l'errore completo:
PHP Fatal error: Call to undefined function download_url() in /percorso/verso/wordpress/wp-admin/includes/media.php alla riga 562
Ho anche pubblicato le funzioni correlate in fondo alla mia domanda.
Sto modificando uno script per il sito web della mia azienda che ci permette di automatizzare il recupero e il caricamento di contenuti dal nostro provider di contenuti. A causa del modo in cui organizzano il loro XML, devo caricare le immagini relative agli articoli separatamente dal corpo principale degli articoli. Ho provato a usare media_sideload_image() per fare questo, ma ho ricevuto l'errore:
La funzione (media_sideload_image()) che chiama download_url e risulta nell'errore:
PHP Fatal error: Call to undefined function download_url() in /percorso/verso/wordpress/wp-admin/includes/media.php alla riga 562
Come si può vedere, ho incluso correttamente media.php - e il resto del mio script è già stato implementato sul sito, e non ho riscontrato altri problemi con l'accesso ai file di WordPress. L'errore sembrerebbe essere con media.php stesso - cosa che trovo insolita.
Qualche idea su come posso risolvere questo problema? In alternativa, se conoscete un'altra funzione che posso usare per fare questo, sarebbe altrettanto apprezzato.
Se avete bisogno di maggiori dettagli sul problema, chiedete pure.
/**
* Scarica un'immagine dall'URL specificato e la allega a un post.
*
* @since 2.6.0
*
* @param string $file L'URL dell'immagine da scaricare
* @param int $post_id L'ID del post a cui associare il media
* @param string $desc Opzionale. Descrizione dell'immagine
* @return string|WP_Error Tag HTML img popolato in caso di successo
*/
function media_sideload_image($file, $post_id, $desc = null) {
if ( ! empty($file) ) {
// Scarica il file in una posizione temporanea
$tmp = download_url( $file );
// Imposta le variabili per l'archiviazione
// corregge il nome del file per le query string
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;
// Se c'è un errore nell'archiviazione temporanea, elimina
if ( is_wp_error( $tmp ) ) {
@unlink($file_array['tmp_name']);
$file_array['tmp_name'] = '';
}
// esegue la validazione e l'archiviazione
$id = media_handle_sideload( $file_array, $post_id, $desc );
// Se c'è un errore nell'archiviazione permanente, elimina
if ( is_wp_error($id) ) {
@unlink($file_array['tmp_name']);
return $id;
}
$src = wp_get_attachment_url( $id );
}
// Infine verifica che il file sia stato salvato, poi restituisce l'html
if ( ! empty($src) ) {
$alt = isset($desc) ? esc_attr($desc) : '';
$html = "<img src='$src' alt='$alt' />";
return $html;
}
}
La funzione in cui chiamo media_sideload_image() nel mio codice:
//Carica l'immagine se esiste e restituisce l'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;
}
Ecco come:
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) ) {
// Scarica il file in una posizione temporanea
$tmp = download_url( $file );
// Imposta le variabili per lo storage
// corregge il nome del file per le query string
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;
// Se c'è un errore nel salvataggio temporaneo, elimina
if ( is_wp_error( $tmp ) ) {
@unlink($file_array['tmp_name']);
$file_array['tmp_name'] = '';
}
// esegue la validazione e le operazioni di storage
$id = media_handle_sideload( $file_array, $post_id, $desc );
// Se c'è un errore nel salvataggio permanente, elimina
if ( is_wp_error($id) ) {@unlink($file_array['tmp_name']);}
add_post_meta($post_id, '_thumbnail_id', $id, true);
}
}

Se non hai bisogno di una soluzione così granulare o hai problemi con altre funzionalità mancanti nel tuo script 'esterno', puoi semplicemente includere anche gli script di amministrazione.
Quindi, all'inizio del tuo script 'esterno' che dovrebbe utilizzare le funzionalità di WP, includi wp-load per le funzionalità frontend e admin.php per le funzionalità backend/amministrative:
require_once ('wp-load.php');
require_once ('wp-admin/includes/admin.php');
Questo presuppone che il tuo script si trovi a livello della root di WP, altrimenti dovrai adattare i percorsi.
