PluginProbe
Translate and Go multilingual – Automatic AI translation – wpLingua / 1.2.0
Translate and Go multilingual – Automatic AI translation – wpLingua v1.2.0
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 1.2.1 All 109 releases
wplingua / wplingua.php

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

209 lines 6.7 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.2.0
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.2.0' );
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 // Define $wplng_request_uri
56 if ( isset( $_SERVER['REQUEST_URI'] ) ) {
57
58 $request_uri = sanitize_url( $_SERVER['REQUEST_URI'] );
59
60 // Check if the referer is clean
61 if ( strtolower( esc_url_raw( $request_uri ) ) !== strtolower( $request_uri ) ) {
62 return;
63 }
64
65 global $wplng_request_uri;
66 $wplng_request_uri = $request_uri;
67
68 }
69
70 // Display a notice if an incompatible plugin is detected
71 add_action( 'admin_notices', 'wplng_admin_notice_incompatible_plugin', 1 );
72
73 // Register plugin settings
74 add_action( 'admin_init', 'wplng_register_settings' );
75
76 // Add settings link in plugin list
77 add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'wplng_settings_link' );
78
79 // Redirect to the settings page on plugin activation
80 add_action( 'activated_plugin', 'wplng_plugin_activation_redirect' );
81
82 // Set footer text for options pages
83 add_filter( 'admin_footer_text', 'wplng_admin_footer_text', 11 );
84 add_filter( 'update_footer', 'wplng_update_footer', 11 );
85
86 // Print head script (JSON with all languages informations)
87 add_action( 'toplevel_page_wplingua-settings', 'wplng_inline_script_languages' );
88
89 if ( empty( wplng_get_api_data() ) ) {
90
91 // Add Register option page in back office menu
92 add_action( 'admin_menu', 'wplng_create_menu_register' );
93
94 // Enqueue CSS and JS files for register option pages
95 add_action( 'admin_enqueue_scripts', 'wplng_option_page_register_assets' );
96
97 // Display a notice if the plugin is activate but not configured
98 add_action( 'admin_notices', 'wplng_admin_notice_no_key_set', 1 );
99
100 } else {
101
102 /**
103 * Back office
104 */
105
106 // Add menu in back office
107 add_action( 'admin_menu', 'wplng_create_menu' );
108
109 // Add admin Bar menu
110 add_action( 'admin_bar_menu', 'wplng_admin_bar_menu', 81 );
111
112 // Enqueue CSS and JS files for option pages
113 add_action( 'admin_enqueue_scripts', 'wplng_option_page_settings_assets' );
114 add_action( 'admin_enqueue_scripts', 'wplng_option_page_switcher_assets' );
115 add_action( 'admin_enqueue_scripts', 'wplng_option_page_exclusions_assets' );
116 add_action( 'admin_enqueue_scripts', 'wplng_option_page_dictionary_assets' );
117
118 // Update flags URL
119 add_action( 'update_option_wplng_flags_style', 'wplng_options_switcher_update_flags_style', 10, 2 );
120
121 // Reset API data on API key changing
122 add_action( 'update_option_wplng_api_key', 'wplng_on_update_option_wplng_api_key', 10, 2 );
123
124 /**
125 * wplng_translation : CPT, taxo, meta
126 */
127
128 // Register wplng_translation CPT
129 add_action( 'init', 'wplng_register_post_type_translation' );
130
131 // Add metabox for wplng_translation
132 add_action( 'add_meta_boxes_wplng_translation', 'wplng_translation_add_meta_box' );
133
134 // Save metabox on posts saving
135 add_action( 'save_post_wplng_translation', 'wplng_translation_save_meta_boxes_data', 10, 2 );
136
137 // Clear translation cache on trash / untrash
138 add_action( 'trashed_post', 'wplng_clear_translations_cache_trash_untrash' );
139 add_action( 'untrash_post', 'wplng_clear_translations_cache_trash_untrash' );
140 add_action( 'delete_post', 'wplng_clear_translations_cache_trash_untrash' );
141
142 // Enqueue Script for wplng_translation admin
143 add_action( 'admin_print_scripts-post-new.php', 'wplng_translation_assets' );
144 add_action( 'admin_print_scripts-post.php', 'wplng_translation_assets' );
145
146 // Remove Quick edit from translations list
147 add_filter( 'post_row_actions', 'wplng_translation_remove_quick_edit', 10, 2 );
148
149 // Ajax function for regenerate translation on edit page
150 add_action( 'wp_ajax_wplng_ajax_translation', 'wplng_ajax_generate_translation' );
151
152 // Display 100 translation in admin area by default
153 add_filter( 'get_user_option_edit_wplng_translation_per_page', 'wplng_translation_per_page' );
154
155 // Filter translations by status
156 add_action( 'restrict_manage_posts', 'wplng_restrict_manage_posts_translation_status' );
157 add_filter( 'parse_query', 'wplng_posts_filter_translation_status' );
158
159 /**
160 * Front
161 */
162
163 // Enqueue CSS and JS files
164 add_action( 'wp_enqueue_scripts', 'wplng_register_assets' );
165
166 // Add languages switcher before </body>
167 add_action( 'wp_footer', 'wplng_switcher_wp_footer' );
168
169 // Set alternate links with hreflang parametters
170 add_action( 'wp_head', 'wplng_link_alternate_hreflang' );
171
172 /**
173 * OB and REQUEST_URI
174 */
175
176 // Manage URL with REQUEST_URI and start OB
177 add_action( 'init', 'wplng_ob_start', 1 );
178
179 /**
180 * Features
181 */
182
183 // Search from translated languages
184 if ( ! empty( get_option( 'wplng_translate_search' ) )
185 && wplng_api_feature_is_allow( 'search' )
186 ) {
187 add_action( 'parse_query', 'wplng_translate_search_query' );
188 } else {
189 add_filter( 'wplng_url_is_translatable', 'wplng_exclude_search', 20 );
190 }
191
192 // Woocommerce
193 if ( empty( get_option( 'wplng_translate_woocommerce' ) ) ) {
194 add_filter( 'wplng_url_exclude_regex', 'wplng_exclude_woocommerce_url', 20 );
195 }
196
197 /**
198 * Shortcode
199 */
200
201 add_shortcode( 'wplng_switcher', 'wplng_shortcode_switcher' );
202 add_shortcode( 'wplng_notranslate', 'wplng_shortcode_notranslate' );
203 add_shortcode( 'wplng_only', 'wplng_shortcode_only' );
204
205 }
206
207 }
208 wplng_start();
209