¿Cómo obtener imágenes de la galería?

4

Tengo algunas imágenes subidas en publicaciones de wordpress (por ejemplo, publicación # 1 y publicación # 2). Ahora he creado una nueva publicación (por ejemplo, Publicación # 3), y en esta publicación inserté la galería de WordPress 3.5, no subí ninguna imagen en la publicación # 3, en su lugar usé las imágenes de la publicación # 1 y post # 2. Ahora en el post # 3, me gustaría obtener los enlaces a las imágenes, pero parece que no puedo conseguir. Estoy usando el siguiente código:

$attachments = get_children( array('post_parent' => get_the_ID(), 'post_type' => 'attachment', 'post_mime_type' =>'image') );
    foreach ( $attachments as $attachment_id => $attachment ) {
            echo wp_get_attachment_image( $attachment_id, 'medium' );
   }

Mostrará solo la imagen si subo en la publicación, pero no mostrará la imagen si agrego desde las otras publicaciones. Entonces, ¿cómo puedo obtener los enlaces a las imágenes que se agregan en la galería pero no se cargan?

Gracias por cualquier ayuda.

    
pregunta jay 17.12.2012 - 12:31

3 respuestas

5

Tuve el mismo problema: ¿cómo puedo mostrar todas las imágenes de una publicación que contiene una galería donde algunas de las imágenes no se adjuntan a la publicación o se adjuntan a publicaciones diferentes?

La nueva interfaz de medios en WP3.5 le permite agregar cualquiera de las imágenes de la biblioteca de medios a una galería, sin importar si están "adjuntas" o no. Como has descubierto, la función "get_children" solo devuelve imágenes adjuntas a la publicación. El truco que utilicé es obtener los ID del código corto de [galería] en lugar del hecho de que son adjuntos. El código abreviado incluye todos los identificadores de imagen, independientemente de si están adjuntos a la publicación o no. P.ej. [ids de galería="410,411,412,413,414,415"]. Obviamente, wordpress puede analizar esto para recuperar todas las imágenes y mostrarlas en formato de galería utilizando la función "gallery_shortcode" incluida en el núcleo de wordpress (en includes / media.php). Para obtener los identificadores de todas las imágenes en el código abreviado de [galería] hice una nueva función en mi archivo functions.php:

function grab_ids_from_gallery() {

global $post;
$attachment_ids = array();
$pattern = get_shortcode_regex();
$ids = array();

if (preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches ) ) {   //finds the     "gallery" shortcode and puts the image ids in an associative array at $matches[3]
$count=count($matches[3]);      //in case there is more than one gallery in the post.
for ($i = 0; $i < $count; $i++){
    $atts = shortcode_parse_atts( $matches[3][$i] );
    if ( isset( $atts['ids'] ) ){
    $attachment_ids = explode( ',', $atts['ids'] );
    $ids = array_merge($ids, $attachment_ids);
    }
}
}
  return $ids;

 }
add_action( 'wp', 'grab_ids_from_gallery' );

Ahora solo usa la función "grab_ids_from_gallery ()" para devolver todos los ID como una matriz en tu plantilla.

Estoy seguro de que hay una forma más elegante de hacer esto, pero esto funciona para mí. La base para este código vino de:

enlace

que trata este tema.

    
respondido por el steveO 31.12.2012 - 02:26
0

Debo admitir que no he tenido tiempo para jugar con las nuevas galerías de medios de 3.5 y similares, pero trabajé solo con el código sin tener en cuenta la funcionalidad de WP Gallery ...

El código que ha suministrado utiliza get_children() con la variable de consulta post_parent establecida en get_the_ID() (el ID del objeto de publicación que se procesa actualmente en el bucle de contenido). Como tal, la llamada a get_children() solo es capaz de consultar archivos adjuntos a la publicación actual, y no a otras .

En la terminología de su ejemplo, su código, cuando se ejecuta en el contexto del ciclo mientras se procesa Post # 3 , no puede recuperar los archivos adjuntos adjuntos a Post # 1 y Publicar # 2 porque está solicitando específicamente los archivos adjuntos que se adjuntan a Publicación # 3 .

