I’m working with WP All Import and Advanced Custom Fields (ACF). I need help ensuring that when importing data, a new row is added to a repeater field without overwriting existing rows.
Here’s the specific scenario:
I have a parent repeater field called sellers with the following subfields:
company (Merchant name)
price (Price)
link (Link)
During the import, I need to:
Check if the value of company matches the incoming {company_name[1]} from the record.
If it already exists, do nothing.
If it doesn’t exist, add a new row to the repeater field with the following values
bedrijf = {company_name[1]}
prijs = {search_price[1]}
link = {y_link[1]}
Currently, the import overwrites the entire repeater field, removing existing rows, which I need to avoid.
I tried:
add_action('pmxi_saved_post', function($post_id, $xml_data, $import_id) {
if (get_post_type($post_id) !== 'product') return;
$selector = 'sellers';
$subfield1 = 'company';
$subfield2 = 'prijs';
$subfield3 = 'link';
$merchant_name = $xml_data['company_name'][1] ?? '';
$search_price = $xml_data['search_price'][1] ?? '';
$aw_deep_link = $xml_data['company_name'][1] ?? '';
if (empty($merchant_name)) return;
$existing_rows = get_field($selector, $post_id) ?: [];
foreach ($existing_rows as $row) {
if ($row[$subfield1] === $merchant_name) return;
}
$existing_rows[] = [
$subfield1 => $company_name,
$subfield2 => $search_price,
$subfield3 => $y_link,
];
update_field($selector, $existing_rows, $post_id);
}, 10, 3);
But I am not able to get it to work.