Получение пути к загруженному вложенному изображению после загрузки

8

После того, как вы загрузили вложение в Wordpress с помощью экрана загрузки медиафайлов, есть ли хук или фильтр, которые я могу запустить после загрузки изображения, где я могу получить путь к загруженному изображению, чтобы я мог его проанализировать?

Я создаю плагин, который будет анализировать изображение после его загрузки, а затем пометить изображение средним цветом, который он находит в изображении. Единственная проблема в том, что я не знаю, какой хук, который я могу использовать, будет срабатывать сразу после загрузки изображения, а затем узнать, как мне получить путь к вновь загруженному файлу.

Любая помощь будет с благодарностью.

Дуэйн Чаррингтон
источник

Ответы:

8

Оказывается, я решил свой вопрос с помощью коллеги. Два фильтра, которые вызываются после загрузки мультимедиа или при редактировании мультимедиа: «add_attachment» и «edit_attachment». Вот код, который я использую, затем я проверяю, является ли вложение изображением (код опущен из примера).

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

Очевидно, я пропустил некоторые вещи, которые не имеют отношения к вопросу. Но этот код вызывается сразу после того, как вы загрузили или отредактировали вложение.

Дуэйн Чаррингтон
источник
4

у вас есть два фильтра, которые вы можете использовать: attachment_fields_to_save который получает два параметра ($ post, $ attachment) так:

add_filter('attachment_fields_to_save',your_image_analyse_function);

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

и media_send_to_editorкоторый получает 3 параметра ($ html, $ send_id, $ attachment) и срабатывает после того, как вы щелкнете по send to editor, чтобы еще раз вы могли использовать $ 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
источник
Спасибо Bainternet, очень полезно. Хотя ни то, ни другое я не искал. Спросив нашего старшего разработчика PHP на работе, он просмотрел файлы ядра Wordpress и обнаружил действие, которое вызывается сразу после загрузки изображения или чего-либо еще. Ну, есть два из них: 'add_attachment' и 'edit_attachment' Я опубликую это как ответ для других людей.
Дуэйн Чаррингтон
0

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

?>

Загрузка изображения:

<?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
источник