/** * Returns the price html for the pricing rules table associated with $product. * Ie: * * "From -$5 ft- Free!" * * "$5 ft" * * "Free!" * * etc * * @since 3.0 * @param WC_Product $product the product * @return string pricing rules price html string */ public static function get_pricing_rules_price_html($product) { $settings = new WC_Price_Calculator_Settings($product); $price_html = ''; $price = $min_price = $settings->get_pricing_rules_minimum_price(); $min_regular_price = $settings->get_pricing_rules_minimum_regular_price(); $max_price = $settings->get_pricing_rules_maximum_price(); $max_regular_price = $settings->get_pricing_rules_maximum_regular_price(); $sep = apply_filters('wc_measurement_price_calculator_pricing_label_separator', '/'); $pricing_label = $sep . ' ' . __($settings->get_pricing_label(), WC_Measurement_Price_Calculator::TEXT_DOMAIN); // Get the price if ($price > 0) { // Regular price if ($settings->pricing_rules_is_on_sale() && $min_regular_price !== $price) { if (!$min_price || $min_price !== $max_price) { $from = wc_price($min_regular_price) . ' - ' . wc_price($max_regular_price) . ' ' . $pricing_label; $to = wc_price($min_price) . ' - ' . wc_price($max_price) . ' ' . $pricing_label; $price_html .= self::get_price_html_from_to($from, $to, '') . $product->get_price_suffix(); } else { $price_html .= self::get_price_html_from_to($min_regular_price, $price, $pricing_label) . $product->get_price_suffix(); } } else { $price_html .= wc_price($price); if ($min_price !== $max_price) { $price_html .= ' - ' . wc_price($max_price); } $price_html .= ' ' . $pricing_label . $product->get_price_suffix(); } } elseif ('' === $price) { // no-op (for now) } elseif (0 == $price) { // Free price if ($settings->pricing_rules_is_on_sale() && $min_regular_price !== $price) { if ($min_price !== $max_price) { $from = wc_price($min_regular_price) . ' - ' . wc_price($max_regular_price) . ' ' . $pricing_label; $to = __('Free!', WC_Measurement_Price_Calculator::TEXT_DOMAIN) . ' - ' . wc_price($max_price) . ' ' . $pricing_label; $price_html .= self::get_price_html_from_to($from, $to, '') . $product->get_price_suffix(); } else { $price_html .= self::get_price_html_from_to($min_regular_price, __('Free!', WC_Measurement_Price_Calculator::TEXT_DOMAIN), $pricing_label); } } else { $price_html .= __('Free!', WC_Measurement_Price_Calculator::TEXT_DOMAIN); if ($min_price !== $max_price) { $price_html .= ' - ' . wc_price($max_price); } $price_html .= ' ' . $pricing_label; } } // set the product's price property to fix rich snippets $product->price = $price; return $price_html; }
/** * Returns a pricing rules HTML table * * @since 3.0 * @param array $rules array of pricing rules * @param WC_Price_Calculator_Settings $settings the calculator settings object * @return string pricing rules HTML table */ public static function get_pricing_rules_table($rules, $settings) { $html = '<table class="wc-measurement-price-calculator-pricing-table">'; $html .= '<thead><tr><th>' . sprintf(__('Range (%s)', WC_Measurement_Price_Calculator::TEXT_DOMAIN), '<span class="units">' . __($settings->get_pricing_label(), WC_Measurement_Price_Calculator::TEXT_DOMAIN) . '</span>') . '</th>'; $html .= '<th>' . sprintf(__('Price (%s)', WC_Measurement_Price_Calculator::TEXT_DOMAIN), '<span class="units">' . get_woocommerce_currency_symbol() . '/' . __($settings->get_pricing_label(), WC_Measurement_Price_Calculator::TEXT_DOMAIN) . '</span>') . '</th></tr></thead>'; $html .= '<tbody>'; foreach ($rules as $rule) { // format the range as "1 ft", "1 - 3 ft" or "1+ ft" $range = $rule['range_start']; if ('' === $rule['range_end']) { $range .= '+'; } elseif ($rule['range_end'] != $rule['range_start']) { $range .= ' - ' . $rule['range_end']; } $range .= ' ' . __($settings->get_pricing_label(), WC_Measurement_Price_Calculator::TEXT_DOMAIN); $html .= sprintf('<tr><td>%s</td><td>%s</td></tr>', $range, $settings->get_pricing_rule_price_html($rule)); } $html .= '</tbody>'; $html .= '</table>'; return $html; }