drop(); (new StoreStrategy())->drop(); } public static function getOnlyRequiredChildPostMetaData($parentId) { global $wpdb; $requiredKeys = array( '_sale_price', '_regular_price', '_sale_price_dates_from', '_sale_price_dates_to', '_tax_status', '_tax_class', '_sku', ); $requiredKeys = "'" . implode("','", $requiredKeys) . "'"; $parentId = absint($parentId); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, PluginCheck.Security.DirectDB.UnescapedDBParameter -- $requiredKeys is a hardcoded whitelist, $parentId is cast to int above $meta_list = $wpdb->get_results($wpdb->prepare("SELECT post_id, meta_key, meta_value FROM $wpdb->postmeta WHERE post_id IN (SELECT ID FROM $wpdb->posts WHERE post_parent = %d ) AND (meta_key IN ( $requiredKeys ) OR meta_key LIKE %s) ORDER BY post_id ASC", $parentId, 'attribute_%'), ARRAY_A); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $post_data = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->posts WHERE post_parent = %d ", $parentId), OBJECT_K); $required_data = array(); foreach ($post_data as $post_datum) { $post_datum->meta = array(); $required_data[$post_datum->ID] = $post_datum; } foreach ($meta_list as $row) { $value = maybe_unserialize($row['meta_value']); $required_data[$row['post_id']]->meta[$row['meta_key']] = $value; } return $required_data; } /** * Retrieves the required product post metadata for a given product ID. * * @param int $productId The ID of the product. * * @return \stdClass|null The product post data with the required metadata, * or null if the product does not exist. */ public static function getOnlyRequiredProductPostMetaData(int $productId) { global $wpdb; $requiredKeys = array( '_sale_price', '_regular_price', '_sale_price_dates_from', '_sale_price_dates_to', '_tax_status', '_tax_class', '_sku', ); $requiredKeys = "'" . implode("','", $requiredKeys) . "'"; // phpcs:ignore WordPress.DB, PluginCheck.Security.DirectDB.UnescapedDBParameter -- $requiredKeys is a hardcoded whitelist, $productId is bound via $wpdb->prepare() $metaList = $wpdb->get_results($wpdb->prepare("SELECT post_id, meta_key, meta_value FROM $wpdb->postmeta WHERE post_id = %d AND (meta_key IN ( $requiredKeys ) OR meta_key LIKE %s)", $productId, 'attribute_%'), ARRAY_A); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $postData = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->posts WHERE ID = %d", $productId) ); if ( $postData === null ) { return null; } $postData->meta = []; foreach ($metaList as $row) { $postData->meta[$row['meta_key']] = maybe_unserialize($row['meta_value']); } return $postData; } }