123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623 |
- <?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' => '',
- 'aria-label' => '',
- '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 ( ! empty( $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 ) {
- $field = apply_filters( 'acf/pre_render_field', $field, $post_id );
-
- 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_setting = false ) {
-
- $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, $field_setting );
- }
- echo "</$inner_element>" . "\n";
- }
- echo "<$inner_element class=\"acf-input\">" . "\n";
- acf_render_field( $field );
- if ( ! $field_setting && $instruction == 'field' ) {
- acf_render_field_instructions( $field );
- }
- echo "</$inner_element>" . "\n";
- if ( $field_setting && $instruction == 'field' ) {
- acf_render_field_instructions( $field );
- }
- 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, $tooltip = false ) {
- if ( $field['instructions'] ) {
- $instructions = acf_esc_html( $field['instructions'] );
- if ( $tooltip ) {
- printf( '<div class="acf-tip"><i tabindex="0" class="acf-icon acf-icon-help acf-js-tooltip" title="%s">?</i></div>', $instructions );
- } else {
- printf( '<p class="description">%s</p>', $instructions );
- }
- } elseif ( ! empty( $field['hint'] ) ) {
- $instructions = acf_esc_html( $field['hint'] );
- printf( '<p class="description">%s</p>', $instructions );
- }
- }
- 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'];
- }
-
- if ( ! empty( $setting['append'] ) ) {
- $setting['wrapper']['class'] .= ' acf-field-appended';
- }
- if ( ! empty( $setting['prepend'] ) ) {
- $setting['wrapper']['class'] .= ' acf-field-prepended';
- }
-
- $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'];
- }
-
- $label_location = ! empty( $setting['instructions'] ) ? 'field' : 'label';
-
- if ( $setting['type'] === 'true_false' ) {
- $label_location = 'label';
- }
-
- acf_render_field_wrap( $setting, 'div', $label_location );
- }
- 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 );
- $duplicates = array();
-
- 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 );
|