0,
'i' => 0,
'field_key' => '',
'nonce' => '',
'layout' => '',
'value' => array()
));
}
// Load field
$field = acf_get_field($options['field_key']);
if(!$field)
die;
// Flexible
$flexible = acf_get_field_type('flexible_content');
// Layout
$layout = $flexible->get_layout($options['layout'], $field);
if(!$layout)
die;
// Global
global $is_preview;
// Vars
$is_preview = true;
$name = $field['_name'];
$key = $field['key'];
$l_name = $layout['name'];
// Thumbnail
$flexible->prepare_layout_thumbnail($field, $layout);
// Prepare values
$meta = array($options['field_key'] => array(
wp_unslash($options['value'])
));
acf_setup_meta($meta, $options['field_key'] . '_' . $options['i'], true);
if(have_rows($options['field_key'])):
while(have_rows($options['field_key'])): the_row();
global $post;
$_post = $post;
// Deprecated
do_action_deprecated("acfe/flexible/preview/name={$name}", array($field, $layout), '0.8.6.7');
do_action_deprecated("acfe/flexible/preview/key={$key}", array($field, $layout), '0.8.6.7');
do_action_deprecated("acfe/flexible/layout/preview/layout={$l_name}", array($field, $layout), '0.8.6.7');
do_action_deprecated("acfe/flexible/layout/preview/name={$name}&layout={$l_name}", array($field, $layout), '0.8.6.7');
do_action_deprecated("acfe/flexible/layout/preview/key={$key}&layout={$l_name}", array($field, $layout), '0.8.6.7');
do_action_deprecated("acfe/flexible/preview", array($field, $layout), '0.8.6.7');
// Template
acfe_flexible_render_layout_template($layout, $field);
$post = $_post;
endwhile;
endif;
acf_reset_meta($options['field_key'] . '_' . $options['i']);
if(wp_doing_ajax()){
die;
}
}
if(!class_exists('acfe_field_flexible_content')):
class acfe_field_flexible_content extends acf_field_flexible_content{
public $flexible = '';
function __construct(){
parent::initialize();
// Retrieve Flexible Content
$this->flexible = acf_get_field_type('flexible_content');
// Remove Inherit Actions
remove_action('acf/render_field/type=flexible_content', array($this->flexible, 'render_field'), 9);
// Field Action
$this->add_field_action('acf/render_field_settings', array($this, 'render_field_settings'), 0);
$this->add_action('acf/render_field', array($this, 'render_layouts_settings_label'), 0);
$this->add_action('acf/render_field', array($this, 'render_layouts_settings'), 10);
$this->add_field_filter('acf/validate_field', array($this, 'validate_field'));
$this->add_field_filter('acf/prepare_field', array($this, 'prepare_field'));
$this->add_field_filter('acfe/load_fields', array($this, 'load_fields'), 10, 2);
$this->add_field_filter('acfe/field_wrapper_attributes', array($this, 'wrapper_attributes'), 10, 2);
$this->add_field_action('acf/render_field', array($this, 'render_field'), 9);
$this->add_field_filter('acf/load_value', array($this, 'load_value_toggle'), 10, 3);
// General Filters
$this->add_filter('acfe/flexible/layouts/icons', array($this, 'add_layout_icons'), 10, 3);
$this->add_filter('acfe/flexible/layouts/div', array($this, 'add_layout_div'), 10, 3);
$this->add_filter('acfe/flexible/layouts/handle', array($this, 'add_layout_handle'), 10, 3);
$this->add_filter('acf/fields/flexible_content/no_value_message', array($this, 'add_empty_message'), 10, 2);
$this->add_filter('acf/fields/flexible_content/layout_title', array($this, 'add_layout_title'), 0, 4);
// General Actions
$this->add_action('wp_ajax_acfe/flexible/models', array($this, 'ajax_layout_model'));
$this->add_action('wp_ajax_nopriv_acfe/flexible/models', array($this, 'ajax_layout_model'));
}
/**
* Field Settings
*/
function render_field_settings($field){
// Advanced settings
acf_render_field_setting($field, array(
'label' => __('Advanced Flexible Content'),
'name' => 'acfe_flexible_advanced',
'key' => 'acfe_flexible_advanced',
'instructions' => __('Show advanced Flexible Content settings'),
'type' => 'true_false',
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
));
// Stylised button
acf_render_field_setting($field, array(
'label' => __('Stylised Button'),
'name' => 'acfe_flexible_stylised_button',
'key' => 'acfe_flexible_stylised_button',
'instructions' => __('Better actions buttons integration'),
'type' => 'true_false',
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
array(
'field' => 'acfe_flexible_remove_add_button',
'operator' => '!=',
'value' => '1',
),
)
)
));
// Hide Empty Message
acf_render_field_setting($field, array(
'label' => __('Hide Empty Message'),
'name' => 'acfe_flexible_hide_empty_message',
'key' => 'acfe_flexible_hide_empty_message',
'instructions' => __('Hide the empty message box'),
'type' => 'true_false',
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
array(
'field' => 'acfe_flexible_stylised_button',
'operator' => '!=',
'value' => '1',
),
)
)
));
// Empty Message
acf_render_field_setting($field, array(
'label' => __('Empty Message'),
'name' => 'acfe_flexible_empty_message',
'key' => 'acfe_flexible_empty_message',
'instructions' => __('Text displayed when the flexible field is empty'),
'type' => 'text',
'placeholder' => __('Click the "Add Row" button below to start creating your layout'),
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
array(
'field' => 'acfe_flexible_stylised_button',
'operator' => '!=',
'value' => '1',
),
array(
'field' => 'acfe_flexible_hide_empty_message',
'operator' => '!=',
'value' => '1',
)
)
)
));
// Disable Legacy Title Ajax
acf_render_field_setting($field, array(
'label' => __('Disable Legacy Layout Title Ajax'),
'name' => 'acfe_flexible_disable_ajax_title',
'key' => 'acfe_flexible_disable_ajax_title',
'instructions' => __('Disable the native ACF Layout Title Ajax call. More informations: ACF documentation.'),
'type' => 'true_false',
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
)
)
));
// Layouts thumbnails
acf_render_field_setting($field, array(
'label' => __('Layouts: Thumbnails'),
'name' => 'acfe_flexible_layouts_thumbnails',
'key' => 'acfe_flexible_layouts_thumbnails',
'instructions' => __('Set a thumbnail for each layouts. You must save the field group to apply this setting'),
'type' => 'true_false',
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
)
)
));
// Layouts settings
acf_render_field_setting($field, array(
'label' => __('Layouts: Settings'),
'name' => 'acfe_flexible_layouts_settings',
'key' => 'acfe_flexible_layouts_settings',
'instructions' => __('Choose a field group to clone and to be used as a configuration modal'),
'type' => 'true_false',
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
)
)
));
// Layouts ajax
acf_render_field_setting($field, array(
'label' => __('Layouts: Asynchronous'),
'name' => 'acfe_flexible_layouts_ajax',
'key' => 'acfe_flexible_layouts_ajax',
'instructions' => __('Add layouts using Ajax method. This setting increase performance on complex Flexible Content'),
'type' => 'true_false',
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
)
)
));
// Layouts: Render
acf_render_field_setting($field, array(
'label' => __('Layouts: Render'),
'name' => 'acfe_flexible_layouts_templates',
'key' => 'acfe_flexible_layouts_templates',
'instructions' => __('Set template, style & javascript files for each layouts. This setting is mandatory in order to use get_flexible() function. You must save the field group to apply this setting'),
'type' => 'true_false',
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
)
)
));
// Layouts: Preview
acf_render_field_setting($field, array(
'label' => __('Layouts: Dynamic Preview'),
'name' => 'acfe_flexible_layouts_previews',
'key' => 'acfe_flexible_layouts_previews',
'instructions' => __('Use layouts render settings to display a dynamic preview in the post administration'),
'type' => 'true_false',
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
array(
'field' => 'acfe_flexible_layouts_templates',
'operator' => '==',
'value' => '1',
),
array(
'field' => 'acfe_flexible_layouts_remove_collapse',
'operator' => '!=',
'value' => '1',
),
)
)
));
// Layouts: Placholder
acf_render_field_setting($field, array(
'label' => __('Layouts: Placeholder'),
'name' => 'acfe_flexible_layouts_placeholder',
'key' => 'acfe_flexible_layouts_placeholder',
'instructions' => __('Display a placeholder with a pencil icon, making edition easier'),
'type' => 'true_false',
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
array(
'field' => 'acfe_flexible_layouts_previews',
'operator' => '==',
'value' => '',
),
array(
'field' => 'acfe_flexible_layouts_remove_collapse',
'operator' => '!=',
'value' => '1',
),
)
)
));
// Layouts: Title Edition
acf_render_field_setting($field, array(
'label' => __('Layouts: Title Edition'),
'name' => 'acfe_flexible_title_edition',
'key' => 'acfe_flexible_title_edition',
'instructions' => __('Allow layout title edition'),
'type' => 'true_false',
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
)
)
));
if(acf_version_compare(acf_get_setting('version'), '<', '5.9')){
// Layouts: Clone
acf_render_field_setting($field, array(
'label' => __('Layouts: Clone'),
'name' => 'acfe_flexible_clone',
'key' => 'acfe_flexible_clone',
'instructions' => __('Allow clone layouts function'),
'type' => 'true_false',
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
)
)
));
}
// Layouts: Copy/Paste
acf_render_field_setting($field, array(
'label' => __('Layouts: Copy/Paste'),
'name' => 'acfe_flexible_copy_paste',
'key' => 'acfe_flexible_copy_paste',
'instructions' => __('Allow copy/paste layouts functions'),
'type' => 'true_false',
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
)
)
));
// Layouts: Toggle
acf_render_field_setting($field, array(
'label' => __('Layouts: Toggle'),
'name' => 'acfe_flexible_toggle',
'key' => 'acfe_flexible_toggle',
'instructions' => __('Allow toggle layouts function'),
'type' => 'true_false',
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
)
)
));
// Layouts: Close Button
acf_render_field_setting($field, array(
'label' => __('Layouts: Close Button'),
'name' => 'acfe_flexible_close_button',
'key' => 'acfe_flexible_close_button',
'instructions' => __('Display a close button to collapse the layout'),
'type' => 'true_false',
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
array(
'field' => 'acfe_flexible_layouts_remove_collapse',
'operator' => '!=',
'value' => '1',
),
)
)
));
// Hide: Add Button
acf_render_field_setting($field, array(
'label' => __('Hide: Add layout button'),
'name' => 'acfe_flexible_remove_add_button',
'key' => 'acfe_flexible_remove_add_button',
'instructions' => __('Hide all "Add layout" buttons'),
'type' => 'true_false',
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
)
)
));
if(acf_version_compare(acf_get_setting('version'), '>=', '5.9')){
// Hide: Duplicate Button
acf_render_field_setting($field, array(
'label' => __('Hide: Duplicate layout button'),
'name' => 'acfe_flexible_remove_duplicate_button',
'key' => 'acfe_flexible_remove_duplicate_button',
'instructions' => __('Hide the "Duplicate layout" button'),
'type' => 'true_false',
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
)
)
));
}
// Hide: Delete Button
acf_render_field_setting($field, array(
'label' => __('Hide: Delete layout button'),
'name' => 'acfe_flexible_remove_delete_button',
'key' => 'acfe_flexible_remove_delete_button',
'instructions' => __('Hide the "Delete layout" button'),
'type' => 'true_false',
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
)
)
));
// Lock
acf_render_field_setting($field, array(
'label' => __('Lock Flexible Content'),
'name' => 'acfe_flexible_lock',
'key' => 'acfe_flexible_lock',
'instructions' => __('Disable the drag & drop function and lock the flexible content'),
'type' => 'true_false',
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
)
)
));
// Modal: Edition
acf_render_field_setting($field, array(
'label' => __('Layouts Modal: Edition'),
'name' => 'acfe_flexible_modal_edition',
'key' => 'acfe_flexible_modal_edition',
'instructions' => __('Edit layout content in a modal'),
'type' => 'true_false',
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
)
)
));
// Modal: Selection
acf_render_field_setting($field, array(
'label' => __('Layouts Modal: Selection'),
'name' => 'acfe_flexible_modal',
'key' => 'acfe_flexible_modal',
'instructions' => __('Select layouts in a modal'),
'type' => 'group',
'layout' => 'block',
'sub_fields' => array(
array(
'label' => '',
'name' => 'acfe_flexible_modal_enabled',
'key' => 'acfe_flexible_modal_enabled',
'type' => 'true_false',
'instructions' => '',
'required' => false,
'wrapper' => array(
'width' => '10',
'class' => 'acfe_width_auto',
'id' => '',
),
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
'conditional_logic' => false,
),
array(
'label' => '',
'name' => 'acfe_flexible_modal_title',
'key' => 'acfe_flexible_modal_title',
'type' => 'text',
'prepend' => __('Modal Title'),
'placeholder' => 'Add Row',
'instructions' => false,
'required' => false,
'wrapper' => array(
'width' => '35',
'class' => '',
'id' => '',
),
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_modal_enabled',
'operator' => '==',
'value' => '1',
)
)
)
),
array(
'label' => '',
'name' => 'acfe_flexible_modal_col',
'key' => 'acfe_flexible_modal_col',
'type' => 'select',
'prepend' => '',
'instructions' => false,
'required' => false,
'choices' => array(
'1' => '1 column',
'2' => '2 columns',
'3' => '3 columns',
'4' => '4 columns',
'5' => '5 columns',
'6' => '6 columns',
),
'default_value' => '4',
'wrapper' => array(
'width' => '15',
'class' => '',
'id' => '',
),
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_modal_enabled',
'operator' => '==',
'value' => '1',
)
)
)
),
array(
'label' => '',
'name' => 'acfe_flexible_modal_categories',
'key' => 'acfe_flexible_modal_categories',
'type' => 'true_false',
'message' => __('Categories'),
'instructions' => false,
'required' => false,
'wrapper' => array(
'width' => '25',
'class' => '',
'id' => '',
),
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_modal_enabled',
'operator' => '==',
'value' => '1',
)
)
)
),
),
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
)
)
));
// Layouts: Force State
acf_render_field_setting($field, array(
'label' => __('Layouts: Force State'),
'name' => 'acfe_flexible_layouts_state',
'key' => 'acfe_flexible_layouts_state',
'instructions' => __('Force layouts to be collapsed or opened'),
'type' => 'select',
'placeholder' => __('Default', 'acfe'),
'allow_null' => true,
'choices' => array(
'collapse' => 'Collapsed',
'open' => 'Opened',
),
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
array(
'field' => 'acfe_flexible_modal_edition',
'operator' => '!=',
'value' => '1',
)
)
)
));
// Hide: Collapse Button
acf_render_field_setting($field, array(
'label' => __('Layouts: Remove Collapse'),
'name' => 'acfe_flexible_layouts_remove_collapse',
'key' => 'acfe_flexible_layouts_remove_collapse',
'instructions' => __('Remove collapse action'),
'type' => 'true_false',
'message' => '',
'default_value' => false,
'ui' => true,
'ui_on_text' => '',
'ui_off_text' => '',
'conditional_logic' => array(
array(
array(
'field' => 'acfe_flexible_advanced',
'operator' => '==',
'value' => '1',
),
array(
'field' => 'acfe_flexible_modal_edition',
'operator' => '!=',
'value' => '1',
),
array(
'field' => 'acfe_flexible_layouts_state',
'operator' => '==',
'value' => 'open',
)
)
)
));
}
/**
* Layout Settings Label
*/
function render_layouts_settings_label($field){
if($field['_name'] !== 'label' || stripos($field['name'], '[layouts]') === false)
return;
echo '';
acf_render_field_wrap(array(
'label' => __('Settings'),
'type' => 'hidden',
'name' => 'acfe_flexible_settings_label'
), 'ul');
echo '