Obtención de la ruta a la imagen del archivo adjunto cargado después de la carga

8

Después de haber cargado un archivo adjunto en Wordpress usando la pantalla de carga de medios, ¿hay un enlace o filtro que pueda ejecutar después de que se haya cargado la imagen donde pueda obtener la ruta a la imagen cargada para poder analizarla?

Estoy creando un complemento que analizará una imagen después de que se haya cargado y luego etiquetará la imagen con el color promedio que encuentra en la imagen. El único problema es que no sé qué gancho puedo usar que se disparará justo después de que la imagen se haya cargado y luego pueda obtener la ruta al archivo recién cargado.

Cualquier ayuda seria gratamente apreciada.

Dwayne Charrington
fuente

Respuestas:

8

Resulta que resolví mi propia pregunta con la ayuda de un colega. Los dos filtros que se llaman después de que se cargan los medios o cuando se editan los medios son; 'add_attachment' y 'edit_attachment'. Aquí está el código que estoy usando, luego verifico si el archivo adjunto es una imagen (código omitido del ejemplo).

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');

Obviamente, he omitido algunas cosas que no son relevantes para la pregunta. Pero ese código se llama justo después de que haya cargado o editado un archivo adjunto.

Dwayne Charrington
fuente
4

tiene dos filtros que puede usar: attachment_fields_to_save que obtiene dos parámetros ($ post, $ adjunto) así que:

add_filter('attachment_fields_to_save',your_image_analyse_function);

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

y media_send_to_editorque obtiene 3 parámetros ($ html, $ send_id, $ adjunto) y se activa después de hacer clic en el envío al editor para que una vez más pueda usar $ adjunto.

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
fuente
Gracias Bainternet, muy útil. Aunque, ninguno de esos era lo que estaba buscando. Después de preguntar a nuestro desarrollador senior de PHP en el trabajo, examinó los archivos principales de Wordpress y encontró una acción que se llama justo después de que se carga una imagen o cualquier otra cosa. Bueno, hay dos de ellos: 'add_attachment' y 'edit_attachment'. Lo publicaré como respuesta para otras personas.
Dwayne Charrington
0

Marcado 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);
  }

?>

Subiendo la imagen:

<?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
fuente