WordPress 4.5
[autoinstalls/wordpress.git] / wp-includes / meta.php
index 2a5f45fdc70a9b50335931b8502bcc2edd1cf8e7..bfdd59566cef3bf1cf0a3f77e1168cd652036feb 100644 (file)
@@ -161,6 +161,7 @@ function update_metadata($meta_type, $object_id, $meta_key, $meta_value, $prev_v
        $id_column = 'user' == $meta_type ? 'umeta_id' : 'meta_id';
 
        // expected_slashed ($meta_key)
        $id_column = 'user' == $meta_type ? 'umeta_id' : 'meta_id';
 
        // expected_slashed ($meta_key)
+       $raw_meta_key = $meta_key;
        $meta_key = wp_unslash($meta_key);
        $passed_value = $meta_value;
        $meta_value = wp_unslash($meta_value);
        $meta_key = wp_unslash($meta_key);
        $passed_value = $meta_value;
        $meta_value = wp_unslash($meta_value);
@@ -198,7 +199,7 @@ function update_metadata($meta_type, $object_id, $meta_key, $meta_value, $prev_v
 
        $meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT $id_column FROM $table WHERE meta_key = %s AND $column = %d", $meta_key, $object_id ) );
        if ( empty( $meta_ids ) ) {
 
        $meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT $id_column FROM $table WHERE meta_key = %s AND $column = %d", $meta_key, $object_id ) );
        if ( empty( $meta_ids ) ) {
-               return add_metadata($meta_type, $object_id, $meta_key, $passed_value);
+               return add_metadata( $meta_type, $object_id, $raw_meta_key, $passed_value );
        }
 
        $_meta_value = $meta_value;
        }
 
        $_meta_value = $meta_value;
@@ -227,10 +228,8 @@ function update_metadata($meta_type, $object_id, $meta_key, $meta_value, $prev_v
                 * @param mixed  $meta_value Meta value.
                 */
                do_action( "update_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );
                 * @param mixed  $meta_value Meta value.
                 */
                do_action( "update_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );
-       }
 
 
-       if ( 'post' == $meta_type ) {
-               foreach ( $meta_ids as $meta_id ) {
+               if ( 'post' == $meta_type ) {
                        /**
                         * Fires immediately before updating a post's metadata.
                         *
                        /**
                         * Fires immediately before updating a post's metadata.
                         *
@@ -266,10 +265,8 @@ function update_metadata($meta_type, $object_id, $meta_key, $meta_value, $prev_v
                 * @param mixed  $meta_value Meta value.
                 */
                do_action( "updated_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );
                 * @param mixed  $meta_value Meta value.
                 */
                do_action( "updated_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );
-       }
 
 
-       if ( 'post' == $meta_type ) {
-               foreach ( $meta_ids as $meta_id ) {
+               if ( 'post' == $meta_type ) {
                        /**
                         * Fires immediately after updating a post's metadata.
                         *
                        /**
                         * Fires immediately after updating a post's metadata.
                         *
@@ -366,8 +363,14 @@ function delete_metadata($meta_type, $object_id, $meta_key, $meta_value = '', $d
        if ( !count( $meta_ids ) )
                return false;
 
        if ( !count( $meta_ids ) )
                return false;
 
-       if ( $delete_all )
-               $object_ids = $wpdb->get_col( $wpdb->prepare( "SELECT $type_column FROM $table WHERE meta_key = %s", $meta_key ) );
+       if ( $delete_all ) {
+               $value_clause = '';
+               if ( '' !== $meta_value && null !== $meta_value && false !== $meta_value ) {
+                       $value_clause = $wpdb->prepare( " AND meta_value = %s", $meta_value );
+               }
+
+               $object_ids = $wpdb->get_col( $wpdb->prepare( "SELECT $type_column FROM $table WHERE meta_key = %s $value_clause", $meta_key ) );
+       }
 
        /**
         * Fires immediately before deleting metadata of a specific type.
 
        /**
         * Fires immediately before deleting metadata of a specific type.
@@ -848,6 +851,23 @@ function update_meta_cache($meta_type, $object_ids) {
        return $cache;
 }
 
        return $cache;
 }
 
+/**
+ * Retrieves the queue for lazy-loading metadata.
+ *
+ * @since 4.5.0
+ *
+ * @return WP_Metadata_Lazyloader $lazyloader Metadata lazyloader queue.
+ */
+function wp_metadata_lazyloader() {
+       static $wp_metadata_lazyloader;
+
+       if ( null === $wp_metadata_lazyloader ) {
+               $wp_metadata_lazyloader = new WP_Metadata_Lazyloader();
+       }
+
+       return $wp_metadata_lazyloader;
+}
+
 /**
  * Given a meta query, generates SQL clauses to be appended to a main query.
  *
 /**
  * Given a meta query, generates SQL clauses to be appended to a main query.
  *