ID; // add meta boxes $this->add_meta_boxes($post_id, $post_type); // action do_action('acfe/dev/add_meta_boxes', $post_id, $post_type, 'post'); } /** * add_posts_meta_boxes * * acfe/add_posts_meta_boxes * * @param $post_type */ function add_posts_meta_boxes($post_type){ // post id $post_id = "{$post_type}_options"; // add meta boxes $this->add_meta_boxes($post_id, 'edit'); // action do_action('acfe/dev/add_meta_boxes', $post_id, 'edit', 'posts'); } /** * add_term_meta_boxes * * acfe/add_term_meta_boxes * * @param $taxonomy * @param $term */ function add_term_meta_boxes($taxonomy, $term){ // post id $post_id = "term_{$term->term_id}"; // add meta boxes $this->add_meta_boxes($post_id, "edit-{$taxonomy}"); // action do_action('acfe/dev/add_meta_boxes', $post_id, "edit-{$taxonomy}", 'term'); } /** * add_terms_meta_boxes * * acfe/add_terms_meta_boxes * * @param $taxonomy */ function add_terms_meta_boxes($taxonomy){ // post id $post_id = "tax_{$taxonomy}_options"; // add meta boxes $this->add_meta_boxes($post_id, 'edit'); // action do_action('acfe/dev/add_meta_boxes', $post_id, 'edit', 'terms'); } /** * add_user_meta_boxes * * acfe/add_user_meta_boxes * * @param $user */ function add_user_meta_boxes($user){ // post id $post_id = "user_{$user->ID}"; // add meta boxes $this->add_meta_boxes($post_id, array('profile', 'user-edit')); // action do_action('acfe/dev/add_meta_boxes', $post_id, array('profile', 'user-edit'), 'user'); } /** * add_option_meta_boxes * * acfe/add_option_meta_boxes * * @param $page */ function add_option_meta_boxes($page){ // post id $post_id = $page['post_id']; // add meta boxes $this->add_meta_boxes($post_id, 'acf_options_page'); // action do_action('acfe/dev/add_meta_boxes', $post_id, 'acf_options_page', 'option'); } /** * add_settings_meta_boxes * * acfe/add_settings_meta_boxes * * @param $page */ function add_settings_meta_boxes($page){ // post id $post_id = $page; // add meta boxes $this->add_meta_boxes($post_id, $page); do_action('acfe/dev/add_meta_boxes', $post_id, $page, 'settings'); } /** * add_attachment_meta_boxes * * acfe/add_attachment_meta_boxes * * @param $post */ function add_attachment_meta_boxes($post){ // vars $post_id = $post->ID; $post_type = $post->post_type; // add meta boxes $this->add_meta_boxes($post_id, $post_type); do_action('acfe/dev/add_meta_boxes', $post_id, $post_type, 'attachment'); } /** * add_attachments_meta_boxes * * acfe/add_attachments_meta_boxes */ function add_attachments_meta_boxes(){ // post id $post_id = "attachment_options"; // add meta boxes $this->add_meta_boxes($post_id, 'edit'); do_action('acfe/dev/add_meta_boxes', $post_id, 'edit', 'attachments'); } /** * add_users_meta_boxes * * acfe/add_users_meta_boxes */ function add_users_meta_boxes(){ // post id $post_id = "user_options"; // add meta boxes $this->add_meta_boxes($post_id, 'edit'); do_action('acfe/dev/add_meta_boxes', $post_id, 'edit', 'users'); } /** * add_meta_boxes * * @param $post_id * @param $screen */ function add_meta_boxes($post_id, $screen){ // setup meta $this->setup_meta($post_id); // do action // do_action('acfe/dev/add_meta_boxes', $post_id, $screen); // vars $bulk = false; $context = 'normal'; $priority = 'low'; // wp meta if(!empty($this->wp_meta)){ // display metabox on object lists screen acf_set_filters(array( 'acfe/post_type_list' => true, 'acfe/taxonomy_list' => true, 'acfe/user_list' => true, 'acfe/attachment_list' => true, )); if(empty($this->acf_meta)){ $bulk = true; } // vars $id = 'acfe-wp-custom-fields'; $title = $this->type === 'option' ? __('WP Options Meta', 'acfe') : __('WP Custom Fields', 'acfe'); $title .= ''; add_meta_box($id, $title, array($this, 'render_meta_box'), $screen, $context, $priority, array('table' => 'wp_meta', 'type' => $this->type, 'bulk' => $bulk)); } // acf meta if(!empty($this->acf_meta)){ // display metabox on object lists screen acf_set_filters(array( 'acfe/post_type_list' => true, 'acfe/taxonomy_list' => true, 'acfe/user_list' => true, 'acfe/attachment_list' => true, )); if(!$bulk){ $bulk = true; } $id = 'acfe-acf-custom-fields'; $title = $this->type === 'option' ? __('ACF Options Meta', 'acfe') : __('ACF Custom Fields', 'acfe'); $title .= ''; add_meta_box($id, $title, array($this, 'render_meta_box'), $screen, $context, $priority, array('table' => 'acf_meta', 'type' => $this->type, 'bulk' => $bulk)); } } /** * render_meta_box * * @param $post * @param $metabox */ function render_meta_box($post, $metabox){ //vars $args = $metabox['args']; $columns = apply_filters('acfe/dev/meta/columns', array(), $args); ?>
' . print_r($raw, true) . ''; // empty value if(acf_is_empty($value)){ $return = '
(' . __('empty', 'acf') . ')';
// serialized value
}elseif(is_serialized($value)){
$value = maybe_unserialize($value);
if(is_object($value) && is_a($value, '__PHP_Incomplete_Class')){
// do nothing
}else{
$value = @map_deep($value, '_wp_specialchars');
}
$return = '' . print_r($value, true) . ''; $return .= '
' . print_r($raw, true) . ''; // html value }elseif(acfe_is_html($value)){ $return = '
' . print_r($raw, true) . ''; // json value }elseif(acfe_is_json($value)){ $value = json_decode($value); $value = @map_deep($value, '_wp_specialchars'); $return = '
' . print_r($value, true) . ''; $return .= '
' . print_r($raw, true) . ''; } // return return $return; } /** * setup_meta * * @param $post_id */ function setup_meta($post_id = 0){ // validate $post_id = acf_get_valid_post_id($post_id); // bail early if(empty($post_id)){ return; } // extract decoded post_id // $id // $type extract(acf_decode_post_id($post_id)); // set global type $this->type = $type; // get meta $all_meta = $this->get_meta($id, $type); $wp_meta = $this->sort_meta($all_meta, $type); // bail early if(empty($wp_meta)){ return; } // vars $acf_meta = array(); // loop to prepare acf_meta foreach($wp_meta as $key => $meta){ $ref = false; $ref_found = false; // no prefix, so not acf meta if(isset($wp_meta["_$key"])){ $ref = $wp_meta["_$key"]; $ref_found = true; } // filters $ref = apply_filters('acfe/dev/meta_ref', $ref, $wp_meta, $type, $key, $id, $post_id); if(!$ref){ continue; } // check if key is field_abcde123456 if(!acf_is_field_key($ref['value'])){ continue; } // vars $field_key = $ref['value']; $field_type = '' . __('Undefined', 'acfe') . ''; $field_group_title = '' . __('Undefined', 'acfe') . ''; // get field $field = acf_get_field($field_key); // check clone in sub field: field_123456abcdef_field_123456abcfed if(!$field && substr_count($field_key, 'field_') > 1){ // get field key (last key) $_field_key = substr($field_key, strrpos($field_key, 'field_')); // get field $field = acf_get_field($_field_key); } // found field if($field){ // Field type $field_type = acf_get_field_type($field['type']); $field_type = acfe_get($field_type, 'label', 'Undefined'); // Field Group $field_group = acfe_get_field_group_from_field($field); if($field_group){ $field_group_title = $field_group['title']; // no id setting, try to get raw field group from db if(!$field_group['ID']){ $field_group = acf_get_raw_field_group($field_group['key']); } // found db field group if($field_group && $field_group['ID']){ $post_status = get_post_status($field_group['ID']); if($post_status === 'publish' || $post_status === 'acf-disabled'){ $field_group_title = '' . $field_group['title'] . ''; } } } } // assign acf meta: prefix if($ref_found){ unset($wp_meta["_$key"]); $_meta = $ref; $_meta['field_type'] = $field_type; $_meta['field_group'] = $field_group_title; $acf_meta[] = $_meta; } // assign acf meta: normal $_meta = $wp_meta[ $key ]; $_meta['field_type'] = $field_type; $_meta['field_group'] = $field_group_title; $acf_meta[] = $_meta; // unset wp meta unset($wp_meta[ $key ]); } // assign global $this->wp_meta = $wp_meta; $this->acf_meta = $acf_meta; } /** * get_meta * * @param $id * @param $type * * @return array|object|stdClass|null */ function get_meta($id, $type){ global $wpdb; $all_meta = null; switch($type){ case 'post': { $all_meta = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->postmeta} WHERE `post_id` = %d ", $id)); break; } case 'term': { $all_meta = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->termmeta} WHERE `term_id` = %d ", $id)); break; } case 'user': { $all_meta = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->usermeta} WHERE `user_id` = %d ", $id)); break; } case 'option': { $search_ = $wpdb->esc_like("{$id}_") . '%'; $_search_ = $wpdb->esc_like("_{$id}_") . '%'; $all_meta = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->options} WHERE `option_name` LIKE %s OR `option_name` LIKE %s OR `option_name` = %s", $search_, $_search_, $id)); break; } } return $all_meta; } /** * sort_meta * * @param $all_meta * @param $type * * @return array|false */ function sort_meta($all_meta, $type){ if(empty($all_meta)){ return false; } $wp_meta = array(); // re-order switch($type){ case 'post': case 'term': { usort($all_meta, function($a, $b){ return strcmp($a->meta_key, $b->meta_key); }); foreach($all_meta as $meta){ $wp_meta[ $meta->meta_key ] = array( 'id' => $meta->meta_id, 'key' => $meta->meta_key, 'value' => $meta->meta_value, 'type' => $type, ); } break; } case 'user': { usort($all_meta, function($a, $b){ return strcmp($a->meta_key, $b->meta_key); }); foreach($all_meta as $meta){ $wp_meta[ $meta->meta_key ] = array( 'id' => $meta->umeta_id, 'key' => $meta->meta_key, 'value' => $meta->meta_value, 'type' => $type, ); } break; } case 'option': { usort($all_meta, function($a, $b){ return strcmp($a->option_name, $b->option_name); }); foreach($all_meta as $meta){ $wp_meta[$meta->option_name] = array( 'id' => $meta->option_id, 'key' => $meta->option_name, 'value' => $meta->option_value, 'autoload' => $meta->autoload, 'type' => $type, ); } break; } } return $wp_meta; } } acf_new_instance('acfe_dev'); endif; /** * acfe_dev_get_wp_meta * * @return mixed */ function acfe_dev_get_wp_meta(){ return acf_get_instance('acfe_dev')->wp_meta; } /** * acfe_dev_get_acf_meta * * @return mixed */ function acfe_dev_get_acf_meta(){ return acf_get_instance('acfe_dev')->acf_meta; } /** * acfe_dev_count_meta * * @return int */ function acfe_dev_count_meta(){ return count(acfe_dev_get_wp_meta()) + count(acfe_dev_get_acf_meta()); }