/** * Returns an array of measurements for the given product * * @since 3.0 * @param WC_Product $product the product * @return array of WC_Price_Calculator_Measurement objects for the product */ public static function get_product_measurements($product) { if (WC_Price_Calculator_Product::pricing_calculator_enabled($product)) { $settings = new WC_Price_Calculator_Settings($product); return $settings->get_calculator_measurements(); } }
/** * Turn the cart item data into human-readable key/value pairs for * display in the cart * * @since 3.0 * @param array $item cart item * @param array $cart_item_data the cart item data * @return array human-readable cart item data */ private function humanize_cart_item_data($item, $cart_item_data) { $new_cart_item_data = array(); // always need the actual parent product, not the useless variation product $product = isset($item['variation_id']) && $item['variation_id'] ? wc_get_product($item['product_id']) : $item['data']; $settings = new WC_Price_Calculator_Settings($product); foreach ($settings->get_calculator_measurements() as $measurement) { if (isset($cart_item_data[$measurement->get_name()])) { // if the measurement has a set of available options, get the option label for display, if we can determine it // (this way we display "1/8" rather than "0.125", etc) if (count($measurement->get_options()) > 0) { foreach ($measurement->get_options() as $value => $label) { if ($cart_item_data[$measurement->get_name()] === $value) { $cart_item_data[$measurement->get_name()] = $label; } } } $label = $measurement->get_unit_label() ? sprintf("%s (%s)", $measurement->get_label(), __($measurement->get_unit_label(), WC_Measurement_Price_Calculator::TEXT_DOMAIN)) : __($measurement->get_label(), WC_Measurement_Price_Calculator::TEXT_DOMAIN); $new_cart_item_data[$label] = $cart_item_data[$measurement->get_name()]; } } // render the total measurement if this is a derived calculator (ie "Area (sq. ft.): 10" if the calculator is Area (LxW)) if ($settings->is_calculator_type_derived() && isset($cart_item_data['_measurement_needed'])) { // get the product total measurement (ie area or volume) $product_measurement = WC_Price_Calculator_Product::get_product_measurement($product, $settings); $product_measurement->set_unit($cart_item_data['_measurement_needed_unit']); $product_measurement->set_value($cart_item_data['_measurement_needed']); $total_amount_text = apply_filters('wc_measurement_price_calculator_total_amount_text', $product_measurement->get_unit_label() ? sprintf(__('Total %s (%s)', WC_Measurement_Price_Calculator::TEXT_DOMAIN), $product_measurement->get_label(), __($product_measurement->get_unit_label(), WC_Measurement_Price_Calculator::TEXT_DOMAIN)) : sprintf(__('Total %s', WC_Measurement_Price_Calculator::TEXT_DOMAIN), $product_measurement->get_label()), $item); $new_cart_item_data[$total_amount_text] = $product_measurement->get_value(); } return $new_cart_item_data; }