WordPress PHP htmlspecialchars(get_field... не может читать массивы?

Я работаю над сайтом / блогом WordPress с двумя основными функциями.

  1. Создавайте отчеты.
  2. Составьте итоговый отчет.

Люди могут писать отчеты, выбирать нужные поля и публиковать их. Затем в конце дня они могут "составить" итоговый отчет из всех отчетов (он объединяет поля всех отчетов).

Тема двадцать (если это может быть полезно).

В моем файле function.php я объединяю все для окончательного отчета, используя foreach и такие строки:

$Urgences_Environnementales .= htmlspecialchars("<br/>".get_field('Urgences_Environnementales', $idnumber->ID));
$avezvous_regardé_des_indices_de_temps_violent_aujourdhui .= htmlspecialchars(get_field('avezvous_regardé_des_indices_de_temps_violent_aujourdhui', $idnumber->ID));
$quelle_est_cette_raison .= htmlspecialchars(get_field('quelle_est_cette_raison', $idnumber->ID));

Одна строка на поле, все одинаково. После завершения цикла я обновляю поля:

update_field('Urgences_Environnementales',preg_replace('/(<br[\s]?[\/]?>[\s]*){2,}/', '<br/><br/>', htmlspecialchars_decode($Urgences_Environnementales)), $identificationRapport);
update_field('avezvous_regardé_des_indices_de_temps_violent_aujourdhui',preg_replace('/(<br[\s]?[\/]?>[\s]*){2,}/', '<br/><br/>', htmlspecialchars_decode($avezvous_regardé_des_indices_de_temps_violent_aujourdhui)), $identificationRapport);
update_field('quelle_est_cette_raison',preg_replace('/(<br[\s]?[\/]?>[\s]*){2,}/', '<br/><br/>', htmlspecialchars_decode($quelle_est_cette_raison)), $identificationRapport);

Затем он печатается для окончательного отчета следующим образом (это одно поле):

if(strip_tags(html_entity_decode(get_field('Urgences_Environnementales')))!=''){
   simplebox(strip_tags(html_entity_decode(get_field('Urgences_Environnementales')))!='', get_field('Urgences_Environnementales'));
}

И для тех полей это работает отлично.

Моя проблема заключается в том, что все мои поля, состоящие из массивов (флажки, по которым люди могут выбирать несколько вариантов с помощью плагина ACF), пусты в моей базе данных... Они отлично отображаются в отдельных отчетах, но в конечном отчете они не отображаются.

В качестве примера, вот что я вижу в своей базе данных для одного отчета по одному из моих массивов:

a:4:{i:0;s:49:"L’indice d’intensité d’orage violent (STI)";i:1;s:35:"L’indice d’orage violent (TMPV)";i:2;s:34:"Potential Severe Storm Environment";i:3;s:6:"Autres";}

Соответствующее поле в моем окончательном отчете пусто.

Будет ли у кого-нибудь идея о том, как читать эти массивы и правильно записывать их в моей базе данных? Могу ли я преобразовать их в строки в цикле foreach? Должен ли я сделать что-то по-другому?

Если вам нужно больше кода, не стесняйтесь спрашивать. Я не поместил все свои 3 функции (functions.php, report.php, finalreport.php), которые у меня есть, в мою тему WordPress, так как это заняло бы тонны строк, и я уверен, что самые важные из них прямо здесь. Если я не прав, я мог бы опубликовать функции.

Я искал и искал, но я не могу найти ответ сам, поэтому я ищу здесь помощь.

PS: Это мой первый пост, если у вас есть какие-либо рекомендации, вы можете прислать их мне, и я изменю свой пост.

Большое спасибо за Вашу помощь!

PPS: Я извиняюсь за мой английский, я французский, из Монреаля, Квебек, Канада.

1 ответ

Решение

Расширенные пользовательские поля хранят некоторые значения в виде сериализованных массивов (флажки, повторители и т. Д.). Ваш код предполагает, что вы получите строку назад. Как вы предложили в своем ответе, самый простой способ учесть это в вашем текущем коде - это использовать is_array() метод для проверки типа возвращаемого значения, а затем еще один внутренний цикл для обработки сводки. Этот код предполагает, что вы просто хотите объединить все значения, вы также можете легко использовать другой массив, чтобы убедиться, что они уникальны, и т. Д.

// get the value from acf
$value = get_field( 'Urgences_Environnementales', $idnumber->ID );
// if it's already an array, use that, if not make it into an array with a single element
$value_arr = ( is_array( $value ) )? $value : array( $value );
$text = ""; // reset since this is in a loop
// concatenate each checkbox value
foreach ( $value_arr as $val ){
    $text .= $val . ', ';
}
// append it to the main summary
$Urgences_Environnementales .= htmlspecialchars( "<br/>". $text );
Другие вопросы по тегам