#php #wordpress #while-loop #explode #advanced-custom-fields
#php #wordpress #цикл while #взорваться #дополнительно-пользовательские поля
Вопрос:
ACF Repeater — это плагин для WordPress, который создает пользовательские поля. Мне нужно получить значения, разделенные запятыми, но как это сделать в цикле while?
Это код:
if( get_field('jobtitles') ) {
echo '<strong>Jobs: </strong>';
while ( have_rows('jobtitles') ) : the_row();
echo '<span>'. get_sub_field('jobtitle') .'</span> ';
endwhile;
}
the_row
проходит через подполя основного поля ( job titles
) и получает значения, сохраненные в jobtitle
файлах. Но это повторяется так Medicine Engineering Geography
, и мне нужно Medicine, Engineering, Geography
. Я нашел много способов сделать это, используя foreach
, но ни один из них не используется для while
циклов.
Комментарии:
1. Вы можете рассмотреть возможность размещения этого вопроса на сайте разработчиков WordPress: wordpress.stackexchange.com
2. Я сделал это, и вопрос был отмечен как не по теме.
Ответ №1:
Implode должен работать:
if( get_field('jobtitles') ) {
echo '<strong>Jobs: </strong>';
while ( have_rows('jobtitles') ) : the_row();
$array[] = get_sub_field('jobtitles');
endwhile;
$foo = implode(', ', $array);
echo $foo;
}
Ответ №2:
Будет ли работать explode
и implode
работать?
if( get_field('jobtitles') ) {
echo '<strong>Jobs: </strong>';
while ( have_rows('job titles') ) : the_row();
$jobtitle_array = explode(' ', get_sub_field('jobtitle');
echo '<span>' . implode(', ', $jobtitle_array) .'</span> ';
endwhile;
}
Комментарии:
1. Нет … ничего не возвращайте.
2. Где это происходит в вашем скрипте,
But it echoes like this Medicine Engineering Geography
.3. С помощью echo. На самом деле он возвращает пользовательские поля с этими значениями, так что это будет что-то вроде: <span>Медицина</span> <span>Инженерная</span> <span>география</span>.
4. Хммм. Теперь имеет больше смысла. Но моя голова не может по-настоящему охватить логику API. Надеюсь, кто-то еще это сделает. Вы можете рассмотреть возможность размещения этого вопроса на сайте разработчиков WordPress: wordpress.stackexchange.com
5. Спасибо. Чтобы было более понятно, have_rows является логическим значением. Это описание: «Эта функция проверяет, есть ли в поле какие-либо строки данных для перебора. Это логическая функция «. Поскольку он не проходит по строкам, the_row — это инструмент. «Основное отличие заключается в том, что эта функция (have_rows ) не выполняет пошаговое перемещение по строкам сама по себе, поэтому для пошагового перемещения по строкам вы также должны использовать функцию the_row . Совместное использование have_rows и the_rows предназначено для того, чтобы чувствовать себя родным для идеи have_posts и the_posts «WP loop». »
Ответ №3:
Я нашел способ. Не уверен, правильно ли это, используя два «whiles», но это работает:
if( get_field('jobtitles') ) {
$num_rows = 0;
while ( have_rows('jobtitles') ) : the_row();
$num_rows ;
endwhile;
echo '<strong>Jobs: </strong>';
while ( have_rows('jobtitles') ) : the_row();
$num_rows--;
echo '<span>'. get_sub_field('jobtitle') .'</span>';
if ( $num_rows == 0 ) { echo '.'; }
else { echo ', '; }
endwhile;
}
Первый while дает плюс 1 к переменной $num_rows . Итак, если у меня есть 10 пользовательских полей, цикл завершится как $num_rows = 10. Второй выводит значения, и в каждом цикле он проверяет, уменьшилось ли количество строк ($num_row—;). Если нет, запятая в пути и продолжайте… если да (конец цикла), точка.
Я не знаю, хорошая ли это логика, может быть, мой разум устал, и есть другие более чистые способы. Но, по крайней мере, работает!