PluginProbe
Translate and Go multilingual – Automatic AI translation – wpLingua / 1.4.2
Translate and Go multilingual – Automatic AI translation – wpLingua v1.4.2
2.16.5 2.16.4 2.16.3 2.16.2 2.16.1 2.16.0 2.15.2 2.15.1 2.15.0 2.14.3 2.14.2 2.14.1 2.14.0 2.13.1 2.13.0 2.12.3 2.12.2 2.12.1 trunk 1.0.3 1.0.4 1.0.5 1.1.0 1.1.1 1.2.0 All 110 releases
wplingua / wplingua.php

wplingua.php in Translate and Go multilingual – Automatic AI translation – wpLingua 1.4.2, at wplingua.php

234 lines 7.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Plugin Name: wpLingua
4 * Plugin URI: https://github.com/julien-jacob/wplingua
5 * Description: An all-in-one solution that makes your websites multilingual and translates them automatically, without word or page limits. The highlights: a free first language, an on-page visual editor for editing translations, a customizable language switcher, search engine optimization (SEO), self-hosted data and more!
6 * Author: wpLingua Team
7 * Author URI: https://wplingua.com/
8 * Text Domain: wplingua
9 * Domain Path: /languages/
10 * Version: 1.4.2
11 * Requires PHP: 7.4
12 * License: GPL v2 or later
13 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
14 */
15
16
17 // If this file is called directly, abort.
18 if ( ! defined( 'WPINC' ) ) {
19 die;
20 }
21
22
23 // Define wpLingua constants
24 define( 'WPLNG_API_URL', 'https://api.wplingua.com' );
25 define( 'WPLNG_API_VERSION', '1.0' );
26 define( 'WPLNG_API_SSLVERIFY', true );
27 define( 'WPLNG_PLUGIN_VERSION', '1.4.2' );
28 define( 'WPLNG_PLUGIN_FILE', plugin_basename( __FILE__ ) );
29 define( 'WPLNG_PLUGIN_PATH', dirname( __FILE__ ) );
30 define( 'WPLNG_MAX_TRANSLATIONS', 256 );
31 define( 'WPLNG_MAX_FILE_SIZE', 1000000 );
32 define( 'WPLNG_LOG_JSON_DEBUG', false );
33 define( 'WPLNG_LOG_AJAX_DEBUG', false );
34
35
36 // Load plugin text domain
37 load_plugin_textdomain(
38 'wplingua',
39 false,
40 basename( dirname( __FILE__ ) ) . '/languages'
41 );
42
43
44 // Load all needed PHP files
45 require_once WPLNG_PLUGIN_PATH . '/loader.php';
46
47
48 /**
49 * Register all wpLingua Hook
50 *
51 * @return void
52 */
53 function wplng_start() {
54
55 // Clear cached variables
56 wp_cache_delete( 'wplng_get_language_website', 'wplingua' );
57 wp_cache_delete( 'wplng_get_languages_target_simplified', 'wplingua' );
58 wp_cache_delete( 'wplng_get_languages_target', 'wplingua' );
59 wp_cache_delete( 'wplng_get_language_current_id', 'wplingua' );
60 wp_cache_delete( 'wplng_get_languages_all', 'wplingua' );
61 wp_cache_delete( 'wplng_get_languages_allow', 'wplingua' );
62 wp_cache_delete( 'wplng_get_url_exclude_regex', 'wplingua' );
63
64 // The plugin version has changed
65 if ( get_option( 'wplng_version' ) !== WPLNG_PLUGIN_VERSION ) {
66 wplng_clear_translations_cache();
67 update_option( 'wplng_version', WPLNG_PLUGIN_VERSION, true );
68 }
69
70 // Define $wplng_request_uri
71 if ( isset( $_SERVER['REQUEST_URI'] ) ) {
72
73 $request_uri = sanitize_url( $_SERVER['REQUEST_URI'] );
74
75 // Check if the referer is clean
76 if ( strtolower( esc_url_raw( $request_uri ) ) !== strtolower( $request_uri ) ) {
77 return;
78 }
79
80 global $wplng_request_uri;
81 $wplng_request_uri = $request_uri;
82
83 }
84
85 // Display a notice if an incompatible plugin is detected
86 add_action( 'admin_notices', 'wplng_admin_notice_incompatible_plugin', 1 );
87
88 // Register plugin settings
89 add_action( 'admin_init', 'wplng_register_settings' );
90
91 // Add settings link in plugin list
92 add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'wplng_settings_link' );
93
94 // Redirect to the settings page on plugin activation
95 add_action( 'activated_plugin', 'wplng_plugin_activation_redirect' );
96
97 // Set footer text for options pages
98 add_filter( 'admin_footer_text', 'wplng_admin_footer_text', 11 );
99 add_filter( 'update_footer', 'wplng_update_footer', 11 );
100
101 // Print head script (JSON with all languages informations)
102 add_action( 'toplevel_page_wplingua-settings', 'wplng_inline_script_languages' );
103
104 if ( empty( wplng_get_api_data() ) ) {
105
106 // Add Register option page in back office menu
107 add_action( 'admin_menu', 'wplng_create_menu_register' );
108
109 // Enqueue CSS and JS files for register option pages
110 add_action( 'admin_enqueue_scripts', 'wplng_option_page_register_assets' );
111
112 // Display a notice if the plugin is activate but not configured
113 add_action( 'admin_notices', 'wplng_admin_notice_no_key_set', 1 );
114
115 } else {
116
117 /**
118 * Back office
119 */
120
121 // Add menu in back office
122 add_action( 'admin_menu', 'wplng_create_menu' );
123
124 // Add admin Bar menu
125 add_action( 'admin_bar_menu', 'wplng_admin_bar_menu', 81 );
126
127 // Switcher in nav menu options
128 add_action( 'admin_enqueue_scripts', 'wplng_switcher_nav_menu_inline_scripts' );
129 add_action( 'admin_head-nav-menus.php', 'wp_nav_menu_switcher_box_add_register' );
130 add_action( 'wp_nav_menu_item_custom_fields', 'wp_nav_menu_switcher_box_edit', 10, 2 );
131
132 // Enqueue CSS and JS files for option pages
133 add_action( 'admin_enqueue_scripts', 'wplng_option_page_settings_assets' );
134 add_action( 'admin_enqueue_scripts', 'wplng_option_page_switcher_assets' );
135 add_action( 'admin_enqueue_scripts', 'wplng_option_page_exclusions_assets' );
136 add_action( 'admin_enqueue_scripts', 'wplng_option_page_dictionary_assets' );
137
138 // Update flags URL
139 add_action( 'update_option_wplng_flags_style', 'wplng_options_switcher_update_flags_style', 10, 2 );
140
141 // Reset API data on API key changing
142 add_action( 'update_option_wplng_api_key', 'wplng_on_update_option_wplng_api_key', 10, 2 );
143
144 /**
145 * wplng_translation : CPT, taxo, meta
146 */
147
148 // Register wplng_translation CPT
149 add_action( 'init', 'wplng_register_post_type_translation' );
150
151 // Add metabox for wplng_translation
152 add_action( 'add_meta_boxes_wplng_translation', 'wplng_translation_add_meta_box' );
153
154 // Save metabox on posts saving
155 add_action( 'save_post_wplng_translation', 'wplng_translation_save_meta_boxes_data', 10, 2 );
156
157 // Clear translation cache on trash / untrash
158 add_action( 'trashed_post', 'wplng_clear_translations_cache_trash_untrash' );
159 add_action( 'untrash_post', 'wplng_clear_translations_cache_trash_untrash' );
160 add_action( 'delete_post', 'wplng_clear_translations_cache_trash_untrash' );
161
162 // Enqueue Script for wplng_translation admin
163 add_action( 'admin_print_scripts-post-new.php', 'wplng_translation_assets' );
164 add_action( 'admin_print_scripts-post.php', 'wplng_translation_assets' );
165
166 // Remove Quick edit from translations list
167 add_filter( 'post_row_actions', 'wplng_translation_remove_quick_edit', 10, 2 );
168
169 // Ajax function for regenerate translation on edit page
170 add_action( 'wp_ajax_wplng_ajax_translation', 'wplng_ajax_generate_translation' );
171
172 // Ajax function for edit modal: Get HTML modal
173 add_action( 'wp_ajax_wplng_ajax_edit_modal', 'wplng_ajax_edit_modal' );
174
175 // Ajax function for edit modal: Save modal
176 add_action( 'wp_ajax_wplng_ajax_save_modal', 'wplng_ajax_save_modal' );
177
178 // Display 100 translation in admin area by default
179 add_filter( 'get_user_option_edit_wplng_translation_per_page', 'wplng_translation_per_page' );
180
181 // Filter translations by status
182 add_action( 'restrict_manage_posts', 'wplng_restrict_manage_posts_translation_status' );
183 add_filter( 'parse_query', 'wplng_posts_filter_translation_status' );
184
185 /**
186 * Front
187 */
188
189 // Enqueue CSS and JS files
190 add_action( 'wp_enqueue_scripts', 'wplng_register_assets' );
191
192 // Add languages switcher before </body>
193 add_action( 'wp_footer', 'wplng_switcher_wp_footer' );
194
195 // Add languages switcher in nav menu
196 add_filter( 'wp_nav_menu_objects', 'wplng_switcher_nav_menu_replace_items' );
197 add_filter( 'nav_menu_link_attributes', 'wplng_add_nav_menu_link_attributes_atts', 10, 2 );
198
199 // Set alternate links with hreflang parametters
200 add_action( 'wp_head', 'wplng_link_alternate_hreflang' );
201
202 /**
203 * OB and REQUEST_URI
204 */
205
206 // Manage URL with REQUEST_URI and start OB
207 add_action( 'init', 'wplng_ob_start', 1 );
208
209 /**
210 * Features
211 */
212
213 // Search from translated languages
214 if ( ! empty( get_option( 'wplng_translate_search' ) )
215 && wplng_api_feature_is_allow( 'search' )
216 ) {
217 add_action( 'parse_query', 'wplng_translate_search_query' );
218 } else {
219 add_filter( 'wplng_url_is_translatable', 'wplng_exclude_search', 20 );
220 }
221
222 /**
223 * Shortcode
224 */
225
226 add_shortcode( 'wplng_switcher', 'wplng_shortcode_switcher' );
227 add_shortcode( 'wplng_notranslate', 'wplng_shortcode_notranslate' );
228 add_shortcode( 'wplng_only', 'wplng_shortcode_only' );
229
230 }
231
232 }
233 wplng_start();
234