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 / Block / Convert / Hooks.php
woocommerce-multilingual / classes / Block / Convert Last commit date
Converter 5 years ago ConverterProvider.php 1 week ago Hooks.php 1 week ago
Hooks.php
73 lines
1 <?php
2
3 namespace WCML\Block\Convert;
4
5 use IWPML_DIC_Action;
6 use IWPML_Frontend_Action;
7 use WPML\Core\ISitePress;
8 use WCML\StandAlone\NullSitePress;
9 use SitePress;
10 use WCML\Rest\Frontend\Language;
11 use WPML\FP\Just;
12 use WPML\FP\Str;
13
14 class Hooks implements IWPML_Frontend_Action, IWPML_DIC_Action {
15
16 private $sitepress;
17
18 private $frontendRestLang;
19
20 public function __construct( ISitePress $sitepress, Language $frontendRestLang ) {
21 $this->sitepress = $sitepress;
22 $this->frontendRestLang = $frontendRestLang;
23 }
24
25 public function add_hooks() {
26 add_filter( 'render_block_data', [ $this, 'filterIdsInBlock' ] );
27 add_filter( 'render_block_woocommerce/product-search', [ $this, 'filterProductSearchForm' ] );
28 add_action( 'parse_query', [ $this, 'addCurrentLangToQueryVars' ] );
29
30 if ( ! ( is_admin() || \WPML_URL_HTTP_Referer::is_post_edit_page() ) ) {
31 add_filter( 'rest_request_before_callbacks', [ $this, 'useLanguageFrontendRestLang' ], 10, 3 );
32 }
33 }
34
35 public function filterIdsInBlock( array $block ) {
36 return ConverterProvider::get( $block['blockName'] )->convert( $block );
37 }
38
39 public function addCurrentLangToQueryVars( $query ) {
40 if ( $query instanceof \Automattic\WooCommerce\Blocks\Utils\BlocksWpQuery ) {
41 $query->query_vars['wpml_language'] = $this->sitepress->get_current_language();
42 }
43 }
44
45 public function useLanguageFrontendRestLang( $response, $handler, $request ) {
46 if ( $this->isWcRestRequest( $request ) ) {
47 $lang = $this->frontendRestLang->get();
48
49 if ( $lang ) {
50 $this->sitepress->switch_lang( $lang );
51 }
52 }
53
54 return $response;
55 }
56
57 private function isWcRestRequest( \WP_REST_Request $request ) {
58 return strpos( $request->get_route(), '/wc/blocks/' ) === 0
59 || strpos( $request->get_route(), '/wc/store/' ) === 0;
60 }
61
62 public function filterProductSearchForm( $blockContent ) {
63 $replaceActionUrl = Str::pregReplace( '/(<form[^>]*action=")([^"]*)"/', '$1' . home_url( '/' ) . '"' );
64
65 $addLanguageHiddenField = [ $this->sitepress, 'get_search_form_filter' ];
66
67 return Just::of( $blockContent )
68 ->map( $replaceActionUrl )
69 ->map( $addLanguageHiddenField )
70 ->get();
71 }
72 }
73