メディアアップロード画面を使用してWordpressで添付ファイルをアップロードした後、アップロードされた画像へのパスを取得して分析できるように、画像のアップロード後に実行できるフックまたはフィルタはありますか。
アップロードした画像を分析し、その画像に表示される平均色で画像にタグを付けるプラグインを作成します。唯一の問題は、私が使用できるフックが、画像がアップロードされた直後に起動するかどうか、そして新しくアップロードされたファイルへのパスを取得する方法がわからないことです。
どんな助けでも感謝して感謝されるでしょう。
結局、私は同僚の助けを借りて自分の質問を解決しました。メディアのアップロード後またはメディアの編集中に呼び出される2つのフィルタは、次のとおりです。 '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');
明らかに、質問に関係のないものはいくつか省略しました。ただし、そのコードは添付ファイルをアップロードまたは編集した直後に呼び出されます。
使用できるフィルタは2つあります。attachment_fields_to_save
では、2つのパラメータ($ 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
}
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;
}
?>