Oi @jaredwilli:
Cara! Esforço valente e bom trabalho. Tudo isso poderia ser um ótimo complemento para o WordPress.
Você estava tão perto, mas tinha entre 5 e 10 pequenas suposições ou códigos que pareciam ter começado, mas não voltaram porque não estava funcionando. Eu retrabalhei sua função apenas tanto quanto precisei corrigi-la. A solução segue, e eu vou deixar a comparação lado a lado para o seu ou alguém menos queimado. :)
function update_attachment() {
global $post;
wp_update_attachment_metadata( $post->ID, $_POST['a_image'] );
if( !empty( $_FILES['a_image']['name'] )) { //New upload
require_once( ABSPATH . 'wp-admin/includes/file.php' );
$override['action'] = 'editpost';
$file = wp_handle_upload( $_FILES['a_image'], $override );
if ( isset( $file['error'] )) {
return new WP_Error( 'upload_error', $file['error'] );
}
$file_type = wp_check_filetype($_FILES['a_image']['name'], array(
'jpg|jpeg' => 'image/jpeg',
'gif' => 'image/gif',
'png' => 'image/png',
));
if ($file_type['type']) {
$name_parts = pathinfo( $file['file'] );
$name = $file['filename'];
$type = $file['type'];
$title = $_POST['a_title'] ? $_POST['a_title'] : $name;
$content = $_POST['a_desc'];
$post_id = $post->ID;
$attachment = array(
'post_title' => $title,
'post_type' => 'attachment',
'post_content' => $content,
'post_parent' => $post_id,
'post_mime_type' => $type,
'guid' => $file['url'],
);
foreach( get_intermediate_image_sizes() as $s ) {
$sizes[$s] = array( 'width' => '', 'height' => '', 'crop' => true );
$sizes[$s]['width'] = get_option( "{$s}_size_w" ); // For default sizes set in options
$sizes[$s]['height'] = get_option( "{$s}_size_h" ); // For default sizes set in options
$sizes[$s]['crop'] = get_option( "{$s}_crop" ); // For default sizes set in options
}
$sizes = apply_filters( 'intermediate_image_sizes_advanced', $sizes );
foreach( $sizes as $size => $size_data ) {
$resized = image_make_intermediate_size( $file['file'], $size_data['width'], $size_data['height'], $size_data['crop'] );
if ( $resized )
$metadata['sizes'][$size] = $resized;
}
$attach_id = wp_insert_attachment( $attachment, $file['file'] /*, $post_id - for post_thumbnails*/);
if ( !is_wp_error( $id )) {
$attach_meta = wp_generate_attachment_metadata( $attach_id, $file['file'] );
wp_update_attachment_metadata( $attach_id, $attach_meta );
}
update_post_meta( $post->ID, 'a_image', $file['url'] );
}
}
}
Ei, por que não fazer alarde e obter uma cópia do PhpStorm ? Você poderia facilmente ter resolvido isso, você estava tão perto, se você pudesse apenas rastrear o código como eu posso agora. Se fizer isso, não perca tempo com o XDEBUG e, em vez disso, baixe Depurador do Zend .
P.S. Esta é minha resposta anterior. Eu postei isso antes de perceber o que exatamente Jared estava perguntando. Está correto, mas não está relacionado à sua pergunta. :)
Acho que o que você está procurando é add_image_size()
:
add_image_size( $size_id, $width, $height, $crop );
Por exemplo:
add_image_size('headshot', 130, 150);
add_image_size('large-headshot', 260, 300);
Ao definir isso, o WordPress criará esses tamanhos automaticamente. O que você precisava?