<?php if (!defined('ABSPATH')) { exit; } if (!class_exists('ACF_Compatibility')) { class ACF_Compatibility { function __construct() { add_filter('acf/validate_field', array($this, 'validate_field'), 20, 1); add_filter('acf/validate_field/type=textarea', array($this, 'validate_textarea_field'), 20, 1); add_filter('acf/validate_field/type=relationship', array($this, 'validate_relationship_field'), 20, 1); add_filter('acf/validate_field/type=post_object', array($this, 'validate_relationship_field'), 20, 1); add_filter('acf/validate_field/type=page_link', array($this, 'validate_relationship_field'), 20, 1); add_filter('acf/validate_field/type=image', array($this, 'validate_image_field'), 20, 1); add_filter('acf/validate_field/type=file', array($this, 'validate_image_field'), 20, 1); add_filter('acf/validate_field/type=wysiwyg', array($this, 'validate_wysiwyg_field'), 20, 1); add_filter('acf/validate_field/type=date_picker', array($this, 'validate_date_picker_field'), 20, 1); add_filter('acf/validate_field/type=taxonomy', array($this, 'validate_taxonomy_field'), 20, 1); add_filter('acf/validate_field/type=date_time_picker', array($this, 'validate_date_time_picker_field'), 20, 1); add_filter('acf/validate_field/type=user', array($this, 'validate_user_field'), 20, 1); add_filter('acf/validate_field_group', array($this, 'validate_field_group'), 20, 1); add_filter('acf/field_wrapper_attributes', array($this, 'field_wrapper_attributes'), 20, 2); add_filter('acf/location/validate_rule/type=post_taxonomy', array($this, 'validate_post_taxonomy_location_rule'), 20, 1); add_filter('acf/location/validate_rule/type=post_category', array($this, 'validate_post_taxonomy_location_rule'), 20, 1); add_action('acf/init', array($this, 'init')); } function init() { if (defined('ACF_LITE') && ACF_LITE) { acf_update_setting('show_admin', false); } } function field_wrapper_attributes($wrapper, $field) { if (acf_get_compatibility('field_wrapper_class')) { $wrapper['class'] .= " field_type-{$field['type']}"; if ($field['key']) { $wrapper['class'] .= " field_key-{$field['key']}"; } } return $wrapper; } function validate_field($field) { if (isset($field['conditional_logic']['status'])) { if ($field['conditional_logic']['status']) { $field['conditional_logic'] = acf_convert_rules_to_groups($field['conditional_logic']['rules'], $field['conditional_logic']['allorany']); } else { $field['conditional_logic'] = 0; } } return $field; } function validate_textarea_field($field) { $formatting = acf_extract_var($field, 'formatting'); if ($formatting === 'br') { $field['new_lines'] = 'br'; } return $field; } function validate_relationship_field($field) { if (acf_in_array('all', $field['post_type'])) { $field['post_type'] = array(); } if (acf_in_array('all', $field['taxonomy'])) { $field['taxonomy'] = array(); } if (isset($field['result_elements'])) { $field['elements'] = acf_extract_var($field, 'result_elements'); } return $field; } function validate_image_field($field) { if (isset($field['save_format'])) { $field['return_format'] = acf_extract_var($field, 'save_format'); } if ($field['return_format'] == 'object') { $field['return_format'] = 'array'; } return $field; } function validate_wysiwyg_field($field) { if ($field['media_upload'] === 'yes') { $field['media_upload'] = 1; } elseif ($field['media_upload'] === 'no') { $field['media_upload'] = 0; } return $field; } function validate_date_picker_field($field) { if (isset($field['date_format'])) { $date_format = $field['date_format']; $display_format = $field['display_format']; $display_format = acf_convert_date_to_php($display_format); $field['display_format'] = $display_format; $field['save_format'] = $date_format; unset($field['date_format']); } return $field; } function validate_taxonomy_field($field) { if (isset($field['load_save_terms'])) { $field['save_terms'] = acf_extract_var($field, 'load_save_terms'); } return $field; } function validate_date_time_picker_field($field) { if (!empty($field['time_format'])) { $time_format = acf_extract_var($field, 'time_format'); $date_format = acf_extract_var($field, 'date_format'); $get_as_timestamp = acf_extract_var($field, 'get_as_timestamp'); $time_format = acf_convert_time_to_php($time_format); $date_format = acf_convert_date_to_php($date_format); $field['return_format'] = $date_format . ' ' . $time_format; $field['display_format'] = $date_format . ' ' . $time_format; if ($get_as_timestamp === 'true') { $field['return_format'] = 'U'; } } return $field; } function validate_user_field($field) { if (acf_in_array('all', $field['role'])) { $field['role'] = ''; } if (isset($field['field_type'])) { $field_type = acf_extract_var($field, 'field_type'); if ($field_type === 'multi_select') { $field['multiple'] = true; } } return $field; } function validate_field_group($field_group) { $version = 5; if (!$field_group['key']) { $version = 4; $field_group['key'] = isset($field_group['id']) ? "group_{$field_group['id']}" : uniqid('group_'); } if (isset($field_group['options'])) { $options = acf_extract_var($field_group, 'options'); $field_group = array_merge($field_group, $options); } if (isset($field_group['location']['rules'])) { $field_group['location'] = acf_convert_rules_to_groups($field_group['location']['rules'], $field_group['location']['allorany']); } $replace = array('taxonomy' => 'post_taxonomy', 'ef_media' => 'attachment', 'ef_taxonomy' => 'taxonomy', 'ef_user' => 'user_role', 'user_type' => 'current_user_role'); if ($version > 4) { unset($replace['taxonomy']); } if ($field_group['location']) { foreach ($field_group['location'] as $i => $group) { if ($group) { foreach ($group as $j => $rule) { if (isset($replace[$rule['param']])) { $field_group['location'][$i][$j]['param'] = $replace[$rule['param']]; } } } } } if (isset($field_group['layout'])) { $field_group['style'] = acf_extract_var($field_group, 'layout'); } if ($field_group['style'] === 'no_box') { $field_group['style'] = 'seamless'; } return $field_group; } function validate_post_taxonomy_location_rule($rule) { if (is_numeric($rule['value'])) { $term = acf_get_term($rule['value']); if ($term) { $rule['value'] = acf_encode_term($term); } } return $rule; } } acf_new_instance('ACF_Compatibility'); } function acf_get_compatibility($name) { return apply_filters("acf/compatibility/{$name}", false); }