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 / Reviews / Translations / FrontEndHooks.php
woocommerce-multilingual / classes / Reviews / Translations Last commit date
Factory.php 3 weeks ago FrontEndHooks.php 3 weeks ago Mapper.php 3 weeks ago
FrontEndHooks.php
73 lines
1 <?php
2
3 namespace WCML\Reviews\Translations;
4
5 use IWPML_Action;
6 use WPML\FP\Obj;
7
8 class FrontEndHooks implements IWPML_Action {
9
10 const CONTEXT = 'wcml-reviews';
11 const COMMENT_TYPES = [ self::COMMENT_TYPE_REVIEW, self::COMMENT_TYPE_REPLY ];
12 const COMMENT_TYPE_REVIEW = 'review';
13 const COMMENT_TYPE_REPLY = 'comment';
14 const HOOK_ENABLE = 'wcml_enable_product_review_translation';
15
16 public function add_hooks() {
17 if ( apply_filters( self::HOOK_ENABLE, true ) ) {
18 add_action( 'wp_insert_comment', [ $this, 'insertCommentAction' ], 10, 2 );
19 add_action( 'woocommerce_review_before', [ $this, 'translateReview' ] );
20 }
21 }
22
23 public function insertCommentAction( $commentId, $comment ) {
24 self::registerReviewString( $comment );
25 }
26
27 public function translateReview( $comment ) {
28 if ( self::isNonEmptyReview( $comment ) ) {
29 if ( \WCML_Comments::is_translated( $comment ) ) {
30 return;
31 }
32
33 $reviewTranslation = apply_filters(
34 'wpml_translate_single_string',
35 $comment->comment_content,
36 self::CONTEXT,
37 self::getReviewStringName( $comment )
38 );
39
40 if ( $reviewTranslation !== $comment->comment_content ) {
41 $comment->is_translated = true;
42 $comment->comment_content = $reviewTranslation;
43 }
44 }
45 }
46
47 public static function registerReviewString( $review ) {
48 if ( self::isNonEmptyReview( $review ) ) {
49 $language = Obj::prop( 'language_code', $review ) ?: apply_filters( 'wpml_current_language', null );
50 do_action(
51 'wpml_register_single_string',
52 self::CONTEXT,
53 self::getReviewStringName( $review ),
54 $review->comment_content,
55 false,
56 $language
57 );
58 }
59 }
60
61 private static function isNonEmptyReview( $comment ): bool {
62 if ( ! Obj::prop( 'comment_content', $comment ) ) {
63 return false;
64 }
65
66 return in_array( Obj::prop( 'comment_type', $comment ), self::COMMENT_TYPES, true );
67 }
68
69 private static function getReviewStringName( $review ): string {
70 return 'product-' . \WCML_Comments::getOriginalPostId( $review ) . '-review-' . Obj::prop( 'comment_ID', $review );
71 }
72 }
73