WordPress

php — Nie można uzyskać dostępu do wartości pól ACF za pośrednictwem mojej wtyczki

  • 3 kwietnia, 2024
  • 4 min read
php — Nie można uzyskać dostępu do wartości pól ACF za pośrednictwem mojej wtyczki


Cel
Pracuję nad witryną WordPress zbudowaną przy użyciu Timber/Twig. Mam wtyczkę (zbudowaną przy użyciu standardowego PHP i zapisaną w standardzie wtyczki folder), który ma pobierać wartości ACF z podpól pola wzmacniaka i zapisywać je w tablicy. Następnie zapisuję tę tablicę w zmiennej globalnej o nazwie $homepage_collage_images do którego mogę następnie uzyskać dostęp w moim pliku kontekstu Timber (potwierdziłem, że ta zmienna globalna jest dostępna w moim pliku kontekstu i że mam dostęp do jej zawartości).

Notatki
Ze względu na inne funkcje mojej wtyczki (związane z buforowaniem i innymi rzeczami), dany kod musi móc działać we wtyczce, a nie być wywoływany w pliku kontekstowym: w przeciwnym razie reszta wtyczki nie będzie działać zgodnie z przeznaczeniem (ale to wykracza poza kontekst tej wiadomości).

Mam również aktywowaną WP Super Cache na mojej stronie, ponieważ buduję wtyczkę w oparciu o niektóre jej funkcje związane z buforowaniem. Jedyne specjalne ustawienia aktywowane za pomocą wtyczki WP Super Cache to dynamic caching I late init. Późny init ma następujący opis: „Wyświetl pliki z pamięci podręcznej po załadowaniu WordPressa.„. Do działania mojej wtyczki wymagane jest dynamiczne buforowanie, więc wyłączenie go nie wchodzi w grę. I Posiadać wyłączyłem oba te ustawienia na etapie rozwiązywania problemów i żadne z nich nie miało na nic wpływu, ponieważ mój kod nadal nie działał zgodnie z oczekiwaniami.

Warto przeczytać!  niestandardowa taksonomia - Pokaż ślimak kategorii portfela w adresie URL (jeśli istnieje)

Problem
W mojej niestandardowej wtyczce mój kod to robi nie pobierz wartości pola ACF. To jest kod, którego używam do pobierania wartości i zapisywania ich w tablicy:

function get_images_and_update_context() {
    // Homepage Image Array
    global $homepage_collage_images;
    $homepage_collage_images = array();

    // Get the ID of the current post
    $post_id = get_the_ID();

    if (have_rows('collage_homepage_image_variations', $post_id)) {
        // Loop through the rows of the repeater field
        while (have_rows('collage_homepage_image_variations', $post_id)) {
            the_row();

            // Get values of subfields for the current row
            $image_640 = get_sub_field('collage_image_640');
            $image_1024 = get_sub_field('collage_image_1024');
            $image_320_1 = get_sub_field('collage_image_320_1');
            $image_320_2 = get_sub_field('collage_image_320_2');

            // Create an array to store the subfield values for the current row
            $row_images = array(
                'image_640' => $image_640,
                'image_1024' => $image_1024,
                'image_320_1' => $image_320_1,
                'image_320_2' => $image_320_2
            );

            // Add the row array to the main homepage_collage_images array
            $homepage_collage_images[] = $row_images;
        }
    }

    var_dump("PLUGIN Array Dump: ", $homepage_collage_images); // Debugging statement
}

add_action('acf/init', 'get_images_and_update_context');

Mam var_dump tam jako komunikat debugowania, aby upewnić się, że ta funkcja faktycznie działa (jest!). Ale wyjście z var_dump Jest string(19) "PLUGIN Array Dump: " array(0) { }, więc nie wygląda na to, żeby tablica cokolwiek zawierała. Próbowałem pominąć $post_id inne rzeczy, ponieważ tak naprawdę nie sądzę, że jest to konieczne… ale bez tego też nie działa, więc umieściłem to tam, żeby sprawdzić, czy coś rozwiązało.

Warto przeczytać!  Czy WordPress zastąpi programistów internetowych? (spostrzeżenia ekspertów)

Rozwiązywanie problemów, które wykonałem
Upewniłem się, że mój kod działa zgodnie z oczekiwaniami, kopiując/wklejając i uruchamiając plik get_images_and_udpate_context funkcję w samym pliku kontekstowym Timber i potwierdził, że poprawnie pobiera dane, ponieważ plik var_dump pokazuje, że tablica została wypełniona poprawnymi danymi. Zatem funkcjonalnie kod wydaje się być poprawnie ułożony i skonfigurowany, ale w mojej wtyczce nie będzie pobierał wartości ACF. Domyślam się, że moja wtyczka jest uruchomiona zanim Pola ACF są gotowe do przechwycenia, ale nie wiem, jak to potwierdzić. Jak widać korzystam add_action('acf/init', 'get_images_and_update_context'); aby uruchomić tę funkcję we wtyczce, i pomyślałem, że using acf/init ponieważ hak rozwiązałby ten potencjalny problem.

Tak więc mniej więcej na tym etapie znajduję się z tym problemem i drapię się po głowie. Jeśli ktoś miał do czynienia z czymś podobnym lub ma jakieś uwagi, byłbym naprawdę wdzięczny!


Źródło