Wyświetl wszystkie wartości pola niestandardowego utworzonego za pomocą ACF na stronie

9

Używam Advanced Custom Fields / ACF do tworzenia niestandardowych pól. Jednym z nich jest lista pól wyboru wyświetlających niektóre opcje (opcja 1, opcja 2, opcja 3 ...) .

Teraz chcę wyświetlić wszystkie opcje tego pola na osobnej stronie w interfejsie:

Opcje:
- opcja 1
- opcja 2
- opcja 3
- ...

Jak mogę pobrać wszystkie opcje za pomocą kluczy z ACF?

Kok
źródło
Wyjaśnij nieco, co dokładnie próbujesz osiągnąć. ACF jest zbudowany, aby wyświetlać dane wyjściowe pól niestandardowych w interfejsie użytkownika, aby nie pozwalać na wprowadzanie danych interfejsu.
SickHippie

Odpowiedzi:

16

get_field_objectFunkcja ACF mogą być wykorzystane, aby uzyskać informacje i opcje dla konkretnej dziedzinie.

Najpierw potrzebujesz klucza pola określonego pola, które chcesz wygenerować. Podczas edytowania grupy pól kliknij kartę opcji ekranu u góry strony. Powinieneś zobaczyć opcję przełączania wyświetlania klucza pola (jest on domyślnie ukryty, aby zaoszczędzić miejsce):

Klucz polowy

Po uzyskaniu klucza możesz załadować obiekt pola i wyprowadzić jego wartości:

$field_key = "field_5039a99716d1d";
$field = get_field_object($field_key);

if( $field )
{
    echo '<select name="' . $field['key'] . '">';
        foreach( $field['choices'] as $k => $v )
        {
            echo '<option value="' . $k . '">' . $v . '</option>';
        }
    echo '</select>';
}
Milo
źródło
Byłoby miło, gdybyśmy mogli odwoływać się do nazwy tak łatwo, jak za pomocą klawisza. w ten sposób, jeśli masz go we wtyczce i kiedykolwiek musiałeś go przetestować na innej instancji WordPressa z włączonym acf, nie musisz szukać klucza i zmieniać go ponownie tylko dlatego, że jesteś w środowisku B.
klewis
0

Jeśli próbujesz wygenerować coś, jeśli pole wyboru było zaznaczone, użyj:

<?php if(in_array('news', get_field('checkbox') )): ?>
    <h1>News was ticked!</h1>
<?php endif; ?>

Jeśli próbujesz wyświetlić listę zaznaczonych opcji, użyj tego:

<p>Categories: <?php get_field('checkbox'); ?></p>

To da ci tablicę wartości, którymi możesz zarządzać za pomocą foreachdeklaracji. Użycie the_field('checkbox')da ci ciąg opcji oddzielonych przecinkami, które możesz również podzielić.

Sugerowałbym również, aby przejść do strony ACF i przejrzeć dokumentację. Odpowiedzi na większość tego typu pytań zostaną udzielone w przyzwoitych szczegółach, a programista jest również aktywny na forach pomocy technicznej.

EDYCJA: Jeśli chcesz, aby lista dostępnych opcji wyświetlała się na stronie w celu wygenerowania dynamicznego zapytania, mam właśnie to. Jest to kawałek, który właśnie zbudowałem wczoraj, aby wyciągnąć listę meta wartości z danego niestandardowego klucza pola (używając ACF). Uczyniłem to dla ciebie dość ogólną. Jest jeszcze jedna część JS do obsługi żądania ajax i dość zawiły kawałek php, który wysyła wynikowe posty. Naprawdę nie mogę ich przepisać - JS jest standardowym wywołaniem / odpowiedzią ajaxową zwróconą do przodu w WP, a PHP to bałagan kontroli warunkowych dla 12 różnych pól ACF, które wyświetlamy (z których 2 są repeaterami). Podstawą jest tutaj ten kod, przycisk onClickwywołuje funkcję ajax w osobnym pliku JS, a php samej funkcji ajax zasadniczo ustawia tablicę argumentów dla zapytania,$selectedOptionlub $_POST['option']jako wartość_meta. To jest podawane do new WP_Query( $args );pętli, która jest następnie wykorzystywana w pętli, której wyjście jest zwracane do js przez add_action('wp_ajax_the_ajax_hook', 'fetch_option_list');i add_action( 'wp_ajax_nopriv_the_ajax_hook', 'fetch_option_list' ); //for non logged-in users.

 // Get list of meta_values for given meta_key and post_type (page, post, custom post type)
 function meta_list($key = '', $type = '', $status = 'publish'){
 global $wpdb;
    $r = $wpdb->get_col($wpdb->prepare( "
    SELECT DISTINCT pm.meta_value FROM {$wpdb->postmeta} pm
    LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
    WHERE pm.meta_key = '%s'
    AND p.post_status = '%s'
    AND p.post_type = '%s'
    ORDER BY pm.meta_value ASC", $key, $status, $type));
    return $r;
}

 // ADD EG A FORM TO THE PAGE
 function meta_ajax_frontend(){
    $formlist = meta_list('metakey', 'posttype');
    echo '<form id="optionSelect">';
    echo '<select id="optionList" name="optionList">';
    foreach($formlist as $fl => $val) {
        echo '<option>' . $val . '</option>';
    }
    echo '</select>';
    echo '<input name="action" type="hidden" value="the_ajax_hook" />
    <input id="submit_button" value = "Search" type="button" onClick="fetch_meta();" />
    </form>
    <div id="meta_list">
    Please select an option from the list
    </div>';
 }
SickHippie
źródło
Mm, jeśli to zrobię, wypiszę opcje przypisane do „postu”, potrzebuję pokazać wszystkie opcje na „stronie” jako pełną listę opcji.
Bob
Jestem ciekawy, dlaczego potrzebujesz listy opcji backendu wyświetlanej na froncie. Czy chcesz po prostu wyświetlić listę opcji z elementami wybranymi przez administratora? Jeśli próbujesz użyć tego jako części formularza (umożliwiając modyfikację sprawdzanych danych przez użytkownika), nie jest to odpowiednia wtyczka lub metoda. Jeśli jednak chcesz, aby lista opcji była używana jako filtr wstępny do przepisywania zapytania, mogę mieć coś dla Ciebie. Niedługo będę edytować mój powyższy post z tym kodem.
SickHippie
Cześć im Bob z innym acc, potrzebuję opcji backendu, aby stworzyć z nimi coś w rodzaju „menu”. Myślę, że twój kod pobiera posty i przypisane do nich opcje. Potrzebuję tylko listy opcji takich jak ta, która pojawia się na backendie podczas tworzenia postu. Będę nadal pracował z twoim kodem, aby sprawdzić, czy mogę coś wymyślić. Dzięki @SickHippie
Dunning-Kruger
Nie, pobiera listę opcji wybranych z tego pola wyboru - to znaczy, mówi „oto pole wyboru, są posty, którym przypisano wartości„ opcja 1 ”,„ opcja 2 ”,„ opcja 4 ” i tak dalej. Dosłownie po prostu wyciąga listę meta_value na podstawie tego meta_key. Potrzebowałem jej do listy dynamicznej, ale jeśli utworzyłeś szkic posta, wszystkie pola wyboru zostaną zaznaczone, wyciągnie wszystkie opcje z tablicy. To jest tablica Korzystam z foreachpętli do. ​​Późniejsze funkcje przynoszą listę postów przez ajax, ale to zostawiłem
SickHippie