我有一个带有Gravity Forms的List字段,用于填充自定义帖子类型中的一些自定义字段。该网站是一个食谱提交网站,我正在寻找用户能够单独添加成分,以获得更好的SEO。我的问题是,当我提交表单时,只有成分下的最后一个输入字段被传递给配方。
我知道我需要一个序列化列表,因为这个自定义字段会拉一个数组,但我完全不知道如何做到这一点。该数组应该读取类似的内容
a:8:{i:0;s:26:"4oz piece of salmon/person";i:1;s:12:"1 egg/person";i:2;s:37:"1-2 multi-colored bell peppers/person";i:3;s:12:"Greek olives";i:4;s:9:"Olive oil";i:5;s:13:"Salt & Pepper";i:6;s:22:"Basil (fresh or dried)";i:7;s:0:"";}
我甚至不知道从哪里开始为一个表单字段组合一个序列化数组,所以非常感谢任何正确方向的轻推。
答案 0 :(得分:0)
答案 1 :(得分:0)
将自定义字段表单字段配置为列表类型并填写表单like this,我将所有成分视为单独的后元项(但都附加到相同的键){{3 }}
这与您所看到的有什么不同,或者您是否想要实现不同的目标?
答案 2 :(得分:0)
不幸的是,Gravity Forms被配置为将它们存储为单独的元记录。一种选择是自定义Gravity Forms forms_model.php
文件create_post
函数,该函数反序列化字段内容并循环遍历每个项目以创建新的post_meta
记录。
以下代码应替换字段类型list
的大小写,并且会阻止在预定义的Gravity Form字段数组上创建单个元记录:
case "list" :
$skipped_list_fields = array('<meta name for field to skip unserializing>',
'<meta name for another field to skip unserializing>');
$value = maybe_unserialize($value);
if (in_array($meta_name, $skipped_list_fields)) {
if(!rgblank($value))
add_post_meta($post_id, $meta_name, $value);
} else {
if(is_array($value)){
foreach($value as $item){
if(is_array($item))
$item = implode("|", $item);
if(!rgblank($item))
add_post_meta($post_id, $meta_name, $item);
}
}
}
break;
答案 3 :(得分:0)
在创建/编辑表单时,使用“高级字段”区域中的“列表”字段类型。该数据已经序列化并在单个字段中保存为数组。只需使用gform_after_submission挂钩将GF字段保存为postmeta即可。