web-dev-qa-db-fra.com

Obtenir le chemin d'accès à l'image de pièce jointe téléchargée après le téléchargement

Après avoir téléchargé une pièce jointe dans Wordpress à l'aide de l'écran de téléchargement multimédia, y a-t-il un crochet ou un filtre que je peux exécuter après le téléchargement de l'image, où je peux obtenir le chemin d'accès à l'image téléchargée afin de pouvoir l'analyser?

Je suis en train de construire un plugin qui analysera une image après son envoi, puis la balisera avec la couleur moyenne trouvée dans l'image. Le seul problème est que je ne sais pas quel crochet je peux utiliser et qui se déclenchera juste après le téléchargement de l'image, ce qui me permettra d'obtenir le chemin d'accès au fichier récemment téléchargé.

Toute aide serait grandement appréciée.

8
Dwayne Charrington

Il s'avère que j'ai résolu ma propre question avec l'aide d'un collègue. Les deux filtres appelés après le téléchargement du support ou lors de la modification du support sont: 'add_attachment' et 'edit_attachment'. Voici le code que j'utilise, je vérifie ensuite si la pièce jointe est une image (code omis de l'exemple).

function analyse_attachment($attachment_ID)
{          
    $attachment = get_attached_file($attachment_ID); // Gets path to attachment
    update_post_meta($attachment_ID, "image_rgb", $the_colour);
}

add_action("add_attachment", 'analyse_attachment');
add_action("edit_attachment", 'analyse_attachment');

De toute évidence, j'ai omis certaines choses qui ne sont pas pertinentes pour la question. Mais ce code est appelé juste après avoir chargé ou modifié une pièce jointe.

8
Dwayne Charrington

vous avez deux filtres que vous pouvez utiliser: attachment_fields_to_save qui obtient deux paramètres ($ post, $ attachment) donc:

add_filter('attachment_fields_to_save',your_image_analyse_function);

function your_image_analyse_function($post, $attachment){
  $attachment['url']
  //do your stuff
}

et media_send_to_editor qui obtient 3 paramètres ($ html, $ send_id, $ pièce jointe) et se déclenche lorsque vous cliquez sur l'éditeur d'envoi à afin que vous puissiez utiliser à nouveau $ pièce jointe.

add_filter('media_send_to_editor',your_image_analyse_function);

function your_image_analyse_function($html, $send_id, $attachment){
  $attachment['url']
  //do your stuff
}
4
Bainternet

Marquage HTML:

<p>
  <label for="custom-upload">Upload New Image:</label>
  <input type="file" tabindex="3" name="custom-upload" id="custom-upload" />
</p>
<?php
  /*Retrieving the image*/
  $attachment = get_post_meta($postid, 'custom_image');

  if($attachment[0]!='')
  {
   echo wp_get_attachment_link($attachment[0], 'thumbnail', false, false);
  }

?>

Téléchargement de l'image:

<?php
global $post; /*Global post object*/
$post_id = $post->ID; /*Geting current post id*/
$upload = $_FILES['upload']; /*Receive the uploaded image from form*/
add_custom_image($post_id, $upload); /*Call image uploader function*/

function add_custom_image($post_id, $upload)
{
 $uploads = wp_upload_dir(); /*Get path of upload dir of wordpress*/

 if (is_writable($uploads['path']))  /*Check if upload dir is writable*/
 {
  if ((!empty($upload['tmp_name'])))  /*Check if uploaded image is not empty*/
  {
   if ($upload['tmp_name'])   /*Check if image has been uploaded in temp directory*/
   {
    $file=handle_image_upload($upload); /*Call our custom function to ACTUALLY upload the image*/

    $attachment = array  /*Create attachment for our post*/
    (
      'post_mime_type' => $file['type'],  /*Type of attachment*/
      'post_parent' => $post_id,  /*Post id*/
    );

    $aid = wp_insert_attachment($attachment, $file['file'], $post_id);  /*Insert post attachment and return the attachment id*/
    $a = wp_generate_attachment_metadata($aid, $file['file'] );  /*Generate metadata for new attacment*/
    $prev_img = get_post_meta($post_id, 'custom_image');  /*Get previously uploaded image*/
    if(is_array($prev_img))
    {
     if($prev_img[0] != '')  /*If image exists*/
     {
      wp_delete_attachment($prev_img[0]);  /*Delete previous image*/
     }
    }
    update_post_meta($post_id, 'custom_image', $aid);  /*Save the attachment id in meta data*/

    if ( !is_wp_error($aid) ) 
    {
     wp_update_attachment_metadata($aid, wp_generate_attachment_metadata($aid, $file['file'] ) );  /*If there is no error, update the metadata of the newly uploaded image*/
    }
   }
  }
  else
  {
   echo 'Please upload the image.';
  }
 }
}

function handle_image_upload($upload)
{
 global $post;

        if (file_is_displayable_image( $upload['tmp_name'] )) /*Check if image*/
        {
            /*handle the uploaded file*/
            $overrides = array('test_form' => false);
            $file=wp_handle_upload($upload, $overrides);
        }
 return $file;
}
?>
0
Arvind07