function acf_views_render_fields($post_id = 0, $fields, $el = 'div', $instruction = 'label')
{
    // bail early if no fields
    if (empty($fields)) {
        return false;
    }
    // remove corrupt fields
    $fields = array_filter($fields);
    //Load all the values first
    foreach ($fields as &$ref_field) {
        // load value
        if ($ref_field['value'] === null) {
            $ref_field['value'] = acf_get_value($post_id, $ref_field);
        }
    }
    $hiding_fields = false;
    // loop through fields
    foreach ($fields as $field) {
        // load value
        if ($field['value'] === null) {
            $field['value'] = acf_get_value($post_id, $field);
        }
        // set prefix for correct post name (prefix + key)
        $field['prefix'] = 'acf';
        // render
        $show_field = true;
        if (!empty($field['conditional_logic'])) {
            $show_field = ACF_Views_Conditional_Logic::show_field($field, $fields);
        }
        if ($field['type'] == 'tab') {
            if (!$show_field) {
                $hiding_fields = true;
            } else {
                $hiding_fields = false;
            }
        }
        if (!$hiding_fields) {
            if ($show_field) {
                if ($field['type'] == 'repeater') {
                    $x = 1;
                }
                acf_views_render_field_wrap($field, $el, $instruction);
            }
        }
    }
}
Example #2
0
function acf_render_fields($post_id = 0, $fields, $el = 'div', $instruction = 'label')
{
    if (!empty($fields)) {
        foreach ($fields as $field) {
            // load value
            if ($field['value'] === null) {
                $field['value'] = acf_get_value($post_id, $field);
            }
            // set prefix for correct post name (prefix + key)
            $field['prefix'] = 'acf';
            // render
            acf_render_field_wrap($field, $el, $instruction);
        }
    }
}
 function load_value($value, $post_id, $field)
 {
     $fields = array();
     foreach ($field['sub_fields'] as $sub_field) {
         $sub_field_name = $sub_field['name'];
         // update prefix to allow for nested values
         $sub_field['prefix'] = $field["name"];
         $sub_field['name'] = "{$field['name']}_{$sub_field_name}";
         // load value
         if ($sub_field['value'] === null) {
             $sub_field['value'] = acf_format_value(acf_get_value($post_id, $sub_field), $post_id, $sub_field);
         }
         $fields[$sub_field_name] = $sub_field['value'];
     }
     return $fields;
 }
function get_field_object($selector, $post_id = false, $format_value = true, $load_value = true)
{
    // complete loading
    acf()->complete();
    // compatibilty
    if (is_array($format_value)) {
        $format_value = acf_parse_args($format_value, array('format_value' => true, 'load_value' => true));
        extract($format_value);
    }
    // vars
    $override_name = false;
    // filter post_id
    $post_id = acf_get_valid_post_id($post_id);
    // load field reference if not a field_key
    if (!acf_is_field_key($selector)) {
        $override_name = $selector;
        $selector = acf_get_field_reference($selector, $post_id);
    }
    // get field key
    $field = acf_get_field($selector);
    // bail early if no field found
    if (!$field) {
        return false;
    }
    // override name?
    // This allows the $selector to be a sub field (images_0_image)
    if ($override_name) {
        $field['name'] = $override_name;
    }
    // load value
    if ($load_value) {
        $field['value'] = acf_get_value($post_id, $field);
    }
    // format value
    if ($format_value) {
        // get value for field
        $field['value'] = acf_format_value($field['value'], $post_id, $field);
    }
    // return
    return $field;
}
Example #5
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
     }
 }
        function display_field_column($column, $post_id)
        {
            if (isset($this->column_fields[$column])) {
                $field = $this->column_fields[$column];
                switch ($field['type']) {
                    case 'file':
                        $value = acf_get_value($post_id, $field);
                        if (!is_null($value) && !empty($value)) {
                            $file = get_post($value);
                            printf(__('Edit: <a href="%s">%s</a>', 'acf-quick-edit-fields'), get_edit_post_link($value), $file->post_title);
                        }
                        break;
                    case 'image':
                        $image_id = get_field($field['key']);
                        if ($image_id) {
                            if (is_array($image_id)) {
                                // Image field is an object
                                echo wp_get_attachment_image($image_id['id'], array(80, 80));
                            } else {
                                if (is_numeric($image_id)) {
                                    // Image field is an ID
                                    echo wp_get_attachment_image($image_id, array(80, 80));
                                } else {
                                    // Image field is a url
                                    echo '<img src="' . $image_id . '" width="80" height="80" />';
                                }
                            }
                        }
                        break;
                    case 'select':
                    case 'radio':
                    case 'checkbox':
                        $field_value = get_field($field['key']);
                        $values = array();
                        foreach ((array) $field_value as $value) {
                            $values[] = isset($field['choices'][$value]) ? $field['choices'][$value] : $value;
                        }
                        $output = implode(__(', ', 'acf-quick-edit-fields'), $values);
                        if (empty($output)) {
                            $output = __('(No value)', 'acf-quick-edit-fields');
                        }
                        echo $output;
                        break;
                    case 'true_false':
                        echo get_field($field['key']) ? __('Yes') : __('No');
                        break;
                    case 'color_picker':
                        $value = get_field($field['key']);
                        if ($value) {
                            echo '<div class="color-indicator" style="border-radius:2px;border:1px solid #d2d2d2;width:26px;height:20px;background-color:' . $value . '"></div>';
                        } else {
                            _e('(No value)', 'acf-quick-edit-fields');
                        }
                        break;
                    case 'number':
                        $value = get_field($field['key']);
                        if ($value === "") {
                            _e('(No value)', 'acf-quick-edit-fields');
                        } else {
                            echo number_format_i18n($value, strlen(substr(strrchr($value, "."), 1)));
                        }
                        break;
                    case 'textarea':
                        ?>
<pre><?php 
                        the_field($field['key']);
                        ?>
</pre><?php 
                        break;
                    default:
                        the_field($field['key']);
                        break;
                }
            }
        }
