<?php acf_register_store('local-fields'); acf_register_store('local-groups'); acf_register_store('local-empty'); acf_enable_filter('local'); function acf_enable_local() { acf_enable_filter('local'); } function acf_disable_local() { acf_disable_filter('local'); } function acf_is_local_enabled() { return acf_is_filter_enabled('local') && acf_get_setting('local'); } function acf_get_local_store($name = '') { if (acf_is_local_enabled()) { return acf_get_store("local-{$name}"); } else { return acf_get_store('local-empty'); } } function acf_reset_local() { acf_get_local_store('fields')->reset(); acf_get_local_store('groups')->reset(); } function acf_get_local_field_groups() { return acf_get_local_store('groups')->get(); } function acf_have_local_field_groups() { return acf_get_local_store('groups')->count() ? true : false; } function acf_count_local_field_groups() { return acf_get_local_store('groups')->count(); } function acf_add_local_field_group($field_group) { $field_group = wp_parse_args($field_group, array('key' => '', 'title' => '', 'fields' => array(), 'local' => 'php')); if (!$field_group['key']) { $field_group['key'] = 'group_' . acf_slugify($field_group['title'], '_'); } if (acf_is_local_field_group($field_group['key'])) { return false; } $field_group = acf_prepare_field_group_for_import($field_group); $fields = acf_extract_var($field_group, 'fields'); acf_get_local_store('groups')->set($field_group['key'], $field_group); if ($fields) { acf_add_local_fields($fields); } return true; } function register_field_group($field_group) { acf_add_local_field_group($field_group); } function acf_remove_local_field_group($key = '') { return acf_get_local_store('groups')->remove($key); } function acf_is_local_field_group($key = '') { return acf_get_local_store('groups')->has($key); } function acf_is_local_field_group_key($key = '') { return acf_get_local_store('groups')->is($key); } function acf_get_local_field_group($key = '') { return acf_get_local_store('groups')->get($key); } function acf_add_local_fields($fields = array()) { $fields = acf_prepare_fields_for_import($fields); foreach ($fields as $field) { acf_add_local_field($field, true); } } function acf_get_local_fields($parent = '') { if ($parent) { return acf_get_local_store('fields')->query(array('parent' => $parent)); } else { return acf_get_local_store('fields')->get(); } } function acf_have_local_fields($parent = '') { return acf_get_local_fields($parent) ? true : false; } function acf_count_local_fields($parent = '') { return count(acf_get_local_fields($parent)); } function acf_add_local_field($field, $prepared = false) { $field = wp_parse_args($field, array('key' => '', 'name' => '', 'type' => '', 'parent' => '')); if (!$field['key']) { $field['key'] = 'field_' . $field['name']; } if (!$prepared) { return acf_add_local_fields(array($field)); } $key = $field['key']; $name = $field['name']; $store = acf_get_local_store('fields'); if ($store->is($key)) { $old_key = _acf_generate_local_key($store->get($key)); $new_key = _acf_generate_local_key($field); if ($old_key !== $new_key) { $key = $new_key; } } $store->set($key, $field)->alias($key, $name); } function _acf_generate_local_key($field) { return "{$field['key']}:{$field['parent']}"; } function acf_remove_local_field($key = '') { return acf_get_local_store('fields')->remove($key); } function acf_is_local_field($key = '') { return acf_get_local_store('fields')->has($key); } function acf_is_local_field_key($key = '') { return acf_get_local_store('fields')->is($key); } function acf_get_local_field($key = '') { return acf_get_local_store('fields')->get($key); } function _acf_apply_get_local_field_groups($groups = array()) { $local = acf_get_local_field_groups(); if ($local) { $map = wp_list_pluck($groups, 'key'); foreach ($local as $group) { $i = array_search($group['key'], $map); if ($i !== false) { unset($group['ID']); $groups[$i] = array_merge($groups[$i], $group); } else { $groups[] = acf_get_field_group($group['key']); } } $groups = wp_list_sort($groups, array('menu_order' => 'ASC', 'title' => 'ASC')); } return $groups; } add_filter('acf/load_field_groups', '_acf_apply_get_local_field_groups', 20, 1); function _acf_apply_is_local_field_key($bool, $id) { return acf_is_local_field_key($id); } add_filter('acf/is_field_key', '_acf_apply_is_local_field_key', 20, 2); function _acf_apply_is_local_field_group_key($bool, $id) { return acf_is_local_field_group_key($id); } add_filter('acf/is_field_group_key', '_acf_apply_is_local_field_group_key', 20, 2); function _acf_do_prepare_local_fields() { $fields = acf_get_local_fields(); if ($fields) { acf_add_local_fields($fields); } } add_action('acf/include_fields', '_acf_do_prepare_local_fields', 0, 1);