Exemple #1
0
 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;
 }
Exemple #2
0
 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;
 }
Exemple #3
0
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']);
}
Exemple #6
0
 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
     }
 }