Example #7
0
 function load_value($value, $post_id, $field)
 {
     // bail early if no value
     if (empty($value) || empty($field['layouts'])) {
         return $value;
     }
     // value must be an array
     $value = acf_get_array($value);
     // vars
     $rows = array();
     // populate $layouts
     $layouts = array();
     foreach (array_keys($field['layouts']) as $i) {
         // get layout
         $layout = $field['layouts'][$i];
         // append to $layouts
         $layouts[$layout['name']] = $layout['sub_fields'];
     }
     // loop through rows
     foreach ($value as $i => $l) {
         // append to $values
         $rows[$i] = array();
         $rows[$i]['acf_fc_layout'] = $l;
         // bail early if layout deosnt contain sub fields
         if (empty($layouts[$l])) {
             continue;
         }
         // get layout
         $layout = $layouts[$l];
         // loop through sub fields
         foreach (array_keys($layout) as $j) {
             // get sub field
             $sub_field = $layout[$j];
             // update full name
             $sub_field['name'] = "{$field['name']}_{$i}_{$sub_field['name']}";
             // get value
             $sub_value = acf_get_value($post_id, $sub_field);
             // add value
             $rows[$i][$sub_field['key']] = $sub_value;
         }
         // foreach
     }
     // foreach
     // return
     return $rows;
 }
