Por fin tengo !! Tengo esta cosa que he intentado hacer 12 veces y 12 maneras 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 requiere que uses el horrible cargador de medios de caja gruesa 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. Por lo tanto, complete los campos, seleccione una imagen para cargar y guarde el borrador o publique la publicación. Una vez que hay archivos adjuntos agregados a una publicación, el metabox mostrará los campos de entrada, junto con una imagen de vista previa de la imagen adjunta para cada archivo adjunto que haya agregado. Los campos de título y descripción se utilizan para generar los metadatos del archivo, nada que se guarde como post_meta, que yo sepa. Eso es todo lo que he trabajado hasta ahora.
Necesito hacerlo para que cuando guarde / publique una publicación, cargue / cree los archivos adjuntos, creará los tres tamaños de imagen como lo haría el cargador de wp predeterminado, miniatura, mediano, grande y manteniendo la imagen de tamaño completo 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 subirlos.
No estoy seguro de qué función es la más ideal para usar en este caso, tal vez la image_make_intermediate_size()
función sería mejor, wp_create_thumbnail()
o wp_crop_image()
... ¡quién sabe!
No puedo entender cómo hacerlo, si necesito ejecutar la wp_handle_upload()
función para cada uno, o tal vez algo relacionado con la wp_generate_attachment_metadata()
función. Es confuso para mí, ya que los 3 tamaños de imagen deben asociarse como variantes del mismo archivo adjunto, y cómo hacerlo.
Recorrí la web, leí la fuente de todos los archivos relacionados con wp media / upload / image, y jugué con casi todas las funciones que hay para la carga de medios y no puedo encontrar cómo WP crea los 3 tamaños de imagen en ningún lado, o cómo hacerlo yo mismo.
En wp-includes / media.php image_resize()
parece que la función sería la mejor, ya que es exactamente lo que debería ser. Simplemente no puedo entender por mi vida qué demonios me estoy perdiendo o he intentado hacer pero hice mal para hacer las miniaturas de las imágenes.
Aquí está mi función de trabajo que hace las wp_handle_upload()
cosas y cosas, pero también necesita crear el pulgar de 100px, y hacer una versión de cambio de tamaño de la imagen que tenga un ancho máximo como 500px, y se guarde como nuevos archivos del archivo cargado.
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'] );
}
}
Alguien capaz de ayudarme finalmente a solucionar esto para que funcione correctamente sería amado. He pasado tantas horas ridículas innumerables numerosas veces diferentes tratando de desarrollar esto y la documentación es una mierda, y realmente no hay buenas publicaciones en ninguna parte sobre cómo hacerlo.
Gracias
fuente
Respuestas:
Hola @jaredwilli:
¡Tipo! Esfuerzo valioso y buen trabajo. En general, podría ser una gran adición a WordPress.
Estuviste tan cerca, pero tenías entre 5 y 10 pequeñas suposiciones fallidas o código que parece que lo comenzaste pero no volviste a hacerlo porque no estaba funcionando. Modifiqué su función solo lo que necesitaba para corregirla. La solución sigue, y dejaré la comparación lado a lado a usted o alguien menos agotado. :)
Oye, ¿por qué no derrochar y obtener una copia de PhpStorm ? Podrías haberlo resuelto fácilmente tú mismo, estabas tan cerca, si hubieras podido rastrear el código como ahora. Si lo hace, no pierda su tiempo en el XDEBUG con errores y descargue Zend Debugger .
PD: Esta es mi respuesta anterior. Publiqué esto antes de darme cuenta de lo que Jared estaba preguntando exactamente. Es correcto, pero no está relacionado con su pregunta. :)
Creo que lo que estás buscando es
add_image_size()
:Por ejemplo:
Al configurar esto, WordPress creará esos tamaños automáticamente. ¿Qué es lo que necesitabas?
fuente
wp_generate_attachment_metadata()
hace eso siadd_image_size()
está configurado. ¿Tal vez simplemente no intentó usaradd_image_size()
para establecer los tamaños de imagen?si entiendo tu pregunta, primero debes obtener la lista de tamaños como esta:
esto devuelve una matriz de todos los tamaños de imagen registrados (valores predeterminados: grande, mediano, miniatura, cualquier tamaño personalizado registrado usando "add_image_size ()", luego todo lo que tiene que hacer es recorrer cada uno de los tamaños y crear una imagen para ese tamaño como esta:
reemplace $ file con la ruta del archivo cargado y $ crop con true o false si desea recortar la imagen a las nuevas dimensiones o false para cambiar el tamaño.
fuente
wp_generate_attachment_metadata()
en/wp-admin/includes/image.php
verá que hace exactamente lo que envió por encima, y ya que se llama. Entonces, si no se están creando, ¿tal vez tenga un complemento que los filtre usando el'intermediate_image_sizes_advanced'
gancho?