roducts ids of wc product * @param array $settings * * @return array The complete list of products with all attributes value */ public static function static_get_products_list( $products = [], $settings = [] ) { $products_list = []; $products = apply_filters( 'eael/wcpc/products_ids', $products ); $fields = self::static_fields( $products, $settings ); global $product; if ( ! empty( $products ) && is_array( $products ) ) { foreach ( $products as $product_id ) { /** @type WC_Product $product WooCommerce Product */ $product = wc_get_product( $product_id ); if ( ! $product ) { continue; } $product->fields = []; // custom attributes foreach ( $fields as $field => $name ) { switch ( $field ) { case 'title': $product->fields[ $field ] = HelperClass::eael_wp_kses($product->get_title()); break; case 'price': $product->fields[ $field ] = $product->get_price_html(); break; case 'add-to-cart': ob_start(); woocommerce_template_loop_add_to_cart(); $product->fields[ $field ] = ob_get_clean(); break; case 'image': $product->fields[ $field ] = $product->get_image(); break; case 'description': $description = apply_filters( 'woocommerce_short_description', $product->get_short_description() ? $product->get_short_description() : wc_trim_string( $product->get_description(), 400 ) ); $product->fields[ $field ] = apply_filters( 'eael/wcpc/woocommerce_short_description', $description ); break; case 'stock': $availability = $product->get_availability(); if ( empty( $availability['availability'] ) ) { $availability['availability'] = __( 'In stock', 'essential-addons-for-elementor-lite' ); } $product->fields[ $field ] = sprintf( '%s', esc_html( $availability['availability'] ) ); break; case 'sku': $sku = $product->get_sku(); ! $sku && $sku = '-'; $product->fields[ $field ] = $sku; break; case 'weight': if ( $weight = $product->get_weight() ) { $weight = wc_format_localized_decimal( $weight ) . ' ' . esc_attr( get_option( 'woocommerce_weight_unit' ) ); } else { $weight = '-'; } $product->fields[ $field ] = sprintf( '%s', esc_html( $weight ) ); break; case 'dimension': $dimensions = function_exists( 'wc_format_dimensions' ) ? wc_format_dimensions( $product->get_dimensions( false ) ) : $product->get_dimensions(); if ( empty( $dimensions ) ) { $dimensions = '-'; } $product->fields[ $field ] = sprintf( '%s', esc_html( $dimensions ) ); break; default: if ( taxonomy_exists( $field ) ) { $product->fields[ $field ] = []; $terms = get_the_terms( $product_id, $field ); if ( ! empty( $terms ) && is_array( $terms ) ) { foreach ( $terms as $term ) { $term = sanitize_term( $term, $field ); $product->fields[ $field ][] = $term->name; } } if ( ! empty( $product->fields[ $field ] ) ) { $product->fields[ $field ] = implode( ', ', $product->fields[ $field ] ); } else { $product->fields[ $field ] = '-'; } } else { do_action( 'eael/wcpc/compare_field_' . $field, [ $product, &$product->fields, ] ); } break; } } $products_list[ $product_id ] = $product; } } return apply_filters( 'eael/wcpc/products_list', $products_list ); } /** * Get the fields to show in the comparison table * * @param array $products Optional array of products ids * @param array $settings * * @return array $fields it returns an array of fields to show on the comparison table */ public static function static_fields( $products = [], $settings = [] ) { if ( empty( $settings['fields'] ) || ! is_array( $settings['fields'] ) ) { return apply_filters( 'eael/wcpc/products_fields_none', [] ); } $fields = $settings['fields']; $df = self::get_field_types(); $fields_to_show = []; foreach ( $fields as $field ) { if ( isset( $df[ $field['field_type'] ] ) ) { $fields_to_show[ $field['field_type'] ] = HelperClass::eael_wp_kses($field['field_label']); } else { if ( taxonomy_exists( $field['field_type'] ) ) { $fields_to_show[ $field['field_type'] ] = wc_attribute_label( $field['field_type'] ); } } } return apply_filters( 'eael/wcpc/products_fields_to_show', $fields_to_show, $products ); } }