WooCommerce - wc_get_products() not returning images and categories

Viewed 220

The WooCommerce method wc_get_products() is not returning images and categories as objects. They only return an ID. Is there a way to let woocommerce return the full images and categories? The REST API does return the full image but the internal method does not. See example

When calling the rest API

"categories": [
            {
                "id": 123,
                "name": "Name of category",
                "slug": "Slug of category"
            },
            {
                "id": 124,
                "name": "Name of category",
                "slug": "Slug of category"
            }
        ],
"images": [
            {
                "id": 12345,
                "date_created": "2021-02-10T15:52:32",
                "date_created_gmt": "2021-02-10T13:52:32",
                "date_modified": "2021-02-10T15:53:06",
                "date_modified_gmt": "2021-02-10T13:53:06",
                "src": "https://websitename.com/wp-content/uploads/imagename.jpeg",
                "name": "Name of image",
                "alt": "Alternative image text"
            }
        ],

When calling the wc_get_products()

"category_ids": [
            114,
            118,
            270,
            239
        ],
"image_id": "1881",
        "gallery_image_ids": [
            1882
        ],

Why do they do this? And is there a way to return the full objects?

Thank you.

1 Answers

The categories and images are listed in API by using the below lines of codes.

'categories'         => wc_get_object_terms( $product->get_id(), 'product_cat', 'name' ),
'images'             => $this->get_images( $product ),

The product data returns in API by using the below function./woocommerce/includes/legacy/api/v3/class-wc-api-products.php

   /**
     * Get standard product data that applies to every product type
     *
     * @since 2.1
     * @param WC_Product|int $product
     * @return array
     */
    private function get_product_data( $product ) {
        if ( is_numeric( $product ) ) {
            $product = wc_get_product( $product );
        }

        if ( ! is_a( $product, 'WC_Product' ) ) {
            return array();
        }

        $prices_precision = wc_get_price_decimals();
        return array(
            'title'              => $product->get_name(),
            'id'                 => $product->get_id(),
            'created_at'         => $this->server->format_datetime( $product->get_date_created(), false, true ),
            'updated_at'         => $this->server->format_datetime( $product->get_date_modified(), false, true ),
            'type'               => $product->get_type(),
            'status'             => $product->get_status(),
            'downloadable'       => $product->is_downloadable(),
            'virtual'            => $product->is_virtual(),
            'permalink'          => $product->get_permalink(),
            'sku'                => $product->get_sku(),
            'price'              => wc_format_decimal( $product->get_price(), $prices_precision ),
            'regular_price'      => wc_format_decimal( $product->get_regular_price(), $prices_precision ),
            'sale_price'         => $product->get_sale_price() ? wc_format_decimal( $product->get_sale_price(), $prices_precision ) : null,
            'price_html'         => $product->get_price_html(),
            'taxable'            => $product->is_taxable(),
            'tax_status'         => $product->get_tax_status(),
            'tax_class'          => $product->get_tax_class(),
            'managing_stock'     => $product->managing_stock(),
            'stock_quantity'     => $product->get_stock_quantity(),
            'in_stock'           => $product->is_in_stock(),
            'backorders_allowed' => $product->backorders_allowed(),
            'backordered'        => $product->is_on_backorder(),
            'sold_individually'  => $product->is_sold_individually(),
            'purchaseable'       => $product->is_purchasable(),
            'featured'           => $product->is_featured(),
            'visible'            => $product->is_visible(),
            'catalog_visibility' => $product->get_catalog_visibility(),
            'on_sale'            => $product->is_on_sale(),
            'product_url'        => $product->is_type( 'external' ) ? $product->get_product_url() : '',
            'button_text'        => $product->is_type( 'external' ) ? $product->get_button_text() : '',
            'weight'             => $product->get_weight() ? wc_format_decimal( $product->get_weight(), 2 ) : null,
            'dimensions'         => array(
                'length' => $product->get_length(),
                'width'  => $product->get_width(),
                'height' => $product->get_height(),
                'unit'   => get_option( 'woocommerce_dimension_unit' ),
            ),
            'shipping_required'  => $product->needs_shipping(),
            'shipping_taxable'   => $product->is_shipping_taxable(),
            'shipping_class'     => $product->get_shipping_class(),
            'shipping_class_id'  => ( 0 !== $product->get_shipping_class_id() ) ? $product->get_shipping_class_id() : null,
            'description'        => wpautop( do_shortcode( $product->get_description() ) ),
            'short_description'  => apply_filters( 'woocommerce_short_description', $product->get_short_description() ),
            'reviews_allowed'    => $product->get_reviews_allowed(),
            'average_rating'     => wc_format_decimal( $product->get_average_rating(), 2 ),
            'rating_count'       => $product->get_rating_count(),
            'related_ids'        => array_map( 'absint', array_values( wc_get_related_products( $product->get_id() ) ) ),
            'upsell_ids'         => array_map( 'absint', $product->get_upsell_ids() ),
            'cross_sell_ids'     => array_map( 'absint', $product->get_cross_sell_ids() ),
            'parent_id'          => $product->get_parent_id(),
            'categories'         => wc_get_object_terms( $product->get_id(), 'product_cat', 'name' ),
            'tags'               => wc_get_object_terms( $product->get_id(), 'product_tag', 'name' ),
            'images'             => $this->get_images( $product ),
            'featured_src'       => wp_get_attachment_url( get_post_thumbnail_id( $product->get_id() ) ),
            'attributes'         => $this->get_attributes( $product ),
            'downloads'          => $this->get_downloads( $product ),
            'download_limit'     => $product->get_download_limit(),
            'download_expiry'    => $product->get_download_expiry(),
            'download_type'      => 'standard',
            'purchase_note'      => wpautop( do_shortcode( wp_kses_post( $product->get_purchase_note() ) ) ),
            'total_sales'        => $product->get_total_sales(),
            'variations'         => array(),
            'parent'             => array(),
        );
    }
Related