Example #8
0
 function load_value($value, $post_id, $field)
 {
     // bail early if no sub fields
     if (empty($field['sub_fields'])) {
         return $value;
     }
     // modify
     $field = $this->prepare_field_for_save($field);
     // load sub fields
     $value = array();
     // loop
     foreach (array_keys($field['sub_fields']) as $i) {
         // get sub field
         $sub_field = $field['sub_fields'][$i];
         // get value
         $sub_value = acf_get_value($post_id, $sub_field);
         // add value
         $value[$sub_field['key']] = $sub_value;
     }
     // return
     return $value;
 }
 /**
  * Extract translatable items from the $field_group
  *
  * Supported Field Types:
  * - Basic
  *   - text
  *   - textarea
  *   - number
  *   - email
  *   - url
  *   - password
  * - Content
  *   - wysiwyg
  *   - oembed
  *   - image
  *   - file
  *   - gallery (pro)
  * - Choice
  *   - select
  *   - checkbox
  *   - radio
  *   - true_false
  * - Relational
  *   - post_object
  *   - page_link
  *   - relationship
  *   - taxonomy
  *   - user
  * - jQuery
  *   - google_map
  *   - date_picker
  *   - color_picker
  * - Layout
  *   - message
  *   - tab
  *   - repeater (pro)
  *   - flexible_content (pro)
  *
  * Unsupported Field Types:
  * - N/A
  *
  * @todo    Register custom locations, fields, and field types.
  *
  * @param   mixed        $field_group
  * @param   array        $data
  * @param   string|bool  $sub_fields
  * @return  array        $data
  */
 protected function _extract_strings($field_group, &$data = [], $sub_fields = false)
 {
     $is_options_group = $this->is_options_group($field_group);
     if ($sub_fields) {
         $fields = isset($field_group['sub_fields']) ? $field_group['sub_fields'] : $field_group;
         $_prefix = is_string($sub_fields) ? $sub_fields : '';
     } else {
         $group_keys = $this->_get_group_keys();
         $this->pluck_strings($field_group, $group_keys, $data);
         $fields = $field_group['fields'];
         $_prefix = '';
     }
     if (!empty($fields)) {
         $field_keys = $this->_get_field_keys();
         foreach ($fields as $i => $field) {
             $prefix = $_prefix . $field['key'] . '.';
             $value_keys = $this->_get_value_keys($field);
             $this->pluck_strings($field, $field_keys, $data, $prefix);
             if ($is_options_group) {
                 if ($field['value'] === null) {
                     $field['value'] = acf_get_value('options', $field);
                 }
                 $this->pluck_strings($field, $value_keys, $data, $prefix);
             }
             $prefix = '';
             switch ($field['type']) {
                 case 'text':
                 case 'textarea':
                 case 'number':
                 case 'email':
                 case 'url':
                 case 'password':
                 case 'select':
                     if (isset($field['placeholder']) && '' != $field['placeholder']) {
                         $data[$_prefix . $field['key'] . '.placeholder'] = ['string' => $field['placeholder'], 'multiline' => 'textarea' === $field['type']];
                     }
                 case 'text':
                 case 'textarea':
                 case 'number':
                 case 'email':
                 case 'url':
                 case 'password':
                     $affix_keys = $this->_get_affix_keys();
                     foreach ($affix_keys as $key) {
                         if (isset($field[$key]) && '' != $field[$key]) {
                             $data[$_prefix . $field['key'] . '.' . $key] = ['string' => $field[$key], 'multiline' => false];
                         }
                     }
                     break;
                 case 'true_false':
                 case 'message':
                     if (isset($field['message']) && '' != $field['message']) {
                         $data[$_prefix . $field['key'] . '.message'] = ['string' => $field['message'], 'multiline' => true];
                     }
                 case 'select':
                 case 'checkbox':
                 case 'radio':
                 case 'true_false':
                     if (!empty($field['choices'])) {
                         foreach ($field['choices'] as $j => $choice) {
                             $prefix = $_prefix . $field['key'] . '.choices.' . $j;
                             $data[$prefix] = ['string' => $choice, 'multiline' => false];
                         }
                     }
                     break;
                 case 'google_map':
                     $location_keys = $this->_get_location_keys();
                     foreach ($location_keys as $key) {
                         if (isset($field[$key]) && '' != $field[$key]) {
                             $data[$_prefix . $field['key'] . '.' . $key] = ['string' => $field[$key], 'multiline' => false];
                         }
                     }
                     break;
                 case 'date_picker':
                     $date_keys = $this->_get_date_keys();
                     foreach ($date_keys as $key) {
                         if (isset($field[$key]) && '' != $field[$key]) {
                             $data[$_prefix . $field['key'] . '.' . $key] = ['string' => $field[$key], 'multiline' => false];
                         }
                     }
                     break;
                 case 'repeater':
                 case 'flexible_content':
                     if (isset($field['button_label']) && '' != $field['button_label']) {
                         $data[$_prefix . $field['key'] . '.button_label'] = ['string' => $field['button_label'], 'multiline' => false];
                     }
                 case 'repeater':
                     if (!empty($field['sub_fields'])) {
                         $prefix = $_prefix . $field['key'] . '.sub_fields.';
                         $this->_extract_strings($field['sub_fields'], $data, $prefix);
                     }
                     break;
                 case 'flexible_content':
                     if (!empty($field['layouts'])) {
                         foreach ($field['layouts'] as $layout) {
                             $prefix = $_prefix . $field['key'] . '.layouts.' . $layout['key'] . '.';
                             $data[$prefix . 'label'] = ['string' => $choice, 'multiline' => false];
                             if (!empty($field['sub_fields'])) {
                                 $prefix = $prefix . $field['key'] . '.sub_fields.';
                                 $this->_extract_strings($field['sub_fields'], $data, $prefix);
                             }
                         }
                     }
                     break;
             }
         }
         $data = apply_filters('pll/acf/extract_strings', $data, $field, $field_group);
     }
     return $data;
 }