Lamentablemente, Wordpress no no admite la transferencia de múltiples valores a la variable var post_parent , por lo que para recuperar los archivos adjuntos de las otras publicaciones de la manera que desee, deberá obtener el publicar ID de las publicaciones que contienen el archivo adjunto ( Publicación # 1 y Publicación # 2 ) y ejecutar una llamada a get_children() para cada una, sustituyendo el valor de post_parent de " get_the_ID() "con la ID correspondiente.

Una solución más eficiente (aunque teóricamente más compleja) puede ser posible haciendo un uso inteligente del objeto WP_Query , sin embargo cree que la solución que estás buscando (o que asumo que estás buscando, en realidad nunca hiciste una pregunta;)) tendría un aspecto similar al de

$attachmentParentIds = getAttachmentParentIds( get_the_ID() );
foreach( $attachmentParentIds as $attParentId ) {
    $attachments = get_children( array('post_parent' => $attParentId, 'post_type' => 'attachment', 'post_mime_type' =>'image') );
    foreach ( $attachments as $attachment_id => $attachment ) {
        echo wp_get_attachment_image( $attachment_id, 'medium' );
    }
}

que utiliza una función como

//Returns an array of post IDs containing attachments that should be displayed
//on the post indicated by the passed post ID.
function getAttachmentParentIds( $intPostId ) {
    $ids = array();

    //Figure out which posts contain attachments that need to be displayed for $intPostID

    //...

    return $ids; //return an array of IDs
}

como un marcador de posición para la lógica que determina qué publicaciones contienen archivos adjuntos que deben mostrarse para la ID de la publicación pasada. No soy positivo en cuanto a la extensión de su implementación ni a su aplicación, y como tal, no sé lo que los detalles de esa lógica pueden implicar con respecto a su proyecto.

    
respondido por el bosco 29.12.2012 - 01:05
0

La solución real sería la creación de un nuevo "objeto" real "galería" con su propia ID.

Una galería no es más que una matriz de identificadores de imagen, pero sería más fácil de administrar:

  • Puede crearlo directamente desde el Administrador de medios, de la forma en que crea las nuevas "galerías" ahora en WP 3.5.x En lugar de generar un shortcode como este: [gallery ids="xx, yy, zz"] podría simplemente crear una nueva "Gallery" con su propia id y llamarla así: [gallery galley_id="123"]

  • Puedes administrar tus objetos de "galerías reales" en los medios, en una nueva sección de "Galerías"

  • Tendrías un conjunto de funciones para administrar dicho objeto. De esa manera, el problema del OP se resolvería simplemente pasando el gallery_id para usarlo en la plantilla attachment.php (o una nueva plantilla gallery.php que también podría implementarse) utilizando la función correspondiente.

  • Podrías mezclar imágenes adjuntas a varias publicaciones en un objeto de la galería sin preocuparte por la publicación original.

  • Puedes agregar varias galerías a una publicación de forma sencilla.

Si lo piensas bien, estas son las galerías de NextGen en pocas palabras. No es de extrañar que la gente use ese plugin mucho. Desafortunadamente, no creo que una característica tan importante deba ser transferida a un complemento, especialmente una muy hinchada y pesada como Nextgen, que contiene muchas características superfluas.

En este sentido, la lógica del nuevo administrador de medios es un poco defectuosa, creo. En cierto modo, sugiere que estás "creando" una nueva entidad llamada galería, mientras que en realidad está fusionando un montón de ID de imágenes para ti.

Entiendo que no verás la falla si estás usando la pantalla Carousel de Jetpack, ya que no te sacará de la página actual y no necesitarás obtener la imagen vinculada a esa galería específica Usted "creó".

Sin embargo, creo que hay una brecha peligrosa entre la interfaz de usuario del nuevo administrador de medios y lo que realmente hace para mostrar una galería.

    
respondido por el CamilloMiller 07.02.2013 - 12:16

Lea otras preguntas en las etiquetas