#php #wordpress #advanced-custom-fields
#php #wordpress #дополнительно-пользовательские поля
Вопрос:
У меня есть следующая настройка поля:
welcome_screen (type: group)
title
terms_group (type: group)
terms_text (type: text)
Я пытаюсь получить значение terms_text
.
Вот что у меня есть до сих пор:
<?php
$welcome_screen = get_field('welcome_screen'); // type: group
if($welcome_screen):
$title = $welcome_screen['title'];
while( have_rows('welcome_screen') ): the_row();
$terms_group = $welcome_screen('terms_group'); // nested group
$terms_text = $terms_group['terms_text'];
endwhile;
endif;
echo $terms_text;
?>
В настоящее время, если я echo $terms_text
в while
цикле, я получаю сообщение об ошибке Function name must be a string
в этой строке: $terms_group = $welcome_screen('terms_group');
Я также хочу использовать $terms_text
переменную вне цикла, поэтому интересно, есть ли альтернативный способ достичь того, чего я хочу, без цикла while?
Редактировать:
Я запустил a var_dump
, чтобы проверить вывод:
$welcome_screen = get_field('welcome_screen'); // type: group
echo '<pre>'; var_dump($welcome_screen); echo '</pre>';
Вот результат:
array(3) {
["title"]=>
string(13) "Health Survey"
["standfirst"]=>
string(113) "We just need some answers to some quick health questions about your general health to get you the best treatment."
["terms_group"]=>
array(3) {
["terms_text"]=>
string(41) "By proceeding you agree to the following:"
["terms_listing"]=>
array(2) {
[0]=>
array(1) {
["terms"]=>
string(88) ""
}
[1]=>
array(1) {
["terms"]=>
string(0) ""
}
}
["agree_to_terms_radio"]=>
string(3) "Yes"
}
}
Комментарии:
1. Сразу после
$welcome_screen = get_field('welcome_screen');
этого вы можете добавитьecho '<pre>'; var_dump($welcome_screen); echo '</pre>';
и поделиться выведенным массивом дампа, пожалуйста.2. Привет @joshmoto — Конечно 🙂 Я отредактировал свой вопрос, чтобы продемонстрировать результат
3. почему бы просто не выполнить обычный цикл по массиву?
4. Если вы пытаетесь выйти за
$terms_text
пределыwhile
цикла, кажется, нет причин даже использовать цикл здесь. Почему бы не использовать ключи массива для прямого доступа к данным? Похоже, вы даже не используете цикл для перебора нескольких массивов.
Ответ №1:
Хорошо, классные приветствия за публикацию данных дампа.
Поэтому я не думаю, что вам нужно использовать циклы, вы можете попробовать этот php ниже. Он не тестировался, поэтому вам может потребоваться исправить любые ошибки, если я их допустил.
Я не могу вспомнить, выводит ли acf значения массива, если они не установлены, поэтому вам может потребоваться добавить isset()
некоторые переменные php, чтобы проверить, установлено ли значение.
Смотрите Комментарии в коде…
<?php
// get welcome screen group
$welcome_screen = get_field('welcome_screen');
// check if we have group
if($welcome_screen) {
// output the welcome title
echo $welcome_screen['title'];
// set the terms group
$terms_group = $welcome_screen['terms_group'];
// if terms group is array
if(is_array[$terms_group]) {
// output term group term text
echo $terms_group['terms_text'];
// set term group term listing
$terms_listings = $terms_group['terms_listing'];
// if terms listings is an array
if(is_array($terms_listings)) {
// foreach listings
foreach($terms_listings as $terms_listing) {
// output listing terms
echo $terms_listing['terms'];
}
}
// output term group term agreement
echo $terms_group['agree_to_terms_radio'];
}
}