¿Cómo agregar una galería de imágenes a un tipo de publicación personalizada?

24 mar 2014, 06:14:59
Vistas: 16.9K
Votos: 3

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.

1
Comentarios

Acabo de revisar la función get_post_gallery. Está buscando mediante expresiones regulares el shortcode de galería en el contenido del post. Esto significa que si no hay un shortcode presente, no se devolverá ninguna galería de post.

Jörn Lund Jörn Lund
27 mar 2014 12:11:41
Todas las respuestas a la pregunta 2
3

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.

24 mar 2014 14:35:30
Comentarios

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

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

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.

helgatheviking helgatheviking
27 mar 2014 13:17:49

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!

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

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:

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

23 sept 2014 17:19:59
Comentarios

Ay, es un truco con iframe... pero +1, parece que funcionaría, y no tenemos nada mejor. Es por cosas como esta que ahora prefiero fuertemente los frameworks sobre los CMS.

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