получается, что у меня есть очень большое количество пользовательских полей, сгруппированных по одному или нескольким полям типа "Группа", потому что мне нужно сделать много конкретных c модификаций, прежде чем показывать эти поля во внешнем интерфейсе WP, я Я видел себя в необходимости получить различные значения CFS в ACF L oop. Проблема в том, что при использовании Loops генерируется много кода, и я хотел уменьшить его, просто делая разные вызовы (с разными аргументами) для функции, которая генерирует каждую часть содержимого и возвращает свое должное значение.
В заключение я хочу сделать функцию, просто передавая хотя бы такие аргументы, как:
- Иерархически упорядоченный массив (поскольку они являются группами, содержащимися друг в друге) групповых слагов.
- Массив слагов CF, которые содержатся в последней группе, упомянутой в массиве групп.
Функция выполняет L oop внутри нее, объединяет значения в той же переменной и когда Finish возвращает переменную типа String, которая содержит текст, полученный в результате получения значений CF, упомянутых в массиве (по очевидным причинам эти CF должны принадлежать последней группе, указанной в массиве Groups).
Я попробовал это несколькими способами, например, установив foreach для итерации grou ps и CF, заставляя функцию вызывать себя до тех пор, пока не будет достигнут окончательный индекс двух массивов (Group Slugs и CF's Slugs); но всегда есть что-то, что не работает на 100%. Последнее, что я попробовал, - это итерацию массивов с помощью циклов «Do While», но, к сожалению, это было хуже, потому что теперь ничего не показывает. Я подозреваю, что это проблема в моей логике c, и я заметил, что в других случаях проблема заключалась в том, что выполнение возврата функции прерывает все циклы, и я не знаю, как ее решить.
Ниже я поделюсь своим кодом, я надеюсь, что вы можете дать мне хорошую руку, так как я определенно сдаюсь, я застрял в течение длительного времени в той же проблеме.
function lgroupf($agroups, $acfs, $label=false, $theader='', $object=false){
do {
$group = current($agroups);
if ( have_rows($group) ):
while ( have_rows($group) ):
$notlast = next($agroups);
if ($notlast):
the_row();
else:
the_row();
$out1 = $theader?"<b>$theader</b><br>":'';
do {
$ncf = current($acfs);
if (get_sub_field($ncf)):
$vcf = $object?get_sub_field_object($ncf):get_sub_field($ncf);
$nlabel = $label?key($acfs):false;
$out1.= $nlabel?"<b>$nlabel</b>: $vcf<br>":"$vcf<br>";
endif;
$notcf = next($acfs);
} while ($notcf);
return $out1;
endif;
endwhile;
endif;
} while ($notlast);
}
echo lgroupf(['Mediainfo', 'mis-general'], ['ID Codec' => 'misg-id_codec', 'Content Format' => 'misg-formato'], false, 'MEDIA', false);
Для этого случая у меня есть поле типа «Группа» со слагом «Mediainfo», внутри которого есть еще одна группа со слагом «mis-general», и внутри него есть 2 CF-содержания, идентифицированные с помощью слагов «misg-id_code c» и «misg» -формат ".
Заранее благодарю за уделенное время.