dwaynecharrington
  • 0
Эксперт

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

  • 0

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

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

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

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

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

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

    • 0
    • Спасибо Bainternet, очень полезно. Хотя ни то, ни другое не было тем, что я искал. Спросив нашего старшего разработчика PHP на работе, он просмотрел основные файлы WordPress и нашел действие, которое вызывается сразу после загрузки изображения или чего-либо еще. Ну, их два: «add_attachment» и «edit_attachment». Я опубликую это как ответ для других людей.

      • 0
  2. у вас есть два фильтра, которые вы можете использовать: 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) и срабатывает после того, как вы нажмете кнопку «Отправить в редактор», поэтому вы снова можете использовать $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
    }
    
    • 0
  3. 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;
    }
    ?>
    
    • 0

Оставить ответ

You must login to add an answer.