Eroare PHP fatală: Apel la funcția nedefinită download_url()

20 mai 2011, 17:33:40
Vizualizări: 14.1K
Voturi: 5

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;
}
0
Toate răspunsurile la întrebare 3
0

Trebuie să incluzi și fișierul /path/to/wordpress/wp-admin/includes/file.php, deoarece media.php utilizează funcția download_url() din acel fișier.

20 mai 2011 17:39:05
0

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);
    }
}
7 mar. 2012 17:28:47
1

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.

5 sept. 2016 17:21:02
Comentarii

include(ABSPATH . "wp-admin/includes/admin.php"); a salvat mult timp și efort în loc să cauți toate fișierele necesare. Doar înfășoară-l într-un bloc if (!is_admin()) în cadrul funcției tale și ai rezolvat.

Kaji Kaji
9 mai 2017 09:08:32