web/wp-includes/meta.php
author hurons@caf4f556-3d62-0410-8435-a86758001935
Tue, 02 Feb 2010 15:44:16 +0000
branchwordpress
changeset 132 4d4862461b8d
child 194 32102edaa81b
permissions -rw-r--r--
Update Wordpress 2.9.1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
132
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
     1
<?php
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
     2
/**
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
     3
 * Meta API
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
     4
 *
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
     5
 * Functions for retrieving and manipulating metadata
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
     6
 *
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
     7
 * @package WordPress
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
     8
 * @subpackage Meta
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
     9
 * @since 2.9.0
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    10
 */
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    11
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    12
function add_metadata($meta_type, $object_id, $meta_key, $meta_value, $unique = false) {
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    13
	if ( !$meta_type || !$meta_key )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    14
		return false;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    15
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    16
	if ( ! $table = _get_meta_table($meta_type) )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    17
		return false;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    18
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    19
	global $wpdb;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    20
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    21
	$column = esc_sql($meta_type . '_id');
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    22
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    23
	// expected_slashed ($meta_key)
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    24
	$meta_key = stripslashes($meta_key);
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    25
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    26
	if ( $unique && $wpdb->get_var( $wpdb->prepare(
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    27
		"SELECT COUNT(*) FROM $table WHERE meta_key = %s AND $column = %d",
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    28
		$meta_key, $object_id ) ) )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    29
		return false;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    30
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    31
	$meta_value = maybe_serialize( stripslashes_deep($meta_value) );
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    32
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    33
	$wpdb->insert( $table, array(
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    34
		$column => $object_id,
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    35
		'meta_key' => $meta_key,
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    36
		'meta_value' => $meta_value
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    37
	) );
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    38
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    39
	wp_cache_delete($object_id, $meta_type . '_meta');
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    40
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    41
	do_action( "added_{$meta_type}_meta", $wpdb->insert_id, $object_id, $meta_key, $meta_value );
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    42
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    43
	return true;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    44
}
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    45
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    46
function update_metadata($meta_type, $object_id, $meta_key, $meta_value, $prev_value = '') {
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    47
	if ( !$meta_type || !$meta_key )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    48
		return false;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    49
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    50
	if ( ! $table = _get_meta_table($meta_type) )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    51
		return false;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    52
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    53
	global $wpdb;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    54
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    55
	$column = esc_sql($meta_type . '_id');
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    56
	$id_column = 'user' == $meta_type ? 'umeta_id' : 'meta_id';
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    57
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    58
	// expected_slashed ($meta_key)
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    59
	$meta_key = stripslashes($meta_key);
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    60
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    61
	if ( ! $meta_id = $wpdb->get_var( $wpdb->prepare( "SELECT $id_column FROM $table WHERE meta_key = %s AND $column = %d", $meta_key, $object_id ) ) )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    62
		return add_metadata($meta_type, $object_id, $meta_key, $meta_value);
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    63
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    64
	$meta_value = maybe_serialize( stripslashes_deep($meta_value) );
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    65
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    66
	$data  = compact( 'meta_value' );
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    67
	$where = array( $column => $object_id, 'meta_key' => $meta_key );
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    68
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    69
	if ( !empty( $prev_value ) ) {
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    70
		$prev_value = maybe_serialize($prev_value);
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    71
		$where['meta_value'] = $prev_value;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    72
	}
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    73
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    74
	do_action( "update_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $meta_value );
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    75
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    76
	$wpdb->update( $table, $data, $where );
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    77
	wp_cache_delete($object_id, $meta_type . '_meta');
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    78
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    79
	do_action( "updated_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $meta_value );
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    80
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    81
	return true;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    82
}
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    83
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    84
function delete_metadata($meta_type, $object_id, $meta_key, $meta_value = '', $delete_all = false) {
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    85
	if ( !$meta_type || !$meta_key || (!$delete_all && ! (int)$object_id) )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    86
		return false;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    87
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    88
	if ( ! $table = _get_meta_table($meta_type) )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    89
		return false;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    90
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    91
	global $wpdb;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    92
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    93
	$type_column = esc_sql($meta_type . '_id');
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    94
	$id_column = 'user' == $meta_type ? 'umeta_id' : 'meta_id';
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    95
	// expected_slashed ($meta_key)
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    96
	$meta_key = stripslashes($meta_key);
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    97
	$meta_value = maybe_serialize( stripslashes_deep($meta_value) );
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    98
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    99
	$query = $wpdb->prepare( "SELECT $id_column FROM $table WHERE meta_key = %s", $meta_key );
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   100
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   101
	if ( !$delete_all )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   102
		$query .= $wpdb->prepare(" AND $type_column = %d", $object_id );
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   103
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   104
	if ( $meta_value )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   105
		$query .= $wpdb->prepare(" AND meta_value = %s", $meta_value );
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   106
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   107
	$meta_ids = $wpdb->get_col( $query );
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   108
	if ( !count( $meta_ids ) )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   109
		return false;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   110
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   111
	$query = "DELETE FROM $table WHERE $id_column IN( " . implode( ',', $meta_ids ) . " )";
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   112
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   113
	$count = $wpdb->query($query);
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   114
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   115
	if ( !$count )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   116
		return false;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   117
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   118
	wp_cache_delete($object_id, $meta_type . '_meta');
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   119
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   120
	do_action( "deleted_{$meta_type}_meta", $meta_ids, $object_id, $meta_key, $meta_value );
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   121
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   122
	return true;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   123
}
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   124
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   125
function get_metadata($meta_type, $object_id, $meta_key = '', $single = false) {
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   126
	if ( !$meta_type )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   127
		return false;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   128
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   129
	$meta_cache = wp_cache_get($object_id, $meta_type . '_meta');
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   130
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   131
	if ( !$meta_cache ) {
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   132
		update_meta_cache($meta_type, $object_id);
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   133
		$meta_cache = wp_cache_get($object_id, $meta_type . '_meta');
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   134
	}
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   135
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   136
	if ( ! $meta_key )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   137
		return $meta_cache;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   138
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   139
	if ( isset($meta_cache[$meta_key]) ) {
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   140
		if ( $single ) {
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   141
			return maybe_unserialize( $meta_cache[$meta_key][0] );
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   142
		} else {
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   143
			return array_map('maybe_unserialize', $meta_cache[$meta_key]);
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   144
		}
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   145
	}
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   146
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   147
	if ($single)
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   148
		return '';
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   149
	else
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   150
		return array();
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   151
}
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   152
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   153
function update_meta_cache($meta_type, $object_ids) {
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   154
	if ( empty( $meta_type ) || empty( $object_ids ) )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   155
		return false;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   156
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   157
	if ( ! $table = _get_meta_table($meta_type) )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   158
		return false;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   159
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   160
	$column = esc_sql($meta_type . '_id');
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   161
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   162
	global $wpdb;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   163
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   164
	if ( !is_array($object_ids) ) {
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   165
		$object_ids = preg_replace('|[^0-9,]|', '', $object_ids);
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   166
		$object_ids = explode(',', $object_ids);
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   167
	}
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   168
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   169
	$object_ids = array_map('intval', $object_ids);
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   170
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   171
	$cache_key = $meta_type . '_meta';
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   172
	$ids = array();
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   173
	foreach ( $object_ids as $id ) {
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   174
		if ( false === wp_cache_get($id, $cache_key) )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   175
			$ids[] = $id;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   176
	}
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   177
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   178
	if ( empty( $ids ) )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   179
		return false;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   180
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   181
	// Get meta info
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   182
	$id_list = join(',', $ids);
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   183
	$cache = array();
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   184
	$meta_list = $wpdb->get_results( $wpdb->prepare("SELECT $column, meta_key, meta_value FROM $table WHERE $column IN ($id_list)",
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   185
		$meta_type), ARRAY_A );
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   186
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   187
	if ( !empty($meta_list) ) {
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   188
		foreach ( $meta_list as $metarow) {
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   189
			$mpid = intval($metarow[$column]);
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   190
			$mkey = $metarow['meta_key'];
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   191
			$mval = $metarow['meta_value'];
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   192
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   193
			// Force subkeys to be array type:
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   194
			if ( !isset($cache[$mpid]) || !is_array($cache[$mpid]) )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   195
				$cache[$mpid] = array();
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   196
			if ( !isset($cache[$mpid][$mkey]) || !is_array($cache[$mpid][$mkey]) )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   197
				$cache[$mpid][$mkey] = array();
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   198
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   199
			// Add a value to the current pid/key:
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   200
			$cache[$mpid][$mkey][] = $mval;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   201
		}
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   202
	}
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   203
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   204
	foreach ( $ids as $id ) {
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   205
		if ( ! isset($cache[$id]) )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   206
			$cache[$id] = array();
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   207
	}
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   208
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   209
	foreach ( array_keys($cache) as $object)
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   210
		wp_cache_set($object, $cache[$object], $cache_key);
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   211
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   212
	return $cache;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   213
}
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   214
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   215
function _get_meta_table($type) {
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   216
	global $wpdb;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   217
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   218
	$table_name = $type . 'meta';
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   219
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   220
	if ( empty($wpdb->$table_name) )
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   221
		return false;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   222
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   223
	return $wpdb->$table_name;
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   224
}
4d4862461b8d Update Wordpress 2.9.1
hurons@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   225
?>