私はフロントエンドからいくつかのcustom_post_typeを追加する可能性を追加することに取り組んでいます。私はそれらに画像をリンクすることができますが、どうやらそれらはサイズ変更されていません。そして私は自分のfunctions.phpで定義した特別なサイズが本当に必要です。
これが私がしていることです:
if(!empty($_FILES['IMAGE'])){
include_once ABSPATH . 'wp-admin/includes/media.php';
include_once ABSPATH . 'wp-admin/includes/file.php';
include_once ABSPATH . 'wp-admin/includes/image.php';
$file = $_FILES['IMAGE'];
$upload = wp_handle_upload( $file, array('test_form' => false));
if(!isset($upload['error']) && isset($upload['file'])){
$title = $file['name'];
$filetype = wp_check_filetype( basename($upload['file'], null ));
$ext = strrchr($title,'.');
$title =($ext !== false) ? substr($title, 0, -strlen($ext)) : $title;
//$url_img = wp_get_attachment_url( $attach_key );
$attach_key = '_thumbnail_id';
$attach_id = wp_insert_attachment($attachment,$upload['file']);
$existing_download = (int) get_post_meta($new_eta_ID, $attach_key, true);
if(is_numeric($existing_download)){
wp_delete_attachment( $existing_download );
}
update_post_meta($new_eta_ID, $attach_key, $attach_id,true);
}
}
そのため、選択したファイルをアップロードしますが、サイズは変更されません。どうやってやるの ?
ありがとうございます。
次のコードは、my "Dynamic image resize" -plugin から取得されます。
プラグインはIDと文字列を考慮に入れます。これらの行は後の訪問者にも使えるので削除しませんでした - とにかくリンクをチェックしてください。
$hw_string = image_hwstring( $width, $height );
$needs_resize = true;
$error = false;
// ID as src
if ( ! is_string( $src ) )
{
$att_id = $src;
// returns false on failure
$src = wp_get_attachment_url( $src );
// If nothing was found:
! $src AND $error = true;
}
// Path as src
else
{
$upload_dir = wp_upload_dir();
$base_url = $upload_dir['baseurl'];
// Let's see if the image belongs to our uploads directory...
$img_url = substr(
$src
,0
,strlen( $base_url )
);
// ...And if not: just return the image HTML string
if ( $img_url !== $base_url )
{
return $this->get_markup(
$img_url
,$hw_string
,$classes
);
}
// Look up the file in the database.
$file = str_replace(
trailingslashit( $base_url )
,''
,$src
);
$att_id = $this->get_attachment( $file );
// If no attachment record was found:
! $att_id AND $error = true;
}
添付ファイルが見つからない場合は中止します。これはアップロードが期待どおりに終了しなかったことを意味します。
// Abort if the attachment wasn't found
if ( $error )
{
# @TODO Error handling with proper message
# @TODO Needs a test case
# remove $file in favor of $error_msg
/*
$data = get_plugin_data( __FILE__ );
$error_msg = "Plugin: {$data['Name']}: Version {$data['Version']}";
*/
# @TODO In case, we got an ID, but found no image: if ( ! $src ) $file = $att_id;
return new WP_Error(
'no_attachment'
,__( 'Attachment not found.', 'dyn_textdomain' )
,$file
);
}
必要なサイズの画像が既にある場合これは、ユーザーが同じ画像を複数回アップロードしようとした場合に発生する可能性があります(重複を避けるために確認する必要があります)。
// Look through the attachment meta data for an image that fits our size.
$meta = wp_get_attachment_metadata( $att_id );
foreach( $meta['sizes'] as $key => $size )
{
if (
$width === $size['width']
AND $height === $size['height']
)
{
$src = str_replace(
basename( $src )
,$size['file']
,$src
);
$needs_resize = false;
break;
}
}
添付ファイルがあり、サイズを変更する必要があると確信しています。 post
とattachment
の投稿タイプのメタデータも更新します。
// If an image of such size was not found, ...
if ( $needs_resize )
{
$attached_file = get_attached_file( $att_id );
// ...we can create one.
$resized = image_make_intermediate_size(
$attached_file
,$width
,$height
,true
);
if ( ! is_wp_error( $resized ) )
{
// Let metadata know about our new size.
$key = sprintf(
'resized-%dx%d'
,$width
,$height
);
$meta['sizes'][ $key ] = $resized;
$src = str_replace(
basename( $src )
,$resized['file']
,$src
);
wp_update_attachment_metadata( $att_id, $meta );
// Record in backup sizes, so everything's
// cleaned up when attachment is deleted.
$backup_sizes = get_post_meta(
$att_id
,'_wp_attachment_backup_sizes'
,true
);
! is_array( $backup_sizes ) AND $backup_sizes = array();
$backup_sizes[ $key ] = $resized;
update_post_meta(
$att_id
,'_wp_attachment_backup_sizes'
,$backup_sizes
);
}
これで、すべてがうまくいくはずです。
あなたがすべてを必要としないならば、単にあなたが必要としないものを落とす、しかしあなたが必要なエラーチェックを省かないことを確かめなさい。転ばぬ先の杖。