¿Cómo agregar una galería de imágenes a un tipo de publicación personalizada?
Estoy extrayendo datos de un servicio web externo hacia un tipo de publicación personalizada. Estos datos incluyen imágenes. ¿Cómo puedo crear una galería de imágenes, agregar archivos adjuntos existentes a ella y asociarla con una publicación?
Lo que esperaba encontrar es algo como una función set_post_gallery
que complemente a get_post_gallery
, pero no encuentro nada similar en el codex, en Google o en wp-includes/media.php
.
Así es como configuro los archivos adjuntos:
$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 );
// Generar metadatos del adjunto y crear imágenes redimensionadas
wp_update_attachment_metadata( $attachmentId, wp_generate_attachment_metadata( $attachmentId, $path ));
Y así es como intento recuperar la galería para el tema:
$gallery = get_post_gallery( $post, false );
var_dump( $gallery );
var_dump( $post );
$post
está definido, y $gallery
es false. Tenía la impresión de que wp_insert_attachment
crearía automáticamente una galería para la publicación y agregaría el adjunto a ella, pero aparentemente no es así. Si lo hiciera, eso me causaría otros problemas cuando necesite adjuntar un PDF a la publicación.

Cuando solo tienes archivos de imagen sin procesar que deseas asignar a una publicación, wp_insert_attachment
hará el trabajo.
Con archivos adjuntos ya presentes en tu base de datos, puedes usar wp_update_post
para establecer el post_parent del adjunto.
Así:
wp_update_post( array(
'ID' => $attachment_id,
'post_parent' => $parent_post_id,
));
Para obtener los adjuntos de una publicación puedes usar get_children
.
$args = array(
'post_parent' => $parent_post_id,
'post_type' => 'attachment',
);
$attachments = get_children( $args );
Si insistes en usar get_post_gallery
– que solo devuelve adjuntos de imagen—deberías agregar el shortcode [gallery]
al contenido de tu publicación principal.

También pensé que wp_insert_attachment
agregaría el adjunto a la galería predeterminada de la publicación, creándola si fuera necesario, pero el codex no promete tal cosa (y la magia no funciona para mí). Me pregunto cómo la interfaz de administración crea las galerías...

No hay una galería predeterminada que yo conozca. Una galería solo se identifica por los IDs de las imágenes en el shortcode de galería. Podrías usar el get_children()
sugerido para obtener todos los adjuntos, o alternativamente guardar los IDs de los adjuntos como meta para la publicación padre.

He estado usando get_children
y verificando mime_type
como solución temporal, pero cambiaré al método del shortcode [gallery]
para que el usuario pueda editar la galería usando el administrador de medios de WP en la página de edición de la publicación. Esto también hará que el plugin sea más fácil de integrar con los temas de otras personas. No soy el primero en trabajar en este sitio, y probablemente no seré el último. Se siente un poco improvisado manipular el contenido de la publicación para controlar la galería, pero hará el trabajo y no hay una mejor manera. ¡Gracias Jörn!

Aquí hay una excelente solución en PHP que agregará el editor de galerías al editor de tipos de contenido personalizados. Es genial si, como yo, estás creando tipos de contenido personalizados usando PHP e importando datos con WPAllImport. En este caso, quiero asegurarme de usar la galería predeterminada para permitir que mis clientes editen/agreguen/eliminen imágenes importadas.
El siguiente código agrega el editor de galerías a la interfaz del editor de tu tipo de contenido personalizado:
