[英]Wordpress: Cannot set ACF repeater field of a post after wp_insert_post
我現在正在使用WordPress高級自定義字段插件: http : //www.advancedcustomfields.com/
然后在自定義的post_type sales_order
上設置中繼器字段rows
:
然后,現在使用腳本插入帖子:
$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 |
正確地。
但是我必須使用純腳本來執行導入工作流,如何解決這個問題?
您正在傳遞field_name
但update_field
需要field_key
如文檔所述update_field
考慮這個例子
update_field('field_568e7aeb22714', array(), $post_id);
最后,我根據來源提出了解決方案。
為什么以下操作失敗?
update_field('rows', array(), $post_id);
現在我們使用的是字段名 ,而不是字段鍵 。
在這種情況下,ACF將執行以下操作:
meta_key
: _rows
的當前帖子元,該元后在字段名之前加一個反斜杠。 meta_value
,它應該是具有像field_XXXXXXX
這樣的格式的字段鍵 現在我們知道,如果我們以這種方式執行wp_insert_post
,則_rows
meta不會生成正確的meta_value
。
因此,如果我們在管理面板中更新帖子,則將提交字段鍵並生成正確的meta_value
。
結論: 只有 meta值的問題。
因此,實際上,我們要做的唯一的事情就是設置在ACF字段集中定義的meta_values綁定到指定的post_type
。
下面的例程可以解決此問題:
// 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);
}
}
}
}
注意,我們遍歷所有定義的ACF帖子,並檢查rule
meta,以確認它是否限制在指定的post_type
。
如果是這樣,循環所有ACF元數據以field_
開頭,並在當前帖子上設置元數據。
全部做完。
$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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.