Come posso caricare collettivamente immagini e creare automaticamente post per ognuno contemporaneamente?


10

So come caricare più immagini in un post esistente, ma questo è uno scenario diverso. Questo è per un ampio catalogo di risorse, con ogni post personalizzato di tipo post che rappresenta una risorsa immagine (quindi una singola immagine viene assegnata come "immagine in primo piano" per ogni post).

L'intero sistema funziona alla grande per la creazione di risorse una tantum, ma richiede troppo tempo. Devo essere in grado di "caricare" più immagini contemporaneamente, quindi creare un nuovo post per ogni immagine, quindi allegare l'immagine al nuovo post come "immagine in primo piano".

Non ci saranno contenuti testuali inseriti per ogni post - solo alcuni metadati e assegnazioni di tassonomia personalizzate, quindi dovrebbe essere possibile assegnare in batch i metadati e la tassonomia durante questo processo di creazione in batch.

Ho cercato soluzioni dalla creazione di post XML-RPC (che di solito non gestisce il caricamento / assegnazione di immagini) ai plug-in che tirano i file da una directory del server alla libreria multimediale (che non copre la creazione di post) e jquery file multipli uploader (che fondamentalmente eseguono il dump dei file in una directory).

Sono relativamente esperto di php, avendo creato plugin e temi, ma sono sconcertato su come gestire questo processo, in quanto richiede il primo passo per ottenere i file sul server con una certa capacità temporanea, quindi generare post basati sui file caricato e assegnando alcuni metadati identificativi all'intero batch.

Spero che ciò possa essere fatto in un pannello di amministrazione personalizzato, ma se devo farlo al di fuori di wp-admin, va bene lo stesso ...

Idee?


Hai mai trovato una risposta a questo? Questo sarebbe perfetto per me ...

L'ho fatto ... ma lo scenario si è evoluto in un intero plug-in framework per il progetto. Non è una risposta breve in particolare: dovrei documentare il flusso di più funzioni e hook che tutti insieme compiono questo.
somatic

1
In sintesi, ho effettivamente fatto un processo in due passaggi, poiché per motivi editoriali non aveva senso generare post per tutto ciò che un utente ha caricato. Al contrario, l'utente carica tutte le immagini in un singolo post "batch" come allegati a quel singolo post. Quindi, il batch viene esaminato e ogni allegato viene accettato / rifiutato e, una volta pubblicato il post "batch", una routine di salvataggio personalizzata accetta ogni allegato accettato e utilizza wp_insert_post () per creare un post con quel singolo allegato come descritto Immagine.
somatic,


Come stai aggiungendo i metadati, in che modo le immagini sono correlate ai dati?
Wyck,

Risposte:


5

C'è questo plug-in: Plugin Post di immagini in primo piano automatico

Dalla pagina del plugin:

Post automatici di immagini in primo piano crea un nuovo post con un'immagine in primo piano ogni volta che un'immagine viene caricata. Tramite la pagina delle impostazioni del plug-in, puoi impostare l'immagine in modo che venga pubblicata e assegnata a uno degli altri tipi di post personalizzati e / o formati di post personalizzati.

Fondamentalmente, ogni immagine che viene caricata genera un post (del tipo di post selezionato) e viene impostata come immagine in primo piano di quel post.

L'ho installato sul mio computer locale. La pagina delle impostazioni è simile a questa e ti consente di selezionare il tipo di post, inclusi i tipi di post personalizzati, a cui desideri assegnare i caricamenti di foto e lo stato di pubblicazione desiderato.

Schermata del plug-in

Per mettere in pratica il plugin: vai al tipo di post che hai scelto, apri un nuovo post e carica file multimediali.

Per caricare collettivamente le foto, evidenzia semplicemente più foto nella finestra di dialogo "carica". Sto evidenziando 8 foto qui, ma non vedo alcun motivo per cui non potrebbe essere 80 o 800, a meno che non ci siano limiti che non conosco nell'uploader di immagini wordpress.

inserisci qui la descrizione dell'immagine

I titoli dei post sono impostati dai nomi dei file di immagine. Dovresti essere in grado di lavorare con quello e chiamarli nel tuo tema conthe_title()

Ho provato localmente e funziona in Wordpress 3.6.

Sono sicuro che esiste un modo più solido o flessibile per ottenere questo risultato, ma in questo caso il plugin sembra fare esattamente quello che stai chiedendo, ad eccezione dell'assegnazione dei metadati. Forse qualcun altro potrebbe rimpolpare un po '.

Se avessi bisogno di contenuti post generati dinamicamente, potresti almeno iniziare con il plugin e iterare da lì. Si pensava che sarebbe stato possibile utilizzare i formati di post o i modelli di pagina per determinare la modalità di visualizzazione dei post.

Nota: assicurati di avere tutti i tuoi image_sizeset in function.php. Odierei dover annullare / eliminare 10.000 foto o eseguire una "rigenerazione miniature" estremamente lunga solo perché ho dimenticato o modificato le dimensioni dell'immagine!


dovresti commentare quando fai una votazione negativa: sarebbe molto più utile migliorare la qualità del sito.
scadenze

5

Questo script è una prova di concetto (testato e funzionante), non è un plug-in ed è pensato per essere hackerato, presuppone alcune cose:

  1. Si utilizza wp_insert_postquindi si consiglia di non agganciarlo ad alcun hook di amministrazione, quindi basta eseguirlo una volta!
  2. Le immagini devono essere nella wp-content\uploadscartella, cambiando questo richiederebbe più cerchi per saltare. L'esempio utilizza una cartella personalizzata chiamata \imagesnella cartella dei caricamenti, è possibile modificare questa parte.
  3. Non esegue alcun controllo degli errori, l'ho testato solo su una cartella con 20 immagini, quindi i risultati potrebbero variare :)

Il codice seguente scorrerà la wp-content\uploads\imagescartella e creerà un titolo post basato sul nome dell'immagine che vi è allegata. Probabilmente vuoi cambiarlo in qualcosa di meglio o possibile inserire metadati usando altri dati che possiedi (Exif forse).

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

Per qualsiasi cosa oltre qualche migliaio di immagini probabilmente avresti un tempo più facile usando:


Continua ad aggiungere immagini ridimensionate alla cartella upload / images e anche per questo, genera nuovi post. Il processo è diventato ricorsivo, quindi prima di rimuovere la funzione sono stati creati quasi 800 post. I nuovi formati generati dovrebbero essere eseguiti in una normale posizione del supporto wp.
Heena Shah,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.