Sélectionner une page

Je travaille sur un plugin WordPress actuellement et pour des besoins spécifiques, j’ai besoin que des utilisateurs puissent uploader un fichier dans la médiathèque, et plus précisément une image.

Une partie de cette fonctionnalité est de transférer le fichier vers le dossier upload de WordPress et les afficher dans la médiathèque. Le chemin des fichiers transférés est le chemin du répertoire de téléchargement par défaut de WordPress spécifié par l’administrateur du site dans les paramètres.
Je vais essayer d’expliquer les lignes de base de code que vous pouvez réutiliser dans vos projets. La première page contient le fichier html qui appelle le téléchargement dans une balise <form>.

[pastacode manual= »%3Cform%20action%3D%22upload_file.php%22%20method%3D%22post%22%20enctype%3D%22multipart%2Fform-data%22%3E%0D%0A%3Clabel%20for%3D%22file%22%3EFilename%3A%3C%2Flabel%3E%0D%0A%3Cinput%20type%3D%22file%22%20name%3D%22myfile%22%20id%3D%22myfile%22%3E%0D%0A%3Cinput%20type%3D%22submit%22%20name%3D%22submit%22%20value%3D%22Submit%22%3E%0D%0A%3C%2Fform%3E » provider= »manual » lang= »default »/]

Quelques vérifications de base : la balise du formulaire doit avoir un enctype= »multipart/form-data ».

Notez également que le nom utilisé pour le contrôle fichier html de téléchargement est « myfile ». Nous allons utiliser ce nom dans notre prochaine action fichier « upload_file.php« .

Envoyer des fichiers à l’aide de la fonction wp_handle_upload()

Ici, nous prenons notre fichier d’action, dans notre cas « upload_file.php« . La première partie est de déplacer le fichier dans le dossier approprié sous le répertoire de téléchargements. Donc, par défaut si l’on utilise cette fonction pour télécharger un fichier sur 20.10.2014, Le fichier sera stocké à l’intérieur du dossier > 2014> 10.

Je pense que la fonction wp_handle_upload() n’est pas accessible par défaut des pages publiques. Nous avons donc besoin d’inclure un fichier si la fonction n’est pas définie.

[pastacode manual= »if%20(%20!%20function_exists(%20’wp_handle_upload’%20)%20)%20require_once(%20ABSPATH%20.%20’wp-admin%2Fincludes%2Ffile.php’%20)%3B%0D%0A%24uploadedfile%20%3D%20%24_FILES%5B’myfile’%5D%3B%0D%0A%24upload_overrides%20%3D%20array(%20’test_form’%20%3D%3E%20false%20)%3B%0D%0A%24movefile%20%3D%20wp_handle_upload(%20%24uploadedfile%2C%20%24upload_overrides%20)%3B%0D%0Aif%20(%20%24movefile%20)%20%7B%0D%0A%2F%2Ffile%20is%20uploaded%20successfully.%20do%20next%20steps%20here.%0D%0A%7D » provider= »manual » lang= »php »/]

$movefile est un tableau contenant des informations sur l’image téléchargée. Cette information est ensuite utilisée pour ajouter le fichier à la bibliothèque multimédia.

La fonction wp_insert_attachment()

Le fichier est alors téléchargé dans le dossier de téléchargements. Mais il n’apparaît pas dans la bibliothèque multimédia tant que les détails ne sont pas présents dans le tableau wp_posts. Cette information est ajoutée en utilisant la fonction de wp_insert_attachment().

[pastacode manual= »if%20(%20%24movefile%20)%20%7B%0D%0A%20%20%20%20%24wp_filetype%20%3D%20%24movefile%5B’type’%5D%3B%0D%0A%20%20%20%20%24filename%20%3D%20%24movefile%5B’file’%5D%3B%0D%0A%20%20%20%20%24wp_upload_dir%20%3D%20wp_upload_dir()%3B%0D%0A%20%20%20%20%24attachment%20%3D%20array(%0D%0A%20%20%20%20%20%20%20%20’guid’%20%3D%3E%20%24wp_upload_dir%5B’url’%5D%20.%20’%2F’%20.%20basename(%20%24filename%20)%2C%0D%0A%20%20%20%20%20%20%20%20’post_mime_type’%20%3D%3E%20%24wp_filetype%2C%0D%0A%20%20%20%20%20%20%20%20’post_title’%20%3D%3E%20preg_replace(‘%2F%5C.%5B%5E.%5D%2B%24%2F’%2C%20 »%2C%20basename(%24filename))%2C%0D%0A%20%20%20%20%20%20%20%20’post_content’%20%3D%3E%20 »%2C%0D%0A%20%20%20%20%20%20%20%20’post_status’%20%3D%3E%20’inherit’%0D%0A%20%20%20%20)%3B%0D%0A%20%20%20%20require_once(%20ABSPATH%20.%20’wp-admin%2Fincludes%2Fimage.php’%20)%3B%0D%0A%20%20%20%20%24attach_id%20%3D%20wp_insert_attachment(%20%24attachment%2C%20%24filename%2C%20%24insertPost)%3B%0D%0A%20%20%20%20%24attach_data%20%3D%20wp_generate_attachment_metadata(%20%24attach_id%2C%20%24filename%20)%3B%0D%0A%20%20%20%20wp_update_attachment_metadata(%20%24attach_id%2C%20%24attach_data%20)%3B%0D%0A%7D » provider= »manual » lang= »php »/]