Example #10
0
function delete_sub_row($selector, $i = 1, $post_id = false)
{
    // vars
    $sub_field = false;
    $i--;
    // filter post_id
    $post_id = acf_get_valid_post_id($post_id);
    // get sub field
    if (is_array($selector)) {
        $sub_field = acf_maybe_get_sub_field($selector, $post_id, false);
    } else {
        $sub_field = get_row_sub_field($selector);
    }
    // bail early if no sub field
    if (!$sub_field) {
        return false;
    }
    // get raw value
    $value = acf_get_value($post_id, $sub_field);
    // ensure array
    $value = acf_get_array($value);
    // append
    unset($value[$i]);
    // update
    return acf_update_value($value, $post_id, $sub_field);
}
Example #11
0
 function display_field_column($column, $post_id)
 {
     if (isset($this->column_fields[$column])) {
         $field = $this->column_fields[$column];
         switch ($field['type']) {
             case 'file':
                 $value = \acf_get_value($post_id, $field);
                 if (!is_null($value) && !empty($value)) {
                     $file = \get_post($value);
                     printf(__('Edit: %s', 'acf-quick-edit-fields'), sprintf('<a href="%s" title="%s">%s</a>', \esc_url(\get_edit_post_link($value)), \esc_attr($file->post_title), $file->post_title));
                 }
                 break;
             case 'image':
                 $image_id = \get_field($field['key']);
                 if (!$image_id) {
                     return;
                 }
                 if (is_array($image_id)) {
                     // Image field is an object
                     echo \wp_get_attachment_image($image_id['id'], array(80, 80));
                 } else {
                     if (is_numeric($image_id)) {
                         // Image field is an ID
                         echo \wp_get_attachment_image($image_id, array(80, 80));
                     } else {
                         // Image field is a url
                         echo '<img src="' . $image_id . '" width="80" height="80" />';
                     }
                 }
                 break;
             case 'select':
                 $field_value = \get_field($field['key']);
                 if (is_array($field_value)) {
                     \_e('(Default value)', 'acf-quick-edit-fields');
                 } else {
                     if (isset($field['choices'][$field_value])) {
                         echo $field['choices'][$field_value];
                     }
                 }
             case 'radio':
             case 'checkbox':
                 $field_value = \get_field($field['key']);
                 $values = array();
                 foreach ((array) $field_value as $value) {
                     $values[] = isset($field['choices'][$value]) ? $field['choices'][$value] : $value;
                 }
                 $output = implode(\__(', ', 'acf-quick-edit-fields'), $values);
                 if (empty($output)) {
                     $output = \__('(No value)', 'acf-quick-edit-fields');
                 }
                 echo $output;
                 break;
             case 'true_false':
                 $true_false = \get_field($field['key']);
                 $formatted = $true_false ? __('Yes', 'acf-quick-edit-fields') : __('No', 'acf-quick-edit-fields');
                 echo \apply_filters('acf/quick_edit/field_column/true_false', $formatted, $true_false, $post_id);
                 break;
             case 'post_object':
                 $post_object = \get_field($field['key']);
                 $post_title = '';
                 if (is_object($post_object)) {
                     $post_title = \get_the_title($post_object->ID);
                 }
                 echo \apply_filters('acf/quick_edit/field_column/post_object', $post_title, $post_object, $post_id);
                 break;
             case 'date_picker':
                 $date = \get_field($field['key']);
                 echo \apply_filters('acf/quick_edit/field_column/date_picker', date_i18n($field['display_format'], strtotime($date)), $date, $post_id);
                 break;
             case 'color_picker':
                 $value = \get_field($field['key']);
                 if ($value) {
                     echo '<div class="color-indicator" style="border-radius:2px;border:1px solid #d2d2d2;width:26px;height:20px;background-color:' . $value . '"></div>';
                 } else {
                     \_e('(No value)', 'acf-quick-edit-fields');
                 }
                 break;
             case 'number':
                 $value = \get_field($field['key']);
                 if ($value === '') {
                     \_e('(No value)', 'acf-quick-edit-fields');
                 } else {
                     echo \number_format_i18n($value, strlen(substr(strrchr($value, '.'), 1)));
                 }
                 break;
             case 'textarea':
                 printf('<pre>%s</pre>', \get_field($field['key']));
                 break;
             default:
                 echo \get_field($field['key']);
                 break;
         }
     }
 }
 public function load_value($value, $post_id, $field)
 {
     // bail early if no value
     if (empty($value) || !isset($field['sub_fields']) || empty($field['sub_fields'])) {
         return $value;
     }
     // loop through sub fields
     foreach (array_keys($field['sub_fields']) as $j) {
         // get sub field
         $sub_field = $field['sub_fields'][$j];
         if (isset($value['widget_id']) && !empty($value['widget_id'])) {
             $acf_widget_api_key = 'widget_' . $value['widget_id'];
             $sub_value = acf_get_value($acf_widget_api_key, $sub_field);
         } else {
             $sub_value = null;
         }
         //Store the value so we don't have to reterive it again in the render function.
         $value[$sub_field['key']] = $sub_value;
     }
     return $value;
 }
