Create New Item
×
Item Type
File
Folder
Item Name
×
Search file in folder and subfolders...
File Manager
/
wp-content
/
plugins
/
advanced-custom-fields
/
includes
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php acf_register_store('fields')->prop('multisite', true); function acf_get_field($id = 0) { if (is_object($id)) { $id = $id->ID; } $store = acf_get_store('fields'); if ($store->has($id)) { return $store->get($id); } if (acf_is_local_field($id)) { $field = acf_get_local_field($id); } else { $field = acf_get_raw_field($id); } if (!$field) { return false; } $field = acf_validate_field($field); $field['prefix'] = 'acf'; $field = apply_filters('acf/load_field', $field); $store->set($field['key'], $field); $store->alias($field['key'], $field['ID'], $field['name']); return $field; } acf_add_filter_variations('acf/load_field', array('type', 'name', 'key'), 0); function acf_get_raw_field($id = 0) { $post = acf_get_field_post($id); if (!$post) { return false; } if ($post->post_type !== 'acf-field') { return false; } $field = (array) maybe_unserialize($post->post_content); $field['ID'] = $post->ID; $field['key'] = $post->post_name; $field['label'] = $post->post_title; $field['name'] = $post->post_excerpt; $field['menu_order'] = $post->menu_order; $field['parent'] = $post->post_parent; return $field; } function acf_get_field_post($id = 0) { if (is_numeric($id)) { return get_post($id); } elseif (is_string($id)) { $type = acf_is_field_key($id) ? 'key' : 'name'; $cache_key = acf_cache_key("acf_get_field_post:{$type}:{$id}"); $post_id = wp_cache_get($cache_key, 'acf'); if ($post_id === false) { $posts = get_posts(array('posts_per_page' => 1, 'post_type' => 'acf-field', 'orderby' => 'menu_order title', 'order' => 'ASC', 'suppress_filters' => false, 'cache_results' => true, 'update_post_meta_cache' => false, 'update_post_term_cache' => false, "acf_field_{$type}" => $id)); $post_id = $posts ? $posts[0]->ID : 0; wp_cache_set($cache_key, $post_id, 'acf'); } if ($post_id) { return get_post($post_id); } } return false; } function acf_is_field_key($id = '') { if (is_string($id) && substr($id, 0, 6) === 'field_') { return true; } return apply_filters('acf/is_field_key', false, $id); } function acf_validate_field($field = array()) { if (is_array($field) && !empty($field['_valid'])) { return $field; } $field = wp_parse_args($field, array('ID' => 0, 'key' => '', 'label' => '', 'name' => '', 'prefix' => '', 'type' => 'text', 'value' => null, 'menu_order' => 0, 'instructions' => '', 'required' => false, 'id' => '', 'class' => '', 'conditional_logic' => false, 'parent' => 0, 'wrapper' => array())); $field['ID'] = (int) $field['ID']; $field['menu_order'] = (int) $field['menu_order']; $field['wrapper'] = wp_parse_args($field['wrapper'], array('width' => '', 'class' => '', 'id' => '')); $field['_name'] = $field['name']; $field['_valid'] = 1; $field = apply_filters('acf/validate_field', $field); return $field; } acf_add_filter_variations('acf/validate_field', array('type'), 0); function acf_get_valid_field($field = false) { return acf_validate_field($field); } function acf_translate_field($field = array()) { $l10n = acf_get_setting('l10n'); $l10n_textdomain = acf_get_setting('l10n_textdomain'); if ($l10n && $l10n_textdomain) { $field['label'] = acf_translate($field['label']); $field['instructions'] = acf_translate($field['instructions']); $field = apply_filters('acf/translate_field', $field); } return $field; } acf_add_filter_variations('acf/translate_field', array('type'), 0); add_action('acf/validate_field', 'acf_translate_field'); function acf_get_fields($parent) { if (!is_array($parent)) { $parent = acf_get_field_group($parent); if (!$parent) { return array(); } } $fields = array(); if (acf_have_local_fields($parent['key'])) { $raw_fields = acf_get_local_fields($parent['key']); foreach ($raw_fields as $raw_field) { $fields[] = acf_get_field($raw_field['key']); } } else { $raw_fields = acf_get_raw_fields($parent['ID']); foreach ($raw_fields as $raw_field) { $fields[] = acf_get_field($raw_field['ID']); } } $fields = apply_filters('acf/load_fields', $fields, $parent); return $fields; } function acf_get_raw_fields($id = 0) { $cache_key = acf_cache_key("acf_get_field_posts:{$id}"); $post_ids = wp_cache_get($cache_key, 'acf'); if ($post_ids === false) { $posts = get_posts(array('posts_per_page' => -1, 'post_type' => 'acf-field', 'orderby' => 'menu_order', 'order' => 'ASC', 'suppress_filters' => true, 'cache_results' => true, 'update_post_meta_cache' => false, 'update_post_term_cache' => false, 'post_parent' => $id, 'post_status' => array('publish', 'trash'))); $post_ids = array(); foreach ($posts as $post) { $post_ids[] = $post->ID; } wp_cache_set($cache_key, $post_ids, 'acf'); } $fields = array(); foreach ($post_ids as $post_id) { $fields[] = acf_get_raw_field($post_id); } return $fields; } function acf_get_field_count($parent) { if (acf_have_local_fields($parent['key'])) { $raw_fields = acf_get_local_fields($parent['key']); } else { $raw_fields = acf_get_raw_fields($parent['ID']); } return apply_filters('acf/get_field_count', count($raw_fields), $parent); } function acf_clone_field($field, $clone_field) { $field['_clone'] = $clone_field['key']; $field = apply_filters('acf/clone_field', $field, $clone_field); return $field; } acf_add_filter_variations('acf/clone_field', array('type'), 0); function acf_prepare_field($field) { if (!empty($field['_prepare'])) { return $field; } if ($field['key']) { $field['name'] = $field['key']; } if ($field['prefix']) { $field['name'] = "{$field['prefix']}[{$field['name']}]"; } $field['id'] = acf_idify($field['name']); $field['_prepare'] = true; $field = apply_filters('acf/prepare_field', $field); return $field; } acf_add_filter_variations('acf/prepare_field', array('type', 'name', 'key'), 0); function acf_render_fields($fields, $post_id = 0, $el = 'div', $instruction = 'label') { if (is_array($post_id)) { $args = func_get_args(); $fields = $args[1]; $post_id = $args[0]; } $fields = apply_filters('acf/pre_render_fields', $fields, $post_id); $fields = array_filter($fields); if ($fields) { foreach ($fields as $field) { if ($field['value'] === null) { $field['value'] = acf_get_value($post_id, $field); } acf_render_field_wrap($field, $el, $instruction); } } do_action('acf/render_fields', $fields, $post_id); } function acf_render_field_wrap($field, $element = 'div', $instruction = 'label') { $field = acf_validate_field($field); $field = acf_prepare_field($field); if (!$field) { return; } $elements = array('div' => 'div', 'tr' => 'td', 'td' => 'div', 'ul' => 'li', 'ol' => 'li', 'dl' => 'dt'); if (isset($elements[$element])) { $inner_element = $elements[$element]; } else { $element = $inner_element = 'div'; } $wrapper = array('id' => '', 'class' => 'acf-field', 'width' => '', 'style' => '', 'data-name' => $field['_name'], 'data-type' => $field['type'], 'data-key' => $field['key']); $wrapper['class'] .= " acf-field-{$field['type']}"; if ($field['key']) { $wrapper['class'] .= " acf-field-{$field['key']}"; } if ($field['required']) { $wrapper['class'] .= ' is-required'; $wrapper['data-required'] = 1; } $wrapper['class'] = str_replace('_', '-', $wrapper['class']); $wrapper['class'] = str_replace('field-field-', 'field-', $wrapper['class']); if ($field['wrapper']) { $wrapper = acf_merge_attributes($wrapper, $field['wrapper']); } $width = acf_extract_var($wrapper, 'width'); if ($width) { $width = acf_numval($width); if ($element !== 'tr' && $element !== 'td') { $wrapper['data-width'] = $width; $wrapper['style'] .= " width:{$width}%;"; } } $wrapper = array_map('trim', $wrapper); $wrapper = array_filter($wrapper); $wrapper = apply_filters('acf/field_wrapper_attributes', $wrapper, $field); if (!empty($field['conditional_logic'])) { $wrapper['data-conditions'] = $field['conditional_logic']; } if (!empty($field['conditions'])) { $wrapper['data-conditions'] = $field['conditions']; } $attributes_html = acf_esc_attr($wrapper); echo "<{$element} {$attributes_html}>" . "\n"; if ($element !== 'td') { echo "<{$inner_element} class=\"acf-label\">" . "\n"; acf_render_field_label($field); if ($instruction == 'label') { acf_render_field_instructions($field); } echo "</{$inner_element}>" . "\n"; } echo "<{$inner_element} class=\"acf-input\">" . "\n"; acf_render_field($field); if ($instruction == 'field') { acf_render_field_instructions($field); } echo "</{$inner_element}>" . "\n"; echo "</{$element}>" . "\n"; } function acf_render_field($field) { $field = acf_validate_field($field); $field = acf_prepare_field($field); if (!$field) { return; } do_action('acf/render_field', $field); } acf_add_action_variations('acf/render_field', array('type', 'name', 'key'), 0); function acf_render_field_label($field) { $label = acf_get_field_label($field); if ($label) { echo '<label' . ($field['id'] ? ' for="' . esc_attr($field['id']) . '"' : '') . '>' . acf_esc_html($label) . '</label>'; } } function acf_get_field_label($field, $context = '') { $label = $field['label']; if ($context == 'admin' && $label === '') { $label = __('(no label)', 'acf'); } if ($field['required']) { $label .= ' <span class="acf-required">*</span>'; } $label = apply_filters('acf/get_field_label', $label, $field, $context); return $label; } function acf_render_field_instructions($field) { if ($field['instructions']) { echo '<p class="description">' . acf_esc_html($field['instructions']) . '</p>'; } } function acf_render_field_setting($field, $setting, $global = false) { $setting = acf_validate_field($setting); $setting['wrapper']['data-key'] = $setting['name']; $setting['wrapper']['class'] .= ' acf-field-setting-' . $setting['name']; if (!$global) { $setting['wrapper']['data-setting'] = $field['type']; } $setting['prefix'] = $field['prefix']; if ($setting['value'] === null) { if (isset($field[$setting['name']])) { $setting['value'] = $field[$setting['name']]; } elseif (isset($setting['default_value'])) { $setting['value'] = $setting['default_value']; } } if (isset($setting['_append'])) { $setting['wrapper']['data-append'] = $setting['_append']; } acf_render_field_wrap($setting, 'tr', 'label'); } function acf_update_field($field, $specific = array()) { $field = acf_validate_field($field); $field = wp_unslash($field); $field = acf_parse_types($field); if ($field['conditional_logic']) { $field['conditional_logic'] = array_filter($field['conditional_logic']); $field['conditional_logic'] = array_values($field['conditional_logic']); $field['conditional_logic'] = array_map('array_filter', $field['conditional_logic']); $field['conditional_logic'] = array_map('array_values', $field['conditional_logic']); } if ($field['parent'] && !is_numeric($field['parent'])) { $parent = acf_get_field_post($field['parent']); $field['parent'] = $parent ? $parent->ID : 0; } $field = apply_filters('acf/update_field', $field); $_field = $field; acf_extract_vars($_field, array('ID', 'key', 'label', 'name', 'prefix', 'value', 'menu_order', 'id', 'class', 'parent', '_name', '_prepare', '_valid')); $save = array('ID' => $field['ID'], 'post_status' => 'publish', 'post_type' => 'acf-field', 'post_title' => $field['label'], 'post_name' => $field['key'], 'post_excerpt' => $field['name'], 'post_content' => maybe_serialize($_field), 'post_parent' => $field['parent'], 'menu_order' => $field['menu_order']); if ($specific) { $specific[] = 'ID'; $save = acf_get_sub_array($save, $specific); } remove_filter('content_save_pre', 'wp_targeted_link_rel'); $save = wp_slash($save); if ($field['ID']) { wp_update_post($save); } else { $field['ID'] = wp_insert_post($save); } acf_flush_field_cache($field); do_action('acf/updated_field', $field); return $field; } acf_add_filter_variations('acf/update_field', array('type', 'name', 'key'), 0); function _acf_apply_unique_field_slug($slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug) { if ($post_type === 'acf-field') { return $original_slug; } return $slug; } add_filter('wp_unique_post_slug', '_acf_apply_unique_field_slug', 999, 6); function acf_flush_field_cache($field) { acf_get_store('fields')->remove($field['key']); wp_cache_delete(acf_cache_key("acf_get_field_post:name:{$field['name']}"), 'acf'); wp_cache_delete(acf_cache_key("acf_get_field_post:key:{$field['key']}"), 'acf'); wp_cache_delete(acf_cache_key("acf_get_field_posts:{$field['parent']}"), 'acf'); } function acf_delete_field($id = 0) { $field = acf_get_field($id); if (!$field || !$field['ID']) { return false; } wp_delete_post($field['ID'], true); acf_flush_field_cache($field); do_action('acf/delete_field', $field); return true; } acf_add_action_variations('acf/delete_field', array('type', 'name', 'key'), 0); function acf_trash_field($id = 0) { $field = acf_get_field($id); if (!$field || !$field['ID']) { return false; } wp_trash_post($field['ID'], true); do_action('acf/trash_field', $field); return true; } function acf_untrash_field($id = 0) { $field = acf_get_field($id); if (!$field || !$field['ID']) { return false; } wp_untrash_post($field['ID'], true); acf_flush_field_cache($field); do_action('acf/untrash_field', $field); return true; } function _acf_untrash_field_post_status($new_status, $post_id, $previous_status) { return get_post_type($post_id) === 'acf-field' ? $previous_status : $new_status; } add_action('wp_untrash_post_status', '_acf_untrash_field_post_status', 10, 3); function acf_prefix_fields(&$fields, $prefix = 'acf') { foreach ($fields as &$field) { $field['prefix'] = $prefix . substr($field['prefix'], 3); } } function acf_get_sub_field($id, $field) { $sub_field = false; if (isset($field['sub_fields'])) { $sub_field = acf_search_fields($id, $field['sub_fields']); } $sub_field = apply_filters('acf/get_sub_field', $sub_field, $id, $field); return $sub_field; } acf_add_filter_variations('acf/get_sub_field', array('type'), 2); function acf_search_fields($id, $fields) { foreach (array('key', 'name', '_name', '__name') as $key) { foreach ($fields as $field) { if (isset($field[$key]) && $field[$key] === $id) { return $field; } } } return false; } function acf_is_field($field = false, $id = '') { return is_array($field) && isset($field['key']) && isset($field['name']); } function acf_get_field_ancestors($field) { $ancestors = array(); while ($field['parent'] && ($field = acf_get_field($field['parent']))) { $ancestors[] = $field['ID'] ? $field['ID'] : $field['key']; } return $ancestors; } function acf_duplicate_fields($fields = array(), $parent_id = 0) { $keys = array(); foreach ($fields as $field) { usleep(1); $keys[$field['key']] = uniqid('field_'); } acf_append_data('generated_keys', $keys); foreach ($fields as $field) { $field_id = $field['ID'] ? $field['ID'] : $field['key']; $duplicates[] = acf_duplicate_field($field_id, $parent_id); } return $duplicates; } function acf_duplicate_field($id = 0, $parent_id = 0) { $field = acf_get_field($id); if (!$field) { return false; } $field['ID'] = 0; $keys = acf_get_data('generated_keys'); if (isset($keys[$field['key']])) { $field['key'] = $keys[$field['key']]; } else { $field['key'] = uniqid('field_'); } if ($parent_id) { $field['parent'] = $parent_id; } if ($field['conditional_logic']) { foreach ($field['conditional_logic'] as $group_i => $group) { foreach ($group as $rule_i => $rule) { $field['conditional_logic'][$group_i][$rule_i]['field'] = isset($keys[$rule['field']]) ? $keys[$rule['field']] : $rule['field']; } } } $field = apply_filters('acf/duplicate_field', $field); return acf_update_field($field); } acf_add_filter_variations('acf/duplicate_field', array('type'), 0); function acf_prepare_fields_for_export($fields = array()) { return array_map('acf_prepare_field_for_export', $fields); } function acf_prepare_field_for_export($field) { acf_extract_vars($field, array('ID', 'prefix', 'value', 'menu_order', 'id', 'class', 'parent', '_name', '_prepare', '_valid')); return apply_filters('acf/prepare_field_for_export', $field); } acf_add_filter_variations('acf/prepare_field_for_export', array('type'), 0); function acf_prepare_fields_for_import($fields = array()) { $fields = array_values($fields); $i = 0; while ($i < count($fields)) { $field = acf_prepare_field_for_import($fields[$i]); if (isset($field['key'])) { $fields[$i] = $field; } else { array_splice($fields, $i, 1, $field); } $i++; } return apply_filters('acf/prepare_fields_for_import', $fields); } function acf_prepare_field_for_import($field) { return apply_filters('acf/prepare_field_for_import', $field); } acf_add_filter_variations('acf/prepare_field_for_import', array('type'), 0);