Pfad zum hochgeladenen Anhangsbild nach dem Hochladen abrufen

8

Gibt es einen Hook oder Filter, den ich nach dem Hochladen des Bildes ausführen kann, nachdem ich einen Anhang in Wordpress über den Bildschirm zum Hochladen von Medien hochgeladen habe, um den Pfad zum hochgeladenen Bild abzurufen und es zu analysieren?

Ich erstelle ein Plugin, das ein Bild nach dem Hochladen analysiert und es dann mit der durchschnittlichen Farbe markiert, die es im Bild findet. Das einzige Problem ist, dass ich nicht weiß, welchen Hook ich verwenden kann, der direkt nach dem Hochladen des Bildes ausgelöst wird, und dann eine Möglichkeit, den Pfad zur neu hochgeladenen Datei zu ermitteln.

Jede Hilfe wäre dankbar.

Dwayne Charrington
quelle

Antworten:

8

Es stellte sich heraus, dass ich meine eigene Frage mit Hilfe eines Kollegen gelöst habe. Die beiden Filter, die aufgerufen werden, nachdem Medien hochgeladen wurden oder wenn Medien bearbeitet werden, sind: 'add_attachment' und 'edit_attachment'. Hier ist der Code, den ich verwende. Ich überprüfe dann, ob der Anhang ein Bild ist (Code im Beispiel weggelassen).

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

Offensichtlich habe ich einige Dinge weggelassen, die für die Frage nicht relevant sind. Dieser Code wird jedoch sofort aufgerufen, nachdem Sie einen Anhang hochgeladen oder bearbeitet haben.

Dwayne Charrington
quelle
4

Sie haben zwei Filter, die Sie verwenden können: attachment_fields_to_save Diese erhalten zwei Parameter ($ post, $ Anhang), also:

add_filter('attachment_fields_to_save',your_image_analyse_function);

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

und media_send_to_editorder 3 Parameter ($ html, $ send_id, $ Anhang) erhält und ausgelöst wird, nachdem Sie auf den Editor zum Senden an geklickt haben, damit Sie wieder $ Anhang verwenden können.

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
quelle
Danke Bainternet, sehr nützlich. Obwohl keines davon das war, wonach ich suchte. Nachdem er unseren leitenden PHP-Entwickler bei der Arbeit gefragt hatte, durchsuchte er die Wordpress-Kerndateien und fand eine Aktion, die direkt nach dem Hochladen eines Bildes oder was auch immer aufgerufen wird. Nun, es gibt zwei davon: 'add_attachment' und 'edit_attachment'. Ich werde es als Antwort für andere Leute posten.
Dwayne Charrington
0

HTML-Markup:

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

?>

Bild hochladen:

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