Показать все значения пользовательских полей, созданных с помощью ACF на странице


9

Я использую Advanced Custom Fields / ACF для создания пользовательских полей. Одним из них является список флажков, которые отображают некоторые опции (опция1, опция2, опция3 ...) .

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

Варианты:
- вариант 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, вам не нужно выискивать ключ и снова менять его только потому, что вы
находитесь

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')даст вам разделенную запятыми строку параметров, которые вы также можете разделить.

Я бы также предложил вам зайти на сайт ACF и просмотреть документацию. На большинство вопросов такого типа будут даны достаточно подробные ответы, и разработчик также активно участвует в его форумах поддержки.

РЕДАКТИРОВАТЬ: Если вы хотите, чтобы список доступных опций выводился на страницу для генерации динамического запроса, у меня есть только вещь. Это фрагмент, который я только что построил вчера для получения списка мета-значений из заданного ключа настраиваемого поля (используя ACF). Я сделал это довольно общим для вас. Есть еще один кусок JS для обработки ajax-запроса и довольно запутанная часть php, которая выводит полученные сообщения. Я не могу переписать их - JS - это стандартный ajax-вызов, обращенный к WP, и PHP - это беспорядок условных проверок для 12 различных полей ACF, которые мы отображаем (2 из которых являются повторителями). Основы этого кода здесь, кнопка onClickвызывает функцию ajax в отдельном файле JS, а php для самой функции ajax по существу устанавливает массив аргументов для запроса,$selectedOptionили $_POST['option']как meta_value. Это передается в 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>';
 }

Мм, если я сделаю это, я выведу опции, назначенные «посту», мне нужно показать все опции на «странице» в виде полного списка опций.
Боб

Мне любопытно, почему вам нужен список опций бэкэнда, отображаемый на веб-интерфейсе. Вы хотите просто отобразить список опций с выбранными в администраторе элементами? Если вы пытаетесь использовать это как часть формы (позволяя пользователю изменять проверенные данные), это не правильный плагин или метод для этого. Тем не менее, если вы хотите, чтобы список опций использовался в качестве предварительного фильтра для переписывания запроса, возможно, я вам подберу. Скоро я отредактирую свой пост с этим кодом.
SickHippie

Привет, я, Боб, с другим акк, мне нужны опции бэкэнда для создания своего рода «меню» с ними. Я думаю, что ваш код извлекает сообщения и назначенные им параметры. Мне нужен только список параметров, таких как тот, который появляется на сервере при создании сообщения. Я буду продолжать работать с вашим кодом, чтобы посмотреть, смогу ли я что-нибудь выяснить. Спасибо @SickHippie
Даннинг-Крюгер

Нет, он вытягивает список опций, которые были выбраны из этого флажка - то есть, он говорит: «Вот флажок, есть сообщения, которым были присвоены значения« опция 1 »,« опция 2 »,« опция 4 » и т. д. Он буквально просто вытягивает список meta_value на основе этого meta_key. Он мне нужен для динамического списка, но если вы создали черновой пост, все флажки будут выбраны, он вытянет все опции в массиве для вас. Это массив Я использую foreachциклический переход. Более поздние функции выводят список сообщений через ajax, но я оставил этот бит вне
SickHippie
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.