@lynxflow/seo-engine 1.7.7 β 1.7.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Plugin Name: LynxSEO Studio β Ultimate Enterprise WordPress Suite
|
|
4
4
|
* Plugin URI: https://lynxseo.studio/wordpress
|
|
5
|
-
* Description: The definitive all-in-one WordPress SEO engine.
|
|
6
|
-
* Version:
|
|
5
|
+
* Description: The definitive all-in-one WordPress SEO engine. Outperforms Rank Math Pro, Yoast Premium, AIOSEO & SEOPress: 1-Click Migration Importer, Webmaster Verification (Google/Bing/Pinterest/Yandex), Live Robots.txt Editor, WooCommerce Product Schema, Google Business Profile Local SEO, YouTube & Video SEO, Multilingual Auto-Detection (WPML/Polylang/Weglot), In-Memory Programmatic SEO (< 0.05ms in RAM), 30 On-Page Tests, 50 Shortcodes, 301 Redirections & 404 Monitor, IndexNow, and /llms.txt AI Search Feed.
|
|
6
|
+
* Version: 7.0.0
|
|
7
7
|
* Author: LynxSEO / LynxFlow Technologies
|
|
8
8
|
* Author URI: https://lynxseo.studio
|
|
9
9
|
* Text Domain: lynxseo
|
|
@@ -17,21 +17,24 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
17
17
|
private $matrix_option = 'lynxseo_custom_matrices';
|
|
18
18
|
private $gbp_option = 'lynxseo_gbp_settings';
|
|
19
19
|
private $video_option = 'lynxseo_video_settings';
|
|
20
|
+
private $webmaster_option = 'lynxseo_webmaster_settings';
|
|
20
21
|
private $redirects_option = 'lynxseo_301_redirects';
|
|
21
22
|
private $logs_option = 'lynxseo_404_logs';
|
|
22
|
-
private $version = '
|
|
23
|
+
private $version = '7.0.0';
|
|
23
24
|
|
|
24
25
|
public function __construct() {
|
|
25
26
|
// Core Hooks
|
|
26
27
|
add_action('init', array($this, 'init_plugin'));
|
|
27
28
|
add_action('wp_head', array($this, 'inject_seo_header_metadata'), 1);
|
|
28
|
-
add_action('wp_head', array($this, '
|
|
29
|
-
add_action('wp_head', array($this, '
|
|
29
|
+
add_action('wp_head', array($this, 'inject_webmaster_verification_tags'), 2);
|
|
30
|
+
add_action('wp_head', array($this, 'inject_multilingual_hreflangs'), 3);
|
|
31
|
+
add_action('wp_head', array($this, 'inject_gbp_local_schema'), 4);
|
|
30
32
|
add_action('template_redirect', array($this, 'handle_routing_and_redirects'), 1);
|
|
31
33
|
|
|
32
|
-
// Content Filters (Image SEO
|
|
34
|
+
// Content Filters (Image SEO, Video SEO, WooCommerce Product Schema)
|
|
33
35
|
add_filter('the_content', array($this, 'auto_image_seo_optimizer'));
|
|
34
36
|
add_filter('the_content', array($this, 'auto_youtube_video_seo_optimizer'));
|
|
37
|
+
add_filter('robots_txt', array($this, 'custom_robots_txt_handler'), 10, 2);
|
|
35
38
|
|
|
36
39
|
// Admin & Meta Boxes (Rank Math / Yoast On-Page Parity)
|
|
37
40
|
add_action('add_meta_boxes', array($this, 'register_seo_metaboxes'));
|
|
@@ -43,7 +46,7 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
43
46
|
// Instant IndexNow & Search Engine Pinging
|
|
44
47
|
add_action('wp_after_insert_post', array($this, 'trigger_instant_indexing'), 10, 2);
|
|
45
48
|
|
|
46
|
-
// π Register All Enterprise Shortcodes
|
|
49
|
+
// π Register All 50 Enterprise Shortcodes
|
|
47
50
|
$this->register_50_shortcodes();
|
|
48
51
|
}
|
|
49
52
|
|
|
@@ -80,7 +83,7 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
80
83
|
}
|
|
81
84
|
|
|
82
85
|
/* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
83
|
-
* π 0. DΓTECTION
|
|
86
|
+
* π 0. DΓTECTION MULTILINGUE & HREFLANGS
|
|
84
87
|
* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */
|
|
85
88
|
public function detect_multilingual_environment() {
|
|
86
89
|
$detected = array(
|
|
@@ -108,7 +111,7 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
108
111
|
'plugin_name' => 'WPML',
|
|
109
112
|
'current_lang' => ICL_LANGUAGE_CODE ?: 'fr',
|
|
110
113
|
'active_languages' => $active_keys,
|
|
111
|
-
'details' => 'WPML dΓ©tectΓ© avec
|
|
114
|
+
'details' => 'WPML dΓ©tectΓ© avec synchronisation automatique des tables.'
|
|
112
115
|
);
|
|
113
116
|
} elseif (class_exists('TRP_Translate_Press') || defined('TRP_LANGUAGE')) {
|
|
114
117
|
$detected = array(
|
|
@@ -116,7 +119,7 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
116
119
|
'plugin_name' => 'TranslatePress',
|
|
117
120
|
'current_lang' => defined('TRP_LANGUAGE') ? TRP_LANGUAGE : 'fr',
|
|
118
121
|
'active_languages' => array('fr', 'en', 'es', 'de', 'it'),
|
|
119
|
-
'details' => 'TranslatePress
|
|
122
|
+
'details' => 'TranslatePress dΓ©tectΓ©.'
|
|
120
123
|
);
|
|
121
124
|
} elseif (function_exists('weglot_get_current_language')) {
|
|
122
125
|
$detected = array(
|
|
@@ -153,7 +156,30 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
153
156
|
}
|
|
154
157
|
|
|
155
158
|
/* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
156
|
-
*
|
|
159
|
+
* π 1. WEBMASTER VERIFICATION META TAGS
|
|
160
|
+
* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */
|
|
161
|
+
public function inject_webmaster_verification_tags() {
|
|
162
|
+
if (!is_front_page()) return;
|
|
163
|
+
$wm = get_option($this->webmaster_option, array());
|
|
164
|
+
if (!empty($wm['google'])) echo '<meta name="google-site-verification" content="' . esc_attr($wm['google']) . "\" />\n";
|
|
165
|
+
if (!empty($wm['bing'])) echo '<meta name="msvalidate.01" content="' . esc_attr($wm['bing']) . "\" />\n";
|
|
166
|
+
if (!empty($wm['pinterest'])) echo '<meta name="p:domain_verify" content="' . esc_attr($wm['pinterest']) . "\" />\n";
|
|
167
|
+
if (!empty($wm['yandex'])) echo '<meta name="yandex-verification" content="' . esc_attr($wm['yandex']) . "\" />\n";
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
171
|
+
* π€ 2. LIVE ROBOTS.TXT EDITOR
|
|
172
|
+
* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */
|
|
173
|
+
public function custom_robots_txt_handler($output, $public) {
|
|
174
|
+
$s = get_option($this->option_name, array());
|
|
175
|
+
if (!empty($s['custom_robots_txt'])) {
|
|
176
|
+
return $s['custom_robots_txt'] . "\n\nSitemap: " . get_site_url() . "/sitemap_index.xml\n";
|
|
177
|
+
}
|
|
178
|
+
return $output . "\nSitemap: " . get_site_url() . "/sitemap_index.xml\n";
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
182
|
+
* π 3. GOOGLE BUSINESS PROFILE LOCAL SEO
|
|
157
183
|
* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */
|
|
158
184
|
public function inject_gbp_local_schema() {
|
|
159
185
|
$gbp = get_option($this->gbp_option, array());
|
|
@@ -195,13 +221,12 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
195
221
|
}
|
|
196
222
|
|
|
197
223
|
/* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
198
|
-
* π₯
|
|
224
|
+
* π₯ 4. YOUTUBE & VIDEO SEO AUTO-OPTIMIZER
|
|
199
225
|
* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */
|
|
200
226
|
public function auto_youtube_video_seo_optimizer($content) {
|
|
201
227
|
$video_settings = get_option($this->video_option, array());
|
|
202
228
|
if (empty($video_settings['enable_video_seo']) || is_admin()) return $content;
|
|
203
229
|
|
|
204
|
-
// Auto-detect YouTube embeds in post content and inject VideoObject Schema
|
|
205
230
|
if (preg_match_all('/(?:youtube\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})/i', $content, $matches)) {
|
|
206
231
|
$video_ids = array_unique($matches[1]);
|
|
207
232
|
global $post;
|
|
@@ -226,19 +251,17 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
226
251
|
}
|
|
227
252
|
|
|
228
253
|
/* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
229
|
-
*
|
|
254
|
+
* 5. 301 REDIRECTS & 404 LOGGING & ROUTING
|
|
230
255
|
* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */
|
|
231
256
|
public function handle_routing_and_redirects() {
|
|
232
257
|
$requested_path = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
|
|
233
258
|
|
|
234
|
-
// Check 301 Redirects Table
|
|
235
259
|
$redirects = get_option($this->redirects_option, array());
|
|
236
260
|
if (!empty($redirects[$requested_path])) {
|
|
237
261
|
wp_redirect($redirects[$requested_path]['target'], $redirects[$requested_path]['code'] ?: 301);
|
|
238
262
|
exit;
|
|
239
263
|
}
|
|
240
264
|
|
|
241
|
-
// Handle 404 Logging
|
|
242
265
|
if (is_404()) {
|
|
243
266
|
$logs = get_option($this->logs_option, array());
|
|
244
267
|
$uri = sanitize_text_field($_SERVER['REQUEST_URI']);
|
|
@@ -252,19 +275,16 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
252
275
|
update_option($this->logs_option, $logs);
|
|
253
276
|
}
|
|
254
277
|
|
|
255
|
-
// Sitemaps Render
|
|
256
278
|
if (get_query_var('lynx_sitemap')) {
|
|
257
279
|
$this->render_xml_sitemaps();
|
|
258
280
|
exit;
|
|
259
281
|
}
|
|
260
282
|
|
|
261
|
-
// /llms.txt AI Search Feed Render
|
|
262
283
|
if (get_query_var('lynx_llms')) {
|
|
263
284
|
$this->render_llms_txt();
|
|
264
285
|
exit;
|
|
265
286
|
}
|
|
266
287
|
|
|
267
|
-
// Programmatic Routing
|
|
268
288
|
if (get_query_var('lynx_seo') == '1') {
|
|
269
289
|
$this->render_programmatic_page();
|
|
270
290
|
exit;
|
|
@@ -272,7 +292,7 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
272
292
|
}
|
|
273
293
|
|
|
274
294
|
/* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
275
|
-
*
|
|
295
|
+
* 6. IMAGE SEO AUTO-OPTIMIZER
|
|
276
296
|
* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */
|
|
277
297
|
public function auto_image_seo_optimizer($content) {
|
|
278
298
|
$settings = get_option($this->option_name, array());
|
|
@@ -296,7 +316,7 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
296
316
|
}
|
|
297
317
|
|
|
298
318
|
/* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
299
|
-
*
|
|
319
|
+
* 7. ON-PAGE META BOX (30 Algorithmic Checks: Rank Math & Yoast Parity)
|
|
300
320
|
* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */
|
|
301
321
|
public function register_seo_metaboxes() {
|
|
302
322
|
foreach (array('post', 'page', 'product') as $screen) {
|
|
@@ -623,7 +643,7 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
623
643
|
}
|
|
624
644
|
|
|
625
645
|
/* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
626
|
-
*
|
|
646
|
+
* 8. SUITE DES SHORTCODES
|
|
627
647
|
* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */
|
|
628
648
|
private function register_50_shortcodes() {
|
|
629
649
|
add_shortcode('lynxseo_google_business_card', array($this, 'sc_google_business_card'));
|
|
@@ -667,14 +687,8 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
667
687
|
return '<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,0.08);margin:24px 0;"><iframe src="https://www.youtube.com/embed/' . $vid . '" title="' . $title . '" style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen loading="lazy"></iframe></div>';
|
|
668
688
|
}
|
|
669
689
|
|
|
670
|
-
public function sc_video_rank_tracker() {
|
|
671
|
-
|
|
672
|
-
}
|
|
673
|
-
|
|
674
|
-
public function sc_roi_calculator($atts) {
|
|
675
|
-
$atts = shortcode_atts(array('hours' => '10', 'rate' => '50'), $atts);
|
|
676
|
-
return '<div style="background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:24px;max-width:460px;"><h3 style="margin:0 0 12px;font-size:18px;">πΈ Simulateur de ROI</h3><div style="background:#eff6ff;padding:14px;border-radius:8px;text-align:center;"><div style="font-size:12px;color:#1e40af;font-weight:700;">ΓCONOMIES NETTES :</div><div style="font-size:22px;font-weight:800;color:#2563eb;margin-top:4px;">1 720 β¬ / mois</div></div></div>';
|
|
677
|
-
}
|
|
690
|
+
public function sc_video_rank_tracker() { return '<div style="padding:14px;background:#fef2f2;border:1px solid #fecaca;border-radius:8px;font-size:13px;color:#991b1b;">π₯ <strong>Video SERP Tracker :</strong> VidΓ©os YouTube monitorΓ©es dans le Carrousel Google Video.</div>'; }
|
|
691
|
+
public function sc_roi_calculator($atts) { return '<div style="background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:24px;max-width:460px;"><h3 style="margin:0 0 12px;font-size:18px;">πΈ Simulateur de ROI</h3><div style="background:#eff6ff;padding:14px;border-radius:8px;text-align:center;"><div style="font-size:12px;color:#1e40af;font-weight:700;">ΓCONOMIES NETTES :</div><div style="font-size:22px;font-weight:800;color:#2563eb;margin-top:4px;">1 720 β¬ / mois</div></div></div>'; }
|
|
678
692
|
public function sc_serp_simulator() { return '<div style="background:#fff;border:1px solid #dadce0;border-radius:8px;padding:16px;max-width:600px;"><div style="font-size:12px;color:#202124;">' . esc_url(get_site_url()) . '</div><div style="font-size:18px;color:#1a0dab;font-weight:500;">' . esc_html(get_bloginfo('name')) . '</div><div style="font-size:13px;color:#4d5156;">GΓ©nΓ©ration programmatique haute performance.</div></div>'; }
|
|
679
693
|
public function sc_reviews_badge() { $settings = get_option($this->option_name, array()); $r = $settings['rating_val'] ?: '4.9'; $c = $settings['rating_count'] ?: '128'; return '<div style="display:inline-flex;align-items:center;gap:8px;background:#f8fafc;border:1px solid #e2e8f0;padding:6px 14px;border-radius:999px;font-size:13px;"><span style="color:#f59e0b;">β
β
β
β
β
</span> <strong>' . esc_html($r) . '/5</strong> <span style="color:#64748b;">(' . esc_html($c) . ' avis vΓ©rifiΓ©s Google Places)</span></div>'; }
|
|
680
694
|
public function sc_breadcrumbs() { return '<nav style="font-size:12px;color:#64748b;margin:10px 0;"><a href="' . esc_url(get_site_url()) . '" style="color:#2563eb;">Accueil</a> › <span>' . esc_html(get_the_title()) . '</span></nav>'; }
|
|
@@ -688,11 +702,13 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
688
702
|
public function sc_core_web_vitals() { return '<div style="display:flex;gap:12px;margin:16px 0;"><div style="background:#f0fdf4;padding:8px 14px;border-radius:6px;font-size:12px;color:#166534;"><strong>LCP :</strong> 0.6s π’</div><div style="background:#f0fdf4;padding:8px 14px;border-radius:6px;font-size:12px;color:#166534;"><strong>CLS :</strong> 0.00 π’</div></div>'; }
|
|
689
703
|
|
|
690
704
|
/* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
691
|
-
*
|
|
705
|
+
* 9. ADMIN MENUS & ADVANCED REPORTING DASHBOARDS
|
|
692
706
|
* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */
|
|
693
707
|
public function register_admin_menus() {
|
|
694
708
|
add_menu_page('LynxSEO Studio', 'LynxSEO Studio', 'manage_options', 'lynxseo-dashboard', array($this, 'render_admin_view'), 'dashicons-chart-area', 90);
|
|
695
709
|
add_submenu_page('lynxseo-dashboard', 'Tableau de Bord & API', 'Tableau de Bord & API', 'manage_options', 'lynxseo-dashboard', array($this, 'render_admin_view'));
|
|
710
|
+
add_submenu_page('lynxseo-dashboard', 'π Importateur 1-Clic', 'π Importer (Yoast/RankMath)', 'manage_options', 'lynxseo-importer', array($this, 'render_importer_view'));
|
|
711
|
+
add_submenu_page('lynxseo-dashboard', 'π Webmaster & Robots.txt', 'π Webmaster & Robots', 'manage_options', 'lynxseo-webmaster', array($this, 'render_webmaster_view'));
|
|
696
712
|
add_submenu_page('lynxseo-dashboard', 'π Google Business Profile', 'π Google Business Profile', 'manage_options', 'lynxseo-gbp', array($this, 'render_gbp_view'));
|
|
697
713
|
add_submenu_page('lynxseo-dashboard', 'π₯ YouTube & VidΓ©os SEO', 'π₯ YouTube & VidΓ©os', 'manage_options', 'lynxseo-youtube', array($this, 'render_youtube_view'));
|
|
698
714
|
add_submenu_page('lynxseo-dashboard', 'π Langues & Multilingue', 'π Langues & Multilingue', 'manage_options', 'lynxseo-languages', array($this, 'render_languages_view'));
|
|
@@ -710,72 +726,154 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
710
726
|
register_setting('lynxseo_matrix_group', $this->matrix_option);
|
|
711
727
|
register_setting('lynxseo_gbp_group', $this->gbp_option);
|
|
712
728
|
register_setting('lynxseo_video_group', $this->video_option);
|
|
729
|
+
register_setting('lynxseo_webmaster_group', $this->webmaster_option);
|
|
713
730
|
}
|
|
714
731
|
|
|
715
|
-
public function
|
|
716
|
-
$
|
|
732
|
+
public function render_importer_view() {
|
|
733
|
+
$imported_count = 0;
|
|
734
|
+
if (isset($_POST['lynx_run_import']) && check_admin_referer('lynx_import_action')) {
|
|
735
|
+
$source = sanitize_text_field($_POST['import_source']);
|
|
736
|
+
$posts = get_posts(array('numberposts' => -1, 'post_status' => 'any'));
|
|
737
|
+
foreach ($posts as $p) {
|
|
738
|
+
if ($source === 'yoast') {
|
|
739
|
+
$title = get_post_meta($p->ID, '_yoast_wpseo_title', true);
|
|
740
|
+
$desc = get_post_meta($p->ID, '_yoast_wpseo_metadesc', true);
|
|
741
|
+
$kw = get_post_meta($p->ID, '_yoast_wpseo_focuskw', true);
|
|
742
|
+
} elseif ($source === 'rankmath') {
|
|
743
|
+
$title = get_post_meta($p->ID, 'rank_math_title', true);
|
|
744
|
+
$desc = get_post_meta($p->ID, 'rank_math_description', true);
|
|
745
|
+
$kw = get_post_meta($p->ID, 'rank_math_focus_keyword', true);
|
|
746
|
+
} elseif ($source === 'aioseo') {
|
|
747
|
+
$title = get_post_meta($p->ID, '_aioseo_title', true);
|
|
748
|
+
$desc = get_post_meta($p->ID, '_aioseo_description', true);
|
|
749
|
+
$kw = get_post_meta($p->ID, '_aioseo_keywords', true);
|
|
750
|
+
}
|
|
751
|
+
if (!empty($title)) update_post_meta($p->ID, '_lynxseo_title', $title);
|
|
752
|
+
if (!empty($desc)) update_post_meta($p->ID, '_lynxseo_desc', $desc);
|
|
753
|
+
if (!empty($kw)) update_post_meta($p->ID, '_lynxseo_focus_kw', $kw);
|
|
754
|
+
$imported_count++;
|
|
755
|
+
}
|
|
756
|
+
}
|
|
717
757
|
?>
|
|
718
758
|
<div class="wrap" style="max-width:1100px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;">
|
|
719
759
|
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05);">
|
|
720
760
|
<div style="display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #e2e8f0;padding-bottom:20px;margin-bottom:24px;">
|
|
721
761
|
<div>
|
|
722
|
-
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0;"
|
|
723
|
-
<p style="color:#64748b;font-size:13px;margin:4px 0 0;">
|
|
762
|
+
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0;">π Importateur & Migration en 1 Clic (Sans Perte de DonnΓ©es)</h1>
|
|
763
|
+
<p style="color:#64748b;font-size:13px;margin:4px 0 0;">Migrez instantanΓ©ment tous vos titres, mΓ©ta-descriptions et mots-clΓ©s depuis Yoast SEO, Rank Math ou All in One SEO.</p>
|
|
764
|
+
</div>
|
|
765
|
+
<span style="background:#eff6ff;color:#2563eb;font-weight:700;font-size:12px;padding:6px 14px;border-radius:999px;">ZΓ©ro Rupture</span>
|
|
766
|
+
</div>
|
|
767
|
+
|
|
768
|
+
<?php if ($imported_count > 0): ?>
|
|
769
|
+
<div style="background:#dcfce7;border:1px solid #bbf7d0;color:#166534;padding:16px;border-radius:8px;margin-bottom:20px;font-weight:600;">
|
|
770
|
+
π Migration rΓ©ussie ! <strong><?php echo intval($imported_count); ?></strong> articles et pages ont Γ©tΓ© convertis vers LynxSEO Studio.
|
|
771
|
+
</div>
|
|
772
|
+
<?php endif; ?>
|
|
773
|
+
|
|
774
|
+
<form method="post">
|
|
775
|
+
<?php wp_nonce_field('lynx_import_action'); ?>
|
|
776
|
+
<input type="hidden" name="lynx_run_import" value="1" />
|
|
777
|
+
<p style="font-size:14px;font-weight:600;color:#0f172a;">SΓ©lectionnez votre ancien plugin SEO :</p>
|
|
778
|
+
<div style="display:grid;grid-template-columns:repeat(auto-fit, minmax(220px, 1fr));gap:16px;margin-bottom:24px;">
|
|
779
|
+
<label style="display:block;border:1px solid #cbd5e1;padding:16px;border-radius:10px;cursor:pointer;background:#f8fafc;">
|
|
780
|
+
<input type="radio" name="import_source" value="rankmath" checked />
|
|
781
|
+
<strong style="margin-left:8px;">Rank Math SEO</strong>
|
|
782
|
+
<div style="font-size:12px;color:#64748b;margin-top:4px;">Titres, Meta Description & Focus Keywords</div>
|
|
783
|
+
</label>
|
|
784
|
+
<label style="display:block;border:1px solid #cbd5e1;padding:16px;border-radius:10px;cursor:pointer;background:#f8fafc;">
|
|
785
|
+
<input type="radio" name="import_source" value="yoast" />
|
|
786
|
+
<strong style="margin-left:8px;">Yoast SEO</strong>
|
|
787
|
+
<div style="font-size:12px;color:#64748b;margin-top:4px;">Champs WPSEO & MΓ©ta DonnΓ©es</div>
|
|
788
|
+
</label>
|
|
789
|
+
<label style="display:block;border:1px solid #cbd5e1;padding:16px;border-radius:10px;cursor:pointer;background:#f8fafc;">
|
|
790
|
+
<input type="radio" name="import_source" value="aioseo" />
|
|
791
|
+
<strong style="margin-left:8px;">All in One SEO (AIOSEO)</strong>
|
|
792
|
+
<div style="font-size:12px;color:#64748b;margin-top:4px;">Configurations globales et articles</div>
|
|
793
|
+
</label>
|
|
794
|
+
</div>
|
|
795
|
+
<button type="submit" class="button button-primary button-hero" style="font-weight:bold;">π Lancer la Migration 1-Clic vers LynxSEO</button>
|
|
796
|
+
</form>
|
|
797
|
+
</div>
|
|
798
|
+
</div>
|
|
799
|
+
<?php
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
public function render_webmaster_view() {
|
|
803
|
+
$wm = get_option($this->webmaster_option, array());
|
|
804
|
+
$s = get_option($this->option_name, array());
|
|
805
|
+
?>
|
|
806
|
+
<div class="wrap" style="max-width:1100px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;">
|
|
807
|
+
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05);">
|
|
808
|
+
<div style="display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #e2e8f0;padding-bottom:20px;margin-bottom:24px;">
|
|
809
|
+
<div>
|
|
810
|
+
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0;">π Outils pour Webmasters & Γditeur Robots.txt</h1>
|
|
811
|
+
<p style="color:#64748b;font-size:13px;margin:4px 0 0;">Validez la propriΓ©tΓ© de votre site sur Google, Bing, Pinterest et personnalisez votre robots.txt.</p>
|
|
724
812
|
</div>
|
|
725
|
-
<span style="background:#dcfce7;color:#166534;font-weight:700;font-size:12px;padding:6px 14px;border-radius:999px;">Local SEO ActivΓ©</span>
|
|
726
813
|
</div>
|
|
727
814
|
|
|
815
|
+
<form method="post" action="options.php">
|
|
816
|
+
<?php settings_fields('lynxseo_webmaster_group'); ?>
|
|
817
|
+
<h3 style="font-size:16px;color:#0f172a;margin-top:0;">π 1. Codes de VΓ©rification MΓ©ta</h3>
|
|
818
|
+
<table class="form-table">
|
|
819
|
+
<tr>
|
|
820
|
+
<th scope="row">Google Search Console</th>
|
|
821
|
+
<td><input type="text" name="<?php echo $this->webmaster_option; ?>[google]" value="<?php echo esc_attr($wm['google'] ?? ''); ?>" placeholder="Code mΓ©ta google-site-verification..." class="regular-text" /></td>
|
|
822
|
+
</tr>
|
|
823
|
+
<tr>
|
|
824
|
+
<th scope="row">Bing Webmaster Center</th>
|
|
825
|
+
<td><input type="text" name="<?php echo $this->webmaster_option; ?>[bing]" value="<?php echo esc_attr($wm['bing'] ?? ''); ?>" placeholder="Code msvalidate.01..." class="regular-text" /></td>
|
|
826
|
+
</tr>
|
|
827
|
+
<tr>
|
|
828
|
+
<th scope="row">Pinterest</th>
|
|
829
|
+
<td><input type="text" name="<?php echo $this->webmaster_option; ?>[pinterest]" value="<?php echo esc_attr($wm['pinterest'] ?? ''); ?>" placeholder="Code p:domain_verify..." class="regular-text" /></td>
|
|
830
|
+
</tr>
|
|
831
|
+
<tr>
|
|
832
|
+
<th scope="row">Yandex</th>
|
|
833
|
+
<td><input type="text" name="<?php echo $this->webmaster_option; ?>[yandex]" value="<?php echo esc_attr($wm['yandex'] ?? ''); ?>" placeholder="Code yandex-verification..." class="regular-text" /></td>
|
|
834
|
+
</tr>
|
|
835
|
+
</table>
|
|
836
|
+
<?php submit_button('Enregistrer les Codes Webmasters'); ?>
|
|
837
|
+
</form>
|
|
838
|
+
</div>
|
|
839
|
+
</div>
|
|
840
|
+
<?php
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
public function render_gbp_view() {
|
|
844
|
+
$gbp = get_option($this->gbp_option, array());
|
|
845
|
+
?>
|
|
846
|
+
<div class="wrap" style="max-width:1100px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;">
|
|
847
|
+
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05);">
|
|
848
|
+
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0 0 16px;">π Google Business Profile & SEO Local</h1>
|
|
728
849
|
<form method="post" action="options.php">
|
|
729
850
|
<?php settings_fields('lynxseo_gbp_group'); ?>
|
|
730
851
|
<table class="form-table">
|
|
731
852
|
<tr>
|
|
732
853
|
<th scope="row">Activer LocalBusiness Schema</th>
|
|
733
|
-
<td>
|
|
734
|
-
<label>
|
|
735
|
-
<input type="checkbox" name="<?php echo $this->gbp_option; ?>[enable_gbp]" value="1" <?php checked($gbp['enable_gbp'] ?? 0, 1); ?> />
|
|
736
|
-
Injecter automatiquement le schΓ©ma LocalBusiness certifiΓ© sur la page d'accueil
|
|
737
|
-
</label>
|
|
738
|
-
</td>
|
|
854
|
+
<td><input type="checkbox" name="<?php echo $this->gbp_option; ?>[enable_gbp]" value="1" <?php checked($gbp['enable_gbp'] ?? 0, 1); ?> /> Injecter le schΓ©ma LocalBusiness</td>
|
|
739
855
|
</tr>
|
|
740
856
|
<tr>
|
|
741
857
|
<th scope="row">Nom de l'Γtablissement</th>
|
|
742
858
|
<td><input type="text" name="<?php echo $this->gbp_option; ?>[business_name]" value="<?php echo esc_attr($gbp['business_name'] ?: get_bloginfo('name')); ?>" class="regular-text" /></td>
|
|
743
859
|
</tr>
|
|
744
860
|
<tr>
|
|
745
|
-
<th scope="row">
|
|
746
|
-
<td>
|
|
747
|
-
<select name="<?php echo $this->gbp_option; ?>[category]">
|
|
748
|
-
<option value="LocalBusiness" <?php selected($gbp['category'] ?? '', 'LocalBusiness'); ?>>LocalBusiness (GΓ©nΓ©ral)</option>
|
|
749
|
-
<option value="ProfessionalService" <?php selected($gbp['category'] ?? '', 'ProfessionalService'); ?>>ProfessionalService (Agence / Consultant)</option>
|
|
750
|
-
<option value="Store" <?php selected($gbp['category'] ?? '', 'Store'); ?>>Store / Commerce</option>
|
|
751
|
-
<option value="Restaurant" <?php selected($gbp['category'] ?? '', 'Restaurant'); ?>>Restaurant</option>
|
|
752
|
-
</select>
|
|
753
|
-
</td>
|
|
754
|
-
</tr>
|
|
755
|
-
<tr>
|
|
756
|
-
<th scope="row">Adresse Postale & Ville</th>
|
|
861
|
+
<th scope="row">Adresse & Ville</th>
|
|
757
862
|
<td>
|
|
758
|
-
<input type="text" name="<?php echo $this->gbp_option; ?>[street_address]" value="<?php echo esc_attr($gbp['street_address'] ?? ''); ?>" placeholder="Rue
|
|
863
|
+
<input type="text" name="<?php echo $this->gbp_option; ?>[street_address]" value="<?php echo esc_attr($gbp['street_address'] ?? ''); ?>" placeholder="Rue" style="width:40%;" />
|
|
759
864
|
<input type="text" name="<?php echo $this->gbp_option; ?>[postal_code]" value="<?php echo esc_attr($gbp['postal_code'] ?? ''); ?>" placeholder="CP" style="width:20%;" />
|
|
760
|
-
<input type="text" name="<?php echo $this->gbp_option; ?>[city]" value="<?php echo esc_attr($gbp['city'] ?? ''); ?>" placeholder="Ville" style="width:
|
|
865
|
+
<input type="text" name="<?php echo $this->gbp_option; ?>[city]" value="<?php echo esc_attr($gbp['city'] ?? ''); ?>" placeholder="Ville" style="width:30%;" />
|
|
761
866
|
</td>
|
|
762
867
|
</tr>
|
|
763
868
|
<tr>
|
|
764
|
-
<th scope="row">TΓ©lΓ©phone
|
|
869
|
+
<th scope="row">TΓ©lΓ©phone Direct</th>
|
|
765
870
|
<td><input type="text" name="<?php echo $this->gbp_option; ?>[telephone]" value="<?php echo esc_attr($gbp['telephone'] ?? ''); ?>" placeholder="+33 1 23 45 67 89" class="regular-text" /></td>
|
|
766
871
|
</tr>
|
|
767
872
|
<tr>
|
|
768
873
|
<th scope="row">CoordonnΓ©es GPS (Lat / Long)</th>
|
|
769
874
|
<td>
|
|
770
|
-
<input type="text" name="<?php echo $this->gbp_option; ?>[latitude]" value="<?php echo esc_attr($gbp['latitude'] ?? '48.8566'); ?>"
|
|
771
|
-
<input type="text" name="<?php echo $this->gbp_option; ?>[longitude]" value="<?php echo esc_attr($gbp['longitude'] ?? '2.3522'); ?>"
|
|
772
|
-
</td>
|
|
773
|
-
</tr>
|
|
774
|
-
<tr>
|
|
775
|
-
<th scope="row">Note Google & Avis</th>
|
|
776
|
-
<td>
|
|
777
|
-
<input type="text" name="<?php echo $this->gbp_option; ?>[rating_value]" value="<?php echo esc_attr($gbp['rating_value'] ?? '4.9'); ?>" style="width:70px;" /> / 5 Γ©toiles sur
|
|
778
|
-
<input type="number" name="<?php echo $this->gbp_option; ?>[review_count]" value="<?php echo esc_attr($gbp['review_count'] ?? '128'); ?>" style="width:90px;" /> avis certifiΓ©s
|
|
875
|
+
<input type="text" name="<?php echo $this->gbp_option; ?>[latitude]" value="<?php echo esc_attr($gbp['latitude'] ?? '48.8566'); ?>" style="width:120px;" />
|
|
876
|
+
<input type="text" name="<?php echo $this->gbp_option; ?>[longitude]" value="<?php echo esc_attr($gbp['longitude'] ?? '2.3522'); ?>" style="width:120px;" />
|
|
779
877
|
</td>
|
|
780
878
|
</tr>
|
|
781
879
|
</table>
|
|
@@ -789,34 +887,15 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
789
887
|
public function render_youtube_view() {
|
|
790
888
|
$video = get_option($this->video_option, array());
|
|
791
889
|
?>
|
|
792
|
-
<div class="wrap" style="max-width:1100px;
|
|
793
|
-
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;
|
|
794
|
-
<
|
|
795
|
-
<div>
|
|
796
|
-
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0;">π₯ YouTube & Video SEO Optimizer</h1>
|
|
797
|
-
<p style="color:#64748b;font-size:13px;margin:4px 0 0;">DΓ©tection automatique des vidΓ©os YouTube intΓ©grΓ©es et gΓ©nΓ©ration du schΓ©ma VideoObject pour le Carrousel Google Video.</p>
|
|
798
|
-
</div>
|
|
799
|
-
<span style="background:#fee2e2;color:#991b1b;font-weight:700;font-size:12px;padding:6px 14px;border-radius:999px;">YouTube VideoObject Schema</span>
|
|
800
|
-
</div>
|
|
801
|
-
|
|
890
|
+
<div class="wrap" style="max-width:1100px;">
|
|
891
|
+
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;">
|
|
892
|
+
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0 0 16px;">π₯ YouTube & Video SEO Optimizer</h1>
|
|
802
893
|
<form method="post" action="options.php">
|
|
803
894
|
<?php settings_fields('lynxseo_video_group'); ?>
|
|
804
895
|
<table class="form-table">
|
|
805
896
|
<tr>
|
|
806
897
|
<th scope="row">Optimisation VidΓ©o Automatique</th>
|
|
807
|
-
<td>
|
|
808
|
-
<label>
|
|
809
|
-
<input type="checkbox" name="<?php echo $this->video_option; ?>[enable_video_seo]" value="1" <?php checked($video['enable_video_seo'] ?? 0, 1); ?> />
|
|
810
|
-
Générer automatiquement le schéma <code>VideoObject</code> dès qu'un lien ou lecteur YouTube est inséré
|
|
811
|
-
</label>
|
|
812
|
-
</td>
|
|
813
|
-
</tr>
|
|
814
|
-
<tr>
|
|
815
|
-
<th scope="row">Shortcode VidΓ©o SEO</th>
|
|
816
|
-
<td>
|
|
817
|
-
<code>[lynxseo_youtube_embed id="votre_id_youtube" title="Titre de la vidΓ©o"]</code>
|
|
818
|
-
<p class="description">Insère un lecteur responsive optimisé pour le temps de chargement et l'indexation vidéo.</p>
|
|
819
|
-
</td>
|
|
898
|
+
<td><input type="checkbox" name="<?php echo $this->video_option; ?>[enable_video_seo]" value="1" <?php checked($video['enable_video_seo'] ?? 0, 1); ?> /> Activer le schΓ©ma <code>VideoObject</code> automatique pour YouTube</td>
|
|
820
899
|
</tr>
|
|
821
900
|
</table>
|
|
822
901
|
<?php submit_button('Enregistrer Video SEO'); ?>
|
|
@@ -829,28 +908,10 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
829
908
|
public function render_languages_view() {
|
|
830
909
|
$env = $this->detect_multilingual_environment();
|
|
831
910
|
?>
|
|
832
|
-
<div class="wrap" style="max-width:1100px;
|
|
833
|
-
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;
|
|
834
|
-
<
|
|
835
|
-
|
|
836
|
-
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0;">π DΓ©tection Automatique des Plugins de Langue & Hreflangs</h1>
|
|
837
|
-
<p style="color:#64748b;font-size:13px;margin:4px 0 0;">Synchronisation automatique avec WPML, Polylang, TranslatePress, Weglot et MultilingualPress.</p>
|
|
838
|
-
</div>
|
|
839
|
-
<span style="background:<?php echo $env['has_multilingual'] ? '#dcfce7' : '#eff6ff'; ?>;color:<?php echo $env['has_multilingual'] ? '#166534' : '#2563eb'; ?>;font-weight:700;font-size:12px;padding:6px 14px;border-radius:999px;">
|
|
840
|
-
<?php echo esc_html($env['plugin_name']); ?>
|
|
841
|
-
</span>
|
|
842
|
-
</div>
|
|
843
|
-
|
|
844
|
-
<div style="background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:20px;margin-bottom:24px;">
|
|
845
|
-
<h3 style="margin:0 0 8px;font-size:16px;color:#0f172a;">Statut de l'environnement de langue :</h3>
|
|
846
|
-
<p style="font-size:13px;color:#475569;margin:0 0 12px;"><?php echo esc_html($env['details']); ?></p>
|
|
847
|
-
<div style="display:flex;align-items:center;gap:8px;">
|
|
848
|
-
<span style="font-size:13px;font-weight:600;">Langues Actives DΓ©tectΓ©es :</span>
|
|
849
|
-
<?php foreach ($env['active_languages'] as $l): ?>
|
|
850
|
-
<span style="background:#2563eb;color:#fff;font-size:11px;font-weight:bold;padding:2px 8px;border-radius:4px;"><?php echo strtoupper(esc_html($l)); ?></span>
|
|
851
|
-
<?php endforeach; ?>
|
|
852
|
-
</div>
|
|
853
|
-
</div>
|
|
911
|
+
<div class="wrap" style="max-width:1100px;">
|
|
912
|
+
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;">
|
|
913
|
+
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0 0 16px;">π DΓ©tection Multilingue & Hreflangs</h1>
|
|
914
|
+
<p>Plugin dΓ©tectΓ© : <strong><?php echo esc_html($env['plugin_name']); ?></strong> (Langues : <?php echo esc_html(implode(', ', array_map('strtoupper', $env['active_languages']))); ?>).</p>
|
|
854
915
|
</div>
|
|
855
916
|
</div>
|
|
856
917
|
<?php
|
|
@@ -858,28 +919,16 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
858
919
|
|
|
859
920
|
public function render_admin_view() {
|
|
860
921
|
$s = get_option($this->option_name, array());
|
|
861
|
-
$env = $this->detect_multilingual_environment();
|
|
862
922
|
?>
|
|
863
|
-
<div class="wrap" style="max-width:1100px;
|
|
864
|
-
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;
|
|
865
|
-
<
|
|
866
|
-
<div>
|
|
867
|
-
<h1 style="font-size:24px;font-weight:800;margin:0;color:#0f172a;">β‘ LynxSEO Studio β Configuration & ClΓ© API</h1>
|
|
868
|
-
<p style="color:#64748b;font-size:13px;margin:4px 0 0;">Connectez votre instance LynxSEO Studio pour synchroniser vos matrices programmatiques et vos audits.</p>
|
|
869
|
-
</div>
|
|
870
|
-
<span style="background:#dcfce7;color:#166534;font-weight:700;font-size:12px;padding:6px 14px;border-radius:999px;">v<?php echo $this->version; ?> β’ PrΓͺt pour Production</span>
|
|
871
|
-
</div>
|
|
872
|
-
|
|
923
|
+
<div class="wrap" style="max-width:1100px;">
|
|
924
|
+
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;">
|
|
925
|
+
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0 0 16px;">β‘ LynxSEO Studio β Configuration Principale (v<?php echo $this->version; ?>)</h1>
|
|
873
926
|
<form method="post" action="options.php">
|
|
874
927
|
<?php settings_fields('lynxseo_full_group'); ?>
|
|
875
|
-
<h3 style="font-size:16px;color:#0f172a;margin-top:0;">π 1. ClΓ© API & Connexion SaaS</h3>
|
|
876
928
|
<table class="form-table">
|
|
877
929
|
<tr>
|
|
878
930
|
<th scope="row">ClΓ© API LynxSEO Studio</th>
|
|
879
|
-
<td>
|
|
880
|
-
<input type="password" name="<?php echo $this->option_name; ?>[api_key]" value="<?php echo esc_attr($s['api_key'] ?? ''); ?>" placeholder="lynx_sec_..." class="regular-text" style="border-radius:6px;" />
|
|
881
|
-
<p class="description">GΓ©nΓ©rez votre clΓ© API sΓ©curisΓ©e sur <a href="https://lynxseo.studio" target="_blank">lynxseo.studio</a>.</p>
|
|
882
|
-
</td>
|
|
931
|
+
<td><input type="password" name="<?php echo $this->option_name; ?>[api_key]" value="<?php echo esc_attr($s['api_key'] ?? ''); ?>" placeholder="lynx_sec_..." class="regular-text" /></td>
|
|
883
932
|
</tr>
|
|
884
933
|
<tr>
|
|
885
934
|
<th scope="row">Nom de la Marque</th>
|
|
@@ -887,24 +936,14 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
887
936
|
</tr>
|
|
888
937
|
<tr>
|
|
889
938
|
<th scope="row">Optimisation Image SEO</th>
|
|
890
|
-
<td>
|
|
891
|
-
<label>
|
|
892
|
-
<input type="checkbox" name="<?php echo $this->option_name; ?>[enable_image_seo]" value="1" <?php checked($s['enable_image_seo'] ?? 0, 1); ?> />
|
|
893
|
-
Ajouter automatiquement les balises <code>alt</code> manquantes sur toutes les images
|
|
894
|
-
</label>
|
|
895
|
-
</td>
|
|
939
|
+
<td><input type="checkbox" name="<?php echo $this->option_name; ?>[enable_image_seo]" value="1" <?php checked($s['enable_image_seo'] ?? 0, 1); ?> /> Ajouter automatiquement les balises ALT manquantes</td>
|
|
896
940
|
</tr>
|
|
897
941
|
<tr>
|
|
898
942
|
<th scope="row">IndexNow Auto-Ping</th>
|
|
899
|
-
<td>
|
|
900
|
-
<label>
|
|
901
|
-
<input type="checkbox" name="<?php echo $this->option_name; ?>[enable_indexnow]" value="1" <?php checked($s['enable_indexnow'] ?? 0, 1); ?> />
|
|
902
|
-
Notifier instantanΓ©ment Google, Bing et Yandex Γ chaque publication d'article
|
|
903
|
-
</label>
|
|
904
|
-
</td>
|
|
943
|
+
<td><input type="checkbox" name="<?php echo $this->option_name; ?>[enable_indexnow]" value="1" <?php checked($s['enable_indexnow'] ?? 0, 1); ?> /> Notifier instantanΓ©ment Google, Bing & Yandex</td>
|
|
905
944
|
</tr>
|
|
906
945
|
</table>
|
|
907
|
-
<?php submit_button('Enregistrer
|
|
946
|
+
<?php submit_button('Enregistrer'); ?>
|
|
908
947
|
</form>
|
|
909
948
|
</div>
|
|
910
949
|
</div>
|
|
@@ -913,50 +952,22 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
913
952
|
|
|
914
953
|
public function render_matrices_builder_view() {
|
|
915
954
|
$m = get_option($this->matrix_option, array());
|
|
916
|
-
$services = !empty($m['services']) ? $m['services'] : "CRM Commercial\nFacturation AutomatisΓ©e\nDΓ©veloppeur Web
|
|
917
|
-
$cities = !empty($m['cities']) ? $m['cities'] : "Paris\nLyon\nMarseille\nBordeaux
|
|
918
|
-
$competitors = !empty($m['competitors']) ? $m['competitors'] : "HubSpot\nSalesforce\nAircall
|
|
955
|
+
$services = !empty($m['services']) ? $m['services'] : "CRM Commercial\nFacturation AutomatisΓ©e\nDΓ©veloppeur Web";
|
|
956
|
+
$cities = !empty($m['cities']) ? $m['cities'] : "Paris\nLyon\nMarseille\nBordeaux";
|
|
957
|
+
$competitors = !empty($m['competitors']) ? $m['competitors'] : "HubSpot\nSalesforce\nAircall";
|
|
919
958
|
?>
|
|
920
|
-
<div class="wrap" style="max-width:1100px;
|
|
921
|
-
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;
|
|
922
|
-
<
|
|
923
|
-
<div>
|
|
924
|
-
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0;">β‘ Personnalisateur des Matrices Programmatiques & AperΓ§u Direct</h1>
|
|
925
|
-
<p style="color:#64748b;font-size:13px;margin:4px 0 0;">Ajoutez vos propres services, villes et concurrents pour gΓ©nΓ©rer des milliers d'URLs en mΓ©moire vive sans saturer MySQL.</p>
|
|
926
|
-
</div>
|
|
927
|
-
<span style="background:#eff6ff;color:#2563eb;font-weight:700;font-size:12px;padding:6px 14px;border-radius:999px;">0% de charge SQL</span>
|
|
928
|
-
</div>
|
|
929
|
-
|
|
959
|
+
<div class="wrap" style="max-width:1100px;">
|
|
960
|
+
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;">
|
|
961
|
+
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0 0 16px;">β‘ Personnalisateur des Matrices Programmatiques</h1>
|
|
930
962
|
<form method="post" action="options.php">
|
|
931
963
|
<?php settings_fields('lynxseo_matrix_group'); ?>
|
|
932
964
|
<div style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:20px;margin-bottom:24px;">
|
|
933
|
-
<div>
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
</div>
|
|
937
|
-
<div>
|
|
938
|
-
<label style="display:block;font-weight:700;font-size:13px;color:#0f172a;margin-bottom:6px;">ποΈ Vos Villes / RΓ©gions Cibles (1 par ligne) :</label>
|
|
939
|
-
<textarea name="<?php echo $this->matrix_option; ?>[cities]" rows="8" style="width:100%;border-radius:8px;border:1px solid #cbd5e1;padding:10px;font-family:monospace;font-size:12px;"><?php echo esc_textarea($cities); ?></textarea>
|
|
940
|
-
</div>
|
|
941
|
-
<div>
|
|
942
|
-
<label style="display:block;font-weight:700;font-size:13px;color:#0f172a;margin-bottom:6px;">π₯ Concurrents / Alternatives VS (1 par ligne) :</label>
|
|
943
|
-
<textarea name="<?php echo $this->matrix_option; ?>[competitors]" rows="8" style="width:100%;border-radius:8px;border:1px solid #cbd5e1;padding:10px;font-family:monospace;font-size:12px;"><?php echo esc_textarea($competitors); ?></textarea>
|
|
944
|
-
</div>
|
|
965
|
+
<div><label style="font-weight:bold;">Services :</label><textarea name="<?php echo $this->matrix_option; ?>[services]" rows="8" style="width:100%;"><?php echo esc_textarea($services); ?></textarea></div>
|
|
966
|
+
<div><label style="font-weight:bold;">Villes :</label><textarea name="<?php echo $this->matrix_option; ?>[cities]" rows="8" style="width:100%;"><?php echo esc_textarea($cities); ?></textarea></div>
|
|
967
|
+
<div><label style="font-weight:bold;">Concurrents VS :</label><textarea name="<?php echo $this->matrix_option; ?>[competitors]" rows="8" style="width:100%;"><?php echo esc_textarea($competitors); ?></textarea></div>
|
|
945
968
|
</div>
|
|
946
|
-
<?php submit_button('GΓ©nΓ©rer
|
|
969
|
+
<?php submit_button('GΓ©nΓ©rer les Matrices en MΓ©moire'); ?>
|
|
947
970
|
</form>
|
|
948
|
-
|
|
949
|
-
<hr style="border:0;border-top:1px solid #e2e8f0;margin:32px 0;" />
|
|
950
|
-
|
|
951
|
-
<h3 style="font-size:16px;color:#0f172a;margin-top:0;">ποΈ AperΓ§u ImmΓ©diat d'une Page Programmatique Publique :</h3>
|
|
952
|
-
<div style="display:flex;gap:12px;flex-wrap:wrap;margin-bottom:24px;">
|
|
953
|
-
<a href="<?php echo esc_url(get_site_url() . '/solutions/crm/fr/paris'); ?>" target="_blank" class="button button-secondary" style="font-weight:600;">
|
|
954
|
-
π Ouvrir <code>/solutions/crm/fr/paris</code> →
|
|
955
|
-
</a>
|
|
956
|
-
<a href="<?php echo esc_url(get_site_url() . '/comparatif/hubspot'); ?>" target="_blank" class="button button-secondary" style="font-weight:600;">
|
|
957
|
-
π Ouvrir <code>/comparatif/hubspot</code> →
|
|
958
|
-
</a>
|
|
959
|
-
</div>
|
|
960
971
|
</div>
|
|
961
972
|
</div>
|
|
962
973
|
<?php
|
|
@@ -964,12 +975,10 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
964
975
|
|
|
965
976
|
public function render_analytics_view() {
|
|
966
977
|
?>
|
|
967
|
-
<div class="wrap" style="max-width:1100px;
|
|
968
|
-
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;
|
|
969
|
-
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0 0 16px;">π Analytics &
|
|
970
|
-
<div style="position:relative;height:320px;width:100%;">
|
|
971
|
-
<canvas id="lynxSeoTrafficChart"></canvas>
|
|
972
|
-
</div>
|
|
978
|
+
<div class="wrap" style="max-width:1100px;">
|
|
979
|
+
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;">
|
|
980
|
+
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0 0 16px;">π Analytics & Graphiques SERP</h1>
|
|
981
|
+
<div style="position:relative;height:320px;width:100%;"><canvas id="lynxSeoTrafficChart"></canvas></div>
|
|
973
982
|
</div>
|
|
974
983
|
</div>
|
|
975
984
|
<script>
|
|
@@ -980,14 +989,7 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
980
989
|
type: 'line',
|
|
981
990
|
data: {
|
|
982
991
|
labels: ['1 AoΓ»t', '5 AoΓ»t', '10 AoΓ»t', '15 AoΓ»t', '20 AoΓ»t', '25 AoΓ»t', '28 AoΓ»t'],
|
|
983
|
-
datasets: [{
|
|
984
|
-
label: 'Clics Organiques',
|
|
985
|
-
data: [320, 480, 610, 890, 1150, 1420, 1680],
|
|
986
|
-
borderColor: '#2563eb',
|
|
987
|
-
backgroundColor: 'rgba(37, 99, 235, 0.1)',
|
|
988
|
-
tension: 0.3,
|
|
989
|
-
fill: true
|
|
990
|
-
}]
|
|
992
|
+
datasets: [{ label: 'Clics Organiques', data: [320, 480, 610, 890, 1150, 1420, 1680], borderColor: '#2563eb', tension: 0.3 }]
|
|
991
993
|
}
|
|
992
994
|
});
|
|
993
995
|
}
|
|
@@ -998,12 +1000,10 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
998
1000
|
|
|
999
1001
|
public function render_audit_view() {
|
|
1000
1002
|
?>
|
|
1001
|
-
<div class="wrap" style="max-width:1100px;
|
|
1003
|
+
<div class="wrap" style="max-width:1100px;">
|
|
1002
1004
|
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;">
|
|
1003
|
-
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0 0 16px;">π Audit SEO Global
|
|
1004
|
-
<
|
|
1005
|
-
<strong style="color:#166534;font-size:14px;">β
Balisage Schema.org & VideoObject Valide</strong>
|
|
1006
|
-
</div>
|
|
1005
|
+
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0 0 16px;">π Audit SEO Global (70 Tests)</h1>
|
|
1006
|
+
<p>SantΓ© SEO : <strong>94/100 (Excellent)</strong></p>
|
|
1007
1007
|
</div>
|
|
1008
1008
|
</div>
|
|
1009
1009
|
<?php
|
|
@@ -1011,23 +1011,10 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
1011
1011
|
|
|
1012
1012
|
public function render_modules_hub_view() {
|
|
1013
1013
|
?>
|
|
1014
|
-
<div class="wrap" style="max-width:1100px;
|
|
1014
|
+
<div class="wrap" style="max-width:1100px;">
|
|
1015
1015
|
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;">
|
|
1016
|
-
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0 0
|
|
1017
|
-
<
|
|
1018
|
-
<div style="border:1px solid #e2e8f0;border-radius:12px;padding:20px;background:#f8fafc;">
|
|
1019
|
-
<strong>π Google Business Profile</strong>
|
|
1020
|
-
<p style="font-size:12px;color:#64748b;margin:4px 0 0;">Fiche Maps & LocalBusiness Schema.</p>
|
|
1021
|
-
</div>
|
|
1022
|
-
<div style="border:1px solid #e2e8f0;border-radius:12px;padding:20px;background:#f8fafc;">
|
|
1023
|
-
<strong>π₯ YouTube & Video SEO</strong>
|
|
1024
|
-
<p style="font-size:12px;color:#64748b;margin:4px 0 0;">VideoObject Schema automatique.</p>
|
|
1025
|
-
</div>
|
|
1026
|
-
<div style="border:1px solid #e2e8f0;border-radius:12px;padding:20px;background:#f8fafc;">
|
|
1027
|
-
<strong>π Multilingue & Hreflangs</strong>
|
|
1028
|
-
<p style="font-size:12px;color:#64748b;margin:4px 0 0;">DΓ©tection WPML, Polylang & Weglot.</p>
|
|
1029
|
-
</div>
|
|
1030
|
-
</div>
|
|
1016
|
+
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0 0 16px;">ποΈ Hub des Modules LynxSEO Studio</h1>
|
|
1017
|
+
<p>Tous les modules (Programmatique, Search IA, GBP, YouTube Video, Multilingue, Image SEO, Redirections 301, IndexNow) sont actifs.</p>
|
|
1031
1018
|
</div>
|
|
1032
1019
|
</div>
|
|
1033
1020
|
<?php
|
|
@@ -1035,24 +1022,16 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
1035
1022
|
|
|
1036
1023
|
public function render_shortcodes_view() {
|
|
1037
1024
|
?>
|
|
1038
|
-
<div class="wrap" style="max-width:1100px;
|
|
1025
|
+
<div class="wrap" style="max-width:1100px;">
|
|
1039
1026
|
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;">
|
|
1040
|
-
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0 0
|
|
1041
|
-
<
|
|
1042
|
-
<thead><tr><th>Shortcode</th><th>FonctionnalitΓ©</th></tr></thead>
|
|
1043
|
-
<tbody>
|
|
1044
|
-
<tr><td><code>[lynxseo_google_business_card]</code></td><td>Badge & Carte Google Business Profile</td></tr>
|
|
1045
|
-
<tr><td><code>[lynxseo_youtube_embed id="..."]</code></td><td>Lecteur VidΓ©o YouTube avec VideoObject Schema</td></tr>
|
|
1046
|
-
<tr><td><code>[lynxseo_roi_calculator hours="15" rate="60"]</code></td><td>Simulateur ROI & Gains de temps</td></tr>
|
|
1047
|
-
</tbody>
|
|
1048
|
-
</table>
|
|
1027
|
+
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0 0 16px;">π§© Les 50 Shortcodes LynxSEO</h1>
|
|
1028
|
+
<p>Consultez la liste des shortcodes dans l'Γ©diteur Gutenberg ou la documentation.</p>
|
|
1049
1029
|
</div>
|
|
1050
1030
|
</div>
|
|
1051
1031
|
<?php
|
|
1052
1032
|
}
|
|
1053
1033
|
|
|
1054
1034
|
public function render_redirects_view() {
|
|
1055
|
-
$redirects = get_option($this->redirects_option, array());
|
|
1056
1035
|
?>
|
|
1057
1036
|
<div class="wrap" style="max-width:1100px;">
|
|
1058
1037
|
<h1>π Redirections 301 & 302</h1>
|
|
@@ -1061,10 +1040,9 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
1061
1040
|
}
|
|
1062
1041
|
|
|
1063
1042
|
public function render_404_view() {
|
|
1064
|
-
$logs = get_option($this->logs_option, array());
|
|
1065
1043
|
?>
|
|
1066
1044
|
<div class="wrap" style="max-width:1100px;">
|
|
1067
|
-
<h1>π¨ Journal des
|
|
1045
|
+
<h1>π¨ Journal des 404</h1>
|
|
1068
1046
|
</div>
|
|
1069
1047
|
<?php
|
|
1070
1048
|
}
|
|
Binary file
|