wp/wp-includes/meta.php
author ymh <ymh.work@gmail.com>
Thu, 07 Nov 2013 00:08:07 +0000
changeset 1 f6eb5a861d2f
parent 0 d970ebf37754
child 5 5e2f62d02dcd
permissions -rw-r--r--
remove unnessary files. Make timthumb work
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * Metadata API
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * Functions for retrieving and manipulating metadata of various WordPress object types. Metadata
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * for an object is a represented by a simple key-value pair. Objects may contain multiple
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 * metadata entries that share the same key and differ only in their value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 * @subpackage Meta
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 * @since 2.9.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 * Add metadata for the specified object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
 * @since 2.9.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
 * @uses $wpdb WordPress database object for queries.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
 * @uses do_action() Calls 'added_{$meta_type}_meta' with meta_id of added metadata entry,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
 * 		object ID, meta key, and meta value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
 * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
 * @param int $object_id ID of the object metadata is for
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
 * @param string $meta_key Metadata key
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
 * @param mixed $meta_value Metadata value. Must be serializable if non-scalar.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
 * @param bool $unique Optional, default is false. Whether the specified metadata key should be
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
 * 		unique for the object. If true, and the object already has a value for the specified
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
 * 		metadata key, no change will be made
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
 * @return int|bool The meta ID on successful update, false on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
