web/wp-content/plugins/acf-extended/includes/fields-settings/settings.php (301 lines of code) (raw):

<?php if(!defined('ABSPATH')){ exit; } if(!class_exists('acfe_field_settings')): class acfe_field_settings{ /** * construct */ function __construct(){ // actions add_action('acf/field_group/admin_head', array($this, 'load')); add_action('wp_ajax_acf/field_group/render_field_settings', array($this, 'load_ajax'), 5); // filters add_filter('acfe/load_field', array($this, 'load_field'), 20); add_filter('acfe/load_field', array($this, 'load_field_additional'), 20); add_filter('acf/prepare_field', array($this, 'prepare_field'), 20); } /** * load */ function load(){ if(!acf_is_filter_enabled('acfe/field_group/advanced')){ return; } $this->prepare_settings(); $this->add_settings(); } /** * load_ajax */ function load_ajax(){ $post_id = acf_maybe_get_POST('post_id'); $field_group = acf_get_field_group($post_id); if(!$field_group){ return; } if(!acf_maybe_get($field_group, 'acfe_form')){ return; } $this->add_settings(); } /** * add_settings */ function add_settings(){ // exclude $exclude = array('accordion', 'acfe_column', 'tab'); // get fields types foreach(acf_get_field_types_info() as $field){ // field type $field_type = $field['name']; // check if(in_array($field_type, $exclude)){ continue; } add_action("acf/render_field_settings/type={$field_type}", array($this, 'render_field_settings'), 99); } } /** * render_field_settings * * @param $field */ function render_field_settings($field){ // settings acf_render_field_setting($field, array( 'label' => __('Advanced Settings', 'acfe'), 'name' => 'acfe_settings', 'key' => 'acfe_settings', 'instructions' => __('Change field settings based on location'), 'type' => 'repeater', 'button_label' => __('Add settings'), 'required' => false, 'layout' => 'row', 'wrapper' => array( 'data-enable-switch' => true ), 'sub_fields' => array( array( 'label' => 'Location', 'name' => 'acfe_settings_location', 'key' => 'acfe_settings_location', 'type' => 'select', 'instructions' => '', 'required' => 0, 'conditional_logic' => 0, 'wrapper' => array( 'width' => '', 'class' => '', 'id' => '', ), 'choices' => array( 'admin' => 'Administration', 'front' => 'Front-end', ), 'allow_null' => true, 'multiple' => 0, 'ui' => 0, 'return_format' => 'value', 'ajax' => 0, 'placeholder' => 'Everywhere', ), array( 'label' => __('Settings'), 'name' => 'acfe_settings_settings', 'key' => 'acfe_settings_settings', 'instructions' => '', 'type' => 'repeater', 'button_label' => __('+'), 'required' => false, 'layout' => 'table', 'sub_fields' => array( array( 'ID' => false, 'label' => 'Setting', 'name' => 'acfe_settings_setting_type', 'key' => 'acfe_settings_setting_type', 'prefix' => '', '_name' => '', '_prepare' => '', 'type' => 'select', 'instructions' => false, 'required' => false, 'wrapper' => array( 'width' => '', 'class' => '', 'id' => '', ), 'choices' => array( 'required' => 'Required', 'hide_field' => 'Hide field', 'hide_label' => 'Hide label', 'hide_instructions' => 'Hide instructions', 'default_value' => 'Default value', 'placeholder' => 'Placeholder', 'instructions' => 'Instructions', 'custom' => 'Custom setting', ) ), array( 'ID' => false, 'label' => 'Setting name', 'name' => 'acfe_settings_setting_name', 'key' => 'acfe_settings_setting_name', 'prefix' => '', '_name' => '', '_prepare' => '', 'type' => 'text', 'instructions' => false, 'required' => false, 'wrapper' => array( 'width' => '', 'class' => '', 'id' => '', ), 'conditional_logic' => array( array( array( 'field' => 'acfe_settings_setting_type', 'operator' => '==', 'value' => 'custom', ) ) ) ), array( 'ID' => false, 'label' => 'Operator / Value', 'name' => 'acfe_settings_setting_operator', 'key' => 'acfe_settings_setting_operator', 'prefix' => '', '_name' => '', '_prepare' => '', 'type' => 'select', 'choices' => array( 'Values' => array( 'true' => '= true', 'false' => '= false', 'empty' => '= (empty)', ), 'Operators' => array( '=' => '=', ), ), 'instructions' => false, 'required' => false, 'wrapper' => array( 'width' => '', 'class' => '', 'id' => '', ), ), array( 'ID' => false, 'label' => 'Value', 'name' => 'acfe_settings_setting_value', 'key' => 'acfe_settings_setting_value', 'prefix' => '', '_name' => '', '_prepare' => '', 'type' => 'text', 'instructions' => false, 'placeholder' => '', 'required' => false, 'wrapper' => array( 'width' => '', 'class' => '', 'id' => '', ), 'conditional_logic' => array( array( array( 'field' => 'acfe_settings_setting_operator', 'operator' => '==', 'value' => '=', ) ), ) ), ) ), ) )); } /** * load_field * * @param $field * * @return mixed */ function load_field($field){ if(!acf_maybe_get($field, 'acfe_settings')){ return $field; } $exclude = apply_filters('acfe/settings/exclude', false, $field); if($exclude){ return $field; } foreach($field['acfe_settings'] as $k => $rule){ // fix possible acf clone index if($k === 'acfcloneindex'){ continue; } // screen $screen = isset($rule['acfe_settings_location']) ? $rule['acfe_settings_location'] : ''; $screen_allow = false; // screen: all if(empty($screen)){ $screen_allow = true; } // screen: admin elseif($screen === 'admin' && acfe_is_admin()){ $screen_allow = true; } // screen: front elseif($screen === 'front' && acfe_is_front()){ $screen_allow = true; } if(!$screen_allow){ continue; } if(!acf_maybe_get($rule, 'acfe_settings_settings')){ continue; } // properties $properties = $rule['acfe_settings_settings']; foreach($properties as $property){ // required / hide field / hide label / default value / placeholder / instructions $property_name = $property['acfe_settings_setting_type']; // custom if($property['acfe_settings_setting_type'] === 'custom'){ if(!empty($property['acfe_settings_setting_name'])){ $property_name = $property['acfe_settings_setting_name']; } } switch($property['acfe_settings_setting_operator']){ // custom value case '=': { acfe_array_set($field, $property_name, $property['acfe_settings_setting_value']); break; } // true case 'true': { acfe_array_set($field, $property_name, true); break; } // false case 'false': { acfe_array_set($field, $property_name, false); break; } // empty case 'empty': { acfe_array_set($field, $property_name, ''); break; } } } } return $field; } /** * load_field_additional * * @param $field * * @return mixed */ function load_field_additional($field){ $hide_required = acf_maybe_get($field, 'hide_required'); if($hide_required){ if(is_bool($hide_required) || $hide_required === 'all' || ($hide_required === 'front' && acfe_is_front()) || $hide_required === 'admin' && acfe_is_admin()){ $field['required'] = false; } } return $field; } /** * prepare_field * * @param $field * * @return false */ function prepare_field($field){ $hide_field = acf_maybe_get($field, 'hide_field'); if($hide_field){ if(is_bool($hide_field) || $hide_field === 'all' || ($hide_field === 'front' && acfe_is_front()) || $hide_field === 'admin' && acfe_is_admin()){ return false; } } $hide_label = acf_maybe_get($field, 'hide_label'); if($hide_label){ if(is_bool($hide_label) || $hide_label === 'all' || ($hide_label === 'front' && acfe_is_front()) || $hide_label === 'admin' && acfe_is_admin()){ $field['label'] = ''; } } $hide_instructions = acf_maybe_get($field, 'hide_instructions'); if(is_bool($hide_instructions) || $hide_instructions === 'all' || ($hide_instructions === 'front' && acfe_is_front()) || $hide_instructions === 'admin' && acfe_is_admin()){ $field['instructions'] = ''; } return $field; } /** * prepare_settings */ function prepare_settings(){ $fields = array('acfe_settings', 'acfe_settings_location', 'acfe_settings_settings', 'acfe_settings_setting_type', 'acfe_settings_setting_name', 'acfe_settings_setting_operator', 'acfe_settings_setting_value'); foreach($fields as $name){ add_filter("acf/prepare_field/name={$name}", function($field){ $field['prefix'] = str_replace('row-', '', $field['prefix']); $field['name'] = str_replace('row-', '', $field['name']); return $field; }); } } } // initialize new acfe_field_settings(); endif;