function update_value($value, $post_id, $field) { // remove acfcloneindex if (isset($value['acfcloneindex'])) { unset($value['acfcloneindex']); } // vars $order = array(); $layouts = array(); // populate $layouts foreach ($field['layouts'] as $layout) { $layouts[$layout['name']] = $layout['sub_fields']; } // update sub fields if (!empty($value)) { // $i $i = -1; // loop through rows foreach ($value as $row) { // $i $i++; // get layout $l = $row['acf_fc_layout']; // append to order $order[] = $l; // loop through sub fields if (!empty($layouts[$l])) { foreach ($layouts[$l] as $sub_field) { // value $v = false; // key (backend) if (isset($row[$sub_field['key']])) { $v = $row[$sub_field['key']]; } elseif (isset($row[$sub_field['name']])) { $v = $row[$sub_field['name']]; } else { // input is not set (hidden by conditioanl logic) continue; } // modify name for save $sub_field['name'] = "{$field['name']}_{$i}_{$sub_field['name']}"; // update field acf_update_value($v, $post_id, $sub_field); } // foreach } // if } // foreach } // if // remove old data $old_order = acf_get_metadata($post_id, $field['name']); $old_count = empty($old_order) ? 0 : count($old_order); $new_count = empty($order) ? 0 : count($order); if ($old_count > $new_count) { for ($i = $new_count; $i < $old_count; $i++) { // get layout $l = $old_order[$i]; // loop through sub fields if (!empty($layouts[$l])) { foreach ($layouts[$l] as $sub_field) { // modify name for delete $sub_field['name'] = "{$field['name']}_{$i}_{$sub_field['name']}"; // delete value acf_delete_value($post_id, $sub_field); } } } } // save false for empty value if (empty($order)) { $order = false; } // return return $order; }
function update_value($value, $post_id, $field) { // remove acfcloneindex if (isset($value['acfcloneindex'])) { unset($value['acfcloneindex']); } // vars $total = 0; // update sub fields if (!empty($value)) { // $i $i = -1; // loop through rows foreach ($value as $row) { // $i $i++; // increase total $total++; // loop through sub fields if (!empty($field['sub_fields'])) { foreach ($field['sub_fields'] as $sub_field) { // value $v = false; // key (backend) if (isset($row[$sub_field['key']])) { $v = $row[$sub_field['key']]; } elseif (isset($row[$sub_field['name']])) { $v = $row[$sub_field['name']]; } else { // input is not set (hidden by conditioanl logic) continue; } // modify name for save $sub_field['name'] = "{$field['name']}_{$i}_{$sub_field['name']}"; // update value acf_update_value($v, $post_id, $sub_field); } // foreach } // if } // foreach } // if // get old value (db only) $old_total = intval(acf_get_value($post_id, $field, true)); if ($old_total > $total) { for ($i = $total; $i < $old_total; $i++) { foreach ($field['sub_fields'] as $sub_field) { // modify name for delete $sub_field['name'] = "{$field['name']}_{$i}_{$sub_field['name']}"; // delete value acf_delete_value($post_id, $sub_field); } // foreach } // for } // if // update $value and return to allow for the normal save function to run $value = $total; // return return $value; }
function delete_field($selector, $post_id = false) { // filter post_id $post_id = acf_get_valid_post_id($post_id); // get field $field = acf_maybe_get_field($selector, $post_id); // delete return acf_delete_value($post_id, $field); }
function delete_value($post_id, $key, $field) { // get old value (db only) $old_order = acf_get_metadata($post_id, $field['name']); // bail early if no rows or no sub fields if (empty($old_order)) { return; } // vars $layouts = array(); // populate $layouts foreach ($field['layouts'] as $layout) { $layouts[$layout['name']] = $layout['sub_fields']; } // loop foreach ($old_order as $i => $l) { // bail early if no layout if (empty($layouts[$l])) { continue; } // loop through sub fields foreach ($layouts[$l] as $sub_field) { // modify name for delete $sub_field['name'] = "{$key}_{$i}_{$sub_field['name']}"; // delete value acf_delete_value($post_id, $sub_field); } } }
function delete_field($selector, $post_id = false) { // filter post_id $post_id = acf_get_valid_post_id($post_id); // get field $field = get_field_object($selector, $post_id, false, false); // delete return acf_delete_value($post_id, $field['name']); }
function delete_value($post_id, $key, $field) { // get old value (db only) $old_total = intval(acf_get_value($post_id, $field, true)); // bail early if no rows or no sub fields if (!$old_total || !$field['sub_fields']) { return; } for ($i = 0; $i < $old_total; $i++) { foreach ($field['sub_fields'] as $sub_field) { // modify name for delete $sub_field['name'] = "{$key}_{$i}_{$sub_field['name']}"; // delete value acf_delete_value($post_id, $sub_field); } // foreach } }