web-dev-qa-db-fra.com

PHP Erreur fatale: appel de la fonction non définie download_url ()

Tout d'abord, voici l'erreur complète:

PHP Fatal error:  Call to undefined function download_url() in /path/to/wordpress/wp-admin/includes/media.php on line 562

J'ai également posté les fonctions connexes au bas de ma question.

Je suis en train de modifier un script pour le site Web de mon entreprise, ce qui nous permet d'automatiser la récupération et le téléchargement de contenu à partir de notre fournisseur de contenu. En raison de la manière dont ils organisent leur code XML, je dois télécharger les images liées aux articles séparément du corps principal des articles. J'ai essayé d'utiliser media_sideload_image () pour le faire, mais j'ai reçu l'erreur:

La fonction (media_sideload_image ()) qui appelle download_url et génère l'erreur:

 PHP Fatal error:  Call to undefined function download_url() in /path/to/wordpress/wp-admin/includes/media.php on line 562

Comme on peut le constater, j'ai intégré avec succès media.php - et le reste de mon script a déjà été implémenté sur le site. Je n'ai rencontré aucun autre problème d'accès aux fichiers Wordpress. L'erreur semble être avec media.php lui-même - ce que je trouve inhabituel.

Des idées sur la façon dont je peux résoudre ce problème? Alternativement, si vous connaissez une autre fonction que je peux utiliser pour le faire, cela serait également apprécié.

Certainement, si vous avez besoin de plus de détails sur la question, il suffit de demander.

/**
 * Download an image from the specified URL and attach it to a post.
 *
 * @since 2.6.0
 *
 * @param string $file The URL of the image to download
 * @param int $post_id The post ID the media is to be associated with
 * @param string $desc Optional. Description of the image
 * @return string|WP_Error Populated HTML img tag on success
 */
function media_sideload_image($file, $post_id, $desc = null) {
    if ( ! empty($file) ) {
        // Download file to temp location
        $tmp = download_url( $file );

        // Set variables for storage
        // fix file filename for 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;

        // If error storing temporarily, unlink
        if ( is_wp_error( $tmp ) ) {
            @unlink($file_array['tmp_name']);
            $file_array['tmp_name'] = '';
        }

        // do the validation and storage stuff
        $id = media_handle_sideload( $file_array, $post_id, $desc );
        // If error storing permanently, unlink
        if ( is_wp_error($id) ) {
            @unlink($file_array['tmp_name']);
            return $id;
        }

        $src = wp_get_attachment_url( $id );
    }

    // Finally check to make sure the file has been saved, then return the html
    if ( ! empty($src) ) {
        $alt = isset($desc) ? esc_attr($desc) : '';
        $html = "<img src='$src' alt='$alt' />";
        return $html;
    }
}

La fonction où j'appelle media_sideload_image () dans mon code:

//Upload the image if it exists, and return the 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;
}
4
Wipqozn

Vous devez également inclure /path/to/wordpress/wp-admin/includes/file.php, car le fichier media.php utilise la fonction download_url () de ce fichier.

6
Horttcore

Si vous n'avez pas besoin d'une solution aussi fine, ou si vous avez des problèmes avec d'autres fonctionnalités qui manquent dans votre script "externe", incluez simplement les scripts d'administrateur.

Donc, en haut de votre script 'externe' qui doit utiliser la fonctionnalité WP, incluez wp-load pour la fonctionnalité frontend et admin.php pour les fonctionnalités backend/admin:

require_once ('wp-load.php');
require_once ('wp-admin/includes/admin.php');

Cela suppose que votre script se trouve au niveau racine WP. Sinon, vous devrez adapter les chemins.

2
Larzan

Comment c'est:

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) ) {
        // Download file to temp location
        $tmp = download_url( $file );
        // Set variables for storage
        // fix file filename for 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;
        // If error storing temporarily, unlink
        if ( is_wp_error( $tmp ) ) {
            @unlink($file_array['tmp_name']);
            $file_array['tmp_name'] = '';
        }
        // do the validation and storage stuff
        $id = media_handle_sideload( $file_array, $post_id, $desc );
        // If error storing permanently, unlink
        if ( is_wp_error($id) ) {@unlink($file_array['tmp_name']);}
        add_post_meta($post_id, '_thumbnail_id', $id, true);
    }
}
2
Chris Baker