Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
474 views
in Technique[技术] by (71.8m points)

php - Import ACF Repeater Field Values from CSV

I'm trying to import a load of data into a sub fields of a repeater field (mortgage_providers) using file field (dd_csv) to upload the file to a post and return an array. Then loop through each row with PHP and update the repeater fields. I have tried the following but I can't seem to get it to work.

      if( get_field('dd_csv') ) {
        // load csv with SERVER PATH instead of URL
        $csv = get_attached_file(get_field('dd_csv')['id']);
        if(($handle = fopen($csv, "r")) !== FALSE) {
          $count = 0;
          while(($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            // $count = acf row, $data[0] = csv column 1 value
            update_sub_field(array('mortgage_providers', $count, 'mortgage_provider_name'), $data[0], 'option');
            $count++;
          }

          fclose($handle);
        }
      }

Here's a sample of the data:

  • at symbol Sipp
  • 012 Property Shares
  • 121 Legals
  • 1st Source Direct
  • 1st Stop Finance
  • 33 KWS
  • 3i
  • 3M
  • 3mc
  • 3XD
  • 5 Arrows
  • AA Commercial Insurance
  • AIG
  • A1 Lender not relevant
  • AA Friendly Society
  • AA Insurance
  • Abacus
  • ...

In total there's over 1000 rows in column 1 of the CSV.

Thanks


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

I would hook into the on save action:

<?php

add_action( 'save_post', 'prefix_check_files', 10, 3 );

function prefix_check_files( $post_id, $post, $update ) {
if( get_field('dd_csv', $post_id) ) {
  // load csv with SERVER PATH instead of URL
  $csv = get_attached_file(get_field('dd_csv', $post_id)['id']);
  if(($handle = fopen($csv, "r")) !== FALSE) {
    $count = 0;
    while(($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
      // $count = acf row, $data[0] = csv column 1 value
      update_sub_field(array('mortgage_providers', $count, 'mortgage_provider_name'), $data[0], 'option');
      $count++;
    }
    fclose($handle);
  }
}
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...