示例#1
0
 /**
  * Fetch and sort fields.
  *
  * @global object $wpdb
  */
 function _get_meta()
 {
     global $wpdb;
     $cache_key = md5('usermetarepeater::_get_meta' . $this->currentUID . $this->slug);
     $cache_group = 'types_cache';
     $cached_object = wp_cache_get($cache_key, $cache_group);
     if ($this->use_cache) {
         if (false != $cached_object && is_array($cached_object)) {
             return $cached_object;
         }
     }
     $this->order_meta_name = '_' . $this->slug . '-sort-order';
     $_meta = parent::_get_meta();
     $ordered = array();
     $this->order = get_user_meta($this->currentUID, $this->order_meta_name, true);
     $cache_key_userfield = md5('usermeta::_get_meta' . $this->currentUID . $this->slug);
     $cached_object_userfield = wp_cache_get($cache_key_userfield, $cache_group);
     if ($this->use_cache) {
         if (false != $cached_object_userfield && is_array($cached_object_userfield)) {
             // WordPress cache
             $r = $cached_object_userfield;
         } else {
             $r = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->usermeta}\r\r\n\t\t\t\t\t\t\t\tWHERE user_id=%d\r\r\n\t\t\t\t\t\t\t\tAND meta_key=%s", $this->currentUID, $this->slug));
         }
     }
     if (!empty($r)) {
         $_meta = array();
         $_meta['by_meta_id'] = array();
         $_meta['by_meta_key'] = array();
         // Default order
         foreach ($r as $meta) {
             //print_r($meta);exit;
             // This will use last item in array if multiple values exist
             $_meta['single'] = maybe_unserialize($meta->meta_value);
             // Sort by meta_id column
             $_meta['by_meta_id'][$meta->umeta_id] = maybe_unserialize($meta->meta_value);
             // Sort by meta_key
             $_meta['by_meta_key'][] = maybe_unserialize($meta->meta_value);
         }
         ksort($_meta['by_meta_id']);
         // Custom order
         if (!empty($this->order)) {
             foreach ($this->order as $meta_id) {
                 if (isset($_meta['by_meta_id'][$meta_id])) {
                     $_meta['custom_order'][$meta_id] = $_meta['by_meta_id'][$meta_id];
                 }
             }
             // This ones are orphaned
             foreach ($_meta['by_meta_id'] as $meta_id => $meta) {
                 if (!isset($ordered[$meta_id])) {
                     $_meta['custom_order'][$meta_id] = $meta;
                 }
             }
         } else {
             $_meta['custom_order'] = $_meta['by_meta_id'];
         }
     } else {
         if (!is_null($this->meta_object)) {
             $_meta = array();
             $_meta['single'] = maybe_unserialize($this->meta_object->meta_value);
             // Sort by meta_id column
             $_meta['by_meta_id'][$this->meta_object->umeta_id] = maybe_unserialize($this->meta_object->meta_value);
             // Sort by meta_key
             $_meta['by_meta_key'][] = maybe_unserialize($this->meta_object->meta_value);
         } else {
             $_meta = array();
             $_meta['single'] = '';
             $_meta['by_meta_id'] = array();
             $_meta['by_meta_key'] = array();
         }
     }
     if (empty($_meta['custom_order'])) {
         $_meta['custom_order'] = $_meta['by_meta_id'];
     }
     wp_cache_add($cache_key, $_meta, $cache_group);
     // WordPress cache
     return $_meta;
 }