Automattic\WooCommerce\Internal\DataStores

CustomMetaDataStore::get_meta_data_for_object_ids()publicWC 1.0

Return order meta data for multiple IDs.

Method of the class: CustomMetaDataStore{}

No Hooks.

Return

\stdClass[][]. An array, keyed by object_ids, containing array of raw meta data records for each object. Objects with no meta data will have an empty array.

Usage

$CustomMetaDataStore = new CustomMetaDataStore();
$CustomMetaDataStore->get_meta_data_for_object_ids( $object_ids ): array;
$object_ids(array) (required)
List of object IDs.

CustomMetaDataStore::get_meta_data_for_object_ids() code WC 9.6.0

public function get_meta_data_for_object_ids( array $object_ids ): array {
	global $wpdb;

	if ( empty( $object_ids ) ) {
		return array();
	}

	$id_placeholder   = implode( ', ', array_fill( 0, count( $object_ids ), '%d' ) );
	$meta_table       = $this->get_table_name();
	$object_id_column = $this->get_object_id_field();

	// phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare -- $object_id_column and $meta_table is hardcoded. IDs are prepared above.
	$meta_rows = $wpdb->get_results(
		$wpdb->prepare(
			"SELECT id, $object_id_column as object_id, meta_key, meta_value FROM $meta_table WHERE $object_id_column in ( $id_placeholder )",
			$object_ids
		)
	);
	// phpcs:enable

	$meta_data = array_fill_keys( $object_ids, array() );
	foreach ( $meta_rows as $meta_row ) {
		if ( ! isset( $meta_data[ $meta_row->object_id ] ) ) {
			$meta_data[ $meta_row->object_id ] = array();
		}
		$meta_data[ $meta_row->object_id ][] = (object) array(
			'meta_id'    => $meta_row->id,
			'meta_key'   => $meta_row->meta_key, // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key
			'meta_value' => $meta_row->meta_value, // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value
		);
	}

	return $meta_data;
}