function _migrate_field_group_500($ofg) { // global global $wpdb; // get post status $post_status = $ofg->post_status; // create new field group $nfg = array('ID' => 0, 'title' => $ofg->post_title, 'menu_order' => $ofg->menu_order); // location rules $groups = array(); // get all rules $rules = get_post_meta($ofg->ID, 'rule', false); if (is_array($rules)) { $group_no = 0; foreach ($rules as $rule) { // if field group was duplicated, it may now be a serialized string! $rule = maybe_unserialize($rule); // does this rule have a group? // + groups were added in 4.0.4 if (!isset($rule['group_no'])) { $rule['group_no'] = $group_no; // sperate groups? if (get_post_meta($ofg->ID, 'allorany', true) == 'any') { $group_no++; } } // extract vars $group = acf_extract_var($rule, 'group_no'); $order = acf_extract_var($rule, 'order_no'); // add to group $groups[$group][$order] = $rule; // sort rules ksort($groups[$group]); } // sort groups ksort($groups); } $nfg['location'] = $groups; // settings if ($position = get_post_meta($ofg->ID, 'position', true)) { $nfg['position'] = $position; } if ($layout = get_post_meta($ofg->ID, 'layout', true)) { $nfg['layout'] = $layout; } if ($hide_on_screen = get_post_meta($ofg->ID, 'hide_on_screen', true)) { $nfg['hide_on_screen'] = maybe_unserialize($hide_on_screen); } // Note: acf_update_field_group will call the acf_get_valid_field_group function and apply 'compatibility' changes // add old ID reference $nfg['old_ID'] = $ofg->ID; // save field group $nfg = acf_update_field_group($nfg); // trash? if ($post_status == 'trash') { acf_trash_field_group($nfg['ID']); } // return return $nfg; }
function trashed_post($post_id) { // validate post type if (get_post_type($post_id) != 'acf-field-group') { return; } // trash field group acf_trash_field_group($post_id); }
function acf_update_500_field_group($ofg) { // global global $wpdb; // create new field group $nfg = array('ID' => 0, 'title' => $ofg->post_title, 'menu_order' => $ofg->menu_order); // location rules $groups = array(); // get all rules $rules = get_post_meta($ofg->ID, 'rule', false); if (is_array($rules)) { $group_no = 0; foreach ($rules as $rule) { // if field group was duplicated, it may now be a serialized string! $rule = maybe_unserialize($rule); // does this rule have a group? // + groups were added in 4.0.4 if (!isset($rule['group_no'])) { $rule['group_no'] = $group_no; // sperate groups? if (get_post_meta($ofg->ID, 'allorany', true) == 'any') { $group_no++; } } // extract vars $group = acf_extract_var($rule, 'group_no'); $order = acf_extract_var($rule, 'order_no'); // add to group $groups[$group][$order] = $rule; // sort rules ksort($groups[$group]); } // sort groups ksort($groups); } $nfg['location'] = $groups; // settings if ($position = get_post_meta($ofg->ID, 'position', true)) { $nfg['position'] = $position; } if ($layout = get_post_meta($ofg->ID, 'layout', true)) { $nfg['layout'] = $layout; } if ($hide_on_screen = get_post_meta($ofg->ID, 'hide_on_screen', true)) { $nfg['hide_on_screen'] = maybe_unserialize($hide_on_screen); } // Note: acf_update_field_group will call the acf_get_valid_field_group function and apply 'compatibility' changes // save field group $nfg = acf_update_field_group($nfg); // action for 3rd party do_action('acf/update_500_field_group', $nfg, $ofg); // trash? if ($ofg->post_status == 'trash') { acf_trash_field_group($nfg['ID']); } // global global $wpdb; // get field from postmeta $rows = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->postmeta} WHERE post_id = %d AND meta_key LIKE %s", $ofg->ID, 'field_%'), ARRAY_A); // check if ($rows) { // loop foreach ($rows as $row) { // bail early if key already migrated (potential duplicates in DB) if (acf_has_done('update_500_field_group_' . $ofg->ID . '_' . $row['meta_key'])) { continue; } // vars $field = $row['meta_value']; $field = maybe_unserialize($field); $field = maybe_unserialize($field); // run again for WPML // add parent $field['parent'] = $nfg['ID']; // migrate field $field = acf_update_500_field($field); } } // return return $nfg; }