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 / pointers / class-wcml-pointers.php
woocommerce-multilingual / classes / pointers Last commit date
class-wcml-pointers.php 2 weeks ago
class-wcml-pointers.php
105 lines
1 <?php
2
3 use function WCML\functions\isStandAlone;
4
5 class WCML_Pointers{
6
7 public function add_hooks() {
8 add_action( 'admin_head', [ $this, 'setup' ] );
9 }
10
11 public function setup() {
12 $current_screen = get_current_screen();
13
14 if ( empty( $current_screen ) ) {
15 return;
16 }
17
18 if ( ! WCML_Capabilities::canManageWcml() ) {
19 return;
20 }
21
22 $tab = $_GET['tab'] ?? '';
23 $section = $_GET['section'] ?? '';
24 $isFullMode = ! isStandAlone();
25 wp_register_style( 'wcml-pointers', WCML_PLUGIN_URL . '/res/css/wcml-pointers.css' );
26
27 if ( $isFullMode && 'edit-product' === $current_screen->id ) {
28 add_action( 'admin_footer', [ $this, 'add_products_translation_link' ], 100 );
29 } elseif ( 'woocommerce_page_wc-settings' === $current_screen->id ) {
30 if ( $isFullMode && 'shipping' === $tab && 'classes' === $section ) {
31 add_action( 'admin_footer', [ $this, 'add_shipping_classes_translation_link' ] );
32 } elseif ( ! $tab || 'general' === $tab ) {
33 add_filter( 'woocommerce_general_settings', [ $this, 'add_multi_currency_link' ] );
34 } elseif ( $isFullMode && 'advanced' === $tab ) {
35 add_filter( 'woocommerce_settings_pages', [ $this, 'add_endpoints_translation_link' ] );
36 }
37 }
38 }
39
40 public function add_products_translation_link() {
41 $link = \WCML\Utilities\AdminUrl::getWPMLTMDashboardProducts();
42 $name = __( 'Translate WooCommerce products', 'woocommerce-multilingual' );
43 $anchor = '<a class="button button-small button-wpml wcml-pointer-products_translation" href="{{ url }}">{{ text }}</a>';
44
45 $this->add_link_with_jquery( $link, $name, $anchor, '.subsubsub' );
46 }
47
48 public function add_shipping_classes_translation_link() {
49 if ( ! WCML_Terms::wpml_is_product_shipping_class_set_as_translated() ) {
50 return;
51 }
52
53 $link = \WCML\Utilities\AdminUrl::getWPMLTaxonomyTranslation( 'product_shipping_class' );
54 $name = __( 'Translate shipping classes', 'woocommerce-multilingual' );
55 $anchor = '<a class="button button-small button-wpml wcml-pointer-shipping_classes_translation" href="{{ url }}">{{ text }}</a>';
56
57 $this->add_link_with_jquery( $link, $name, $anchor, '.wc-shipping-classes', true );
58 }
59
60 public function add_multi_currency_link( array $settings ) {
61 $link = \WCML\Utilities\AdminUrl::getMultiCurrencyTab();
62 $name = __( 'Configure multicurrency for multilingual sites', 'woocommerce-multilingual' );
63
64 $anchor = '<a class="button button-small button-wpml wcml-pointer-multi_currency" href="{{ url }}">{{ text }}</a>';
65
66 return $this->add_link_with_settings( $link, $name, 'pricing_options', $settings, $anchor );
67 }
68
69 public function add_endpoints_translation_link( array $settings ) {
70 $link = \WCML\Utilities\AdminUrl::getStoreURLTab();
71 $name = __( 'Translate endpoints', 'woocommerce-multilingual' );
72
73 $anchor = '<a class="button button-small button-wpml wcml-pointer-endpoints_translation" href="{{ url }}">{{ text }}</a>';
74
75 return $this->add_link_with_settings( $link, $name, 'checkout_endpoint_options', $settings, $anchor );
76 }
77
78 private function add_link_with_jquery( $link, $name, $anchor_template, $jquery_selector, $before = false ) {
79 wp_enqueue_style( 'wcml-pointers' );
80
81 $method = $before ? 'before' : 'append';
82 ?>
83 <script type="text/javascript">
84 jQuery('<?php echo esc_js( $jquery_selector ); ?>').<?php echo $method; ?>('<?php echo $this->get_anchor( $link, $name, $anchor_template ); ?>');
85 </script>
86 <?php
87 }
88
89 private function add_link_with_settings( $link, $name, $setting_key, array $settings, $anchor_template ) {
90 wp_enqueue_style( 'wcml-pointers' );
91 foreach ( $settings as $key => $value ) {
92 if ( is_array( $value ) && isset( $value['id'], $value['desc'] ) && $setting_key === $value['id'] ) {
93
94 $settings[ $key ]['desc'] = $this->get_anchor( $link, $name, $anchor_template ) . '<br />' . $value['desc'];
95 }
96 }
97
98 return $settings;
99 }
100
101 private function get_anchor( $link, $name, $anchor_template ) {
102 return str_replace( [ '{{ url }}', '{{ text }}' ], [ $link, $name ], $anchor_template );
103 }
104 }
105