Example #13
0
function delete_row($selector, $row = 1, $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);
    // bail early if no field
    if (!$field) {
        return false;
    }
    // get value
    $rows = acf_get_value($post_id, $field);
    // bail early if no value
    if (empty($rows)) {
        return false;
    }
    // vars
    $i = $row - 1;
    // bail early if row doesn't exist
    if (empty($rows[$i])) {
        return false;
    }
    // unset
    unset($rows[$i]);
    // reindex
    $rows = array_values($rows);
    // update
    acf_update_value($rows, $post_id, $field);
    // return
    return true;
}
Example #14
0
 function display_field_column($column, $post_id)
 {
     if (isset($this->column_fields[$column])) {
         $field = $this->column_fields[$column];
         switch ($field['type']) {
             case 'file':
                 $value = acf_get_value($post_id, $field);
                 if (!is_null($value) && !empty($value)) {
                     $file = get_post($value);
                     printf(__('Edit: <a href="%s">%s</a>', 'acf-quick-edit-fields'), get_edit_post_link($value), $file->post_title);
                 }
                 break;
             case 'image':
                 $image_id = get_field($field['key']);
                 if (is_array($image_id)) {
                     // Image field is an object
                     echo wp_get_attachment_image($image_id['id'], array(80, 80));
                 } else {
                     if (is_numeric($image_id)) {
                         // Image field is an ID
                         echo wp_get_attachment_image($image_id, array(80, 80));
                     } else {
                         // Image field is a url
                         echo '<img src="' . $image_id . '" width="80" height="80" />';
                     }
                 }
                 break;
             case 'select':
                 $field_value = get_field($field['key']);
                 //
                 if (is_array($field_value)) {
                     _e('(Default value)', 'acf-quick-edit-fields');
                 } else {
                     if (isset($field['choices'][$field_value])) {
                         echo $field['choices'][get_field($field['key'])];
                     }
                 }
                 break;
             case 'true_false':
                 echo get_field($field['key']) ? __('Yes') : __('No');
                 break;
             default:
                 the_field($field['key']);
                 break;
         }
     }
 }
Example #15
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_value($post_id, $field, true);
     $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;
 }
