instance = acf_get_field_type('flexible_content'); // Flexible Settings add_action('acf/render_field_settings/type=flexible_content', array($this, 'render_field_settings'), 0); add_action('acf/render_field', array($this, 'render_field_layouts_settings_label'), 0); add_action('acf/render_field', array($this, 'render_field_layouts_settings'), 10); add_filter('acf/validate_field/type=flexible_content', array($this, 'validate_field')); add_filter('acf/prepare_field/type=flexible_content', array($this, 'prepare_field')); add_filter('acfe/load_fields/type=flexible_content', array($this, 'load_fields'), 10, 2); add_filter('acfe/field_wrapper_attributes/type=flexible_content', array($this, 'wrapper_attributes'), 10, 2); // Render Flexible remove_action('acf/render_field/type=flexible_content', array($this->instance, 'render_field'), 9); add_action('acf/render_field/type=flexible_content', array($this, 'render_field'), 9); add_filter('acf/fields/flexible_content/layout_title', array($this, 'prepare_layout_title'), 0, 4); } /* * Field Settings */ function render_field_settings($field){ // Action do_action("acfe/flexible/render_field_settings", $field); } /* * Layout Settings Label */ function render_field_layouts_settings_label($field){ if($field['_name'] !== 'label' || stripos($field['name'], '[layouts]') === false) return; echo ''; acf_render_field_wrap(array( 'label' => __('Settings', 'acfe'), 'type' => 'hidden', 'name' => 'acfe_flexible_settings_label' ), 'ul'); echo '
  • '; } /* * Layout Settings */ function render_field_layouts_settings($field){ if($field['_name'] !== 'max' || stripos($field['name'], '[layouts]') === false) return; // Prefix $prefix = $field['prefix']; // Black magic parse_str($prefix, $output); $keys = acfe_array_keys_r($output); // ... $_field_id = $keys[1]; $_layout_key = $keys[3]; // Profit! $flexible = acf_get_field($_field_id); if(!acf_maybe_get($flexible, 'layouts')) return; $layout = $flexible['layouts'][$_layout_key]; // Vars $name = $flexible['name']; $key = $flexible['key']; $l_name = $layout['name']; // Do Actions do_action("acfe/flexible/render_layout_settings", $flexible, $layout, $prefix); do_action("acfe/flexible/render_layout_settings/name={$name}", $flexible, $layout, $prefix); do_action("acfe/flexible/render_layout_settings/key={$key}", $flexible, $layout, $prefix); do_action("acfe/flexible/render_layout_settings/layout={$l_name}", $flexible, $layout, $prefix); do_action("acfe/flexible/render_layout_settings/name={$name}&layout={$l_name}", $flexible, $layout, $prefix); do_action("acfe/flexible/render_layout_settings/key={$key}&layout={$l_name}", $flexible, $layout, $prefix); } /* * Validate Field */ function validate_field($field){ // Defaults $_field = array(); $_layout = array(); // Filters $_field = apply_filters("acfe/flexible/defaults_field", $_field); $_layout = apply_filters("acfe/flexible/defaults_layout", $_layout); foreach($_field as $k => $v){ if(!isset($field[$k])){ $field[$k] = $v; } if(is_array($v)){ foreach($v as $ak => $av){ if(!isset($field[$k][$ak])){ $field[$k][$ak] = $av; } } } } foreach($field['layouts'] as &$layout){ foreach($_layout as $k => $v){ if(!isset($layout[$k])){ $layout[$k] = $v; } if(is_array($v)){ foreach($v as $ak => $av){ if(!isset($layout[$k][$ak])){ $layout[$k][$ak] = $av; } } } } } $field = apply_filters('acfe/flexible/validate_field', $field); return $field; } /* * Prepare Field */ function prepare_field($field){ // Vars $name = $field['_name']; $key = $field['key']; foreach($field['layouts'] as &$layout){ // Vars $l_name = $layout['name']; // Prepend $prepend = ''; $prepend = apply_filters("acfe/flexible/layouts/label_prepend", $prepend, $layout, $field); $prepend = apply_filters("acfe/flexible/layouts/label_prepend/name={$name}", $prepend, $layout, $field); $prepend = apply_filters("acfe/flexible/layouts/label_prepend/key={$key}", $prepend, $layout, $field); $prepend = apply_filters("acfe/flexible/layouts/label_prepend/layout={$l_name}", $prepend, $layout, $field); $prepend = apply_filters("acfe/flexible/layouts/label_prepend/name={$name}&layout={$l_name}", $prepend, $layout, $field); $prepend = apply_filters("acfe/flexible/layouts/label_prepend/key={$key}&layout={$l_name}", $prepend, $layout, $field); // Atts $atts = array('class' => 'no-thumbnail'); $atts = apply_filters("acfe/flexible/layouts/label_atts", $atts, $layout, $field); $atts = apply_filters("acfe/flexible/layouts/label_atts/name={$name}", $atts, $layout, $field); $atts = apply_filters("acfe/flexible/layouts/label_atts/key={$key}", $atts, $layout, $field); $atts = apply_filters("acfe/flexible/layouts/label_atts/layout={$l_name}", $atts, $layout, $field); $atts = apply_filters("acfe/flexible/layouts/label_atts/name={$name}&layout={$l_name}", $atts, $layout, $field); $atts = apply_filters("acfe/flexible/layouts/label_atts/key={$key}&layout={$l_name}", $atts, $layout, $field); // Label $layout['label'] = $prepend . '' . $layout['label'] . ''; } return $field; } /* * Load Fields */ function load_fields($fields, $field){ if(acfe_is_admin_screen()) return $fields; // check layouts if(empty($field['layouts'])) return $fields; // vars $name = $field['name']; $key = $field['key']; $fields = apply_filters("acfe/flexible/load_fields", $fields, $field); $fields = apply_filters("acfe/flexible/load_fields/name={$name}", $fields, $field); $fields = apply_filters("acfe/flexible/load_fields/key={$key}", $fields, $field); return $fields; } /* * Wrapper Attributes */ function wrapper_attributes($wrapper, $field){ $wrapper = apply_filters('acfe/flexible/wrapper_attributes', $wrapper, $field); return $wrapper; } /* * Render Field */ function render_field($field){ // Vars $name = $field['_name']; $key = $field['key']; // defaults if(empty($field['button_label'])){ $field['button_label'] = __('Add Row', 'acf'); } // sort layouts into names $layouts = array(); foreach($field['layouts'] as $k => $layout){ $layouts[$layout['name']] = $layout; } // vars $div = array( 'class' => 'acf-flexible-content', 'data-min' => $field['min'], 'data-max' => $field['max'] ); // empty if(empty($field['value'])){ $div['class'] .= ' -empty'; } // no value message $no_value_message = __('Click the "%s" button below to start creating your layout', 'acf'); $no_value_message = apply_filters('acf/fields/flexible_content/no_value_message', $no_value_message, $field); $values = array( 'class' => 'values' ); $values = apply_filters("acfe/flexible/div_values", $values, $field); $values = apply_filters("acfe/flexible/div_values/name={$name}", $values, $field); $values = apply_filters("acfe/flexible/div_values/key={$key}", $values, $field); ?>
    > $field['name'])); ?>
    render_layout($field, $layout, 'acfcloneindex', array()); } endforeach; ?>
    > $value): // validate if(empty($layouts[$value['acf_fc_layout']])) continue; // render $this->render_layout($field, $layouts[$value['acf_fc_layout']], $i, $value); endforeach; endif; ?>
    'acf-button button', 'href' => '#', 'data-name' => 'add-layout', ); $button = apply_filters('acfe/flexible/action_button', $button, $field); if(!empty($wrapper)){ echo '
    '; } ?>
    > 'button', 'style' => 'padding-left:5px;padding-right:5px; margin-left:3px;', 'href' => '#', 'data-name' => 'acfe-flexible-control-button', ); $button_secondary = apply_filters('acfe/flexible/action_button_secondary', $button_secondary, $field); ?> >
    '; } ?>
    'layout', 'data-id' => $id, 'data-layout' => $layout['name'] ); // is clone? if(!is_numeric($i)){ $div['class'] .= ' acf-clone'; } $div = apply_filters("acfe/flexible/layouts/div", $div, $layout, $field, $i, $value, $prefix); $div = apply_filters("acfe/flexible/layouts/div/name={$name}", $div, $layout, $field, $i, $value, $prefix); $div = apply_filters("acfe/flexible/layouts/div/key={$key}", $div, $layout, $field, $i, $value, $prefix); $div = apply_filters("acfe/flexible/layouts/div/layout={$l_name}", $div, $layout, $field, $i, $value, $prefix); $div = apply_filters("acfe/flexible/layouts/div/name={$name}&layout={$l_name}", $div, $layout, $field, $i, $value, $prefix); $div = apply_filters("acfe/flexible/layouts/div/key={$key}&layout={$l_name}", $div, $layout, $field, $i, $value, $prefix); // handle $handle = array( 'class' => 'acf-fc-layout-handle', 'title' => __('Drag to reorder','acf'), 'data-name' => 'collapse-layout', ); $handle = apply_filters("acfe/flexible/layouts/handle", $handle, $layout, $field, $i, $value, $prefix); $handle = apply_filters("acfe/flexible/layouts/handle/name={$name}", $handle, $layout, $field, $i, $value, $prefix); $handle = apply_filters("acfe/flexible/layouts/handle/key={$key}", $handle, $layout, $field, $i, $value, $prefix); $handle = apply_filters("acfe/flexible/layouts/handle/layout={$l_name}", $handle, $layout, $field, $i, $value, $prefix); $handle = apply_filters("acfe/flexible/layouts/handle/name={$name}&layout={$l_name}", $handle, $layout, $field, $i, $value, $prefix); $handle = apply_filters("acfe/flexible/layouts/handle/key={$key}&layout={$l_name}", $handle, $layout, $field, $i, $value, $prefix); // remove row // This makes Flexible Content in ACFE Form buggy in a Flexible Content Preview //reset_rows(); ?>
    > $prefix.'[acf_fc_layout]', 'value' => $layout['name'])); ?>
    > instance->get_layout_title($field, $layout, $i, $value); ?>
    render_layout_fields($layout, $field, $i, $value, $prefix); // Unprepare Editor remove_filter('acf/prepare_field/type=wysiwyg', array($this, 'prepare_layout_editor')); do_action("acfe/flexible/render_layout", $layout, $field, $i, $value, $prefix); do_action("acfe/flexible/render_layout/name={$name}", $layout, $field, $i, $value, $prefix); do_action("acfe/flexible/render_layout/key={$key}", $layout, $field, $i, $value, $prefix); do_action("acfe/flexible/render_layout/layout={$l_name}", $layout, $field, $i, $value, $prefix); do_action("acfe/flexible/render_layout/name={$name}&layout={$l_name}", $layout, $field, $i, $value, $prefix); do_action("acfe/flexible/render_layout/key={$key}&layout={$l_name}", $layout, $field, $i, $value, $prefix); ?>
    >

    ' . $title . ''; } } acf_new_instance('acfe_field_flexible_content'); endif; /* * Includes */ acfe_include('includes/fields/field-flexible-content-actions.php'); acfe_include('includes/fields/field-flexible-content-async.php'); acfe_include('includes/fields/field-flexible-content-controls.php'); acfe_include('includes/fields/field-flexible-content-edit.php'); acfe_include('includes/fields/field-flexible-content-hide.php'); acfe_include('includes/fields/field-flexible-content-preview.php'); acfe_include('includes/fields/field-flexible-content-select.php'); acfe_include('includes/fields/field-flexible-content-settings.php'); acfe_include('includes/fields/field-flexible-content-state.php'); acfe_include('includes/fields/field-flexible-content-thumbnail.php');