PluginProbe
Tiered Pricing Table for WooCommerce / 8.0.2
Tiered Pricing Table for WooCommerce v8.0.2
8.0.2 7.1.7 7.1.5 7.1.4 7.1.1 6.5.0 6.4.0 6.1.0 trunk 1.0 1.1 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.2.0 2.2.1 2.2.2 2.2.3 2.3.0 2.3.1 2.3.2 2.3.3 All 91 releases
← All changes | src/Managers/FormatPriceManager.php +72 -11 6.4.0 → 8.0.2 View file →
@@ -12,8 +12,30 @@
12 12 *
13 13 * @package TierPricingTable\Managers
14 14 */
15 15 class FormatPriceManager {
16 + /**
17 + * Cache key for a formatted price.
18 + *
19 + * The formatted output depends on the display type and formatting flags, and several callers (for example, SEO
20 + * integrations building schema or title variables) request a plain, prefix-less version early in the request.
21 + * Keying by these arguments keeps each variant cached separately instead of letting the first caller win.
22 + *
23 + * @param string $displayType
24 + * @param array $args
25 + *
26 + * @return string
27 + */
28 + protected static function getPriceCacheKey( string $displayType, array $args ) : string {
29 + return 'price_html_' . md5( wp_json_encode( array(
30 + $displayType,
31 + (bool) $args['html'],
32 + (bool) $args['for_display'],
33 + (bool) $args['with_suffix'],
34 + (bool) $args['with_lowest_prefix']
35 + ) ) );
36 + }
37 +
16 38 public static function getFormattedPrice( WC_Product $product, array $args = array() ) : ?string {
17 39 $args = wp_parse_args( $args, array(
18 40 'html' => true,
19 41 'display_type' => null,
@@ -22,20 +44,25 @@
22 44 'with_suffix' => true,
23 45 'with_lowest_prefix' => true,
24 46 'with_default_price' => true,
25 47 ) );
26 - $priceHTML = 'default';
27 - if ( 'default' === $priceHTML ) {
28 - if ( $args['with_default_price'] ) {
29 - $priceHTML = ( $args['html'] ? $product->get_price_html() : $product->get_price() );
30 - } else {
31 - return null;
48 + $GLOBALS['TPT_DISABLE_CATALOG_PRICE_FORMAT'] = true;
49 + try {
50 + $priceHTML = 'default';
51 + if ( 'default' === $priceHTML ) {
52 + if ( $args['with_default_price'] ) {
53 + $priceHTML = ( $args['html'] ? $product->get_price_html() : $product->get_price() );
54 + } else {
55 + return null;
56 + }
32 57 }
58 + if ( isset( $args['html'] ) && !$args['html'] ) {
59 + $priceHTML = strip_tags( $priceHTML );
60 + }
61 + return $priceHTML;
62 + } finally {
63 + unset($GLOBALS['TPT_DISABLE_CATALOG_PRICE_FORMAT']);
33 64 }
34 - if ( isset( $args['html'] ) && !$args['html'] ) {
35 - $priceHTML = strip_tags( $priceHTML );
36 - }
37 - return $priceHTML;
38 65 }
39 66
40 67 public static function getLowestPrice( WC_Product $product, $args = array() ) : ?string {
41 68 $args = wp_parse_args( $args, array(
@@ -127,8 +154,38 @@
127 154 }
128 155 return $range;
129 156 }
130 157
158 + public static function getCustomPrice( WC_Product $product, array $args = array() ) : ?string {
159 + $template = ServiceContainer::getInstance()->getSettings()->get( 'tiered_price_at_catalog_custom_template', __( 'From {tp_lowest_price} instead of {tp_original_price}', 'tier-pricing-table' ) );
160 + if ( empty( $template ) ) {
161 + return null;
162 + }
163 + $lowestPrice = self::getLowestPrice( $product, array(
164 + 'html' => $args['html'],
165 + 'for_display' => $args['for_display'],
166 + 'with_suffix' => $args['with_suffix'],
167 + 'with_lowest_prefix' => false,
168 + 'with_default_price' => false,
169 + ) );
170 + if ( is_null( $lowestPrice ) ) {
171 + return null;
172 + }
173 + $priceRange = self::getPriceRange( $product, array(
174 + 'for_display' => $args['for_display'],
175 + 'with_suffix' => $args['with_suffix'],
176 + 'with_default_price' => false,
177 + 'html' => $args['html'],
178 + ) );
179 + $originalPrice = ( $args['html'] ? $product->get_price_html() : (( $args['for_display'] ? wc_get_price_to_display( $product ) : $product->get_price() )) );
180 + $replacements = array(
181 + '{tp_lowest_price}' => $lowestPrice,
182 + '{tp_prices_range}' => ( $priceRange ? $priceRange : $lowestPrice ),
183 + '{tp_original_price}' => $originalPrice,
184 + );
185 + return str_replace( array_keys( $replacements ), array_values( $replacements ), $template );
186 + }
187 +
131 188 public static function getLowestPrefix() : string {
132 189 $settings = ServiceContainer::getInstance()->getSettings();
133 190 return (string) $settings->get( 'lowest_prefix', __( 'From', 'tier-pricing-table' ) );
134 191 }
@@ -134,8 +191,12 @@
134 191 }
135 192
136 193 public static function getDisplayType() : string {
137 194 $settings = ServiceContainer::getInstance()->getSettings();
138 - return ( $settings->get( 'tiered_price_at_catalog_type', 'range' ) === 'range' ? 'range' : 'lowest' );
195 + $type = $settings->get( 'tiered_price_at_catalog_type', 'range' );
196 + if ( 'custom' === $type ) {
197 + return 'custom';
198 + }
199 + return ( $type === 'range' ? 'range' : 'lowest' );
139 200 }
140 201
141 202 }