From cc3a803930b68eae04e0c65ca9a032b13556914a Mon Sep 17 00:00:00 2001 From: ryan Date: Fri, 23 Sep 2005 23:22:51 +0000 Subject: [PATCH] Array and object support for post meta from skeltoac. fixes #1699 git-svn-id: http://svn.automattic.com/wordpress/trunk@2907 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/functions.php | 55 ++++++++++++++++++++++++++++++--------- 1 file changed, 43 insertions(+), 12 deletions(-) diff --git a/wp-includes/functions.php b/wp-includes/functions.php index fe044eac9..55ab90ccd 100644 --- a/wp-includes/functions.php +++ b/wp-includes/functions.php @@ -402,7 +402,7 @@ function delete_option($name) { } function add_post_meta($post_id, $key, $value, $unique = false) { - global $wpdb; + global $wpdb, $post_meta_cache; if ($unique) { if( $wpdb->get_var("SELECT meta_key FROM $wpdb->postmeta WHERE meta_key @@ -411,16 +411,22 @@ function add_post_meta($post_id, $key, $value, $unique = false) { } } + $original = $value; + if ( is_array($value) || is_object($value) ) + $value = $wpdb->escape(serialize($value)); + $wpdb->query("INSERT INTO $wpdb->postmeta (post_id,meta_key,meta_value) VALUES ('$post_id','$key','$value') "); - + + $post_meta_cache['$post_id'][$key][] = $original; + return true; } function delete_post_meta($post_id, $key, $value = '') { - global $wpdb; + global $wpdb, $post_meta_cache; if (empty($value)) { $meta_id = $wpdb->get_var("SELECT meta_id FROM $wpdb->postmeta WHERE @@ -435,10 +441,17 @@ post_id = '$post_id' AND meta_key = '$key' AND meta_value = '$value'"); if (empty($value)) { $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = '$post_id' AND meta_key = '$key'"); + unset($post_meta_cache['$post_id'][$key]); } else { $wpdb->query("DELETE FROM $wpdb->postmeta WHERE post_id = '$post_id' AND meta_key = '$key' AND meta_value = '$value'"); + $cache_key = $post_meta_cache['$post_id'][$key]; + foreach ( $cache_key as $index => $data ) + if ( $data == $value ) + unset($post_meta_cache['$post_id'][$key][$index]); } + + unset($post_meta_cache['$post_id'][$key]); return true; } @@ -465,29 +478,49 @@ function get_post_meta($post_id, $key, $single = false) { if ($single) { if (count($values)) { - return $values[0]; + $return = $values[0]; } else { return ''; } } else { - return $values; + $return = $values; } + + @ $kellogs = unserialize($return); + if ($kellogs !== FALSE) + return $kellogs; + else return $return; } function update_post_meta($post_id, $key, $value, $prev_value = '') { global $wpdb, $post_meta_cache; - if(! $wpdb->get_var("SELECT meta_key FROM $wpdb->postmeta WHERE meta_key + $original_value = $value; + if ( is_array($value) || is_object($value) ) + $value = $wpdb->escape(serialize($value)); + + $original_prev = $prev_value; + if ( is_array($prev_value) || is_object($prev_value) ) + $prev_value = serialize($value); + + if(! $wpdb->get_var("SELECT meta_key FROM $wpdb->postmeta WHERE meta_key = '$key' AND post_id = '$post_id'") ) { - return false; - } + return false; + } if (empty($prev_value)) { $wpdb->query("UPDATE $wpdb->postmeta SET meta_value = '$value' WHERE meta_key = '$key' AND post_id = '$post_id'"); + $cache_key = $post_meta_cache['$post_id'][$key]; + foreach ($cache_key as $index => $data) + $post_meta_cache['$post_id'][$key][$index] = $original_value; } else { $wpdb->query("UPDATE $wpdb->postmeta SET meta_value = '$value' WHERE meta_key = '$key' AND post_id = '$post_id' AND meta_value = '$prev_value'"); + $cache_key = $post_meta_cache['$post_id'][$key]; + foreach ($cache_key as $index => $data) + if ( $data == $original_prev ) + $post_meta_cache['$post_id'][$key][$index] = $original_value; } return true; @@ -842,7 +875,7 @@ function check_for_pings() { $doping = true; } if($doping) - echo ''; + echo ''; } function do_enclose( $content, $post_ID ) { @@ -2047,7 +2080,7 @@ function update_usermeta( $user_id, $meta_key, $meta_value ) { $meta_value = serialize($meta_value); $cur = $wpdb->get_row("SELECT * FROM $wpdb->usermeta WHERE user_id = '$user_id' AND meta_key = '$meta_key'"); - if ( !$cur && !empty( $meta_value ) ) { + if ( !$cur ) { $wpdb->query("INSERT INTO $wpdb->usermeta ( user_id, meta_key, meta_value ) VALUES ( '$user_id', '$meta_key', '$meta_value' )"); @@ -2055,8 +2088,6 @@ function update_usermeta( $user_id, $meta_key, $meta_value ) { } if ( $cur->meta_value != $meta_value ) $wpdb->query("UPDATE $wpdb->usermeta SET meta_value = '$meta_value' WHERE user_id = '$user_id' AND meta_key = '$meta_key'"); - if ( empty( $meta_value ) ) - $wpdb->query("DELETE FROM $wpdb->usermeta WHERE user_id = '$user_id' AND meta_key = '$meta_key'"); } function register_activation_hook($file, $function) {