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

8

Après avoir téléchargé une pièce jointe dans Wordpress à l'aide de l'écran de téléchargement des médias, existe-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 créer un plugin qui analysera une image après son téléchargement, puis marquera l'image avec la couleur moyenne qu'elle trouve dans l'image. Le seul problème est que je ne sais pas quel crochet je peux utiliser qui se déclenchera juste après le téléchargement de l'image, puis un moyen d'obtenir le chemin d'accès au fichier nouvellement téléchargé.

Toute aide serait grandement appréciée.

Dwayne Charrington
la source

Réponses:

8

Il s'avère que j'ai résolu ma propre question avec l'aide d'un collègue. Les deux filtres qui sont appelés après le téléchargement du média ou lors de la modification du média 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 téléchargé ou modifié une pièce jointe.

Dwayne Charrington
la source
4

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_editorqui obtient 3 paramètres ($ html, $ send_id, $ attachment) et se déclenche après avoir cliqué sur envoyer à l'éditeur afin que vous puissiez à nouveau utiliser $ attachment.

add_filter('media_send_to_editor',your_image_analyse_function);

function your_image_analyse_function($html, $send_id, $attachment){
  $attachment['url']
  //do your stuff
}
Bainternet
la source
Merci Bainternet, très utile. Cependant, ni l'un ni l'autre n'était ce que je cherchais. Après avoir demandé à notre développeur PHP senior au travail, il a parcouru les fichiers principaux de Wordpress et a trouvé une action qui est appelée juste après qu'une image ou quoi que ce soit d'autre soit téléchargée. Eh bien, il y en a deux: «add_attachment» et «edit_attachment», je le posterai comme réponse pour d'autres personnes.
Dwayne Charrington
0

Balisage 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;
}
?>
Arvind07
la source