function add_metadata($meta_type, $object_id, $meta_key, $meta_value, $unique = false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
	if ( !$meta_type || !$meta_key )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
	if ( !$object_id = absint($object_id) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
	if ( ! $table = _get_meta_table($meta_type) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
	$column = sanitize_key($meta_type . '_id');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
	// expected_slashed ($meta_key)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
	$meta_key = wp_unslash($meta_key);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
	$meta_value = wp_unslash($meta_value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
	$meta_value = sanitize_meta( $meta_key, $meta_value, $meta_type );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
	$check = apply_filters( "add_{$meta_type}_metadata", null, $object_id, $meta_key, $meta_value, $unique );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
	if ( null !== $check )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
		return $check;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
	if ( $unique && $wpdb->get_var( $wpdb->prepare(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
		"SELECT COUNT(*) FROM $table WHERE meta_key = %s AND $column = %d",
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
		$meta_key, $object_id ) ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
	$_meta_value = $meta_value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
	$meta_value = maybe_serialize( $meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
	do_action( "add_{$meta_type}_meta", $object_id, $meta_key, $_meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
	$result = $wpdb->insert( $table, array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
		$column => $object_id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
		'meta_key' => $meta_key,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
		'meta_value' => $meta_value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
	) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
	if ( ! $result )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
	$mid = (int) $wpdb->insert_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
	wp_cache_delete($object_id, $meta_type . '_meta');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
	do_action( "added_{$meta_type}_meta", $mid, $object_id, $meta_key, $_meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
	return $mid;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
 * Update metadata for the specified object. If no value already exists for the specified object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
 * ID and metadata key, the metadata will be added.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
 * @since 2.9.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
 * @uses $wpdb WordPress database object for queries.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
 * @uses do_action() Calls 'update_{$meta_type}_meta' before updating metadata with meta_id of
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
 * 		metadata entry to update, object ID, meta key, and meta value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
 * @uses do_action() Calls 'updated_{$meta_type}_meta' after updating metadata with meta_id of
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
 * 		updated metadata entry, object ID, meta key, and meta value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
 * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
 * @param int $object_id ID of the object metadata is for
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
 * @param string $meta_key Metadata key
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
 * @param mixed $meta_value Metadata value. Must be serializable if non-scalar.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
 * @param mixed $prev_value Optional. If specified, only update existing metadata entries with
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
 * 		the specified value. Otherwise, update all entries.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
 * @return bool True on successful update, false on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
function update_metadata($meta_type, $object_id, $meta_key, $meta_value, $prev_value = '') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
	if ( !$meta_type || !$meta_key )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
	if ( !$object_id = absint($object_id) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
	if ( ! $table = _get_meta_table($meta_type) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
	$column = sanitize_key($meta_type . '_id');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
	$id_column = 'user' == $meta_type ? 'umeta_id' : 'meta_id';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
	// expected_slashed ($meta_key)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
	$meta_key = wp_unslash($meta_key);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
	$passed_value = $meta_value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
	$meta_value = wp_unslash($meta_value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
	$meta_value = sanitize_meta( $meta_key, $meta_value, $meta_type );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
	$check = apply_filters( "update_{$meta_type}_metadata", null, $object_id, $meta_key, $meta_value, $prev_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
	if ( null !== $check )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
		return (bool) $check;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
	// Compare existing value to new value if no prev value given and the key exists only once.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
	if ( empty($prev_value) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
		$old_value = get_metadata($meta_type, $object_id, $meta_key);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
		if ( count($old_value) == 1 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
			if ( $old_value[0] === $meta_value )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
				return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
	if ( ! $meta_id = $wpdb->get_var( $wpdb->prepare( "SELECT $id_column FROM $table WHERE meta_key = %s AND $column = %d", $meta_key, $object_id ) ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
		return add_metadata($meta_type, $object_id, $meta_key, $passed_value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
	$_meta_value = $meta_value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
	$meta_value = maybe_serialize( $meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
	$data  = compact( 'meta_value' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
	$where = array( $column => $object_id, 'meta_key' => $meta_key );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
	if ( !empty( $prev_value ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
		$prev_value = maybe_serialize($prev_value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
		$where['meta_value'] = $prev_value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
	do_action( "update_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
	if ( 'post' == $meta_type )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
		do_action( 'update_postmeta', $meta_id, $object_id, $meta_key, $meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
	$result = $wpdb->update( $table, $data, $where );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
	if ( ! $result )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
	wp_cache_delete($object_id, $meta_type . '_meta');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
	do_action( "updated_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
	if ( 'post' == $meta_type )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
		do_action( 'updated_postmeta', $meta_id, $object_id, $meta_key, $meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
	return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
 * Delete metadata for the specified object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
 * @since 2.9.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
 * @uses $wpdb WordPress database object for queries.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
 * @uses do_action() Calls 'deleted_{$meta_type}_meta' after deleting with meta_id of
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
 * 		deleted metadata entries, object ID, meta key, and meta value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
 * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
 * @param int $object_id ID of the object metadata is for
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
 * @param string $meta_key Metadata key
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
 * @param mixed $meta_value Optional. Metadata value. Must be serializable if non-scalar. If specified, only delete metadata entries
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
 * 		with this value. Otherwise, delete all entries with the specified meta_key.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
 * @param bool $delete_all Optional, default is false. If true, delete matching metadata entries
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
 * 		for all objects, ignoring the specified object_id. Otherwise, only delete matching
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
 * 		metadata entries for the specified object_id.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
 * @return bool True on successful delete, false on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
function delete_metadata($meta_type, $object_id, $meta_key, $meta_value = '', $delete_all = false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
	if ( !$meta_type || !$meta_key )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
	if ( (!$object_id = absint($object_id)) && !$delete_all )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
	if ( ! $table = _get_meta_table($meta_type) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
	$type_column = sanitize_key($meta_type . '_id');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
	$id_column = 'user' == $meta_type ? 'umeta_id' : 'meta_id';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
	// expected_slashed ($meta_key)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
	$meta_key = wp_unslash($meta_key);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
	$meta_value = wp_unslash($meta_value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
	$check = apply_filters( "delete_{$meta_type}_metadata", null, $object_id, $meta_key, $meta_value, $delete_all );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
	if ( null !== $check )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
		return (bool) $check;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
	$_meta_value = $meta_value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
	$meta_value = maybe_serialize( $meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
	$query = $wpdb->prepare( "SELECT $id_column FROM $table WHERE meta_key = %s", $meta_key );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
	if ( !$delete_all )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
		$query .= $wpdb->prepare(" AND $type_column = %d", $object_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
	if ( $meta_value )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
		$query .= $wpdb->prepare(" AND meta_value = %s", $meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
	$meta_ids = $wpdb->get_col( $query );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
	if ( !count( $meta_ids ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
	if ( $delete_all )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
		$object_ids = $wpdb->get_col( $wpdb->prepare( "SELECT $type_column FROM $table WHERE meta_key = %s", $meta_key ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
	do_action( "delete_{$meta_type}_meta", $meta_ids, $object_id, $meta_key, $_meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
	// Old-style action.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
	if ( 'post' == $meta_type )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
		do_action( 'delete_postmeta', $meta_ids );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
	$query = "DELETE FROM $table WHERE $id_column IN( " . implode( ',', $meta_ids ) . " )";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
	$count = $wpdb->query($query);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
	if ( !$count )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
	if ( $delete_all ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
		foreach ( (array) $object_ids as $o_id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
			wp_cache_delete($o_id, $meta_type . '_meta');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
		wp_cache_delete($object_id, $meta_type . '_meta');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
	do_action( "deleted_{$meta_type}_meta", $meta_ids, $object_id, $meta_key, $_meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
	// Old-style action.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
	if ( 'post' == $meta_type )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
		do_action( 'deleted_postmeta', $meta_ids );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
	return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
 * Retrieve metadata for the specified object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
 * @since 2.9.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
 * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
 * @param int $object_id ID of the object metadata is for
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
 * @param string $meta_key Optional. Metadata key. If not specified, retrieve all metadata for
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
 * 		the specified object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
 * @param bool $single Optional, default is false. If true, return only the first value of the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
 * 		specified meta_key. This parameter has no effect if meta_key is not specified.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
 * @return string|array Single metadata value, or array of values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
function get_metadata($meta_type, $object_id, $meta_key = '', $single = false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
	if ( !$meta_type )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
	if ( !$object_id = absint($object_id) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
	$check = apply_filters( "get_{$meta_type}_metadata", null, $object_id, $meta_key, $single );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
	if ( null !== $check ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
		if ( $single && is_array( $check ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
			return $check[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
			return $check;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
	$meta_cache = wp_cache_get($object_id, $meta_type . '_meta');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
	if ( !$meta_cache ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
		$meta_cache = update_meta_cache( $meta_type, array( $object_id ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
		$meta_cache = $meta_cache[$object_id];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
	if ( !$meta_key )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
		return $meta_cache;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
	if ( isset($meta_cache[$meta_key]) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
		if ( $single )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
			return maybe_unserialize( $meta_cache[$meta_key][0] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
			return array_map('maybe_unserialize', $meta_cache[$meta_key]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
	if ($single)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
		return '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
		return array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
 * Determine if a meta key is set for a given object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
 * @since 3.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
 * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
 * @param int $object_id ID of the object metadata is for
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
 * @param string $meta_key Metadata key.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
 * @return boolean true of the key is set, false if not.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
function metadata_exists( $meta_type, $object_id, $meta_key ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
	if ( ! $meta_type )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
	if ( ! $object_id = absint( $object_id ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
	$check = apply_filters( "get_{$meta_type}_metadata", null, $object_id, $meta_key, true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
	if ( null !== $check )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
	$meta_cache = wp_cache_get( $object_id, $meta_type . '_meta' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
	if ( !$meta_cache ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
		$meta_cache = update_meta_cache( $meta_type, array( $object_id ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
		$meta_cache = $meta_cache[$object_id];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
	if ( isset( $meta_cache[ $meta_key ] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
 * Get meta data by meta ID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
 * @since 3.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
 * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
 * @param int $meta_id ID for a specific meta row
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
 * @return object Meta object or false.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
function get_metadata_by_mid( $meta_type, $meta_id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
	if ( ! $meta_type )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
	if ( !$meta_id = absint( $meta_id ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
	if ( ! $table = _get_meta_table($meta_type) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
	$id_column = ( 'user' == $meta_type ) ? 'umeta_id' : 'meta_id';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
	$meta = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $table WHERE $id_column = %d", $meta_id ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
	if ( empty( $meta ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
	if ( isset( $meta->meta_value ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
		$meta->meta_value = maybe_unserialize( $meta->meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
	return $meta;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
 * Update meta data by meta ID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
 * @since 3.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
 * @uses get_metadata_by_mid() Calls get_metadata_by_mid() to fetch the meta key, value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
 *		and object_id of the given meta_id.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
 * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
 * @param int $meta_id ID for a specific meta row
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
 * @param string $meta_value Metadata value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
 * @param string $meta_key Optional, you can provide a meta key to update it
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
 * @return bool True on successful update, false on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
function update_metadata_by_mid( $meta_type, $meta_id, $meta_value, $meta_key = false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
	// Make sure everything is valid.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
	if ( ! $meta_type )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
	if ( ! $meta_id = absint( $meta_id ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
	if ( ! $table = _get_meta_table( $meta_type ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
	$column = sanitize_key($meta_type . '_id');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
	$id_column = 'user' == $meta_type ? 'umeta_id' : 'meta_id';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
	// Fetch the meta and go on if it's found.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
	if ( $meta = get_metadata_by_mid( $meta_type, $meta_id ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
		$original_key = $meta->meta_key;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
		$original_value = $meta->meta_value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
		$object_id = $meta->{$column};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
		// If a new meta_key (last parameter) was specified, change the meta key,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
		// otherwise use the original key in the update statement.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
		if ( false === $meta_key ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
			$meta_key = $original_key;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
		} elseif ( ! is_string( $meta_key ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
		// Sanitize the meta
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
		$_meta_value = $meta_value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
		$meta_value = sanitize_meta( $meta_key, $meta_value, $meta_type );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
		$meta_value = maybe_serialize( $meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
		// Format the data query arguments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
		$data = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
			'meta_key' => $meta_key,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
			'meta_value' => $meta_value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
		// Format the where query arguments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
		$where = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
		$where[$id_column] = $meta_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
		do_action( "update_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
		if ( 'post' == $meta_type )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
			do_action( 'update_postmeta', $meta_id, $object_id, $meta_key, $meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
		// Run the update query, all fields in $data are %s, $where is a %d.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
		$result = $wpdb->update( $table, $data, $where, '%s', '%d' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
		if ( ! $result )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
		// Clear the caches.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
		wp_cache_delete($object_id, $meta_type . '_meta');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
		do_action( "updated_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
		if ( 'post' == $meta_type )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
			do_action( 'updated_postmeta', $meta_id, $object_id, $meta_key, $meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
	// And if the meta was not found.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
 * Delete meta data by meta ID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
 * @since 3.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
 * @uses get_metadata_by_mid() Calls get_metadata_by_mid() to fetch the meta key, value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
 *		and object_id of the given meta_id.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
 * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
 * @param int $meta_id ID for a specific meta row
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
 * @return bool True on successful delete, false on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
function delete_metadata_by_mid( $meta_type, $meta_id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
	// Make sure everything is valid.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
	if ( ! $meta_type )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
	if ( ! $meta_id = absint( $meta_id ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
	if ( ! $table = _get_meta_table( $meta_type ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
	// object and id columns
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
	$column = sanitize_key($meta_type . '_id');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
	$id_column = 'user' == $meta_type ? 'umeta_id' : 'meta_id';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
	// Fetch the meta and go on if it's found.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
	if ( $meta = get_metadata_by_mid( $meta_type, $meta_id ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
		$object_id = $meta->{$column};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
		do_action( "delete_{$meta_type}_meta", (array) $meta_id, $object_id, $meta->meta_key, $meta->meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
		// Old-style action.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
		if ( 'post' == $meta_type || 'comment' == $meta_type )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
			do_action( "delete_{$meta_type}meta", $meta_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
		// Run the query, will return true if deleted, false otherwise
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
		$result = (bool) $wpdb->delete( $table, array( $id_column => $meta_id ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
		// Clear the caches.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
		wp_cache_delete($object_id, $meta_type . '_meta');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
		do_action( "deleted_{$meta_type}_meta", (array) $meta_id, $object_id, $meta->meta_key, $meta->meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
		// Old-style action.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
		if ( 'post' == $meta_type || 'comment' == $meta_type )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
			do_action( "deleted_{$meta_type}meta", $meta_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
		return $result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
	// Meta id was not found.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
 * Update the metadata cache for the specified objects.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
 * @since 2.9.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
 * @uses $wpdb WordPress database object for queries.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
 * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
 * @param int|array $object_ids array or comma delimited list of object IDs to update cache for
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
 * @return mixed Metadata cache for the specified objects, or false on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
function update_meta_cache($meta_type, $object_ids) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
	if ( empty( $meta_type ) || empty( $object_ids ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
	if ( ! $table = _get_meta_table($meta_type) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
	$column = sanitize_key($meta_type . '_id');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
	if ( !is_array($object_ids) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
		$object_ids = preg_replace('|[^0-9,]|', '', $object_ids);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
		$object_ids = explode(',', $object_ids);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
	$object_ids = array_map('intval', $object_ids);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
	$cache_key = $meta_type . '_meta';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
	$ids = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
	$cache = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
	foreach ( $object_ids as $id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
		$cached_object = wp_cache_get( $id, $cache_key );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
		if ( false === $cached_object )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
			$ids[] = $id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
			$cache[$id] = $cached_object;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
	if ( empty( $ids ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
		return $cache;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
	// Get meta info
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
	$id_list = join(',', $ids);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
	$meta_list = $wpdb->get_results( $wpdb->prepare("SELECT $column, meta_key, meta_value FROM $table WHERE $column IN ($id_list)",
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
		$meta_type), ARRAY_A );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
	if ( !empty($meta_list) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
		foreach ( $meta_list as $metarow) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
			$mpid = intval($metarow[$column]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
			$mkey = $metarow['meta_key'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
			$mval = $metarow['meta_value'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
			// Force subkeys to be array type:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
			if ( !isset($cache[$mpid]) || !is_array($cache[$mpid]) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
				$cache[$mpid] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
			if ( !isset($cache[$mpid][$mkey]) || !is_array($cache[$mpid][$mkey]) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
				$cache[$mpid][$mkey] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
			// Add a value to the current pid/key:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
			$cache[$mpid][$mkey][] = $mval;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
	foreach ( $ids as $id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
		if ( ! isset($cache[$id]) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
			$cache[$id] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
		wp_cache_add( $id, $cache[$id], $cache_key );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
	return $cache;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
 * Given a meta query, generates SQL clauses to be appended to a main query
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
 * @since 3.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
 * @see WP_Meta_Query
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
 * @param array $meta_query A meta query
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
 * @param string $type Type of meta
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
 * @param string $primary_table
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
 * @param string $primary_id_column
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
 * @param object $context (optional) The main query object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
 * @return array( 'join' => $join_sql, 'where' => $where_sql )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
function get_meta_sql( $meta_query, $type, $primary_table, $primary_id_column, $context = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
	$meta_query_obj = new WP_Meta_Query( $meta_query );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
	return $meta_query_obj->get_sql( $type, $primary_table, $primary_id_column, $context );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
 * Container class for a multiple metadata query
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
 * @since 3.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
class WP_Meta_Query {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
	* List of metadata queries. A single query is an associative array:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
	* - 'key' string The meta key
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
	* - 'value' string|array The meta value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
	* - 'compare' (optional) string How to compare the key to the value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
	*              Possible values: '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
	*              'BETWEEN', 'NOT BETWEEN', 'REGEXP', 'NOT REGEXP', 'RLIKE'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
	*              Default: '='
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
	* - 'type' string (optional) The type of the value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
	*              Possible values: 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME', 'UNSIGNED'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
	*              Default: 'CHAR'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
	*
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
	* @since 3.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
	* @access public
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
	* @var array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
	*/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
	public $queries = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
	 * The relation between the queries. Can be one of 'AND' or 'OR'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
	 * @since 3.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
	 * @access public
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
	 * @var string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
	public $relation;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
	 * Constructor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
	 * @param array $meta_query (optional) A meta query
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
	function __construct( $meta_query = false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
		if ( !$meta_query )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
			return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
		if ( isset( $meta_query['relation'] ) && strtoupper( $meta_query['relation'] ) == 'OR' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
			$this->relation = 'OR';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
			$this->relation = 'AND';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
		$this->queries = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
		foreach ( $meta_query as $key => $query ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
			if ( ! is_array( $query ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
				continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
			$this->queries[] = $query;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
	 * Constructs a meta query based on 'meta_*' query vars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
	 * @since 3.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
	 * @access public
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
	 * @param array $qv The query variables
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
	function parse_query_vars( $qv ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
		$meta_query = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
		// Simple query needs to be first for orderby=meta_value to work correctly
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
		foreach ( array( 'key', 'compare', 'type' ) as $key ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
			if ( !empty( $qv[ "meta_$key" ] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
				$meta_query[0][ $key ] = $qv[ "meta_$key" ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
		// WP_Query sets 'meta_value' = '' by default
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
		if ( isset( $qv[ 'meta_value' ] ) && '' !== $qv[ 'meta_value' ] && ( ! is_array( $qv[ 'meta_value' ] ) || $qv[ 'meta_value' ] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
			$meta_query[0]['value'] = $qv[ 'meta_value' ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
		if ( !empty( $qv['meta_query'] ) && is_array( $qv['meta_query'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
			$meta_query = array_merge( $meta_query, $qv['meta_query'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
		$this->__construct( $meta_query );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
	 * Given a meta type, return the appropriate alias if applicable
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
	 * @since 3.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
	 * @param string $type MySQL type to cast meta_value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
	 * @return string MySQL type
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
	function get_cast_for_type( $type = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
		if ( empty( $type ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
			return 'CHAR';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
		$meta_type = strtoupper( $type );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
		if ( ! in_array( $meta_type, array( 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME', 'UNSIGNED', 'NUMERIC' ) ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
			return 'CHAR';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
		if ( 'NUMERIC' == $meta_type )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
			$meta_type = 'SIGNED';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
		return $meta_type;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
	 * Generates SQL clauses to be appended to a main query.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
	 * @since 3.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
	 * @access public
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
	 * @param string $type Type of meta
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
	 * @param string $primary_table
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
	 * @param string $primary_id_column
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
	 * @param object $context (optional) The main query object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
	 * @return array( 'join' => $join_sql, 'where' => $where_sql )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
	function get_sql( $type, $primary_table, $primary_id_column, $context = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
		global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
		if ( ! $meta_table = _get_meta_table( $type ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
		$meta_id_column = sanitize_key( $type . '_id' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
		$join = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
		$where = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
		$key_only_queries = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
		$queries = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
		// Split out the queries with empty arrays as value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
		foreach ( $this->queries as $k => $q ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
			if ( isset( $q['value'] ) && is_array( $q['value'] ) && empty( $q['value'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
				$key_only_queries[$k] = $q;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
				unset( $this->queries[$k] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
		// Split out the meta_key only queries (we can only do this for OR)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
		if ( 'OR' == $this->relation ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
			foreach ( $this->queries as $k => $q ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
				if ( ! isset( $q['value'] ) && ! empty( $q['key'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
					$key_only_queries[$k] = $q;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
					$queries[$k] = $q;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
			$queries = $this->queries;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
		// Specify all the meta_key only queries in one go
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
		if ( $key_only_queries ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
			$join[]  = "INNER JOIN $meta_table ON $primary_table.$primary_id_column = $meta_table.$meta_id_column";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
			foreach ( $key_only_queries as $key => $q )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
				$where["key-only-$key"] = $wpdb->prepare( "$meta_table.meta_key = %s", trim( $q['key'] ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   771
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   773
		foreach ( $queries as $k => $q ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
			$meta_key = isset( $q['key'] ) ? trim( $q['key'] ) : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
			$meta_type = $this->get_cast_for_type( isset( $q['type'] ) ? $q['type'] : '' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
			$meta_value = isset( $q['value'] ) ? $q['value'] : null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
			if ( isset( $q['compare'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
				$meta_compare = strtoupper( $q['compare'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
				$meta_compare = is_array( $meta_value ) ? 'IN' : '=';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
			if ( ! in_array( $meta_compare, array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
				'=', '!=', '>', '>=', '<', '<=',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
				'LIKE', 'NOT LIKE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
				'IN', 'NOT IN',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
				'BETWEEN', 'NOT BETWEEN',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
				'NOT EXISTS',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
				'REGEXP', 'NOT REGEXP', 'RLIKE'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
			) ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
				$meta_compare = '=';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
			$i = count( $join );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
			$alias = $i ? 'mt' . $i : $meta_table;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
			if ( 'NOT EXISTS' == $meta_compare ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
				$join[$i]  = "LEFT JOIN $meta_table";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   799
				$join[$i] .= $i ? " AS $alias" : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
				$join[$i] .= " ON ($primary_table.$primary_id_column = $alias.$meta_id_column AND $alias.meta_key = '$meta_key')";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
				$where[$k] = ' ' . $alias . '.' . $meta_id_column . ' IS NULL';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
				continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
			$join[$i]  = "INNER JOIN $meta_table";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
			$join[$i] .= $i ? " AS $alias" : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
			$join[$i] .= " ON ($primary_table.$primary_id_column = $alias.$meta_id_column)";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
			$where[$k] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
			if ( !empty( $meta_key ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
				$where[$k] = $wpdb->prepare( "$alias.meta_key = %s", $meta_key );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
			if ( is_null( $meta_value ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
				if ( empty( $where[$k] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   817
					unset( $join[$i] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
				continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   820
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   821
			if ( in_array( $meta_compare, array( 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN' ) ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
				if ( ! is_array( $meta_value ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
					$meta_value = preg_split( '/[,\s]+/', $meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
				if ( empty( $meta_value ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
					unset( $join[$i] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
					continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   829
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   830
				$meta_value = trim( $meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
			if ( 'IN' == substr( $meta_compare, -2) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
				$meta_compare_string = '(' . substr( str_repeat( ',%s', count( $meta_value ) ), 1 ) . ')';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
			} elseif ( 'BETWEEN' == substr( $meta_compare, -7) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
				$meta_value = array_slice( $meta_value, 0, 2 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
				$meta_compare_string = '%s AND %s';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
			} elseif ( 'LIKE' == substr( $meta_compare, -4 ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
				$meta_value = '%' . like_escape( $meta_value ) . '%';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
				$meta_compare_string = '%s';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
				$meta_compare_string = '%s';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   845
			if ( ! empty( $where[$k] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
				$where[$k] .= ' AND ';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
			$where[$k] = ' (' . $where[$k] . $wpdb->prepare( "CAST($alias.meta_value AS {$meta_type}) {$meta_compare} {$meta_compare_string})", $meta_value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   850
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
		$where = array_filter( $where );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
		if ( empty( $where ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
			$where = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
			$where = ' AND (' . implode( "\n{$this->relation} ", $where ) . ' )';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
		$join = implode( "\n", $join );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
		if ( ! empty( $join ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
			$join = ' ' . $join;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
		return apply_filters_ref_array( 'get_meta_sql', array( compact( 'join', 'where' ), $this->queries, $type, $primary_table, $primary_id_column, $context ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   867
 * Retrieve the name of the metadata table for the specified object type.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   868
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   869
 * @since 2.9.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
 * @uses $wpdb WordPress database object for queries.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
 * @param string $type Type of object to get metadata table for (e.g., comment, post, or user)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
 * @return mixed Metadata table name, or false if no metadata table exists
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
function _get_meta_table($type) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
	$table_name = $type . 'meta';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
	if ( empty($wpdb->$table_name) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
	return $wpdb->$table_name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   885
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   886
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
 * Determine whether a meta key is protected
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
 * @since 3.1.3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
 * @param string $meta_key Meta key
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
 * @return bool True if the key is protected, false otherwise.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
function is_protected_meta( $meta_key, $meta_type = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
	$protected = ( '_' == $meta_key[0] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   897
	return apply_filters( 'is_protected_meta', $protected, $meta_key, $meta_type );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   898
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   899
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   901
 * Sanitize meta value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
 * @since 3.1.3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   904
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   905
 * @param string $meta_key Meta key
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   906
 * @param mixed $meta_value Meta value to sanitize
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
 * @param string $meta_type Type of meta
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
 * @return mixed Sanitized $meta_value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
function sanitize_meta( $meta_key, $meta_value, $meta_type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
	return apply_filters( "sanitize_{$meta_type}_meta_{$meta_key}", $meta_value, $meta_key, $meta_type );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   912
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   913
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   914
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   915
 * Register meta key
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   916
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   917
 * @since 3.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   918
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   919
 * @param string $meta_type Type of meta
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   920
 * @param string $meta_key Meta key
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   921
 * @param string|array $sanitize_callback A function or method to call when sanitizing the value of $meta_key.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   922
 * @param string|array $auth_callback Optional. A function or method to call when performing edit_post_meta, add_post_meta, and delete_post_meta capability checks.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   923
 * @param array $args Arguments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   924
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   925
function register_meta( $meta_type, $meta_key, $sanitize_callback, $auth_callback = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
	if ( is_callable( $sanitize_callback ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   927
		add_filter( "sanitize_{$meta_type}_meta_{$meta_key}", $sanitize_callback, 10, 3 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   928
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   929
	if ( empty( $auth_callback ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   930
		if ( is_protected_meta( $meta_key, $meta_type ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   931
			$auth_callback = '__return_false';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   932
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   933
			$auth_callback = '__return_true';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   934
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   935
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   936
	if ( is_callable( $auth_callback ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   937
		add_filter( "auth_{$meta_type}_meta_{$meta_key}", $auth_callback, 10, 6 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   938
}