Make WordPress Core

Ticket #5183: general_meta_table.diff

File general_meta_table.diff, 4.4 KB (added by filosofo, 16 years ago)
  • wp-includes/functions.php

     
    391391        return true;
    392392}
    393393
     394function get_general_meta( $meta_type = '', $object_id = 0, $meta_key = '') {
     395        global $wpdb;
     396        $object_id = (int) $object_id;
    394397
     398        if ( !$object_id )
     399                return false;
     400
     401        if ( !empty($meta_key) ) {
     402                $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key);
     403                $metas = $wpdb->get_results("SELECT meta_value FROM $wpdb->meta WHERE object_id = '$object_id' AND meta_key = '$meta_key'");
     404        } else {
     405                $metas = $wpdb->get_results("SELECT meta_value FROM $wpdb->meta WHERE object_id = '$object_id'");
     406        }
     407
     408        if ( empty($metas) ) {
     409                if ( empty($meta_key) )
     410                        return array();
     411                else
     412                        return '';
     413        }
     414
     415        foreach ($metas as $meta)
     416                $values[] = maybe_unserialize($meta->meta_value);
     417
     418        if ( count($values) == 1 )
     419                return $values[0];
     420        else
     421                return $values;
     422}
     423
     424function update_general_meta( $meta_type = '', $object_id = 0, $meta_key = '', $meta_value = '') {
     425        global $wpdb;
     426        $object_id = (int) $object_id;
     427
     428        if ( !$object_id )
     429                return false;
     430
     431        if ( empty( $meta_key ) )
     432                return false;
     433        $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key);
     434        if ( is_string($meta_value) )
     435                $meta_value = stripslashes($meta_value);
     436        $meta_value = maybe_serialize($meta_value);
     437
     438        $where = $wpdb->prepare("object_id = %d AND meta_key = %s ", $object_id, $meta_key);
     439        $where .= ( empty($meta_type) ) ? '' : $wpdb->prepare("AND meta_type = %s ", $meta_type);
     440
     441        $cur = $wpdb->get_row("SELECT * FROM $wpdb->meta WHERE $where");
     442        if ( !$cur ) {
     443                $wpdb->db_insert($wpdb->meta, array(
     444                        'meta_type' => $meta_type,
     445                        'object_id' => $object_id,
     446                        'meta_key' => $meta_key,
     447                        'meta_value' => $meta_value,
     448                ));
     449        } else if ( $cur->meta_value != $meta_value ) {
     450                $wpdb->query($wpdb->prepare("UPDATE $wpdb->meta SET meta_value = %s WHERE $where",$meta_value));
     451        } else {
     452                return false;
     453        }
     454        return true;
     455}
     456
     457function delete_general_meta( $meta_type = '', $object_id = 0, $meta_key = '', $meta_value = '') {
     458        global $wpdb;
     459        $object_id = (int) $object_id;
     460
     461        if ( !$object_id )
     462                return false;
     463
     464        if ( empty( $meta_key ) )
     465                return false;
     466        $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key);
     467
     468        if ( ! empty($meta_value) ) {
     469                if ( is_string($meta_value) )
     470                        $meta_value = stripslashes($meta_value);
     471                $meta_value = maybe_serialize($meta_value);
     472        }
     473
     474        $where = $wpdb->prepare("object_id = %d AND meta_key = %s ", $object_id, $meta_key);
     475        $where .= ( empty($meta_type) ) ? '' : $wpdb->prepare("AND meta_type = %s ", $meta_type);
     476        $where .= ( empty($meta_value) ) ? '' : $wpdb->prepare("AND meta_value = %s ",$meta_value);
     477
     478        $cur = $wpdb->get_row("SELECT * FROM $wpdb->meta WHERE $where");
     479        if ( !$cur ) {
     480                return false;
     481        } else {
     482                $wpdb->query("DELETE FROM $wpdb->meta WHERE $where");
     483        }
     484        return true;
     485}
     486
    395487function maybe_serialize( $data ) {
    396488        if ( is_string( $data ) )
    397489                $data = trim( $data );
  • wp-settings.php

     
    135135$wpdb->link2cat       = $wpdb->prefix . 'link2cat';
    136136$wpdb->links          = $wpdb->prefix . 'links';
    137137$wpdb->options        = $wpdb->prefix . 'options';
     138$wpdb->meta           = $wpdb->prefix . 'meta';
    138139$wpdb->postmeta       = $wpdb->prefix . 'postmeta';
    139140$wpdb->usermeta       = $wpdb->prefix . 'usermeta';
    140141$wpdb->terms          = $wpdb->prefix . 'terms';
  • wp-admin/includes/schema.php

     
    1010                $charset_collate .= " COLLATE $wpdb->collate";
    1111}
    1212
    13 $wp_queries="CREATE TABLE $wpdb->terms (
     13$wp_queries="CREATE TABLE $wpdb->meta (
     14  meta_id bigint(20) NOT NULL auto_increment,
     15  object_id bigint(20) NOT NULL default '0',
     16  meta_type varchar(32) NOT NULL default '',
     17  meta_key varchar(255) default NULL,
     18  meta_value longtext,
     19  PRIMARY KEY  (meta_id),
     20  KEY object_id (object_id),
     21  KEY meta_type (meta_type),
     22  KEY meta_key (meta_key)
     23) $charset_collate;
     24CREATE TABLE $wpdb->terms (
    1425 term_id bigint(20) NOT NULL auto_increment,
    1526 name varchar(55) NOT NULL default '',
    1627 slug varchar(200) NOT NULL default '',