我正在使用WordPress的ACF plugin。我通过我的主题以编程的方式发布到一个自定义的post类型。现在,我认为我可以很容易地将一组项保存到自定义字段中,但是每当我尝试这样做时,都没有得到任何输入。当我在管理区域检查post屏幕时,我只是得到了这个错误:
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
现在,我想就如何解决这个问题提出一些建议。
为了给出一些上下文,我以编程方式保存用户输入的数据,并用它创建一个post。大部分数据都是简单的字符串和数字,每个字符串和数字都可以有自己的自定义字段。
但是我有一个未知数量的text strings
和URL's
(每个都有一个id号码)通过这个页面,这需要链接到相同的帖子。我需要能够输出每一组text string
和URL
到他们自己的single.php
post页面上的目录。现在,理想情况下,这些文本/url对应该保存在一个单独的数组中,这样我就可以循环遍历该数组并输出数据,但是看起来ACF不想让这种情况发生?
关于如何保存此数据并将其轻松地输出到single.php
页面,有什么建议吗?每组结果都有编号( ID
)、编号( text string
)和编号( url
)。
谢谢!
发布于 2013-04-27 09:55:25
这就是为什么所有这些"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
。
为什么这是错的?
因为这是一个通用的、有点黑客的解决方案,实际上忽略了您的数据类型。您混合了3种类型的数据类型:URL
、ID
和STRING
。这3个(应该)都可能有不同的验证方案,我怀疑htmlspecialchars()
部件属于URL
。
另一种解决方案是在ACF设置中找到正确的数据字段,或者为每个字段使用不同的字段,然后使用implode()
和explode()
函数一起显示它。
发布于 2013-07-25 00:27:58
Yo可以使用json_encode($your_array)和json_decode()保存阵列以恢复它。这也适用于关联数组。
https://stackoverflow.com/questions/16243309
复制相似问题