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



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




  1. создание отчетов.

  2. составить окончательный отчет.


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

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



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



$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 функции (функции.php, отчет.php, окончательный отчет.php ), что у меня есть в моей теме WordPress, так как это займет тонны строк, и я уверен, что самые важные из них прямо здесь. Если я ошибаюсь,Я могу разместить функции.



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

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



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



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

726   1  

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 );

Comments

    Ничего не найдено.