PluginProbe ʕ •ᴥ•ʔ
WPML Multilingual & Multicurrency for WooCommerce / trunk
WPML Multilingual & Multicurrency for WooCommerce vtrunk
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 month ago Hooks.php 1 month 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