Example #16
0
function get_field_objects($post_id = false, $format_value = true, $load_value = true)
{
    // global
    global $wpdb;
    // filter post_id
    $post_id = acf_get_valid_post_id($post_id);
    // vars
    $meta = array();
    $fields = array();
    // get field_names
    if (is_numeric($post_id)) {
        $meta = get_post_meta($post_id);
    } elseif (strpos($post_id, 'user_') !== false) {
        $user_id = (int) str_replace('user_', '', $post_id);
        $meta = get_user_meta($user_id);
    } elseif (strpos($post_id, 'comment_') !== false) {
        $comment_id = (int) str_replace('comment_', '', $post_id);
        $meta = get_comment_meta($comment_id);
    } else {
        $rows = $wpdb->get_results($wpdb->prepare("SELECT option_name, option_value FROM {$wpdb->options} WHERE option_name LIKE %s OR option_name LIKE %s", $post_id . '_%', '_' . $post_id . '_%'), ARRAY_A);
        if (!empty($rows)) {
            foreach ($rows as $row) {
                $meta[$row['option_name']][] = $row['option_value'];
            }
        }
    }
    // bail early if no meta
    if (empty($meta)) {
        return false;
    }
    // populate vars
    foreach ($meta as $k => $v) {
        // Hopefuly improve efficiency: bail early if $k does start with an '_'
        if ($k[0] === '_') {
            continue;
        }
        // does a field key exist for this value?
        if (!array_key_exists("_{$k}", $meta)) {
            continue;
        }
        // get field
        $field_key = $meta["_{$k}"][0];
        $field = acf_get_field($field_key);
        // bail early if not a parent field
        if (!$field || acf_is_sub_field($field)) {
            continue;
        }
        // load value
        if ($load_value) {
            $field['value'] = acf_get_value($post_id, $field);
        }
        // format value
        if ($format_value) {
            // get value for field
            $field['value'] = acf_format_value($field['value'], $post_id, $field);
        }
        // append to $value
        $fields[$field['name']] = $field;
    }
    // no value
    if (empty($fields)) {
        return false;
    }
    // return
    return $fields;
}
 function load_value($value, $post_id, $field)
 {
     // bail early if no value
     if (empty($field['layouts'])) {
         return $value;
     }
     // value must be an array
     $value = acf_get_array($value);
     // vars
     $rows = array();
     // populate $layouts
     $layouts = array();
     foreach (array_keys($field['layouts']) as $i) {
         // get layout
         $layout = $field['layouts'][$i];
         // append to $layouts
         $layouts[$layout['name']] = $layout['sub_fields'];
     }
     // loop through rows
     foreach ($value as $i => $l) {
         // append to $values
         $rows[$i] = array();
         $rows[$i]['acf_fc_layout'] = $l;
         // bail early if layout deosnt contain sub fields
         if (empty($layouts[$l])) {
             continue;
         }
         // get layout
         $layout = $layouts[$l];
         // loop through sub fields
         foreach (array_keys($layout) as $j) {
             // get sub field
             $sub_field = $layout[$j];
             // update full name
             $sub_field['name'] = "{$field['name']}_{$i}_{$sub_field['name']}";
             // get value
             $sub_value = acf_get_value($post_id, $sub_field);
             // add value
             $rows[$i][$sub_field['key']] = $sub_value;
         }
         // foreach
     }
     // foreach
     $value['rows'] = $rows;
     $customized_value = get_post_meta($post_id, 'acf_widget_area_is_customized', true);
     if (!empty($customized_value) && isset($customized_value[$field['registered_widget_area']])) {
         $value['internal_values']['customized'] = isset($customized_value[$field['registered_widget_area']][$field['key']]) ? $customized_value[$field['registered_widget_area']][$field['key']] : 'no';
     } else {
         $value['internal_values']['customized'] = 'no';
     }
     return $value;
 }
Example #18
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;
 }
Example #19
0
function delete_row($selector, $row = 1, $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);
    // bail early if no field
    if (!$field) {
        return false;
    }
    // get value
    $rows = acf_get_value($post_id, $field);
    // bail early if no value
    if (empty($rows)) {
        return false;
    }
    // deincrement
    if ($row == count($rows)) {
        acf_update_metadata($post_id, $field['name'], $row - 1);
    }
    // update sub field values
    foreach ($rows[0] as $k => $v) {
        update_sub_field(array($field['key'], $row, $k), null, $post_id);
    }
    // return
    return true;
}
Example #20
0
function acf_render_fields($post_id = 0, $fields, $el = 'div', $instruction = 'label')
{
    // bail early if no fields
    if (empty($fields)) {
        return false;
    }
    // remove corrupt fields
    $fields = array_filter($fields);
    // loop through fields
    foreach ($fields as $field) {
        // load value
        if ($field['value'] === null) {
            $field['value'] = acf_get_value($post_id, $field);
        }
        // render
        acf_render_field_wrap($field, $el, $instruction);
    }
}
Example #21
0
 function load_value($value, $post_id, $field)
 {
     // bail early if no value
     if (empty($value) || empty($field['sub_fields'])) {
         return $value;
     }
     // convert to int
     $value = intval($value);
     // vars
     $rows = array();
     // check number of rows
     if ($value > 0) {
         // loop through rows
         for ($i = 0; $i < $value; $i++) {
             // create empty array
             $rows[$i] = array();
             // loop through sub fields
             foreach (array_keys($field['sub_fields']) as $j) {
                 // get sub field
                 $sub_field = $field['sub_fields'][$j];
                 // update $sub_field name
                 $sub_field['name'] = "{$field['name']}_{$i}_{$sub_field['name']}";
                 // get value
                 $sub_value = acf_get_value($post_id, $sub_field);
                 // add value
                 $rows[$i][$sub_field['key']] = $sub_value;
             }
             // foreach
         }
         // for
     }
     // if
     // return
     return $rows;
 }