ACF - 如何在组内插入转发器行?

时间:2018-01-03 01:17:12

标签: php wordpress advanced-custom-fields

我使用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++;
  }

2 个答案:

答案 0 :(得分:0)

我的情况是你可以在后端看到你的ACF数据。

创建新帖子并使用更新字段时,您需要使用字段键而不是字段名称 -

这是因为它在具有该名称的数据库中没有依据 -

因此在某些情况下,它会将其保存到后端的帖子中,但只有按下“update”或“publish”才能在代码中读取ACF。

在帖子编辑页面上使用浏览器中的检查器查找字段键 - 并在“update_field”中使用该字段。

它将类似于field_xxxxxxxxx - 你需要使用整个东西 -

如果这没有帮助,那么您可能使用错误的数据格式插入子字段。我相信它应该是一个数组的形式。

答案 1 :(得分:0)

目前,我已使用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++;
  }