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.phpreport.phpfinalreport.php)放在我的WordPress主题中,因为它会占用大量的行,我很确定最重要的都在这里。如果我错了,我可以张贴函数。

我搜索了又搜索,但我似乎自己找不到答案,所以我在这里寻求帮助。

PS:这是我的第一个帖子,如果你有任何建议,你可以发给我,我会改变我的帖子。

非常感谢你的帮助!

PPS:很抱歉我的英语不好,我是法国人,来自加拿大蒙特利尔。

Advanced Custom Fields将一些值存储为序列化数组(复选框,中继器等)。您的代码假设您将返回一个字符串。正如您在回答中建议的那样,在当前代码中解释这一点的最简单方法是使用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 );

最新更新