Por fin tengo !! tengo esta cosa que he intentado unas 12 veces para hacer y 12 formas diferentes, pero finalmente lo hice funcionar, ... más o menos.
Hice un metabox personalizado para cargar y adjuntar imágenes a las publicaciones, y no es necesario que utilices el horrible cargador de medios de datos integrado en WP. Odio esa cosa. No, lo que he hecho es solo un grupo de entradas (título, descripción, archivo), que también puede duplicar, para agregar archivos adjuntos adicionales si lo desea. Así que rellena los campos, selecciona una imagen para cargar y guarda el borrador o publica la publicación. Una vez que se agreguen adjuntos a una publicación, el metabox mostrará los campos de entrada, junto con una imagen de vista previa de la imagen adjunta para cada adjunto que haya agregado. Los campos de título y descripción se utilizan para generar los metadatos del archivo, nada se guarda como post_meta, que yo sepa. Eso es todo lo que he conseguido trabajando hasta ahora.
Necesito hacerlo para que cuando guarde / publique una publicación, ingrese y cargue los archivos adjuntos, se crearán los tres tamaños de imagen como lo haría el cargador de wp predeterminado, miniatura, medio, grande y manteniendo la totalidad. tamaño de la imagen también. Si eso es posible de alguna manera. De lo contrario, me gustaría usar add_image_size()
para crear / definir nuevos tamaños personalizados, y generarlos de esa manera, al cargarlos.
No estoy seguro de qué función es la más ideal para usar en este caso, tal vez la función image_make_intermediate_size()
sería mejor, o wp_create_thumbnail()
o wp_crop_image()
... ¡¡quién sabe !!
No puedo averiguar cómo hacer eso, si necesito ejecutar la función wp_handle_upload()
para cada una, o tal vez algo relacionado con la función wp_generate_attachment_metadata()
. Para mí es confuso, ya que los 3 tamaños de imagen deben asociarse como variantes del mismo archivo adjunto, y cómo hacerlo.
He rastreado la web, he leído la fuente de cada archivo wp media / upload / image, y he jugado con casi todas las funciones disponibles para la carga de medios y no puedo encontrar cómo WP crea los 3 tamaños de imagen en cualquier lugar, o cómo hacerlo yo mismo.
En wp-includes / media.php, la función image_resize()
parece que sería lo mejor, ya que es exactamente lo que debería ser. Simplemente no puedo entender por la vida de mí qué demonios me falta o he intentado hacer, pero hice mal para hacer las miniaturas de las imágenes.
Aquí está mi función de trabajo que hace el wp_handle_upload()
cosas y cosas, pero también necesita crear el pulgar de 100px, y hacer una versión de tamaño de la imagen que tenga un ancho máximo de 500px, y se guarde como nuevos archivos del subido uno.
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'] );
}
}
Cualquier persona que pueda ayudarme finalmente solucionará esto para que funcione correctamente sería amada. He pasado tantas horas ridículas e innumerables veces intentando desarrollar esto y la documentación apesta, y realmente no hay ninguna buena publicación en ningún lugar sobre cómo hacerlo.
Gracias