it-swarm-es.com

¿Cómo puedo cargar imágenes de forma masiva y crear automáticamente publicaciones para cada una al mismo tiempo?

Sé cómo cargar varias imágenes en una publicación existente, pero este es un escenario diferente. Esto es para un gran catálogo de activos, con cada publicación de tipo post personalizada que representa un activo de imagen (por lo tanto, se asigna una sola imagen como la "imagen destacada" para cada publicación).

Todo el sistema funciona de manera excelente para la creación de activos de una en una, pero consume demasiado tiempo. Necesito poder "cargar" múltiples imágenes a la vez, luego crear una nueva publicación para cada imagen y luego adjuntar la imagen a la nueva publicación como la "imagen destacada".

No se ingresará contenido de texto para cada publicación, solo algunos metadatos y asignaciones de taxonomía personalizadas, por lo que debería ser posible asignar los metadatos y la taxonomía durante este proceso de creación de lotes.

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

Estoy relativamente versado en php, habiendo creado plugins y temas, pero estoy perplejo en cómo manejar este proceso, ya que requiere el primer paso para llevar los archivos al servidor con cierta capacidad temporal y luego generar publicaciones basadas en los archivos. cargado, y asignando 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, eso también está bien ...

Ideas?

10
somatic

Hay este complemento: Complemento de Publicaciones de Imágenes Destacadas Automáticas

Desde la página del plugin:

Las Publicaciones automáticas de imágenes destacadas crean una nueva publicación con una Imagen destacada cada vez que se carga una imagen. A través de la página de configuración del complemento, puede configurar la imagen para que se publique y asignarse a uno de sus otros tipos de publicaciones y/o formatos de publicación personalizados existentes.

Básicamente, cada imagen que se carga genera una publicación (del tipo de publicación que eligió) y se configura como la imagen destacada de esa publicación.

Instalé esto en mi máquina local. La página de configuración tiene este aspecto y le permite seleccionar el tipo de publicación, incluidos los tipos de publicación personalizados, a los que desea asignar subidas de fotos y el estado de publicación que desea.

Screenshot of plugin

Para poner en práctica el complemento: navegue hasta el tipo de publicación que elija, abra una nueva publicación y cargue los medios.

Para cargar fotos en forma masiva, simplemente resalte varias fotos en el cuadro de diálogo "subir". Estoy destacando 8 fotos aquí, pero no veo ninguna razón por la que no puedan ser 80 u 800, a menos que haya límites que no conozca en el cargador de imágenes de wordpress.

enter image description here

Los títulos de las publicaciones se establecen con los nombres de los archivos de imagen. Debería poder trabajar con eso y llamarlos en su tema con the_title()

Lo probé localmente y está funcionando en Wordpress 3.6.

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

Si necesitaba un contenido de publicación generado dinámicamente, al menos podría comenzar con el complemento y repetir desde allí. Una idea sería utilizar post-formatos o plantillas de página para determinar cómo se muestran las publicaciones.

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

5
timshutes

Este script es una prueba de concepto (probado y en funcionamiento), no es un complemento y está diseñado para ser pirateado, asume algunas cosas:

  1. Utiliza wp_insert_post, por lo que le recomendamos que no lo conecte a ningún gancho de administración, ¡así que ejecútelo una vez!
  2. Las imágenes deben estar en la carpeta wp-content\uploads, cambiar esto requeriría más aros para saltar. El ejemplo utiliza una carpeta personalizada llamada \images en la carpeta de subidas, puede cambiar esta parte.
  3. No realiza ninguna comprobación de errores, solo lo probé en una carpeta con 20 imágenes, por lo que los resultados pueden variar :)

El siguiente código se repetirá en la carpeta wp-content\uploads\images y creará un título de publicación basado en el nombre de la imagen que se le adjunta. Probablemente desee cambiar esto por algo mejor o, posiblemente, ingresar metadatos usando otros datos que tenga (tal vez Exif).

function WPSE_1595_image_post() {

    // We need to use the default uploads dir
    $wp_upload_dir =  wp_upload_dir();
    // The actual folder
    $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);

        //Customize this post data as you wish
        $my_post_data = array(
            'post_title' => $image_name,
            'post_type' => 'post',
            'post_category' => array('1'),
            'post_author'   => 1,
            'post_status' => 'publish'
        );

        // We need the ID for the attachment
        $post_id = wp_insert_post($my_post_data);

        $wp_filetype = wp_check_filetype($image_base, null );

         //Customize this attachment data as you wish
        $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 algo más de unos pocos miles de imágenes, probablemente te resulte más fácil usar:

5
Wyck

La "Carpeta de limpieza de cargas, estructura de la base de datos de la biblioteca" Question tiene algunas sugerencias de complementos que podrían estar relacionados, aunque no es exactamente eso lo que usted hace. Pero tal vez la información sea útil.

1
hakre