Aggiungere una galleria immagini a un custom post type?
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.

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.

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...

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.

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!

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:
