Eu finalmente !! tentei fazer 12 vezes e 12 maneiras diferentes, mas finalmente consegui funcionar ... mais ou menos.
Criei uma metabox personalizada para carregar e anexar imagens a postagens, e isso não exige que você use o horrível uploader de mídia thickbox incorporado ao WP. Eu odeio essa coisa. Não, o que fiz foi apenas um grupo de entradas (título, descrição, arquivo), que você também pode duplicar, para adicionar anexos adicionais, se desejar. Então, preencha os campos, selecione uma imagem para carregar e salve o rascunho ou publique a postagem. Quando houver anexos adicionados a uma postagem, a metabox exibirá os campos de entrada, juntamente com uma imagem de visualização da imagem anexada para cada anexo adicionado. Os campos de título e descrição são usados para gerar os metadados do arquivo, nada é salvo como o post_meta, que eu conheço. Atualmente, é tudo o que consegui trabalhar até agora.
Eu preciso fazer isso para que, quando você salvar / publicar uma postagem, ativar o upload / criar os arquivos de anexo, ele criará os três tamanhos de imagem que o uploader wp padrão faria, como miniatura, média, grande e manter a imagem em tamanho real também . Se isso é possível de alguma forma. Caso contrário, eu gostaria de usar add_image_size()
para criar / definir novos tamanhos personalizados e gerá-los dessa maneira, ao fazer o upload.
Não tenho certeza de qual função é a mais ideal para usar neste caso, talvez a image_make_intermediate_size()
função seja melhor, ou wp_create_thumbnail()
ou wp_crop_image()
... quem sabe !!
Não consigo descobrir como fazer isso, se precisar executar a wp_handle_upload()
função para cada um, ou talvez algo que envolva a wp_generate_attachment_metadata()
função. É confuso para mim, já que os três tamanhos de imagem devem ser associados como variantes do mesmo anexo, e como fazer isso.
Vasculhei a Web, li a fonte de todos os arquivos relacionados a mídia / upload / imagem wp e reproduzi quase todas as funções disponíveis para o material de upload de mídia e não consigo encontrar como o WP cria os três tamanhos de imagem em qualquer lugar ou como fazer sou eu mesmo.
No wp-includes / media.php, a image_resize()
função parece ser melhor, pois é exatamente o que deveria ser. Simplesmente não consigo descobrir pela minha vida o que diabos estou sentindo falta ou tentei fazer, mas fiz de errado para fazer as miniaturas das imagens.
Aqui está minha função de trabalho que faz wp_handle_upload()
tudo, mas também precisa criar o polegar de 100px e fazer uma versão de redimensionamento da imagem com largura máxima de 500px e salva como novos arquivos da que foi carregada.
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';
$url = wp_handle_upload( $_FILES['a_image'], $override );
// $medium = image_make_intermediate_size( $uploaded_file['url'], 500, 400, true );
// $thumb = = image_make_intermediate_size( $uploaded_file['url'], 100, 100, true );
if ( isset( $file['error'] )) {
return new WP_Error( 'upload_error', $file['error'] );
}
$array_type = wp_check_filetype
$allowed_file_types = array('image/jpg','image/jpeg','image/gif','image/png');
$name_parts = pathinfo( $name );
$name = trim( substr( $name, 0, - ( 1 + strlen( $name_parts['extension'] )) ));
$type = $file['type'];
$file = $file['file'];
$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' => $url['url']
);
// Save the data
$id = wp_insert_attachment( $attachment, $_FILES['a_image'][ 'file' ]/*, $post_id - for post_thumbnails*/);
if ( !is_wp_error( $id )) {
$attach_meta = wp_generate_attachment_metadata( $id, $uploaded_file['url'] );
wp_update_attachment_metadata( $attach_id, $attach_meta );
}
update_post_meta( $post->ID, 'a_image', $uploaded_file['url'] );
}
}
Qualquer pessoa capaz de me ajudar a finalmente corrigir isso para que funcione corretamente seria amada. Passei tantas horas ridículas e incontáveis inúmeras vezes tentando desenvolver essa coisa, e a documentação é péssima, e não há realmente boas postagens sobre como fazê-lo.
obrigado