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 / compatibility / WcOrderStatusManager / class-wcml-order-status-manager.php
woocommerce-multilingual / compatibility / WcOrderStatusManager Last commit date
Factory.php 4 weeks ago class-wcml-order-status-manager.php 4 weeks ago
class-wcml-order-status-manager.php
56 lines
1 <?php
2 class WCML_Order_Status_Manager implements \IWPML_Action {
3 private $wp_query;
4
5 public function __construct( WP_Query $wp_query ) {
6 $this->wp_query = $wp_query;
7 }
8
9 public function add_hooks() {
10 add_action( 'pre_get_posts', [ $this, 'pre_get_posts' ], 10, 1 );
11 }
12
13 public function pre_get_posts( $q = null ) {
14 if ( isset( $q->query['post_type'] )
15 && 'wc_order_status' === $q->query['post_type']
16 && doing_filter( 'woocommerce_register_shop_order_post_statuses' )
17 ) {
18 $q->set( 'post__not_in', $this->prepare_post_not_in( $q, $this->get_statuses() ) );
19 }
20 }
21
22 private function get_statuses() {
23 remove_action( 'pre_get_posts', [ $this, 'pre_get_posts' ], 10 );
24 $this->wp_query->query(
25 [
26 'post_type' => 'wc_order_status',
27 'posts_per_page' => 100,
28 'suppress_filters' => false,
29
30 ]
31 );
32 add_action( 'pre_get_posts', [ $this, 'pre_get_posts' ], 10, 1 );
33 return $this->wp_query->posts;
34 }
35
36 private function prepare_post_not_in( $q, $statuses ) {
37 $post__not_in = [];
38
39 if ( $statuses ) {
40 $current_language = apply_filters( 'wpml_current_language', null );
41
42 foreach ( $statuses as $status ) {
43 $post_language_details = apply_filters( 'wpml_post_language_details', '', $status->ID );
44 if ( isset( $post_language_details['language_code'] ) ) {
45 if ( $post_language_details['language_code'] !== $current_language ) {
46 $post__not_in[] = $status->ID;
47 }
48 }
49 }
50 }
51
52 $post__not_in_query = isset( $q->query_vars['post__not_in'] ) ? $q->query_vars['post__not_in'] : [];
53 return array_merge( $post__not_in_query, $post__not_in );
54 }
55 }
56