Wordpress Gravity Forms序列化列表

时间:2013-12-16 20:33:58

标签: php wordpress gravity-forms-plugin

我有一个带有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:"";}

我甚至不知道从哪里开始为一个表单字段组合一个序列化数组,所以非常感谢任何正确方向的轻推。

4 个答案:

答案 0 :(得分:0)

杰森,有人有类似情况https://stackoverflow.com/questions/20591802/how-to-save-comma-separated-inputs-in-gravity-forms-to-a-global-array-on-form-su - 我认为你主题中的functions.php中的类似编辑就是方向...

答案 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即可。