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 / DisplayAsTranslated / ProductCatHooks.php
woocommerce-multilingual / classes / DisplayAsTranslated Last commit date
FrontendHooksFactory.php 1 week ago ProductCatHooks.php 1 week ago ProductHooks.php 1 week ago
ProductCatHooks.php
62 lines
1 <?php
2
3 namespace WCML\DisplayAsTranslated;
4
5 use WPML\FP\Just;
6 use WPML\FP\Obj;
7 use WPML\LIB\WP\Hooks;
8 use function WPML\FP\invoke;
9 use function WPML\FP\spreadArgs;
10
11 class ProductCatHooks implements \IWPML_Frontend_Action {
12
13 private $isTermsFilterLoaded = false;
14
15 const KEY_FIX_TERM_COUNT_ZERO = 'wcml_fix_term_count_zero';
16
17 private $elementFactory;
18
19 public function __construct( \WPML_Translation_Element_Factory $elementFactory ) {
20 $this->elementFactory = $elementFactory;
21 }
22
23 public function add_hooks() {
24 Hooks::onFilter( 'woocommerce_product_subcategories_args' )
25 ->then( spreadArgs( [ $this, 'addFixCountArg' ] ) );
26 }
27
28 public function addFixCountArg( $args ) {
29 $this->loadTermsFilter();
30 return (array) Obj::assoc( self::KEY_FIX_TERM_COUNT_ZERO, true, $args );
31 }
32
33 private function loadTermsFilter() {
34 if ( ! $this->isTermsFilterLoaded ) {
35 Hooks::onFilter( 'get_terms', 10, 4 )
36 ->then( spreadArgs( [ $this, 'fixTermsWithZeroCount' ] ) );
37
38 $this->isTermsFilterLoaded = true;
39 }
40 }
41
42 public function fixTermsWithZeroCount( $terms, $taxonomy, $termQueryVars ) {
43 if ( ! empty( $termQueryVars[ self::KEY_FIX_TERM_COUNT_ZERO ] ) ) {
44 foreach ( $terms as $term ) {
45 if ( ! $term->count ) {
46 $term->count = $this->getSourceTermCount( $term );
47 }
48 }
49 }
50
51 return $terms;
52 }
53
54 private function getSourceTermCount( $term ) {
55 return (int) Just::of( $this->elementFactory->create_term( $term->term_taxonomy_id ) )
56 ->map( invoke( 'get_source_element' ) )
57 ->map( invoke( 'get_wp_object' ) )
58 ->map( Obj::prop( 'count' ) )
59 ->getOrElse( $term->count );
60 }
61 }
62