Как разнести массив с запятыми в ACF Repeater (PHP)

#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—;). Если нет, запятая в пути и продолжайте… если да (конец цикла), точка.

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