Nhận đường dẫn để tải lên hình ảnh đính kèm sau khi tải lên


8

Sau khi bạn đã tải lên tệp đính kèm trong Wordpress bằng màn hình tải lên phương tiện, có một móc hoặc bộ lọc nào tôi có thể chạy sau khi hình ảnh được tải lên, nơi tôi có thể nhận đường dẫn đến hình ảnh được tải lên để tôi có thể phân tích nó?

Tôi đang xây dựng một plugin sẽ phân tích một hình ảnh sau khi nó được tải lên và sau đó gắn thẻ hình ảnh với màu trung bình mà nó tìm thấy trong hình ảnh. Vấn đề duy nhất là tôi không biết móc nào tôi có thể sử dụng sẽ bắn ngay sau khi hình ảnh được tải lên và sau đó là cách tôi có thể nhận đường dẫn đến tệp mới được tải lên.

Bất kỳ sự giúp đỡ nào sẽ nhận được sự cảm kích cao.

Câu trả lời:


8

Hóa ra tôi đã giải quyết câu hỏi của riêng mình với sự giúp đỡ từ một đồng nghiệp. Hai bộ lọc được gọi sau khi phương tiện được tải lên hoặc khi phương tiện đang được chỉnh sửa; 'add_attachment' và 'edit_attachment'. Đây là mã tôi đang sử dụng, sau đó tôi kiểm tra xem tệp đính kèm có phải là hình ảnh không (mã bị bỏ qua từ ví dụ).

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

Rõ ràng là tôi đã bỏ qua một số thứ không liên quan đến câu hỏi. Nhưng mã đó được gọi ngay sau khi bạn tải lên hoặc chỉnh sửa tệp đính kèm.


4

bạn có hai bộ lọc bạn có thể sử dụng: có hai bộ lọc attachment_fields_to_save ($ post, $ file đính kèm), vì vậy:

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_editornhận được 3 thông số ($ html, $ send_id, $ tập tin đính kèm) và kích hoạt sau khi bạn nhấp vào trình gửi đến trình chỉnh sửa để một lần nữa bạn có thể sử dụng $ tập tin đính kèm.

add_filter('media_send_to_editor',your_image_analyse_function);

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

Cảm ơn BaiNET, rất hữu ích. Mặc dù, đó không phải là những gì tôi đang tìm kiếm. Sau khi hỏi nhà phát triển PHP cao cấp của chúng tôi tại nơi làm việc, anh duyệt qua các tệp cốt lõi của Wordpress và tìm thấy một hành động được gọi ngay sau khi một hình ảnh hoặc bất cứ điều gì khác được tải lên. Chà, có hai trong số đó: 'add_attachment' và 'edit_attachment' Tôi sẽ đăng nó dưới dạng câu trả lời cho người khác.
Dwayne Charrington

0

Đánh dấu 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);
  }

?>

Đang tải hình ảnh:

<?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;
}
?>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.