将数组保存到高级自定义字段WordPress

时间:2013-04-26 18:50:30

标签: wordpress custom-fields

我正在使用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 stringsURL's(每个人都有一个身份证号码),也需要与同一个帖子相关联。我需要能够在text string帖子页面上将每组URLsingle.php输出到他们自己的div中。现在,理想情况下,这些文本/ url对将保存在单个数组中,因此我可以循环遍历数组并输出数据,但看起来ACF不想让这种情况发生?

有关如何保存此数据然后在single.php页面上轻松输出的任何建议?每组结果都会有ID(数字),text stringurl

谢谢!

2 个答案:

答案 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种类型的数据类型,URLIDSTRING。 所有3(应该)都有可能不同的验证方案,我怀疑htmlspecialchars()部分属于URL

另一种解决方案是在ACF设置中找到正确的数据字段,或者为每个字段使用不同的字段,然后只使用implode()explode()函数将它们一起显示。

答案 1 :(得分:2)

Yo可以使用json_encode($ your_array)和json_decode()来保存数组以恢复它。这也适用于关联数组。