WordPress PHP htmlspecialchars(get_field... не может читать массивы?
Я работаю над сайтом / блогом WordPress с двумя основными функциями.
- Создавайте отчеты.
- Составьте итоговый отчет.
Люди могут писать отчеты, выбирать нужные поля и публиковать их. Затем в конце дня они могут "составить" итоговый отчет из всех отчетов (он объединяет поля всех отчетов).
Тема двадцать (если это может быть полезно).
В моем файле 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 );