Aggiungere una galleria immagini a un custom post type?

24 mar 2014, 06:14:59
Visualizzazioni: 16.9K
Voti: 3

Sto importando dati da un servizio web esterno in un custom post type. Questi dati includono immagini. Come posso creare una galleria immagini, aggiungere alcuni allegati esistenti e associarla a un post?

Quello che speravo di trovare è qualcosa come una funzione set_post_gallery corrispondente a get_post_gallery, ma non riesco a trovare nulla di simile nel codex, su Google o in wp-includes/media.php.

Ecco come ho configurato gli allegati:

$attachment = [
  'guid' => wp_upload_dir()[ 'url' ] . '/' . basename( $path ),
  'post_mime_type' => wp_check_filetype( basename( $path ), null )[ 'type' ],
  'post_title' => "$mlsNum $id",
  'post_content' => '',
  'post_status' => 'inherit'
];

$attachmentId = wp_insert_attachment( $attachment, $path, $this->postId );

// Genera i metadati dell'allegato e crea le immagini ridimensionate.
wp_update_attachment_metadata( $attachmentId, wp_generate_attachment_metadata( $attachmentId, $path ));

Ed ecco come sto cercando di recuperare la galleria per il tema:

$gallery = get_post_gallery( $post, false );
var_dump( $gallery );
var_dump( $post );

$post è definito, e $gallery è false. Pensavo che wp_insert_attachment avrebbe creato automaticamente una galleria per il post e aggiunto l'allegato, ma apparentemente non è così. Se lo facesse, questo creerebbe altri problemi quando dovessi allegare un PDF al post.

1
Commenti

Ho appena dato un'occhiata alla funzione get_post_gallery. Sta analizzando con regex il contenuto del post alla ricerca dello shortcode della gallery. Ciò significa che se non è presente alcuno shortcode, non verrà restituita alcuna gallery del post.

Jörn Lund Jörn Lund
27 mar 2014 12:11:41
Tutte le risposte alla domanda 2
3

Quando hai semplicemente file di immagini grezzi che desideri assegnare a un articolo, wp_insert_attachment farà al caso tuo.

Con gli allegati già presenti nel tuo database, puoi utilizzare wp_update_post per impostare il post_parent dell'allegato. In questo modo:

wp_update_post( array(
    'ID' => $attachment_id,
    'post_parent' => $parent_post_id,
));

Per ottenere gli allegati di un articolo, puoi utilizzare get_children.

$args = array(
    'post_parent' => $parent_post_id,
    'post_type' => 'attachment',
);
$attachments = get_children( $args );

Se insisti nell'usare get_post_gallery– che restituirà solo gli allegati di tipo immagine—dovresti aggiungere lo shortcode [gallery] al contenuto dell'articolo genitore.

24 mar 2014 14:35:30
Commenti

Pensavo anche che wp_insert_attachment avrebbe aggiunto l'allegato alla galleria predefinita del post, creandola se necessario, ma il codex non fa una tale promessa (e la magia non funziona per me). Mi chiedo come l'interfaccia di amministrazione crei le gallerie...

Dan Ross Dan Ross
24 mar 2014 20:49:45

Non sono a conoscenza di una galleria predefinita. Una galleria è identificata solo dagli ID delle immagini nello shortcode della galleria. Potresti usare il get_children() suggerito per ottenere tutti gli allegati, o in alternativa salvare gli ID degli allegati come meta per il post genitore.

helgatheviking helgatheviking
27 mar 2014 13:17:49

Ho usato get_children e controllato mime_type come soluzione temporanea, ma passerò al metodo dello shortcode [gallery] in modo che l'utente possa modificare la galleria usando il media manager di WP nella pagina di modifica del post. Questo renderà anche più semplice integrare il plugin con i temi di altre persone. Non sono il primo a lavorare su questo sito, e probabilmente non sarò l'ultimo. Sembra un po' approssimativo modificare il contenuto del post per manipolare la galleria, ma farà il lavoro e non c'è un modo migliore. Grazie Jörn!

Dan Ross Dan Ross
27 mar 2014 18:38:25
1

Esiste un'ottima soluzione PHP che aggiunge l'editor della galleria all'editor dei post personalizzati - perfetto, se come me stai creando tipi di post personalizzati utilizzando PHP e importando dati con WPAllImport. In questo caso, voglio assicurarmi di utilizzare la galleria predefinita per consentire ai miei clienti di modificare/aggiungere/eliminare le immagini importate.

Il codice seguente aggiunge l'editor della galleria all'interfaccia dell'editor del tuo tipo di post personalizzato:

https://gist.github.com/alexdunae/897503

23 set 2014 17:19:59
Commenti

Sigh, è un hack con iframe... però +1, sembra che possa funzionare, e non abbiamo niente di meglio. È per cose come questa che ora preferisco decisamente i framework ai CMS.

Dan Ross Dan Ross
5 ott 2014 22:40:29