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 / Reviews / Translations / FrontEndHooks.php
woocommerce-multilingual / classes / Reviews / Translations Last commit date
Factory.php 1 month ago FrontEndHooks.php 1 month ago Mapper.php 1 month 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