web-dev-qa-db-fra.com

Comment puis-je télécharger des images en bloc et créer automatiquement des publications pour chacune d'elles en même temps?

Je sais comment télécharger plusieurs images dans un message existant, mais le scénario est différent. Cela concerne un vaste catalogue d'actifs, chaque article de type poste personnalisé représentant un actif d'image (une image unique est donc affectée en tant qu '"image sélectionnée" pour chaque article).

L’ensemble du système fonctionne très bien pour la création d’actifs un par un, mais prend beaucoup trop de temps. Je dois pouvoir "mettre en lot" plusieurs images à la fois, puis créer un nouvel article pour chaque image, puis joindre l'image au nouvel article en tant qu'image "en vedette".

Il n'y aura pas de contenu textuel entré pour chaque article - juste quelques métadonnées et attributions de taxonomie personnalisées, il devrait donc être possible d'affecter par lot les métadonnées et la taxonomie au cours de ce processus de création de lot.

J'ai recherché des solutions à partir de la création de post XML-RPC (qui ne gère généralement pas le téléchargement/l'assignation d'images) vers des plug-ins qui extraient des fichiers d'un répertoire de serveur vers la bibliothèque multimédia (ce qui ne couvre pas la post-création) et jquery plusieurs fichiers. les uploaders (qui ne font que vider des fichiers dans un répertoire).

Je connais assez bien le php, j'ai construit des plugins et des thèmes, mais je suis perplexe sur la façon de gérer ce processus, car il nécessite la première étape consistant à transférer temporairement les fichiers sur le serveur, puis à générer des publications basées sur ces fichiers. téléchargé et attribuer des métadonnées d’identification à l’ensemble du lot.

J'espère que cela peut être fait dans un panneau d'administration personnalisé, mais si je dois le faire en dehors de wp-admin, c'est bien aussi ...

Des idées?

10
somatic

Il y a ce plugin: Plugin de messages d'image sélectionnée automatique

Depuis la page du plugin:

Messages automatiques avec images en vedette crée un nouveau message avec une image en vedette chaque fois qu'une image est téléchargée. Sur la page des paramètres du plug-in, vous pouvez définir l'image pour la publication et l'affecter à l'un de vos autres types de publications personnalisées et/ou formats de publication existants.

Fondamentalement, chaque image téléchargée génère une publication (du type de publication que vous avez choisi) et est définie en tant qu'image sélectionnée de cette publication.

J'ai installé ceci sur ma machine locale. La page des paramètres ressemble à ceci et vous permet de sélectionner le type de publication, y compris les types de publication personnalisés, auxquels vous souhaitez affecter des téléchargements de photos et le statut de publication souhaité.

Screenshot of plugin

Pour mettre le plugin en pratique - naviguez vers le type de message que vous avez choisi, ouvrez un nouveau message et chargez du contenu multimédia.

Pour transférer en bloc des photos, sélectionnez simplement plusieurs photos dans la boîte de dialogue "Télécharger". Je mets en surbrillance 8 photos ici, mais je ne vois aucune raison pour que ce ne soit pas 80 ou 800, à moins que le téléchargeur d’images wordpress ne connaisse des limites.

enter image description here

Les titres des publications sont définis par les noms de fichier image. Vous devriez pouvoir travailler avec ça et les appeler dans votre thème avec the_title()

J'ai testé localement et cela fonctionne dans Wordpress 3.6.

Je suis sûr qu'il existe un moyen plus robuste ou plus flexible d'y parvenir, mais dans ce cas, le plug-in semble faire exactement ce que vous demandez, à l'exception de l'attribution de métadonnées. Peut-être que quelqu'un d'autre pourrait préciser un peu cette partie.

Si vous avez besoin d'un contenu de publication généré dynamiquement, vous pouvez au moins commencer par le plug-in et le parcourir à partir de là. On pensait qu'il faudrait utiliser des post-formats ou des modèles de page pour déterminer le mode d'affichage des publications.

Remarque: Assurez-vous que tous vos image_sizes sont définis dans functions.php. Je détesterais devoir annuler/supprimer 10 000 photos, ou exécuter une très longue "régénération des vignettes" simplement parce que j'avais oublié ou changé la taille de l'image!

5
timshutes

Ce script est une preuve de concept (testé et fonctionnel), ce n'est pas un plugin et est destiné à être piraté, il suppose quelques choses:

  1. Il utilise wp_insert_post. Il est donc conseillé de ne pas l’accrocher à un hook d’administrateur, aussi lancez-le une fois!
  2. Les images doivent se trouver dans le dossier wp-content\uploads; pour le changer, il faudrait plus de sauts. L'exemple utilise un dossier personnalisé appelé \images dans le dossier de téléchargement, vous pouvez modifier cette partie.
  3. Il ne vérifie pas les erreurs, je ne l'ai testé que sur un dossier de 20 images, les résultats peuvent donc varier :)

Le code ci-dessous parcourra le dossier wp-content\uploads\images et créera un titre de publication basé sur le nom de l'image qui y est attachée. Vous voulez probablement changer ceci en quelque chose de meilleur ou possible d'entrer des métadonnées en utilisant d'autres données que vous avez (Exif peut-être).

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 );
    }   
}

Pour quelque chose de plus de quelques milliers d'images, vous aurez probablement plus de facilité avec:

5
Wyck

Le "Dossier de téléchargement des fichiers de nettoyage, structure de la bibliothèque de bibliothèques de médias" Question contient des suggestions de plug-ins qui pourraient être liées - bien que ce ne soit pas exactement ce que vous demandez. Mais peut-être que l'information est utile.

1
hakre