Відображати всі значення спеціального поля, створеного за допомогою ACF, на сторінці


9

Я використовую Advanced Custom Fields / ACF для створення спеціальних полів. Один з них - це список прапорців, які відображають деякі параметри (option1, option2, option3 ...) .

Тепер я хочу відобразити всі параметри цього поля на окремій сторінці на фронталі так:

Опції:
- варіант 1
- варіант 2
- варіант 3
- ...

Як я можу отримати всі параметри за допомогою клавіш від ACF?


Будьте трохи більш зрозумілі, що саме ви намагаєтесь досягти. ACF побудований для показу результатів користувальницьких полів на передній панелі, не допускаючи введення фронтенду.
SickHippie

Відповіді:


16

Функція get_field_objectACF може використовуватися для отримання інформації та параметрів для певного поля.

Спочатку вам потрібен ключ поля певного поля, яке ви хочете вивести. Під час редагування польової групи натисніть на вкладку Параметри екрана вгорі сторінки. Ви повинні побачити можливість перемикання відображення клавіші поля (вона за замовчуванням прихована для економії місця):

Польовий ключ

Коли у вас є ключ, ви можете завантажити польовий об'єкт і вивести його значення:

$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>';
}

Було б добре, якби ми могли посилатися на ім’я так само просто, як і використовувати ключ. таким чином, якщо у вас є плагін і коли-небудь потрібно тестувати його на іншому екземплярі WordPress з включеним ACF, вам не доведеться шукати ключ і змінювати його знову тільки тому, що у вашому оточенні B.
klewis

0

Якщо ви намагаєтесь щось вивести, якщо прапорець встановлений, використовуйте:

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

Якщо ви намагаєтеся просто відобразити список перевірених параметрів, скористайтеся цим:

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

Це дасть вам масив значень, якими можна керувати за допомогою foreachдекларації. Використання the_field('checkbox')дасть вам розділений комою рядок із параметрів, які ви також можете розділити.

Я б також запропонував вам зайти на сайт АКФ і ознайомитися з документацією. На більшість запитань подібного типу там відповідуть гідно, і розробник також активно працює на своїх форумах підтримки.

EDIT: Якщо ви хочете, щоб список доступних опцій виводився на сторінку для генерування динамічного запиту, у мене є річ. Це твір, який я щойно створив учора для витягування списку мета-значень із заданого користувацького ключа поля (за допомогою ACF). Я зробив це для вас досить загальним. Є ще один шматок JS для обробки запиту на ajax, і досить згорнутий фрагмент php, який виводить отримані повідомлення. Я не можу реально їх переписати - JS - це стандартний WP-прямий виклик / відповідь Ajax, а PHP - безлад умовних перевірок для 12-ти різних полів ACF, які ми відображаємо (2 з них - ретранслятори). Основи цього коду тут, кнопка onClickвикликає функцію ajax в окремому файлі JS, а сам php для функції ajax по суті встановлює масив аргументів для запиту,$selectedOptionабо $_POST['option']як мета-значення. Це надходить на a new WP_Query( $args );, який потім використовується у циклі, вихід якого повертається до js через add_action('wp_ajax_the_ajax_hook', 'fetch_option_list');і 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>';
 }

Mm, якщо я це зробити, я виведу параметри, призначені для "публікації", що мені потрібно, щоб показати всі параметри на "сторінці" як повний список параметрів.
Боб

Мені цікаво, для чого вам потрібен список опцій бекенда, який відображається на фронті. Ви хочете просто відобразити список параметрів із елементами, вибраними у вибраному адміністраторі? Якщо ви намагаєтесь використовувати це як частину форми (що дозволяє користувачеві змінювати перевірені дані), це не правильний плагін або метод зробити це. Однак, якщо ви хочете, щоб список опцій використовувався як попередній фільтр для переписування запиту, я, можливо, знадобиться саме вам. Невдовзі я відредагую своє вище повідомлення з цим кодом.
SickHippie

Привіт ім Боб з іншим ака, мені потрібні варіанти бекенда, щоб створити з ними своєрідне "меню". Я думаю, що ваш код отримує публікації та призначені їм варіанти. Мені потрібен лише список таких варіантів, як той, який з’являється у бекенді під час створення публікації. Я продовжуватиму працювати з вашим кодом, щоб побачити, чи можу я щось розібратися. Дякуємо @SickHippie
Dunning-Kruger

Ні, він витягує список параметрів, які були вибрані з цього прапорця - тобто йдеться, "ось цей прапорець, є повідомлення, яким було призначено значення" варіант 1 "," варіант 2 "," варіант 4 " і т.д. Я використовую foreachцикл для перегляду циклу. Пізніші функції виводять список публікацій через ajax, але я трохи
відмовився
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.