File "acf-field-functions.php"
Full path: /home/kosmetik/public_html/wp-content/plugins/advanced-custom-fields/includes/acf-field-functions.php
File
size: 18.05 B
MIME-type: text/x-php
Charset: utf-8
Download Open Edit Advanced Editor Back
<?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);