Функция, которая возвращает значение полей WP ACF (плагин) с групповыми слагами и настраиваемым полем - PullRequest
0 голосов
/ 22 апреля 2020

получается, что у меня есть очень большое количество пользовательских полей, сгруппированных по одному или нескольким полям типа "Группа", потому что мне нужно сделать много конкретных 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» -формат ".

Заранее благодарю за уделенное время.

...