Wordpress:无法在wp_insert_post之后设置帖子的ACF转发器字段

时间:2016-01-15 14:34:10

标签: php wordpress wordpress-plugin advanced-custom-fields

我现在正在使用 WordPress高级自定义字段插件:http://www.advancedcustomfields.com/

我在自定义 post_type rows上设置了转发器字段sales_order

然后,现在使用脚本插入帖子:

$post_id = wp_insert_post(array(
    'post_title' => $title,
    'post_name' => $slug,
    'post_content' => $content,
    'post_type' => 'sales_order',
    'post_status' => 'publish',
));

但是当我这样做时:

update_field('rows', array(), $post_id);

没有效果。

但是,如果我先在管理面板中手动保存帖子,然后调用update_field方法,则可以。

所以,我试图窥探wp_postmeta数据库表,我发现如果我使用脚本调用wp_insert_post,该帖子不会生成元

| meta_key | meta_value          |
|----------|---------------------|
| _rows    | field_568e7aeb22714 |

正确。

但我必须使用纯脚本执行导入工作流程,我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

您正在传递Testt3.equals(t3);需要equals,因为文档说update_field

考虑这个例子

equals(Test testje)

答案 1 :(得分:0)

最后我根据消息来源提出了解决方案。

原因:

为什么以下操作失败?

update_field('rows', array(), $post_id);

现在我们使用字段名称,而不是字段键

在这种情况下,ACF会执行以下操作:

  1. 尝试找到当前的帖子元组meta_key_rows,它在字段名称之前加上一个低于斜杠。
  2. 之后,获取meta_value,它应该是字段键,其格式为field_XXXXXXX
  3. 使用已建立的 field_key 更新字段。
  4. 现在我们知道,如果我们wp_insert_post _rows这样做,meta_value元素就无法生成正确的meta_value

    因此,如果我们在管理面板中更新帖子,则会提交字段键并生成正确的post_type

      

    结论:只有 THAT 元值很重要。

    解决方案:

    所以,实际上,我们应该做的更多事情就是设置在ACF字段集中定义的meta_values绑定到指定的// The current post_type to search $post_type = 'sales_order'; $post_id = wp_insert_post(array( 'post_title' => $title, 'post_name' => $slug, 'post_content' => $content, 'post_type' => $post_type, 'post_status' => 'publish', )); foreach (get_posts(array('post_type' => 'acf', 'posts_per_page' => -1)) as $acf) { $meta = get_post_meta($acf->ID); $rule = unserialize($meta['rule'][0]); if($rule['param'] == 'post_type' && $rule['operator'] == '==' && $rule['value'] == $post_type) { foreach($meta as $key => $field) { if(substr($key, 0, 6) == 'field_') { $field = unserialize($field[0]); update_post_meta($post_id, '_'.$field['name'], $key); } } } }

    下面的例程解决了这个问题:

    rule

    请注意,我们会遍历所有已定义的ACF帖子,并检查post_type元,以确认它是否与指定的field_绑定。

    如果是这样,请将所有ACF元数以for开头,并在当前帖子上设置元数据。

    全部完成。

答案 2 :(得分:0)

$i = 0; //for metakey
$j=0; //files Count

foreach($files as $fileid){
    $j++;
    $meta_key = 'files_'.$i.'_file';
    //"files" repeater main name and "file" subname ;
    update_post_meta($post_id,$meta_key,$fileid);
    $i++;

}
update_post_meta($post_id,'files',$j);