我正在使用ACF plugin用于WordPress。我通过我的主题以编程方式发布到自定义帖子类型。现在,我认为我可以很容易地将一系列项目保存到自定义字段,但每当我尝试时,都没有任何输入。当我检查管理区域中的帖子屏幕时,我只是收到此错误:
Warning: htmlspecialchars() expects parameter 1 to be string, array given in /home/lukeseag/public_html/spidr-wp/wp-content/plugins/advanced-custom-fields/core/fields/text.php on line 127
现在,我有点把它扔到那里寻求关于如何解决这个问题的建议。
为了给出一些上下文,我以编程方式保存用户输入的数据,并用它创建一个帖子。大部分数据都是简单的字符串和数字,每个数据都有自己的自定义字段。
但是,我有一个未知数量的text strings
和URL's
(每个人都有一个身份证号码),也需要与同一个帖子相关联。我需要能够在text string
帖子页面上将每组URL
和single.php
输出到他们自己的div中。现在,理想情况下,这些文本/ url对将保存在单个数组中,因此我可以循环遍历数组并输出数据,但看起来ACF不想让这种情况发生?
有关如何保存此数据然后在single.php
页面上轻松输出的任何建议?每组结果都会有ID
(数字),text string
和url
。
谢谢!
答案 0 :(得分:2)
这正是所有"frameworks"
通常为more pain than gain
的原因。它们的设计看起来对于懒惰是灵活的,但是它们总是在一个真实案例场景中证明是无用的,它比没有它们时实际上很容易实现的任何东西都复杂一些。
无论如何,至于你的问题。
问题是你传递数组而不是字符串。
我不会去调试插件,无论如何,需要更多代码和信息,所以我只给你一个可能的简单解决方案,就是这样编写一个pseudo-array string
:
'ID|URL|STRING'
请注意,分隔符管道(|)只是一个示例,您可以使用(,
)(:
)(#
)或其他。
:
$url = 'http://myurl.url/something';
$id = 35;
$string = 'my string';
$pseudo_r = $id . '|' . $url . '|' . $string . '|'; // results in 'ID|URL|STRING';
或者您可以使用implode()
功能
$pseudo_r = array(
"url" => $url,
"id" => $id ,
"string" => $string
);
$pseudo_r = implode("|", $pseudo_r); // gives a string
并将其作为字符串传递,稍后您可以使用explode()
对其进行分解,如下所示:
$pseudo_r = explode( '|', $pseudo_r ); // gives back the original array
(请注意,现在数组已经是NON ASSOCIATIVE
了。)
现在,既然你提到其中每一个都是set
,你可以使用不同的分隔符从集合中构成相同的伪数组。
这可能对您有用,但essentially it is wrong
。
为什么会出错?
因为这是一个通用且有点 hackish 的解决方案,实际上忽略了您的数据类型。
您混合了3种类型的数据类型,URL
,ID
和STRING
。
所有3(应该)都有可能不同的验证方案,我怀疑htmlspecialchars()
部分属于URL
。
另一种解决方案是在ACF设置中找到正确的数据字段,或者为每个字段使用不同的字段,然后只使用implode()
和explode()
函数将它们一起显示。
答案 1 :(得分:2)
Yo可以使用json_encode($ your_array)和json_decode()来保存数组以恢复它。这也适用于关联数组。