PluginProbe ʕ •ᴥ•ʔ
WPML Multilingual & Multicurrency for WooCommerce / 5.5.7
WPML Multilingual & Multicurrency for WooCommerce v5.5.7
5.5.7 5.3.8 5.3.9 5.4.3 5.4.4 5.4.5 5.5.1 5.5.1.1 5.5.2.2 5.5.2.3 5.5.3 5.5.3.1 5.5.4 5.5.5 5.5.6 trunk 0.9 1.0 1.1 1.2 1.3 1.4 1.5 2.0 2.2 2.3 2.3.1 2.3.2 3.0 3.0.1 3.1 3.2 3.2.1 3.2.2 3.3 3.3.1 3.3.2 3.3.3 3.3.4 3.4 3.4.1 3.4.2 3.4.3 3.5 3.5.1 3.5.2 3.5.3 3.5.4 3.5.5 3.6 3.6.1 3.6.10 3.6.11 3.6.2 3.6.3 3.6.4 3.6.5 3.6.5.1 3.6.6 3.6.7 3.6.8 3.6.9 3.7 3.7.1 3.7.10 3.7.11 3.7.12 3.7.13 3.7.14 3.7.15 3.7.16 3.7.2 3.7.3 3.7.4 3.7.5 3.7.6 3.7.7 3.7.8 3.7.9 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.9.0 3.9.1 3.9.1.1 3.9.2 3.9.3 3.9.4 3.9.5 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.10.2 4.10.3 4.10.4 4.11.2 4.11.3.2 4.11.5 4.11.6 4.12.1 4.12.4 4.12.5 4.12.6 4.2.0 4.2.0.1 4.2.1 4.2.1.1 4.2.10 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.7.1 4.2.8 4.2.8.1 4.2.9 4.3.0 4.3.1 4.3.2 4.3.2.1 4.3.3 4.3.4 4.3.5 4.3.6 4.3.7 4.4.0 4.4.1 4.4.2 4.4.2.1 4.5.0 4.6.0 4.6.1 4.6.2 4.6.2.1 4.6.3 4.6.5 4.6.6 4.6.7 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.7.5 4.7.6 4.7.7 4.7.8 4.7.9 4.8.0 4.9.0 4.9.1 5.0.1 5.0.2 5.1.1 5.1.2 5.1.3 5.2.0 5.2.1 5.3.2 5.3.3.1 5.3.4 5.3.5 5.3.6 5.3.7
woocommerce-multilingual / classes / Multicurrency / WpQueryMcPrice / PriceOrderByPostMeta.php
woocommerce-multilingual / classes / Multicurrency / WpQueryMcPrice Last commit date
AbstractPriceByPostMeta.php 1 week ago Factory.php 1 week ago PriceFilteringByPostMeta.php 1 week ago PriceOrderByPostMeta.php 1 week ago
PriceOrderByPostMeta.php
63 lines
1 <?php
2
3 namespace WCML\Multicurrency\WpQueryMcPrice;
4
5 class PriceOrderByPostMeta extends AbstractPriceByPostMeta implements \IWPML_Backend_Action {
6
7 const ORDER_BY_VALUE = [ 'price-desc', 'price' ];
8
9 public function add_hooks() {
10 if ( $this->detectProductOrderByPriceInMultiCurrency() ) {
11 add_filter( 'pre_get_posts', [ $this, 'pre_get_posts' ] );
12 add_filter( 'posts_clauses', [ $this, 'posts_clauses_wcml_order_by_price_post_meta' ], 11, 2 );
13 }
14 }
15
16 private function detectProductOrderByPriceInMultiCurrency(): bool {
17 if ( ! isset( $_GET['orderby'] ) ) {
18 return false;
19 }
20
21 if ( ! in_array( $_GET['orderby'], self::ORDER_BY_VALUE ) ) {
22 return false;
23 }
24
25 return $this->default_currency !== $this->client_currency;
26 }
27
28 public function pre_get_posts( $wp_query ) {
29 if ( isset( $wp_query->query['orderby'] ) && in_array( $wp_query->query['orderby'], self::ORDER_BY_VALUE ) && isset( $wp_query->query_vars['wc_query'] ) && $wp_query->query_vars['wc_query'] === 'product_query' ) {
30 $wp_query->wcml_orderby_price = $wp_query->query['orderby'];
31
32 unset( $wp_query->query['orderby'] );
33 unset( $wp_query->query_vars['orderby'] );
34 }
35
36 return $wp_query;
37 }
38
39 public function posts_clauses_wcml_order_by_price_post_meta( $clauses, $wp_query ) {
40 if ( empty( $wp_query->wcml_orderby_price ) ) {
41 return $clauses;
42 }
43
44 $exchange_rates = $this->woocommerce_wpml->multi_currency->get_exchange_rates();
45 if ( ! isset( $exchange_rates[ $this->client_currency ] ) ) {
46 return $clauses;
47 }
48 $exchange_rate = $exchange_rates[ $this->client_currency ];
49
50 $clauses['join'] = $this->buildWCMLMultiCurrencyQueryJoin( $clauses['join'] );
51
52 $orderBy = "CASE " . self::WCML_CUSTOM_PRICES_STATUS_ALIAS . ".meta_value ";
53 $orderBy .= "WHEN '1' THEN CAST(" . self::WCML_MC_PRICE_ALIAS . ".meta_value AS decimal(19,4)) ";
54 $orderBy .= "ELSE ( CAST(" . self::WCML_PRICE_ALIAS . ".meta_value AS decimal(19,4)) * " . $exchange_rate . " ) END ";
55 $orderBy .= sprintf( ' %s ', $wp_query->wcml_orderby_price == 'price' ? 'ASC' : 'DESC' );
56 $orderBy .= empty( $clauses['orderby'] ) ? ' ' : ', ' . $clauses['orderby'];
57
58 $clauses['orderby'] = $orderBy;
59
60 return $clauses;
61 }
62 }
63