我使用wp_insert_post()以编程方式创建帖子。我的帖子正在成功创建。我也在使用高级自定义字段。我正在尝试使用update_field()和update_sub_field()命令将内容插入新帖子的转发器字段,但无济于事。在某些情况下,我可以插入数据,但然后使用get_field('field_name', $post_id)
检索它返回空。
我错过了什么或者我是否将数据插入错误的位置?
我的田野组可以看到here.
我试过了:
update_field( 'system_preset_1_inverter_group', 'test_data' , $new_quote_id );
update_sub_field( array('system_preset_1_inverter_group', 1, 'inverter'), 'test_data' , $new_quote_id );
update_sub_field( array('system_preset_1', 1, 'inverter_group', 1, 'inverter'), 'test_data' , $new_quote_id );
注意:这样做很好,但它不是组或转发器字段的一部分:
update_field( 'preset_or_custom' , $systems_preset , $new_quote_id );
我也试过这个:
// Inverters
$preset_1_flag = 1;
foreach ( $system_preset_1_inverters as $insert_inverter_1 ) {
update_field( 'system_preset_1_inverter_group_' . $preset_1_flag . '_inverter' , $system_preset_1_inverter_brand . ' ' . $insert_inverter_1, $new_quote_id );
$preset_1_flag++;
}
我很高兴用任何进一步的必要代码扩展这一点。
// 1) Savings TAB
$savings_1 = 'Yes';
$savings_2 = 'Quarterly';
$savings_3 = 333;
$savings_4 = 'select';
$savings_5 = $wud_system_size;
$savings_6 = 35;
$savings_7 = 0.8;
$savings_8 = 0.38;
$savings_9 = 0.12;
$savings_10 = $data['fields'][128]['value'];
$savings_11 = $data['fields'][129]['value'];
// 2) Systems TAB
$systems_preset = 'Preset';
$systems_size = $wud_system_size;
$default_inverters = get_field('inverters', 'options');
$default_brands = $default_inverters['default_inverter_brands'];
// This function returns an array of inverters.
$system_preset_1_inverters = \Roots\Sage\CPT_Solar\solar_quote_choose_string_inverter( 1, $systems_size );
$system_preset_1_inverter_brand = $default_brands['brand_1'];
$system_preset_1_panels = $default_panels;
$system_preset_1_no_panels = ceil($systems_size * 1000 / $default_panel_wattage[1]);
$system_preset_2_inverters = \Roots\Sage\CPT_Solar\solar_quote_choose_string_inverter( 2, $systems_size );
$system_preset_2_inverter_brand = $default_brands['brand_2'];
$system_preset_2_panels = $default_panels;
$system_preset_2_no_panels = ceil($systems_size * 1000 / $default_panel_wattage[1]);
$system_preset_3_inverters = '0.27'; // TBA
$system_preset_3_inverter_brand = $default_brands['brand_3'];
$system_preset_3_panels = $default_panels;
$system_preset_3_no_panels = ceil($systems_size * 1000 / $default_panel_wattage[1]);
// Insert the post into the database
$new_quote_id = wp_insert_post( array(
"post_title" => 'QID-temp',
"post_content" => '',
"post_type" => 'solar_quote',
"post_status" => "publish"
));
$the_quote['post_title'] = 'QID-' . $new_quote_id;
$the_quote['ID'] = $new_quote_id;
// Update post title.
wp_update_post( $the_quote );
// =========================
// Update the post with all relevant details below.
// =========================
// THESE ALL SEEM TO WORK FINE.
// 1) Update Savings Tab
update_field( 'calculate_savings_system_size' , $savings_1 , $new_quote_id );
update_field( 'electricity_bill_frequency' , $savings_2 , $new_quote_id );
update_field( 'electricity_bill_amount' , $savings_3 , $new_quote_id );
update_field( 'system_size_recommendation' , $savings_4 , $new_quote_id );
update_field( 'selected_system_size' , $savings_5 , $new_quote_id );
update_field( 'percentage_time_home' , $savings_6 , $new_quote_id );
update_field( 'daily_supply_charge' , $savings_7 , $new_quote_id );
update_field( 'rate_of_power' , $savings_8 , $new_quote_id );
update_field( 'feed_in_tariff' , $savings_9 , $new_quote_id );
update_field( 'savings_from' , $savings_10 , $new_quote_id );
update_field( 'savings_to' , $savings_11 , $new_quote_id );
// THIS ISN'T WORKING
// Inverters
$preset_1_flag = 1;
foreach ( $system_preset_1_inverters as $insert_inverter_1 ) {
update_field( 'system_preset_1_inverter_group_' . $preset_1_flag . '_inverter' , $system_preset_1_inverter_brand . ' ' . $insert_inverter_1, $new_quote_id );
$preset_1_flag++;
}
我的情况是你可以在后端看到你的ACF数据。
创建新帖子并使用更新字段时,您需要使用字段键而不是字段名称 -
这是因为它在数据库中没有引用该名称 -
因此在某些情况下,它会将其保存到后端的帖子中,但只有当您按“更新”或“发布”时,ACF才能在代码中读取。
在帖子编辑页面上使用浏览器中的检查器查找字段键 - 并在“update_field”中使用该键。
这将是像field_xxxxxxxxx - 你需要使用整个东西 -
如果这没有帮助,那么您可能使用错误的数据格式来插入子字段。我相信它应该是一个数组的形式。
目前,我已使用update_post_meta()管理了一种解决方法。它并不理想,但它通过手动将字段映射到字段键来工作。
update_post_meta( $new_quote_id, '_system_preset_1', 'field_5a0920031ad52');
update_post_meta( $new_quote_id, 'system_preset_1', '' );
update_post_meta( $new_quote_id, '_system_preset_1_inverter_group', 'field_5a138f6da9073');
update_post_meta( $new_quote_id, 'system_preset_1_inverter_group', count($system_preset_1_inverters));
$preset_1_flag = 0;
foreach ( $system_preset_1_inverters as $insert_inverter_1 ) {
update_post_meta( $new_quote_id, 'system_preset_1_inverter_group_' . $preset_1_flag . '_inverter', $system_preset_1_inverter_brand . ' ' . $insert_inverter_1);
update_post_meta( $new_quote_id, '_system_preset_1_inverter_group_' . $preset_1_flag . '_inverter', 'field_5a0920031ad53');
$preset_1_flag++;
}