Téléchargement d'image à partir d'une URL

20

J'aime vraiment la façon dont SE télécharge une image à partir d'une URL (j'en suis sûr que beaucoup le font!). J'ai cherché, mais je ne trouve pas, existe-t-il un plugin ou une méthode similaire à celle-ci disponible pour WordPress?

Je sais qu'une image peut être téléchargée et compressée directement à partir d'une URL en entrant l' URL de l'image dans la zone Nom de fichier après avoir cliqué sur Télécharger / Insérer un média >> Depuis l'ordinateur >> Choisir un fichier

entrez la description de l'image ici

C'est une fonctionnalité géniale, mais peu connue (je viens juste de la découvrir). Je voudrais quelque chose d'un peu plus comme SE, où il y a une option qui permet à l'utilisateur de savoir ajouter l'URL de l'image.

Comment puis-je ajouter simplement le champ du fichier de téléchargement à un nouvel onglet dans le téléchargeur de médias?

Voici un didacticiel pour savoir comment ajouter un nouvel onglet dans la page de téléchargement de médias dans wordpress , mais je veux ajouter uniquement du texte et le champ de téléchargement de fichiers à cet onglet. Des idées? Je n'ai rien trouvé dans le Codex WordPress qui traite directement de cette fonctionnalité ou du champ de téléchargement de fichier.

Merci.

Travis Pflanz
la source
Les demandes de fonctionnalités appartiennent à trac.wordpress.org.
Wyck
2
Pas une demande de fonctionnalité. La fonctionnalité est déjà intégrée.
Travis Pflanz
@TravisPflanz Je suis tombé sur cela pour Windows et je pensais que c'était du génie - certainement amélioré mon flux de travail. Savez-vous de toute façon le faire sur Mac? command + shift + g ne semble pas prendre en charge les URL, mais n'était pas sûr s'il y avait une autre commande.
user658182
L'avantage du téléchargement à partir de l'URL par rapport à "saisir l'URL dans Windows Filemanager" est que le fichier est chargé directement de la source vers le serveur WordPress; dans mon cas, sur la ligne gigabit des centres d'hébergement au lieu d'être d'abord téléchargée sur mon PC, puis jusqu'à wordpress sur une connexion mobile lente.
Lenne
L'astuce pour «télécharger» directement à partir d'une URL ne fonctionne pas dans Windows 10 (dans tous les navigateurs testés Firefox, Chrome, IE11), et n'a probablement pas fonctionné dans les versions précédentes de Windows depuis 2012. Windows téléchargera le fichier à partir de l'URL vers un emplacement temporaire sur votre ordinateur et téléchargez à partir de là. Il n'est donc pas possible d'utiliser cette astuce pour `` télécharger '' de gros fichiers vidéo (pour contourner la réponse HTTP 413 du fournisseur d'hébergement avant que PHP et WordPress n'obtiennent même une consultation).
Jake

Réponses:

24

vous pouvez écrire un script php, ou faire votre propre plugin de ce code ici, je l'ai utilisé dans l'un de mes projets où j'ai dû importer un grand nombre d'images.

tout d'abord, récupérez l'image et stockez-la dans votre répertoire de téléchargement:

$uploaddir = wp_upload_dir();
$uploadfile = $uploaddir['path'] . '/' . $filename;

$contents= file_get_contents('http://mydomain.com/folder/image.jpg');
$savefile = fopen($uploadfile, 'w');
fwrite($savefile, $contents);
fclose($savefile);

après cela, nous pouvons insérer l'image dans la médiathèque:

$wp_filetype = wp_check_filetype(basename($filename), null );

$attachment = array(
    'post_mime_type' => $wp_filetype['type'],
    'post_title' => $filename,
    'post_content' => '',
    'post_status' => 'inherit'
);

$attach_id = wp_insert_attachment( $attachment, $uploadfile );

$imagenew = get_post( $attach_id );
$fullsizepath = get_attached_file( $imagenew->ID );
$attach_data = wp_generate_attachment_metadata( $attach_id, $fullsizepath );
wp_update_attachment_metadata( $attach_id, $attach_data );

et le tour est joué - c'est parti. vous pouvez également définir divers autres paramètres dans le tableau des pièces jointes. si vous avez un tableau d'URL ou quelque chose comme ça, vous pouvez exécuter le script en boucle - mais sachez que les fonctions d'image prennent beaucoup de temps et de mémoire pour s'exécuter.

fischi
la source
oh, je suis désolé, je n'ai pas vu l'image au début. peut-être que j'écrirai un petit plugin faisant exactement cela. j'espère que vous pourrez vous entendre avec mon script jusqu'à présent - je vous tiendrai au courant des nouvelles du plugin.
fischi
Je pense que j'ai ajouté l'image comme vous l'avez publiée. Je reviendrai plus en profondeur à mon retour de déjeuner. Merci pour votre aide! Toujours apprécié.
Travis Pflanz
l'utilisation d' file_get_contentsune URL ne fonctionnera pas si elle allow_url_fopenest désactivée dans php.ini- wp_remote_getsera plus hautement compatible dans différents environnements WP
highvolt
Salut, merci pour la réponse, pour ce qui est wp_generate_attachment_metadataet wp_update_attachment_metadata?
gdfgdfg
12

Vous pouvez utiliser les fonctions download_url()et wp_handle_sideload().

download_url()

Télécharge une URL vers un fichier temporaire local à l'aide de la classe HTTP WordPress. Veuillez noter que la fonction appelante doit dissocier () le fichier.

wp_handle_sideload()

Gérez les charges latérales, qui est le processus de récupération d'un élément multimédia à partir d'un autre serveur au lieu d'un téléchargement multimédia traditionnel. Ce processus implique la désinfection du nom de fichier, la vérification des extensions pour le type MIME et le déplacement du fichier vers le répertoire approprié dans le répertoire de téléchargement.

Exemple:

// Gives us access to the download_url() and wp_handle_sideload() functions
require_once( ABSPATH . 'wp-admin/includes/file.php' );

// URL to the WordPress logo
$url = 'http://s.w.org/style/images/wp-header-logo.png';
$timeout_seconds = 5;

// Download file to temp dir
$temp_file = download_url( $url, $timeout_seconds );

if ( !is_wp_error( $temp_file ) ) {

    // Array based on $_FILE as seen in PHP file uploads
    $file = array(
        'name'     => basename($url), // ex: wp-header-logo.png
        'type'     => 'image/png',
        'tmp_name' => $temp_file,
        'error'    => 0,
        'size'     => filesize($temp_file),
    );

    $overrides = array(
        // Tells WordPress to not look for the POST form
        // fields that would normally be present as
        // we downloaded the file from a remote server, so there
        // will be no form fields
        // Default is true
        'test_form' => false,

        // Setting this to false lets WordPress allow empty files, not recommended
        // Default is true
        'test_size' => true,
    );

    // Move the temporary file into the uploads directory
    $results = wp_handle_sideload( $file, $overrides );

    if ( !empty( $results['error'] ) ) {
        // Insert any error handling here
    } else {

        $filename  = $results['file']; // Full path to the file
        $local_url = $results['url'];  // URL to the file in the uploads dir
        $type      = $results['type']; // MIME type of the file

        // Perform any actions here based in the above results
    }

}
Rajilesh Panoli
la source
J'ai utilisé ce code et il a réussi à ajouter l'image dans le répertoire de téléchargement, mais lorsque je vais dans ma bibliothèque multimédia dans le backend Wordpress, je ne le trouve nulle part et il n'apparaît pas dans la recherche. Je me suis assuré qu'il avait les autorisations correctes mais toujours pas de chance. Une raison pour laquelle il ne se présenterait pas?
Nick
Il n'ajoutera pas d'entrées côté administrateur. Si vous souhaitez ajouter des entrées dans admin, mieux vaut utiliser, wp_insert_attachment (); codex.wordpress.org/Function_Reference/wp_insert_attachment ou vous pouvez l'utiliser en modifiant la variable globale $ _FILES. media_handle_upload (); codex.wordpress.org/Function_Reference/media_handle_upload
Rajilesh Panoli
ça ne marche pas du tout
Cameron A
5

Répertoire des plugins WordPress - Grab & Save

Ce plugin vous permet de récupérer l'image d'une URL distante et de l'enregistrer dans votre propre bibliothèque multimédia wordpress. Ce faisant, vous ne vous êtes jamais inquiété si l'image distante a été supprimée par son propriétaire. Cela vous évite également de télécharger l'image sur l'ordinateur local et de la télécharger à nouveau sur votre propre wordpress.

Après avoir saisi l'image, wordpress vous invite soit à "insérer dans le message" soit à "modifier les attributs" comme après avoir téléchargé une image.

Travis Pflanz
la source
1

Il existe au moins trois façons d'importer des images distantes dans WordPress:

  1. Grab and Save Plugin , qui est mentionné dans l'autre réponse. Ce plug-in est un peu plus ancien et il enregistre le fichier directement, donc les vignettes de différentes tailles ne sont pas créées. Dernière mise à jour il y a plus de 2 ans au moment de la rédaction.

  2. Le module externe d'importation d'images a une importation en bloc pour les images liées à distance. Vous devrez peut-être augmenter votre limite de mémoire PHP pour que cela fonctionne. Dernière mise à jour il y a plus de 2 ans au moment de la rédaction.

  3. Enregistrer et importer l'image à partir du plugin URL importe l'image à l'aide de fonctions natives, elle est donc correctement créée dans la galerie multimédia et toutes les miniatures, etc. sont créées. Ce plugin a été mis à jour pour la dernière fois en 2016 et fonctionne avec WordPress 4.7

Divulgation: j'ai créé le Save & Import Image from URL Plugin

user3096626
la source