es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo obtener los enlaces de imagen desde el bloque de galería de Gutenberg y agregarlos como atributos de datos HTML a un botón en WordPress.

Estoy utilizando un bloque de galería de Gutenberg dentro de una publicación y estoy tratando de crear un botón que contenga todos los identificadores de imagen en el bloque de galería como atributos de datos HTML para que más tarde, cuando muestre el contenido en la página, pueda tener acceso a esos identificadores utilizando javascript. Básicamente, estoy tratando de crear una función de lightbox para un tipo de publicación personalizado.

El problema es que no puedo acceder a los datos del bloque de galería de Gutenberg.

Aquí está mi código:

while ($custom_post_type->have_posts()) {
    $custom_post_type->the_post();
    $gallery = get_post_gallery(get_the_id(), false);
    $ids = explode(",", $gallery['ids']);
}

Y aquí está ese botón con atributos de datos HTML:

<button class="gallery"> 
<?php 
for ($i = 0; $i < count($ids); $i++) {
  $img_link = wp_get_attachment_image_url($ids[$i], 'full');
  echo "data-img-" . $i . " = " . $img_link . " ";
}?>
>
Light-box
</button>

Pero no funciona, $ids está vacío. Imprime esto:

<button class="gallery">Light-box</button>

¡Gracias por tu ayuda!

Editar

Estoy utilizando bloques de WordPress en la página de la publicación, no estoy seguro de cómo se generaron, pero funcionan de inmediato.

Imagen

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en cómo estás obteniendo los datos de la galería. La función get_post_gallery() solo funciona con la galería predeterminada de WordPress y es posible que no funcione con el bloque de galería de Gutenberg.

    Para obtener datos de un bloque de galería de Gutenberg, puedes utilizar la función parse_blocks() para analizar el contenido de la publicación y extraer los datos del bloque de galería. Aquí tienes un ejemplo:

    while ($custom_post_type->have_posts()) {
        $custom_post_type->the_post();
        $post_content = get_the_content();
        $blocks = parse_blocks($post_content);
    
        foreach ($blocks as $block) {
            if ($block['blockName'] === 'core/gallery') { // reemplaza con el nombre de tu bloque
                $ids = $block['attrs']['ids'];
                break;
            }
        }
    }
    

    Esto te proporcionará el valor ids para el bloque de galería. Luego puedes utilizar tu código existente para mostrar el botón con los atributos de datos.

    Nota: Asegúrate de reemplazar 'core/gallery' con el nombre correcto del bloque de galería si es diferente.

Comments are closed.