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 );
}
}