Novinka: Vizuální editor pro éru AI webů. Poslední dílek skládačky, když chcete upravovat web a ne psát e-maily. www.directedit.dev

💬

Jak napojit ACF Photo Gallery Field do Bricks

Že Bricks nepodporuje ACF Photo gallery field? Tady máte řešení.

Pokud nechcete kvůli galeriím do plugin ACF hned kupovat placený plugin, je možnost použít doplněk, který vám je tam jednoduše povolí přidat: ACF Photo Gallery Field. Ale při práci v Bricks narazíte na problém, že tam nejsou metadata správně registrována. A tady najdete návod, jak na to.

Kód

Toto celé bude fungovat za předpokladu, že máte na webu (v child theme nebo snippetu) tento kód:


/**
 * Vrátí ID obrázků z ACF Photo Gallery pole.
 *
 * @param string   $field   Název ACF pole.
 * @param int|null $post_id ID příspěvku. Když není zadané, použije aktuální post.
 *
 * @return array<int>
 */
function jk_acf_galerie_ids($field = 'galerie', $post_id = null)
{
    $field = sanitize_key($field);
    $post_id = $post_id ? (int) $post_id : get_the_ID();

    if (!$post_id) {
        $post_id = get_queried_object_id();
    }

    if (!$field || !$post_id) {
        return [];
    }

    if (function_exists('acf_photo_gallery')) {
        $images = acf_photo_gallery($field, $post_id);

        if (is_array($images)) {
            $ids = [];

            foreach ($images as $image) {
                if (!empty($image['id'])) {
                    $ids[] = (int) $image['id'];
                }
            }

            return array_values(array_unique(array_filter($ids)));
        }
    }

    $raw_value = get_post_meta($post_id, $field, true);

    if (!is_string($raw_value) || $raw_value === '') {
        return [];
    }

    return array_values(array_unique(array_filter(array_map('absint', explode(',', $raw_value)))));
}

function jk_acf_photo_gallery_field_to_gallery($field = 'galerie', $post_id = null)
{
    return jk_acf_galerie_ids($field, $post_id);
}

function jk_acf_photo_gallery_field_to_image_loop($field = 'galerie', $post_id = null)
{
    $ids = jk_acf_galerie_ids($field, $post_id);

    return [
        'post_type' => 'attachment',
        'post_status' => 'inherit',
        'post_mime_type' => 'image',
        'post__in' => $ids ?: [0],
        'orderby' => 'post__in',
        'posts_per_page' => $ids ? count($ids) : 1,
        'ignore_sticky_posts' => true,
        'no_found_rows' => true,
    ];
}

add_filter('bricks/code/echo_function_names', function ($function_name) {
    $allowed = [
        'jk_acf_photo_gallery_field_to_gallery',
        'jk_acf_photo_gallery_field_to_image_loop',
    ];

    if (in_array($function_name, $allowed, true)) {
        return true;
    }

    return $function_name;
});

Modul Gallery

Vložíte klasický modul galerie a do něj dáte jako dynamická data tento kód (jako dynamickou funkci echo, tedy obalené ještě závorkami { }:

//obalit složenými závorkami!

echo:jk_acf_photo_gallery_field_to_gallery('galerie')
image 1

A to je vše.. Díky tomu se vám obrázky z ACF pole typu galerie zobrazí v Bricks galerii a můžete je klasicky formátovat a normálně s nimi pracovat.

Loop s obrázky

Co se týče smyčky (abyste si obrázky mohli vypsat třeba do slideru a podobně), tak tam je to trochu jiné.

Uděláte si strukturu:

  • Block (jako obalovací rodič, abyste si mohli určovat zobrazení všech obrázků)
    • Div (loop)
      • Image (samotný obrázek)

Loop pak bude mít custom kód pouze s jedním řádkem (není třeba upravovat):

//bez úprav

return jk_acf_photo_gallery_field_to_image_loop('galerie');

A do obrázku dáte jen dynamická data, která vezmou post_id (pozor, opět obalit složenými závorkami):

//obalit složenými závorkami!

post_id

Ukázka loopu

image
image 2

Líbil se vám článek? Pošlete ho dál:

Jitka Klingenbergová

J K

Absolventka ČVUT FIT oboru Informatika | Programátorka | Webová vývojářka, konzultantka a mentorka
tvorime@vyladeny-web.cz

Vaše komentáře

Zanechte první komentář

Zpět k tipům

Články na podobné téma

Pravidelná dávka užitečných tipů až do schránky