,

WordPress : Uploader un fichier dans la médiathèque en PHP

Uploader un fichier dans la médiathèque en PHP

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>.

<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="myfile" id="myfile">
<input type="submit" name="submit" value="Submit">
</form>

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.

if ( ! function_exists( 'wp_handle_upload' ) ) require_once( ABSPATH . 'wp-admin/includes/file.php' );
$uploadedfile = $_FILES['myfile'];
$upload_overrides = array( 'test_form' => false );
$movefile = wp_handle_upload( $uploadedfile, $upload_overrides );
if ( $movefile ) {
//file is uploaded successfully. do next steps here.
}

$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().

if ( $movefile ) {
    $wp_filetype = $movefile['type'];
    $filename = $movefile['file'];
    $wp_upload_dir = wp_upload_dir();
    $attachment = array(
        'guid' => $wp_upload_dir['url'] . '/' . basename( $filename ),
        'post_mime_type' => $wp_filetype,
        'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)),
        'post_content' => '',
        'post_status' => 'inherit'
    );
    require_once( ABSPATH . 'wp-admin/includes/image.php' );
    $attach_id = wp_insert_attachment( $attachment, $filename, $insertPost);
    $attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
    wp_update_attachment_metadata( $attach_id, $attach_data );
}

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.

Si vous souhaitez aussi que l’image soit insérer en tant que miniature de l’article, ajouter au code ci-dessus ceci :

$rows_affected = $wpdb->insert($wpdb->prefix.'postmeta', array('post_id' => ID_DU_POST, 'meta_key' => '_thumbnail_id', 'meta_value' => $attach_id));

 

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 :

if(!has_post_thumbnail() ) {
    // Si l'article n'a pas d'Image à la Une, on récupère la 1ère image attachée
    $attachments = get_children(
        array(
        'post_parent' => get_the_ID(),
        'post_type' => 'attachment',
        'post_mime_type' => 'image',
        'orderby' => 'menu_order',
        'order' => 'DESC',
        'numberposts' => 1
        )
    );
    if( $attachments ) {
        foreach( $attachments as $attachment ) :
        ?>
        <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>" ><?php echo wp_get_attachment_image($attachment->ID , 'thumbnail', '', array('class' => "alignleft wp-post-image")); ?></a>

        <?php
        endforeach;
    }
}

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

0 réponses

Répondre

Se joindre à la discussion ?
Vous êtes libre de contribuer !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *