¿Cómo puedo subir imágenes en lote y crear automáticamente entradas para cada una al mismo tiempo?

10 sept 2010, 00:23:01
Vistas: 23.5K
Votos: 10

Sé cómo subir múltiples imágenes a una entrada existente, pero este es un escenario diferente. Esto es para un catálogo grande de recursos, donde cada entrada de tipo personalizado representa un recurso de imagen (por lo tanto, una sola imagen se asigna como "imagen destacada" para cada entrada).

Todo el sistema funciona muy bien para la creación de recursos uno por uno, pero consume demasiado tiempo. Necesito poder subir múltiples imágenes en "lote" a la vez, luego crear una nueva entrada para cada imagen, y después adjuntar la imagen a la nueva entrada como "imagen destacada".

No habrá contenido de texto ingresado para cada entrada - solo algunos metadatos y asignaciones de taxonomía personalizada, por lo que debería ser posible asignar en lote los metadatos y la taxonomía durante este proceso de creación por lotes.

He investigado soluciones desde la creación de entradas XML-RPC (que generalmente no maneja la carga/asignación de imágenes) hasta plugins que extraen archivos de un directorio del servidor a la biblioteca de medios (que no cubre la creación de entradas), y cargadores de archivos múltiples con jQuery (que básicamente solo depositan archivos en un directorio).

Estoy relativamente versado en PHP, habiendo construido plugins y temas, pero estoy confundido sobre cómo manejar este proceso, ya que requiere el primer paso de llevar los archivos al servidor en alguna capacidad temporal, luego generar entradas basadas en los archivos subidos y asignar algunos metadatos de identificación a todo el lote.

Espero que esto se pueda hacer en un panel de administración personalizado, pero si tengo que hacerlo fuera de wp-admin, también está bien...

¿Ideas?

5
Comentarios

¿Encontraste alguna respuesta a esto? Sería perfecto para mí...

User User
11 abr 2012 01:08:59

Sí... pero el escenario evolucionó hasta convertirse en un plugin de framework completo para el proyecto. No es una respuesta corta en particular - tendría que documentar el flujo de múltiples funciones y hooks que juntos logran esto.

somatic somatic
2 may 2012 10:45:56

En resumen, terminé haciendo un proceso de dos pasos, ya que por razones editoriales no tenía sentido crear publicaciones para todo lo que un usuario subía. En cambio, el usuario sube todas las imágenes a una sola publicación "lote" como adjuntos a esa única publicación. Luego, el lote es revisado y cada adjunto es aceptado/rechazado - y una vez que esa publicación "lote" es publicada, una rutina personalizada de guardado toma cada adjunto aceptado y usa wp_insert_post() para crear una publicación con solo ese adjunto como imagen destacada.

somatic somatic
2 may 2012 10:47:22

También un duplicado:

http://wordpress.stackexchange.com/questions/55616/bulk-image-upload-and-one-image-for-each-post

Anoop Chandrika HarisudhanNair Anoop Chandrika HarisudhanNair
11 ago 2013 12:47:05

¿Cómo estás añadiendo los metadatos, cómo se relacionan las imágenes con los datos?

Wyck Wyck
11 ago 2013 16:22:04
Todas las respuestas a la pregunta 3
1

Este script es una prueba de concepto (probado y funcional), no es un plugin y está pensado para ser modificado, asume algunas cosas:

  1. Utiliza wp_insert_post por lo que se recomienda no engancharlo a ningún hook de administración, ¡ejecútalo solo una vez!
  2. Las imágenes deben estar en la carpeta wp-content\uploads, cambiar esto requeriría más complicaciones. El ejemplo usa una carpeta personalizada llamada \images dentro de la carpeta de subidas, puedes modificar esta parte.
  3. No realiza ninguna comprobación de errores, solo lo probé con una carpeta de 20 imágenes así que los resultados pueden variar :)

El código a continuación iterará a través de la carpeta wp-content\uploads\images y creará un título de publicación basado en el nombre de la imagen que se adjunta. Probablemente quieras cambiar esto por algo mejor o posiblemente ingresar metadatos usando otros datos que tengas (quizás Exif).

function WPSE_1595_image_post() {

    // Necesitamos usar el directorio de subidas por defecto
    $wp_upload_dir =  wp_upload_dir();
    // La carpeta real
    $wp_upload_images = $wp_upload_dir['basedir'] . '/images';

    require_once(ABSPATH . 'wp-admin/includes/image.php');

    foreach (new DirectoryIterator($wp_upload_images) as $fileInfo) {

        if($fileInfo->isDot()) continue;

        $image_base = $fileInfo->getFilename();
        $image_name = pathinfo($fileInfo, PATHINFO_FILENAME);

        // Personaliza estos datos de publicación como desees
        $my_post_data = array(
            'post_title' => $image_name,
            'post_type' => 'post',
            'post_category' => array('1'),
            'post_author'   => 1,
            'post_status' => 'publish'
        );

        // Necesitamos el ID para el adjunto
        $post_id = wp_insert_post($my_post_data);

        $wp_filetype = wp_check_filetype($image_base, null );

         // Personaliza estos datos de adjunto como desees
        $attachment = array(
             'guid' => $wp_upload_dir['url'] . '/' . $image_name, 
             'post_mime_type' => $wp_filetype['type'],
             'post_title' => 'child-' . $image_name,
             'post_content' => '',
             'post_status' => 'inherit'
        );

        $imagefile = $wp_upload_images . '/' . $image_base;
        $attach_id = wp_insert_attachment( $attachment, $imagefile, $post_id );
        $attach_data = wp_generate_attachment_metadata( $attach_id, $imagefile );

        wp_update_attachment_metadata( $attach_id, $attach_data );
    }   
}

Para cualquier cosa que supere unos pocos miles de imágenes, probablemente sería más fácil usar:

14 ago 2013 08:24:44
Comentarios

Sigue agregando imágenes redimensionadas de vuelta a la carpeta uploads/images y, además, genera nuevas entradas. El proceso se volvió recursivo, así que antes de eliminar la función, se crearon casi 800 entradas. Los nuevos tamaños generados deberían crearse en la ubicación normal de medios de WordPress.

Heena Shah Heena Shah
20 ago 2017 10:42:19
1

Existe este plugin: Automatic Featured Image Posts Plugin

De la página del plugin:

Automatic Featured Image Posts crea una nueva entrada con una imagen destacada cada vez que se sube una imagen. A través de la página de configuración del plugin, puedes establecer que la imagen se publique y se asigne a uno de tus otros tipos de contenido personalizados y/o formatos de entrada existentes.

Básicamente, cada imagen que se sube genera una entrada (del tipo de contenido que elijas) y se establece como imagen destacada de esa entrada.

Lo instalé en mi máquina local. La página de configuración se ve así y permite seleccionar a qué tipo de contenido, incluyendo tipos personalizados, quieres asignar las fotos subidas, y qué estado de publicación deseas.

Captura de pantalla del plugin

Para poner el plugin en práctica - navega a tu tipo de contenido elegido, abre una nueva entrada y sube medios.

Para subir fotos masivamente, simplemente selecciona múltiples fotos en el cuadro de diálogo "subir". Aquí estoy seleccionando 8 fotos, pero no veo razón por la que no podrían ser 80 u 800, a menos que haya límites que desconozca en el subidor de imágenes de WordPress.

Seleccionando múltiples imágenes para subir

Los títulos de las entradas se establecen por los nombres de los archivos de imagen. Deberías poder trabajar con eso y llamarlos en tu tema con the_title()

Probé localmente y funciona en WordPress 3.6.

Estoy seguro de que hay una forma más robusta o flexible de lograr esto, pero en este caso, el plugin parece hacer exactamente lo que pides, con la excepción de asignar metadatos. Quizás alguien más podría desarrollar esa parte un poco más.

Si necesitas contenido de entrada generado dinámicamente, podrías al menos comenzar con el plugin e iterar desde allí. Una idea sería usar formatos de entrada o plantillas de página para determinar cómo se muestran las entradas.

Nota: Asegúrate de tener todos tus image_sizes configurados en functions.php. ¡Odiaría tener que deshacer/eliminar 10,000 fotos, o ejecutar un "regenerar miniaturas" extremadamente largo solo porque olvidé o cambié el tamaño de imagen!

15 ago 2013 04:23:00
Comentarios

deberías comentar cuando votas en contra - sería mucho más útil para mejorar la calidad del sitio.

timshutes timshutes
25 ago 2013 00:37:42
0

La pregunta "Limpiar la carpeta de subidas, estructura de base de datos de la Biblioteca Multimedia" tiene algunas sugerencias de plugins que podrían estar relacionadas, aunque no hacen exactamente lo que pides. Pero quizás la información sea útil.

14 sept 2010 20:39:20