is_request( $meta ) ) { $meta = $this->capture( $meta, $post_id ); } // Add to storage. $this->meta[ $post_id ] = $meta; // Set $post_id reference when is the "main" postmeta. if ( $is_main ) { $this->post_id = $post_id; } // Return meta. return $meta; } /** * is_request * * Returns true if the supplied $meta is from a REQUEST (serialized
data). * * @date 11/3/19 * @since 5.7.14 * * @param array $meta An array of metdata to check. * @return bool */ function is_request( $meta = array() ) { return acf_is_field_key( key( $meta ) ); } /** * capture * * Returns a flattened array of meta for the given postdata. * This is achieved by simulating a save whilst capturing all meta changes. * * @date 26/2/19 * @since 5.7.13 * * @param array $values An array of raw values. * @param mixed $post_id The post_id for this data. * @return array */ function capture( $values = array(), $post_id = 0 ) { // Reset meta. $this->meta[ $post_id ] = array(); // Listen for any added meta. add_filter( 'acf/pre_update_metadata', array( $this, 'capture_update_metadata' ), 1, 5 ); // Simulate update. if ( $values ) { acf_update_values( $values, $post_id ); } // Remove listener filter. remove_filter( 'acf/pre_update_metadata', array( $this, 'capture_update_metadata' ), 1, 5 ); // Return meta. return $this->meta[ $post_id ]; } /** * capture_update_metadata * * Records all meta activity and returns a non null value to bypass DB updates. * * @date 26/2/19 * @since 5.7.13 * * @param null $null . * @param (int|string) $post_id The post id. * @param string $name The meta name. * @param mixed $value The meta value. * @param bool $hidden If the meta is hidden (starts with an underscore). * @return false. */ function capture_update_metadata( $null, $post_id, $name, $value, $hidden ) { $name = ( $hidden ? '_' : '' ) . $name; $this->meta[ $post_id ][ $name ] = $value; // Return non null value to escape update process. return true; } /** * remove * * Removes postmeta from storage. * * @date 8/10/18 * @since 5.8.0 * * @param mixed $post_id The post_id for this data. * @return void */ function remove( $post_id = 0 ) { // unset meta unset( $this->meta[ $post_id ] ); // reset post_id if ( $post_id === $this->post_id ) { $this->post_id = 0; } } /** * pre_load_meta * * Injects the local meta. * * @date 8/10/18 * @since 5.8.0 * * @param null $null An empty parameter. Return a non null value to short-circuit the function. * @param mixed $post_id The post_id for this data. * @return mixed */ function pre_load_meta( $null, $post_id ) { if ( isset( $this->meta[ $post_id ] ) ) { return $this->meta[ $post_id ]; } return $null; } /** * pre_load_metadata * * Injects the local meta. * * @date 8/10/18 * @since 5.8.0 * * @param null $null An empty parameter. Return a non null value to short-circuit the function. * @param (int|string) $post_id The post id. * @param string $name The meta name. * @param bool $hidden If the meta is hidden (starts with an underscore). * @return mixed */ function pre_load_metadata( $null, $post_id, $name, $hidden ) { $name = ( $hidden ? '_' : '' ) . $name; if ( isset( $this->meta[ $post_id ] ) ) { if ( isset( $this->meta[ $post_id ][ $name ] ) ) { return $this->meta[ $post_id ][ $name ]; } return '__return_null'; } return $null; } /** * pre_load_post_id * * Injects the local post_id. * * @date 8/10/18 * @since 5.8.0 * * @param null $null An empty parameter. Return a non null value to short-circuit the function. * @param mixed $post_id The post_id for this data. * @return mixed */ function pre_load_post_id( $null, $post_id ) { if ( ! $post_id && $this->post_id ) { return $this->post_id; } return $null; } } endif; // class_exists check /** * acf_setup_meta * * Adds postmeta to storage. * * @date 8/10/18 * @since 5.8.0 * @see ACF_Local_Meta::add() for list of parameters. * * @return array */ function acf_setup_meta( $meta = array(), $post_id = 0, $is_main = false ) { return acf_get_instance( 'ACF_Local_Meta' )->add( $meta, $post_id, $is_main ); } /** * acf_reset_meta * * Removes postmeta to storage. * * @date 8/10/18 * @since 5.8.0 * @see ACF_Local_Meta::remove() for list of parameters. * * @return void */ function acf_reset_meta( $post_id = 0 ) { return acf_get_instance( 'ACF_Local_Meta' )->remove( $post_id ); }