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
fonte
Respostas:
Oi @jaredwilli:
Cara! Esforço valioso e bom trabalho. Em suma, pode ser um ótimo complemento para o WordPress.
Você estava tão perto, mas tinha entre 5 e 10 pequenas suposições ou códigos com falha, que parecem ter iniciado, mas não voltaram a ele porque não estava funcionando. Eu reformulei sua função apenas o necessário para corrigi-la. A solução segue e deixarei a comparação lado a lado com você ou com alguém menos esgotado. :)
Ei, por que não fazer alarde e conseguir uma cópia do PhpStorm ? Você poderia ter resolvido isso facilmente, você estava muito perto, se você pudesse apenas traçar o código como eu agora posso. Se o fizer, não perca seu tempo com o XDEBUG com muitos erros e faça o download Zend Debugger .
PS Esta é a minha resposta anterior. Publiquei isso antes de perceber o que exatamente Jared estava perguntando. Está correto, mas não relacionado à sua pergunta. :)
Eu acho que o que você está procurando é
add_image_size()
:Por exemplo:
Ao definir este WordPress, esses tamanhos serão criados automaticamente. O que você precisa?
fonte
wp_generate_attachment_metadata()
faz isso seadd_image_size()
estiver definida. Talvez ele simplesmente não tenha tentado usaradd_image_size()
para definir o tamanho da imagem?se eu entendi sua pergunta, você precisa obter a lista de tamanhos primeiro assim:
isso retorna uma matriz de todos os tamanhos de imagem registrados (padrões: grande, médio, miniatura, qualquer tamanho personalizado registrado usando "add_image_size ()" ", basta fazer um loop entre cada um dos tamanhos e criar uma imagem para esse tamanho, como esta:
substitua $ file pelo caminho do arquivo carregado e $ crop por true ou false se desejar cortar a imagem para as novas dimensões ou false para redimensionar.
fonte
wp_generate_attachment_metadata()
em/wp-admin/includes/image.php
você verá que ele faz exatamente o que você postou acima, e ele já é chamado assim. Então, se eles não estão sendo criados, talvez ele tenha um plugin que os filtre usando o'intermediate_image_sizes_advanced'
gancho?