Ici, nous mettons en place quelques champs obligatoires qui doivent être fournies à wp_insert_attachment(). La fonction retourne l’id  qui peut ensuite être à nouveau utilisée pour mettre à jour les informations de données metadata.
up
Si vous souhaitez aussi que l’image soit insérer en tant que miniature de l’article, ajouter au code ci-dessus ceci :

[pastacode manual= »%24rows_affected%20%3D%20%24wpdb-%3Einsert(%24wpdb-%3Eprefix.’postmeta’%2C%20array(‘post_id’%20%3D%3E%20ID_DU_POST%2C%20’meta_key’%20%3D%3E%20’_thumbnail_id’%2C%20’meta_value’%20%3D%3E%20%24attach_id))%3B » provider= »manual » lang= »php »/]

Voilà il n’y plus qu’à récupérer les données pour les afficher ailleurs. pour cela j’ai pris la méthode de WordPress Channel, à savoir :

[pastacode manual= »if(!has_post_thumbnail()%20)%20%7B%0D%0A%20%20%20%20%2F%2F%20Si%20l’article%20n’a%20pas%20d’Image%20%C3%A0%20la%20Une%2C%20on%20r%C3%A9cup%C3%A8re%20la%201%C3%A8re%20image%20attach%C3%A9e%0D%0A%20%20%20%20%24attachments%20%3D%20get_children(%0D%0A%20%20%20%20%20%20%20%20array(%0D%0A%20%20%20%20%20%20%20%20’post_parent’%20%3D%3E%20get_the_ID()%2C%0D%0A%20%20%20%20%20%20%20%20’post_type’%20%3D%3E%20’attachment’%2C%0D%0A%20%20%20%20%20%20%20%20’post_mime_type’%20%3D%3E%20’image’%2C%0D%0A%20%20%20%20%20%20%20%20’orderby’%20%3D%3E%20’menu_order’%2C%0D%0A%20%20%20%20%20%20%20%20’order’%20%3D%3E%20’DESC’%2C%0D%0A%20%20%20%20%20%20%20%20’numberposts’%20%3D%3E%201%0D%0A%20%20%20%20%20%20%20%20)%0D%0A%20%20%20%20)%3B%0D%0A%20%20%20%20if(%20%24attachments%20)%20%7B%0D%0A%20%20%20%20%20%20%20%20foreach(%20%24attachments%20as%20%24attachment%20)%20%3A%0D%0A%20%20%20%20%20%20%20%20%3F%3E%0D%0A%20%20%20%20%20%20%20%20%3Ca%20href%3D%22%3C%3Fphp%20the_permalink()%3B%20%3F%3E%22%20title%3D%22%3C%3Fphp%20the_title_attribute()%3B%20%3F%3E%22%20%3E%3C%3Fphp%20echo%20wp_get_attachment_image(%24attachment-%3EID%20%2C%20’thumbnail’%2C%20 »%2C%20array(‘class’%20%3D%3E%20%22alignleft%20wp-post-image%22))%3B%20%3F%3E%3C%2Fa%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3C%3Fphp%0D%0A%20%20%20%20%20%20%20%20endforeach%3B%0D%0A%20%20%20%20%7D%0D%0A%7D » provider= »manual » lang= »php »/]

J’espère que ce tutoriel vous serra bien utile.

Florent Maillefaud

WordPress : Uploader un fichier dans la médiathèque en PHP 1Webmaster à Sablons (Isère) / Création de sites internet WordPress.

Micro-entrepreneur depuis 2012, je vous propose la création ou la refonte de votre site internet sous WordPress et à votre image.

Que ce soit un site vitrine, un blog ou un site e-commerce pour votre entreprise ou association, laissez votre empreinte sur le web !

Share This