【问题标题】:WordPress PHP htmlspecialchars(get_field... cannot read arrays?WordPress PHP htmlspecialchars(get_field...无法读取数组?
【发布时间】:2014-09-05 01:57:22
【问题描述】:

我正在开发一个具有两个主要功能的 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:对不起我的英语,我是法国人,来自加拿大魁北克省蒙特利尔。

【问题讨论】:

  • 我只想说,这是一个写得很好的问题。 :) 干得好!
  • 非常感谢! ^_^

标签: php arrays wordpress advanced-custom-fields twenty-ten-theme


【解决方案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 );

【讨论】:

  • 天哪,谢谢你,它就像一个魅力。我已经尝试过几乎相同的方法,但肯定忘记了一些东西(或几件事),因为它根本不起作用。很抱歉我不能投票给你,因为我需要 15 个代表。再次感谢您,祝您有美好的一天!
  • 很高兴听到!回答问题是一种很好的学习方式,然后在不知不觉中,您就拥有了各种毫无价值的互联网积分:)
猜你喜欢
  • 2015-08-15
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
  • 2014-09-13
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多