PluginProbe ʕ •ᴥ•ʔ
WPML Multilingual & Multicurrency for WooCommerce / trunk
WPML Multilingual & Multicurrency for WooCommerce vtrunk
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 4 months ago
class-wcml-pointers.php
139 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 /**
61 * @param array $settings
62 *
63 * @return array
64 */
65 public function add_multi_currency_link( array $settings ) {
66 $link = \WCML\Utilities\AdminUrl::getMultiCurrencyTab();
67 $name = __( 'Configure multicurrency for multilingual sites', 'woocommerce-multilingual' );
68
69 $anchor = '<a class="button button-small button-wpml wcml-pointer-multi_currency" href="{{ url }}">{{ text }}</a>';
70
71 return $this->add_link_with_settings( $link, $name, 'pricing_options', $settings, $anchor );
72 }
73
74 /**
75 * @param array $settings
76 *
77 * @return array
78 */
79 public function add_endpoints_translation_link( array $settings ) {
80 $link = \WCML\Utilities\AdminUrl::getStoreURLTab();
81 $name = __( 'Translate endpoints', 'woocommerce-multilingual' );
82
83 $anchor = '<a class="button button-small button-wpml wcml-pointer-endpoints_translation" href="{{ url }}">{{ text }}</a>';
84
85 return $this->add_link_with_settings( $link, $name, 'checkout_endpoint_options', $settings, $anchor );
86 }
87
88 /**
89 * @param string $link
90 * @param string $name
91 * @param string $anchor_template
92 * @param string $jquery_selector
93 * @param bool $before
94 */
95 private function add_link_with_jquery( $link, $name, $anchor_template, $jquery_selector, $before = false ) {
96 wp_enqueue_style( 'wcml-pointers' );
97
98 $method = $before ? 'before' : 'append';
99 // @todo move to an enqueued script?.
100 ?>
101 <script type="text/javascript">
102 jQuery('<?php echo esc_js( $jquery_selector ); ?>').<?php echo $method; ?>('<?php echo $this->get_anchor( $link, $name, $anchor_template ); ?>');
103 </script>
104 <?php
105 }
106
107 /**
108 * @param string $link
109 * @param string $name
110 * @param string $setting_key
111 * @param array $settings
112 * @param string $anchor_template
113 *
114 * @return array
115 */
116 private function add_link_with_settings( $link, $name, $setting_key, array $settings, $anchor_template ) {
117 wp_enqueue_style( 'wcml-pointers' );
118 foreach ( $settings as $key => $value ) {
119 if ( is_array( $value ) && isset( $value['id'], $value['desc'] ) && $setting_key === $value['id'] ) {
120
121 $settings[ $key ]['desc'] = $this->get_anchor( $link, $name, $anchor_template ) . '<br />' . $value['desc'];
122 }
123 }
124
125 return $settings;
126 }
127
128 /**
129 * @param string $link
130 * @param string $name
131 * @param string $anchor_template
132 *
133 * @return string
134 */
135 private function get_anchor( $link, $name, $anchor_template ) {
136 return str_replace( [ '{{ url }}', '{{ text }}' ], [ $link, $name ], $anchor_template );
137 }
138 }
139