WP Meta SEO - Version 2.2.0

Version Description

  • Follow/Nofollow bulk link edition
  • Link re-index tool from the bulk link editor
  • Follow/Nofollow on Wordpress content (onpage SEO)
  • Index/Noindex on Wordpress content (onpage SEO)
Download this release

Release Info

Developer JoomUnited
Plugin Icon 128x128 WP Meta SEO
Version 2.2.0
Comparing to
See all releases

Code changes from version 2.1.0 to 2.2.0

css/metaseo_admin.css CHANGED
@@ -20,6 +20,15 @@ and open the template in the editor.
20
  width: 30%;
21
  }
22
 
 
 
 
 
 
 
 
 
 
23
  .title-len, .desc-len, .word-exceed , .keywords-len {
24
  color: #FFF;
25
  border-radius: 2px;
@@ -429,7 +438,7 @@ strong {
429
  float: left;
430
  }
431
 
432
- .wpms_scan_link{
433
  float: left;
434
  }
435
 
@@ -578,4 +587,23 @@ strong {
578
  width: 20px;
579
  height: 20px;
580
  display:none;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
581
  }
20
  width: 30%;
21
  }
22
 
23
+ .column-col_follow,.column-col_index{
24
+ width: 5%;
25
+ text-align: center;
26
+ }
27
+
28
+ .metaseo_post_follow,.metaseo_post_index{
29
+ margin-top: 20px !important;
30
+ }
31
+
32
  .title-len, .desc-len, .word-exceed , .keywords-len {
33
  color: #FFF;
34
  border-radius: 2px;
438
  float: left;
439
  }
440
 
441
+ .wp-meta-seo_page_metaseo_broken_link .wpms_scan_link{
442
  float: left;
443
  }
444
 
587
  width: 20px;
588
  height: 20px;
589
  display:none;
590
+ }
591
+
592
+ .wpmslabel{
593
+ width:275px;
594
+ float: left;
595
+ text-align: left;
596
+ color: #23282d;
597
+ line-height: 1.3;
598
+ font-weight: 600;
599
+ font-size: 13px;
600
+ margin-top:5px;
601
+ }
602
+
603
+ .metaseo_metabox_follow,.metaseo_metabox_index{
604
+ margin-left: 15px !important;
605
+ }
606
+
607
+ .wpms_change_follow{
608
+ cursor: pointer;
609
  }
inc/class-metaseo-mutils.php DELETED
@@ -1,205 +0,0 @@
1
- <?php
2
-
3
- class WPMSEO_Utils {
4
-
5
- public static $has_filters;
6
- private static $cache_clear = array();
7
-
8
- public static function is_url_relative($url) {
9
- return ( strpos($url, 'http') !== 0 && strpos($url, '//') !== 0 );
10
- }
11
-
12
- public static function standardize_whitespace($string) {
13
- return trim(str_replace(' ', ' ', str_replace(array("\t", "\n", "\r", "\f"), ' ', $string)));
14
- }
15
-
16
- public static function strip_shortcode($text) {
17
- return preg_replace('`\[[^\]]+\]`s', '', $text);
18
- }
19
-
20
- public static function translate_score($val, $css_value = true) {
21
- if ($val > 10) {
22
- $val = round($val / 10);
23
- }
24
- switch ($val) {
25
- case 0:
26
- $score = __('N/A', 'wp-meta-seo');
27
- $css = 'na';
28
- break;
29
- case 4:
30
- case 5:
31
- $score = __('Poor', 'wp-meta-seo');
32
- $css = 'poor';
33
- break;
34
- case 6:
35
- case 7:
36
- $score = __('OK', 'wp-meta-seo');
37
- $css = 'ok';
38
- break;
39
- case 8:
40
- case 9:
41
- case 10:
42
- $score = __('Good', 'wp-meta-seo');
43
- $css = 'good';
44
- break;
45
- default:
46
- $score = __('Bad', 'wp-meta-seo');
47
- $css = 'bad';
48
- break;
49
- }
50
-
51
- if ($css_value) {
52
- return $css;
53
- } else {
54
- return $score;
55
- }
56
- }
57
-
58
- public static function sanitize_text_field($value) {
59
- $filtered = wp_check_invalid_utf8($value);
60
-
61
- if (strpos($filtered, '<') !== false) {
62
- $filtered = wp_pre_kses_less_than($filtered);
63
- // This will strip extra whitespace for us.
64
- $filtered = wp_strip_all_tags($filtered, true);
65
- } else {
66
- $filtered = trim(preg_replace('`[\r\n\t ]+`', ' ', $filtered));
67
- }
68
-
69
- $found = false;
70
- while (preg_match('`[^%](%[a-f0-9]{2})`i', $filtered, $match)) {
71
- $filtered = str_replace($match[1], '', $filtered);
72
- $found = true;
73
- }
74
- unset($match);
75
-
76
- if ($found) {
77
- // Strip out the whitespace that may now exist after removing the octets.
78
- $filtered = trim(preg_replace('` +`', ' ', $filtered));
79
- }
80
-
81
-
82
- return apply_filters('sanitize_text_field', $filtered, $value);
83
- }
84
-
85
- public static function sanitize_url($value, $allowed_protocols = array('http', 'https')) {
86
- return esc_url_raw(sanitize_text_field(rawurldecode($value)), $allowed_protocols);
87
- }
88
-
89
- public static function validate_int($value) {
90
- if (!isset(self::$has_filters)) {
91
- self::$has_filters = extension_loaded('filter');
92
- }
93
-
94
- if (self::$has_filters) {
95
- return filter_var($value, FILTER_VALIDATE_INT);
96
- } else {
97
- return self::emulate_filter_int($value);
98
- }
99
- }
100
-
101
- public static function calc($number1, $action, $number2, $round = false, $decimals = 0, $precision = 10) {
102
- static $bc;
103
-
104
- if (!is_scalar($number1) || !is_scalar($number2)) {
105
- return false;
106
- }
107
-
108
- if (!isset($bc)) {
109
- $bc = extension_loaded('bcmath');
110
- }
111
-
112
- if ($bc) {
113
- $number1 = number_format($number1, 10, '.', '');
114
- $number2 = number_format($number2, 10, '.', '');
115
- }
116
-
117
- $result = null;
118
- $compare = false;
119
-
120
- switch ($action) {
121
- case '+':
122
- case 'add':
123
- case 'addition':
124
- $result = ( $bc ) ? bcadd($number1, $number2, $precision) /* string */ : ( $number1 + $number2 );
125
- break;
126
-
127
- case '-':
128
- case 'sub':
129
- case 'subtract':
130
- $result = ( $bc ) ? bcsub($number1, $number2, $precision) /* string */ : ( $number1 - $number2 );
131
- break;
132
-
133
- case '*':
134
- case 'mul':
135
- case 'multiply':
136
- $result = ( $bc ) ? bcmul($number1, $number2, $precision) /* string */ : ( $number1 * $number2 );
137
- break;
138
-
139
- case '/':
140
- case 'div':
141
- case 'divide':
142
- if ($bc) {
143
- $result = bcdiv($number1, $number2, $precision); // String, or NULL if right_operand is 0.
144
- } elseif ($number2 != 0) {
145
- $result = ( $number1 / $number2 );
146
- }
147
-
148
- if (!isset($result)) {
149
- $result = 0;
150
- }
151
- break;
152
-
153
- case '%':
154
- case 'mod':
155
- case 'modulus':
156
- if ($bc) {
157
- $result = bcmod($number1, $number2, $precision); // String, or NULL if modulus is 0.
158
- } elseif ($number2 != 0) {
159
- $result = ( $number1 % $number2 );
160
- }
161
-
162
- if (!isset($result)) {
163
- $result = 0;
164
- }
165
- break;
166
-
167
- case '=':
168
- case 'comp':
169
- case 'compare':
170
- $compare = true;
171
- if ($bc) {
172
- $result = bccomp($number1, $number2, $precision); // Returns int 0, 1 or -1.
173
- } else {
174
- $result = ( $number1 == $number2 ) ? 0 : ( ( $number1 > $number2 ) ? 1 : - 1 );
175
- }
176
- break;
177
- }
178
-
179
- if (isset($result)) {
180
- if ($compare === false) {
181
- if ($round === true) {
182
- $result = round(floatval($result), $decimals);
183
- if ($decimals === 0) {
184
- $result = (int) $result;
185
- }
186
- } else {
187
- $result = ( intval($result) == $result ) ? intval($result) : floatval($result);
188
- }
189
- }
190
-
191
- return $result;
192
- }
193
-
194
- return false;
195
- }
196
-
197
- public static function trim_nbsp_from_string($string) {
198
- $find = array('&nbsp;', chr(0xC2) . chr(0xA0));
199
- $string = str_replace($find, ' ', $string);
200
- $string = trim($string);
201
-
202
- return $string;
203
- }
204
-
205
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/class.metaseo-admin.php CHANGED
@@ -20,6 +20,8 @@ class MetaSeo_Admin {
20
  "metaseo_seovalidate" => 0,
21
  "metaseo_linkfield" => 1,
22
  "metaseo_metatitle_tab" => 0,
 
 
23
  );
24
  $settings = get_option( '_metaseo_settings' );
25
 
@@ -60,11 +62,11 @@ class MetaSeo_Admin {
60
  add_action( 'delete_post', array('MetaSeo_Broken_Link_Table','wpms_delete_post' ));
61
  add_action( 'edit_comment', array('MetaSeo_Broken_Link_Table','wpms_update_comment') );
62
  add_action( 'deleted_comment', array('MetaSeo_Broken_Link_Table','wpms_deleted_comment') );
63
-
64
  }
65
 
66
  function metaseo_create_404page(){
67
  global $wpdb;
 
68
  // create table wpms_links
69
  $sql = "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}wpms_links`(
70
  `id` int(20) unsigned NOT NULL AUTO_INCREMENT,
@@ -83,10 +85,32 @@ class MetaSeo_Admin {
83
  `warning` tinyint(1) unsigned NOT NULL DEFAULT '0',
84
  `dismissed` tinyint(1) NOT NULL DEFAULT '0',
85
  PRIMARY KEY (id))";
 
86
 
87
  require_once(ABSPATH.'wp-admin/includes/upgrade.php');
88
  dbDelta($sql);
89
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
  // create page 404
91
  $sql = $wpdb->prepare("SELECT COUNT(*) FROM " . $wpdb->prefix . "posts WHERE post_title = %s" , array("WP Meta SEO 404 Page"));
92
  $post_if = $wpdb->get_var($sql);
@@ -215,7 +239,7 @@ class MetaSeo_Admin {
215
  }else{
216
  if(!empty($tags_h1)) {
217
  foreach($tags_h1 as $order => $tagh1){
218
- $words_tagh1 = preg_split('~[^\p{L}\p{N}\']+~u',strtolower($tagh1->nodeValue));
219
  if(is_array($words_tagh1) && is_array($words_post_title)){
220
  foreach ($words_tagh1 as $mh){
221
  if(in_array($mh, $words_post_title) && $mh!=''){
@@ -228,7 +252,7 @@ class MetaSeo_Admin {
228
 
229
  if(!empty($tags_h2)) {
230
  foreach($tags_h2 as $order => $tagh2){
231
- $words_tagh2 = preg_split('~[^\p{L}\p{N}\']+~u',strtolower($tagh2->nodeValue));
232
  if(is_array($words_tagh2) && is_array($words_post_title)){
233
  foreach ($words_tagh2 as $mh){
234
  if(in_array($mh, $words_post_title) && $mh!=''){
@@ -241,7 +265,7 @@ class MetaSeo_Admin {
241
 
242
  if(!empty($tags_h3)) {
243
  foreach($tags_h3 as $order => $tagh3){
244
- $words_tagh3 = preg_split('~[^\p{L}\p{N}\']+~u',strtolower($tagh3->nodeValue));
245
  if(is_array($words_tagh3) && is_array($words_post_title)){
246
  foreach ($words_tagh3 as $mh){
247
  if(in_array($mh, $words_post_title) && $mh!=''){
@@ -254,7 +278,7 @@ class MetaSeo_Admin {
254
 
255
  if(!empty($tags_h4)) {
256
  foreach($tags_h4 as $order => $tagh4){
257
- $words_tagh4 = preg_split('~[^\p{L}\p{N}\']+~u',strtolower($tagh4->nodeValue));
258
  if(is_array($words_tagh4) && is_array($words_post_title)){
259
  foreach ($words_tagh4 as $mh){
260
  if(in_array($mh, $words_post_title) && $mh!=''){
@@ -267,7 +291,7 @@ class MetaSeo_Admin {
267
 
268
  if(!empty($tags_h5)) {
269
  foreach($tags_h5 as $order => $tagh5){
270
- $words_tagh5 = preg_split('~[^\p{L}\p{N}\']+~u',strtolower($tagh5->nodeValue));
271
  if(is_array($words_tagh5) && is_array($words_post_title)){
272
  foreach ($words_tagh5 as $mh){
273
  if(in_array($mh, $words_post_title) && $mh!=''){
@@ -280,7 +304,7 @@ class MetaSeo_Admin {
280
 
281
  if(!empty($tags_h6)) {
282
  foreach($tags_h6 as $order => $tagh6){
283
- $words_tagh6 = preg_split('~[^\p{L}\p{N}\']+~u',strtolower($tagh6->nodeValue));
284
  if(is_array($words_tagh6) && is_array($words_post_title)){
285
  foreach ($words_tagh6 as $mh){
286
  if(in_array($mh, $words_post_title) && $mh!=''){
@@ -422,30 +446,164 @@ class MetaSeo_Admin {
422
  }
423
 
424
  function metaseo_update_link(){
425
- if(isset($_POST['postid'])){
426
- if(isset($_POST['link_old']) && isset($_POST['link_new'])){
427
- $link_old = stripcslashes($_POST['link_old']);
428
- $link_new = $_POST['link_new'];
429
- $post = get_post($_POST['postid']);
430
- if(!empty($post) && !empty($post->post_content)){
431
- if(strpos($post->post_content, $link_old) !== false){
432
- $content = str_replace($link_old, $link_new, $post->post_content);
433
- $my_post = array(
434
- 'ID' => $_POST['postid'],
435
- 'post_content' => $content
436
- );
437
- wp_update_post( $my_post );
438
- wp_send_json(array('link_new' => stripcslashes($link_new)));
439
- }else{
440
- wp_send_json(false);
441
- }
442
- }
443
  wp_send_json(false);
444
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
445
  }
446
  wp_send_json(false);
447
  }
448
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
449
  function wpms_save_settings404(){
450
  if(isset($_POST['wpms_redirect'])){
451
  update_option('wpms_settings_404', $_POST['wpms_redirect']);
@@ -467,6 +625,8 @@ class MetaSeo_Admin {
467
  add_settings_field('metaseo_showsocial', __('Social networks meta', 'wp-meta-seo'), array( $this, 'showsocial' ), 'metaseo_settings', 'metaseo_dashboard');
468
  add_settings_field('metaseo_seovalidate', __('Force SEO validation', 'wp-meta-seo'), array( $this, 'showseovalidate' ), 'metaseo_settings', 'metaseo_dashboard');
469
  add_settings_field('metaseo_linkfield', __('Link text field', 'wp-meta-seo'), array( $this, 'showlinkfield' ), 'metaseo_settings', 'metaseo_dashboard');
 
 
470
  }
471
 
472
  public function showmetatitletab(){
@@ -532,6 +692,22 @@ class MetaSeo_Admin {
532
  <?php
533
  }
534
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
535
  public function showfacebook(){
536
  $face = isset( $this->settings['metaseo_showfacebook'] ) ? $this->settings['metaseo_showfacebook'] : '';
537
  echo '<input id="metaseo_showfacebook" name="_metaseo_settings[metaseo_showfacebook]" type="text" value="'.esc_attr( $face ).'" size="50"/>';
@@ -707,7 +883,7 @@ class MetaSeo_Admin {
707
  array(
708
  'metaseo_dashboard',
709
  '',
710
- __('Image meta', 'wp-meta-seo'),
711
  $manage_options_cap,
712
  'metaseo_image_meta',
713
  array($this, 'load_page'),
@@ -725,7 +901,7 @@ class MetaSeo_Admin {
725
  array(
726
  'metaseo_dashboard',
727
  '',
728
- __('Link meta', 'wp-meta-seo'),
729
  $manage_options_cap,
730
  'metaseo_link_meta',
731
  array($this, 'load_page'),
@@ -1033,6 +1209,10 @@ class MetaSeo_Admin {
1033
  add_action('wp_ajax_wpms_recheck_link',array('MetaSeo_Broken_Link_Table','wpms_recheck_link'));
1034
  add_action('wp_ajax_wpms_scan_link',array('MetaSeo_Broken_Link_Table','wpms_scan_link'));
1035
  add_action('wp_ajax_wpms_flush_link',array('MetaSeo_Broken_Link_Table','wpms_flush_link'));
 
 
 
 
1036
  }
1037
 
1038
  }
20
  "metaseo_seovalidate" => 0,
21
  "metaseo_linkfield" => 1,
22
  "metaseo_metatitle_tab" => 0,
23
+ "metaseo_follow" => 0,
24
+ "metaseo_index" => 0
25
  );
26
  $settings = get_option( '_metaseo_settings' );
27
 
62
  add_action( 'delete_post', array('MetaSeo_Broken_Link_Table','wpms_delete_post' ));
63
  add_action( 'edit_comment', array('MetaSeo_Broken_Link_Table','wpms_update_comment') );
64
  add_action( 'deleted_comment', array('MetaSeo_Broken_Link_Table','wpms_deleted_comment') );
 
65
  }
66
 
67
  function metaseo_create_404page(){
68
  global $wpdb;
69
+
70
  // create table wpms_links
71
  $sql = "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}wpms_links`(
72
  `id` int(20) unsigned NOT NULL AUTO_INCREMENT,
85
  `warning` tinyint(1) unsigned NOT NULL DEFAULT '0',
86
  `dismissed` tinyint(1) NOT NULL DEFAULT '0',
87
  PRIMARY KEY (id))";
88
+
89
 
90
  require_once(ABSPATH.'wp-admin/includes/upgrade.php');
91
  dbDelta($sql);
92
 
93
+ $row = $wpdb->get_results( "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
94
+ WHERE table_name = '".$wpdb->prefix."wpms_links' AND column_name = 'follow'" );
95
+
96
+ if(empty($row)){
97
+ $wpdb->query("ALTER TABLE ".$wpdb->prefix."wpms_links ADD follow tinyint(1) DEFAULT 1");
98
+ }
99
+
100
+ $row = $wpdb->get_results( "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
101
+ WHERE table_name = '".$wpdb->prefix."wpms_links' AND column_name = 'meta_title'" );
102
+
103
+ if(empty($row)){
104
+ $wpdb->query("ALTER TABLE ".$wpdb->prefix."wpms_links ADD meta_title varchar(250) DEFAULT ''");
105
+ }
106
+
107
+ $row = $wpdb->get_results( "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
108
+ WHERE table_name = '".$wpdb->prefix."wpms_links' AND column_name = 'internal'" );
109
+
110
+ if(empty($row)){
111
+ $wpdb->query("ALTER TABLE ".$wpdb->prefix."wpms_links ADD internal tinyint(1) DEFAULT 1");
112
+ }
113
+
114
  // create page 404
115
  $sql = $wpdb->prepare("SELECT COUNT(*) FROM " . $wpdb->prefix . "posts WHERE post_title = %s" , array("WP Meta SEO 404 Page"));
116
  $post_if = $wpdb->get_var($sql);
239
  }else{
240
  if(!empty($tags_h1)) {
241
  foreach($tags_h1 as $order => $tagh1){
242
+ $words_tagh1 = preg_split('~[^\p{L}\p{N}\']+~u',utf8_decode(strtolower($tagh1->nodeValue)));
243
  if(is_array($words_tagh1) && is_array($words_post_title)){
244
  foreach ($words_tagh1 as $mh){
245
  if(in_array($mh, $words_post_title) && $mh!=''){
252
 
253
  if(!empty($tags_h2)) {
254
  foreach($tags_h2 as $order => $tagh2){
255
+ $words_tagh2 = preg_split('~[^\p{L}\p{N}\']+~u',utf8_decode(strtolower($tagh2->nodeValue)));
256
  if(is_array($words_tagh2) && is_array($words_post_title)){
257
  foreach ($words_tagh2 as $mh){
258
  if(in_array($mh, $words_post_title) && $mh!=''){
265
 
266
  if(!empty($tags_h3)) {
267
  foreach($tags_h3 as $order => $tagh3){
268
+ $words_tagh3 = preg_split('~[^\p{L}\p{N}\']+~u',utf8_decode(strtolower($tagh3->nodeValue)));
269
  if(is_array($words_tagh3) && is_array($words_post_title)){
270
  foreach ($words_tagh3 as $mh){
271
  if(in_array($mh, $words_post_title) && $mh!=''){
278
 
279
  if(!empty($tags_h4)) {
280
  foreach($tags_h4 as $order => $tagh4){
281
+ $words_tagh4 = preg_split('~[^\p{L}\p{N}\']+~u',utf8_decode(strtolower($tagh4->nodeValue)));
282
  if(is_array($words_tagh4) && is_array($words_post_title)){
283
  foreach ($words_tagh4 as $mh){
284
  if(in_array($mh, $words_post_title) && $mh!=''){
291
 
292
  if(!empty($tags_h5)) {
293
  foreach($tags_h5 as $order => $tagh5){
294
+ $words_tagh5 = preg_split('~[^\p{L}\p{N}\']+~u',utf8_decode(strtolower($tagh5->nodeValue)));
295
  if(is_array($words_tagh5) && is_array($words_post_title)){
296
  foreach ($words_tagh5 as $mh){
297
  if(in_array($mh, $words_post_title) && $mh!=''){
304
 
305
  if(!empty($tags_h6)) {
306
  foreach($tags_h6 as $order => $tagh6){
307
+ $words_tagh6 = preg_split('~[^\p{L}\p{N}\']+~u',utf8_decode(strtolower($tagh6->nodeValue)));
308
  if(is_array($words_tagh6) && is_array($words_post_title)){
309
  foreach ($words_tagh6 as $mh){
310
  if(in_array($mh, $words_post_title) && $mh!=''){
446
  }
447
 
448
  function metaseo_update_link(){
449
+ if (isset($_POST['link_id'])) {
450
+ global $wpdb;
451
+ $sql = $wpdb->prepare("SELECT * FROM " . $wpdb->prefix . "wpms_links WHERE id=%d", array($_POST['link_id']));
452
+ $link_detail = $wpdb->get_row($sql);
453
+ if (empty($link_detail))
 
 
 
 
 
 
 
 
 
 
 
 
 
454
  wp_send_json(false);
455
+
456
+ $value = array('meta_title' => $_POST['meta_title']);
457
+ $wpdb->update(
458
+ $wpdb->prefix . 'wpms_links', $value, array('id' => $_POST['link_id'])
459
+ );
460
+
461
+
462
+ $post = get_post($link_detail->source_id);
463
+ if(!empty($post)){
464
+ $old_value = $post->post_content;
465
+ $edit_result = $this->wpms_edit_linkhtml($old_value,$link_detail->link_url,$link_detail->link_url,$_POST['meta_title']);
466
+ $my_post = array(
467
+ 'ID' => $link_detail->source_id,
468
+ 'post_content' => $edit_result['content']
469
+ );
470
+ remove_action('post_updated', array('MetaSeo_Broken_Link_Table', 'wpms_update_post'));
471
+ wp_update_post($my_post);
472
+ wp_send_json(array('status' => true));
473
+ }
474
+
475
  }
476
  wp_send_json(false);
477
  }
478
 
479
+ function metaseo_update_pageindex(){
480
+ if(isset($_POST['page_id']) && isset($_POST['index'])){
481
+ update_post_meta($_POST['page_id'], '_metaseo_metaindex', $_POST['index']);
482
+ wp_send_json(array('status' => true));
483
+ }
484
+ wp_send_json(array('status' => false));
485
+ }
486
+
487
+ function metaseo_update_pagefollow(){
488
+ if(isset($_POST['page_id']) && isset($_POST['follow'])){
489
+ update_post_meta($_POST['page_id'], '_metaseo_metafollow', $_POST['follow']);
490
+ wp_send_json(array('status' => true));
491
+ }
492
+ wp_send_json(array('status' => false));
493
+ }
494
+
495
+ function metaseo_update_follow(){
496
+ if (isset($_POST['link_id'])) {
497
+ $this->update_follow($_POST['link_id'],$_POST['follow']);
498
+ wp_send_json(array('status' => true));
499
+ }
500
+ wp_send_json(array('status' => false));
501
+ }
502
+
503
+ function metaseo_update_multiplefollow(){
504
+ global $wpdb;
505
+ $follow_value = $_POST['follow_value'];
506
+ $limit = 20;
507
+
508
+ switch ($follow_value){
509
+ case 'follow_selected':
510
+ if (empty($_POST['linkids'])) wp_send_json(array('status' => true));
511
+ $follow = 1;
512
+ foreach ($_POST['linkids'] as $linkId){
513
+ $this->update_follow($linkId,$follow);
514
+ }
515
+ break;
516
+
517
+ case 'follow_all':
518
+ $follow = 1;
519
+ $i = 0;
520
+ $query = "SELECT * FROM " . $wpdb->prefix . "wpms_links WHERE follow=0 AND type='url'";
521
+ $links = $wpdb->get_results($query);
522
+ foreach ($links as $link){
523
+ if($i > $limit){
524
+ wp_send_json(array('status' => false,'message' => 'limit'));
525
+ }else{
526
+ $this->update_follow($link->id,$follow);
527
+ $i++;
528
+ }
529
+ }
530
+
531
+ break;
532
+
533
+ case 'nofollow_selected':
534
+ $follow = 0;
535
+ if (empty($_POST['linkids'])) wp_send_json(array('status' => true));
536
+ foreach ($_POST['linkids'] as $linkId){
537
+ $this->update_follow($linkId,$follow);
538
+ }
539
+ break;
540
+
541
+ case 'nofollow_all':
542
+ $follow = 0;
543
+ $i = 0;
544
+ $query = "SELECT * FROM " . $wpdb->prefix . "wpms_links WHERE follow=1 AND type='url'";
545
+ $links = $wpdb->get_results($query);
546
+ foreach ($links as $link){
547
+ if($i>$limit){
548
+ wp_send_json(array('status' => false,'message' => 'limit'));
549
+ }else{
550
+ $this->update_follow($link->id,$follow);
551
+ $i++;
552
+ }
553
+ }
554
+ break;
555
+ }
556
+ wp_send_json(array('status' => true));
557
+ }
558
+
559
+ function update_follow($linkId,$follow){
560
+ global $wpdb;
561
+ $sql = $wpdb->prepare("SELECT * FROM " . $wpdb->prefix . "wpms_links WHERE id=%d", array($linkId));
562
+ $link_detail = $wpdb->get_row($sql);
563
+ if (empty($link_detail))
564
+ wp_send_json(array('status' => false));
565
+
566
+ $value = array('follow' => $follow);
567
+ $wpdb->update(
568
+ $wpdb->prefix . 'wpms_links', $value, array('id' => $linkId)
569
+ );
570
+
571
+ $post = get_post($link_detail->source_id);
572
+ if(!empty($post)){
573
+ $old_value = $post->post_content;
574
+ $edit_result = $this->wpms_edit_linkhtml($old_value,$link_detail->link_url,$link_detail->link_url,$link_detail->meta_title,$follow);
575
+ $my_post = array(
576
+ 'ID' => $link_detail->source_id,
577
+ 'post_content' => $edit_result['content']
578
+ );
579
+ remove_action('post_updated', array('MetaSeo_Broken_Link_Table', 'wpms_update_post'));
580
+ wp_update_post($my_post);
581
+ }
582
+ }
583
+
584
+ public function wpms_edit_linkhtml($content, $new_url, $old_url,$meta_title,$follow, $new_text = null) {
585
+ //Save the old & new URLs for use in the edit callback.
586
+ $args = array(
587
+ 'old_url' => $old_url,
588
+ 'new_url' => $new_url,
589
+ 'new_text' => $new_text,
590
+ 'meta_title' => $meta_title,
591
+ 'follow' => $follow
592
+ );
593
+
594
+ //Find all links and replace those that match $old_url.
595
+ $content = MetaSeo_Broken_Link_Table::wpms_multi_edit($content, array('MetaSeo_Broken_Link_Table', 'wpms_edithtml_callback'), $args);
596
+
597
+ $result = array(
598
+ 'content' => $content,
599
+ 'raw_url' => $new_url,
600
+ );
601
+ if (isset($new_text)) {
602
+ $result['link_text'] = $new_text;
603
+ }
604
+ return $result;
605
+ }
606
+
607
  function wpms_save_settings404(){
608
  if(isset($_POST['wpms_redirect'])){
609
  update_option('wpms_settings_404', $_POST['wpms_redirect']);
625
  add_settings_field('metaseo_showsocial', __('Social networks meta', 'wp-meta-seo'), array( $this, 'showsocial' ), 'metaseo_settings', 'metaseo_dashboard');
626
  add_settings_field('metaseo_seovalidate', __('Force SEO validation', 'wp-meta-seo'), array( $this, 'showseovalidate' ), 'metaseo_settings', 'metaseo_dashboard');
627
  add_settings_field('metaseo_linkfield', __('Link text field', 'wp-meta-seo'), array( $this, 'showlinkfield' ), 'metaseo_settings', 'metaseo_dashboard');
628
+ add_settings_field('metaseo_follow', __('Post/Page follow', 'wp-meta-seo'), array( $this, 'showfollow' ), 'metaseo_settings', 'metaseo_dashboard');
629
+ add_settings_field('metaseo_index', __('Post/Page index', 'wp-meta-seo'), array( $this, 'showindex' ), 'metaseo_settings', 'metaseo_dashboard');
630
  }
631
 
632
  public function showmetatitletab(){
692
  <?php
693
  }
694
 
695
+ public function showfollow(){
696
+ echo '<input name="_metaseo_settings[metaseo_follow]" type="hidden" value="0"/>';
697
+ ?>
698
+ <label><input name="_metaseo_settings[metaseo_follow]" type="checkbox" id="metaseo_follow" value="1" <?php checked( 1, $this->settings['metaseo_follow']); ?> />
699
+ <?php _e( "Provides a way for webmasters to tell search engines don't follow links on the page.","wp-meta-seo" ); ?></label>
700
+ <?php
701
+ }
702
+
703
+ public function showindex(){
704
+ echo '<input name="_metaseo_settings[metaseo_index]" type="hidden" value="0"/>';
705
+ ?>
706
+ <label><input name="_metaseo_settings[metaseo_index]" type="checkbox" id="metaseo_index" value="1" <?php checked( 1, $this->settings['metaseo_index']); ?> />
707
+ <?php _e( "Provides show or do not show this page in search results in search results.","wp-meta-seo" ); ?></label>
708
+ <?php
709
+ }
710
+
711
  public function showfacebook(){
712
  $face = isset( $this->settings['metaseo_showfacebook'] ) ? $this->settings['metaseo_showfacebook'] : '';
713
  echo '<input id="metaseo_showfacebook" name="_metaseo_settings[metaseo_showfacebook]" type="text" value="'.esc_attr( $face ).'" size="50"/>';
883
  array(
884
  'metaseo_dashboard',
885
  '',
886
+ __('Image information', 'wp-meta-seo'),
887
  $manage_options_cap,
888
  'metaseo_image_meta',
889
  array($this, 'load_page'),
901
  array(
902
  'metaseo_dashboard',
903
  '',
904
+ __('Link editor', 'wp-meta-seo'),
905
  $manage_options_cap,
906
  'metaseo_link_meta',
907
  array($this, 'load_page'),
1209
  add_action('wp_ajax_wpms_recheck_link',array('MetaSeo_Broken_Link_Table','wpms_recheck_link'));
1210
  add_action('wp_ajax_wpms_scan_link',array('MetaSeo_Broken_Link_Table','wpms_scan_link'));
1211
  add_action('wp_ajax_wpms_flush_link',array('MetaSeo_Broken_Link_Table','wpms_flush_link'));
1212
+ add_action('wp_ajax_metaseo_update_follow',array($this,'metaseo_update_follow'));
1213
+ add_action('wp_ajax_metaseo_update_multiplefollow',array($this,'metaseo_update_multiplefollow'));
1214
+ add_action('wp_ajax_metaseo_update_pagefollow',array($this,'metaseo_update_pagefollow'));
1215
+ add_action('wp_ajax_metaseo_update_pageindex',array($this,'metaseo_update_pageindex'));
1216
  }
1217
 
1218
  }
inc/class.metaseo-broken-link-table.php CHANGED
@@ -729,7 +729,7 @@ class MetaSeo_Broken_Link_Table extends WP_List_Table {
729
  return $list_link;
730
  }
731
 
732
- public static function get_result_link( $source_link, $row_action, $source_id, $url, $link_text, $type, $status, $status_type) {
733
  $res = array(
734
  'source_link' => $source_link,
735
  'row_action' => $row_action,
@@ -740,6 +740,18 @@ class MetaSeo_Broken_Link_Table extends WP_List_Table {
740
  'status' => $status,
741
  'status_type' => $status_type);
742
 
 
 
 
 
 
 
 
 
 
 
 
 
743
  if($type == 'url'){
744
  if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
745
  $perlink = get_option('permalink_structure');
@@ -754,6 +766,7 @@ class MetaSeo_Broken_Link_Table extends WP_List_Table {
754
  }else{
755
  $res['link_final_url'] = $url;
756
  }
 
757
  return $res;
758
  }
759
 
@@ -935,6 +948,11 @@ class MetaSeo_Broken_Link_Table extends WP_List_Table {
935
 
936
  preg_match_all("#<a[^>]*>.*?</a>#si", $post->post_content, $matches, PREG_PATTERN_ORDER);
937
  foreach (array_unique($matches[0]) as $i => $content) {
 
 
 
 
 
938
  preg_match('/< *a[^>]*href *= *["\']?([^"\']*)/i', $content, $matches);
939
  $href = $matches[1];
940
  $status = MetaSeo_Broken_Link_Table::get_urlstatus($href);
@@ -945,7 +963,7 @@ class MetaSeo_Broken_Link_Table extends WP_List_Table {
945
  'view' => '<a href="' . get_post_permalink($post->ID) . '" title="View &#8220;test&#8221;" rel="permalink">View</a>'
946
  );
947
  $source_link = '<a href="' . get_edit_post_link($post->ID) . '"><b>' . $post->post_title . '</b></a>';
948
- $links_in_content[$href.'url'.$post->ID.$link_text] = MetaSeo_Broken_Link_Table::get_result_link($source_link, $row_action, $post->ID, $href, $link_text, 'url', $status, $status_type);
949
  }
950
  preg_match_all('/(<img[\s]+[^>]*src\s*=\s*)([\"\'])([^>]+?)\2([^<>]*>)/i', $post->post_content, $matches, PREG_PATTERN_ORDER);
951
  foreach (array_unique($matches[0]) as $content) {
@@ -1120,6 +1138,10 @@ class MetaSeo_Broken_Link_Table extends WP_List_Table {
1120
  if (isset($post->post_content) && $post->post_content != '') {
1121
  preg_match_all("#<a[^>]*>.*?</a>#si", $post->post_content, $matches, PREG_PATTERN_ORDER);
1122
  foreach (array_unique($matches[0]) as $i => $content) {
 
 
 
 
1123
  preg_match('/< *a[^>]*href *= *["\']?([^"\']*)/i', $content, $matches);
1124
  $href = $matches[1];
1125
  $status = MetaSeo_Broken_Link_Table::get_urlstatus($href);
@@ -1129,8 +1151,9 @@ class MetaSeo_Broken_Link_Table extends WP_List_Table {
1129
  'edit' => '<a href="' . get_edit_post_link($post->ID) . '" title="Edit this item">Edit</a>',
1130
  'view' => '<a href="' . get_post_permalink($post->ID) . '" title="View &#8220;test&#8221;" rel="permalink">View</a>'
1131
  );
 
1132
  $source_link = '<a href="' . get_edit_post_link($post->ID) . '"><b>' . $post->post_title . '</b></a>';
1133
- $link_a = MetaSeo_Broken_Link_Table::get_result_link($source_link, $row_action, $post->ID, $href, $link_text, 'url', $status, $status_type);
1134
  MetaSeo_Broken_Link_Table::wpms_insert_link($link_a, $wpdb);
1135
  }
1136
  preg_match_all('/(<img[\s]+[^>]*src\s*=\s*)([\"\'])([^>]+?)\2([^<>]*>)/i', $post->post_content, $matches, PREG_PATTERN_ORDER);
@@ -1160,10 +1183,10 @@ class MetaSeo_Broken_Link_Table extends WP_List_Table {
1160
  }
1161
 
1162
  public static function wpms_insert_link($link, $wpdb) {
1163
- $sql = $wpdb->prepare("SELECT COUNT(*) FROM " . $wpdb->prefix . "wpms_links WHERE link_url=%s AND type=%s AND source_id=%d ", array($link['link_url'], $link['type'], $link['source_id']));
1164
- $check = $wpdb->get_var($sql);
1165
- if ($check == 0) {
1166
- $columns = array(
1167
  'link_url' => $link['link_url'],
1168
  'link_final_url' => $link['link_final_url'],
1169
  'link_text' => $link['link_text'],
@@ -1175,17 +1198,49 @@ class MetaSeo_Broken_Link_Table extends WP_List_Table {
1175
  'broken_internal' => 0,
1176
  'warning' => 0,
1177
  'dismissed' => 0,
 
 
1178
  );
1179
  if (isset($link['status_type']) && $link['status_type'] != 'ok') {
1180
- $columns[$link['status_type']] = 1;
1181
  }
1182
 
 
 
 
1183
  $wpdb->insert(
1184
- $wpdb->prefix . 'wpms_links', $columns
1185
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
1186
  }
1187
  }
1188
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1189
  public static function wpms_flush_link() {
1190
  global $wpdb;
1191
  if(isset($_POST['type']) && $_POST['type'] != 'none'){
@@ -1290,9 +1345,12 @@ class MetaSeo_Broken_Link_Table extends WP_List_Table {
1290
  'broken_indexed' => 1
1291
  );
1292
  }
 
 
 
1293
 
1294
  $wpdb->update(
1295
- $wpdb->prefix . 'wpms_links', $value, array('ID' => $_POST['link_id'])
1296
  );
1297
 
1298
  switch ($link_detail->type) {
@@ -1549,6 +1607,16 @@ class MetaSeo_Broken_Link_Table extends WP_List_Table {
1549
  if (isset($params['new_text'])) {
1550
  $modified['#link_text'] = $params['new_text'];
1551
  }
 
 
 
 
 
 
 
 
 
 
1552
  return $modified;
1553
  } else {
1554
  return $link['#raw'];
729
  return $list_link;
730
  }
731
 
732
+ public static function get_result_link( $source_link, $row_action, $source_id, $url, $link_text, $type, $status, $status_type,$meta_title = '',$rel = '') {
733
  $res = array(
734
  'source_link' => $source_link,
735
  'row_action' => $row_action,
740
  'status' => $status,
741
  'status_type' => $status_type);
742
 
743
+ if(isset($meta_title)){
744
+ $res['meta_title'] = $meta_title;
745
+ }else{
746
+ $res['meta_title'] = '';
747
+ }
748
+
749
+ if(isset($rel) && $rel == 'nofollow'){
750
+ $res['follow'] = 0;
751
+ }else{
752
+ $res['follow'] = 1;
753
+ }
754
+
755
  if($type == 'url'){
756
  if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
757
  $perlink = get_option('permalink_structure');
766
  }else{
767
  $res['link_final_url'] = $url;
768
  }
769
+
770
  return $res;
771
  }
772
 
948
 
949
  preg_match_all("#<a[^>]*>.*?</a>#si", $post->post_content, $matches, PREG_PATTERN_ORDER);
950
  foreach (array_unique($matches[0]) as $i => $content) {
951
+ $dom->loadHTML($content);
952
+ $tags = $dom->getElementsByTagName('a');
953
+ $meta_title = $tags->item(0)->getAttribute('title');
954
+ $rel = $tags->item(0)->getAttribute('rel');
955
+
956
  preg_match('/< *a[^>]*href *= *["\']?([^"\']*)/i', $content, $matches);
957
  $href = $matches[1];
958
  $status = MetaSeo_Broken_Link_Table::get_urlstatus($href);
963
  'view' => '<a href="' . get_post_permalink($post->ID) . '" title="View &#8220;test&#8221;" rel="permalink">View</a>'
964
  );
965
  $source_link = '<a href="' . get_edit_post_link($post->ID) . '"><b>' . $post->post_title . '</b></a>';
966
+ $links_in_content[$href.'url'.$post->ID.$link_text] = MetaSeo_Broken_Link_Table::get_result_link($source_link, $row_action, $post->ID, $href, $link_text, 'url', $status, $status_type,$meta_title,$rel);
967
  }
968
  preg_match_all('/(<img[\s]+[^>]*src\s*=\s*)([\"\'])([^>]+?)\2([^<>]*>)/i', $post->post_content, $matches, PREG_PATTERN_ORDER);
969
  foreach (array_unique($matches[0]) as $content) {
1138
  if (isset($post->post_content) && $post->post_content != '') {
1139
  preg_match_all("#<a[^>]*>.*?</a>#si", $post->post_content, $matches, PREG_PATTERN_ORDER);
1140
  foreach (array_unique($matches[0]) as $i => $content) {
1141
+ $dom->loadHTML($content);
1142
+ $tags = $dom->getElementsByTagName('a');
1143
+ $meta_title = $tags->item(0)->getAttribute('title');
1144
+ $rel = $tags->item(0)->getAttribute('rel');
1145
  preg_match('/< *a[^>]*href *= *["\']?([^"\']*)/i', $content, $matches);
1146
  $href = $matches[1];
1147
  $status = MetaSeo_Broken_Link_Table::get_urlstatus($href);
1151
  'edit' => '<a href="' . get_edit_post_link($post->ID) . '" title="Edit this item">Edit</a>',
1152
  'view' => '<a href="' . get_post_permalink($post->ID) . '" title="View &#8220;test&#8221;" rel="permalink">View</a>'
1153
  );
1154
+
1155
  $source_link = '<a href="' . get_edit_post_link($post->ID) . '"><b>' . $post->post_title . '</b></a>';
1156
+ $link_a = MetaSeo_Broken_Link_Table::get_result_link($source_link, $row_action, $post->ID, $href, $link_text, 'url', $status, $status_type,$meta_title,$rel);
1157
  MetaSeo_Broken_Link_Table::wpms_insert_link($link_a, $wpdb);
1158
  }
1159
  preg_match_all('/(<img[\s]+[^>]*src\s*=\s*)([\"\'])([^>]+?)\2([^<>]*>)/i', $post->post_content, $matches, PREG_PATTERN_ORDER);
1183
  }
1184
 
1185
  public static function wpms_insert_link($link, $wpdb) {
1186
+ $sql = $wpdb->prepare("SELECT * FROM " . $wpdb->prefix . "wpms_links WHERE link_url=%s AND type=%s AND source_id=%d ", array($link['link_url'], $link['type'], $link['source_id']));
1187
+ $links = $wpdb->get_results($sql);
1188
+ if (count($links) == 0) {
1189
+ $value = array(
1190
  'link_url' => $link['link_url'],
1191
  'link_final_url' => $link['link_final_url'],
1192
  'link_text' => $link['link_text'],
1198
  'broken_internal' => 0,
1199
  'warning' => 0,
1200
  'dismissed' => 0,
1201
+ 'meta_title' =>$link['meta_title'],
1202
+ 'follow' => $link['follow']
1203
  );
1204
  if (isset($link['status_type']) && $link['status_type'] != 'ok') {
1205
+ $value[$link['status_type']] = 1;
1206
  }
1207
 
1208
+ $site_url = get_site_url();
1209
+ $value = MetaSeo_Broken_Link_Table::wpms_check_internal_link($links[0]->link_url,$site_url,$value);
1210
+
1211
  $wpdb->insert(
1212
+ $wpdb->prefix . 'wpms_links', $value
1213
  );
1214
+ }else{
1215
+ $value = array(
1216
+ 'meta_title' => $link['meta_title'],
1217
+ 'follow' => $link['follow']
1218
+ );
1219
+ $site_url = get_site_url();
1220
+ $value = MetaSeo_Broken_Link_Table::wpms_check_internal_link($links[0]->link_url,$site_url,$value);
1221
+
1222
+ if($links[0]->follow != $link['follow'] || $links[0]->meta_title != $link['meta_title'] || $links[0]->internal != $value['internal']){
1223
+ $wpdb->update(
1224
+ $wpdb->prefix . 'wpms_links', $value, array('id' => $links[0]->id)
1225
+ );
1226
+ }
1227
  }
1228
  }
1229
 
1230
+ public static function wpms_check_internal_link($link,$siteUrl,$value) {
1231
+ $info_link = parse_url($link);
1232
+ $info_site_url = parse_url($siteUrl);
1233
+ $domain_link = $info_link['host'].$info_link['path'].'/';
1234
+ $domain_site = $info_site_url['host'].$info_site_url['path'].'/';
1235
+ if(strpos($domain_link, $domain_site) !== false){
1236
+ $value['internal'] = 1;
1237
+ }else{
1238
+ $value['internal'] = 0;
1239
+ }
1240
+
1241
+ return $value;
1242
+ }
1243
+
1244
  public static function wpms_flush_link() {
1245
  global $wpdb;
1246
  if(isset($_POST['type']) && $_POST['type'] != 'none'){
1345
  'broken_indexed' => 1
1346
  );
1347
  }
1348
+
1349
+ $site_url = get_site_url();
1350
+ $value = MetaSeo_Broken_Link_Table::wpms_check_internal_link($_POST['new_link'],$site_url,$value);
1351
 
1352
  $wpdb->update(
1353
+ $wpdb->prefix . 'wpms_links', $value, array('id' => $_POST['link_id'])
1354
  );
1355
 
1356
  switch ($link_detail->type) {
1607
  if (isset($params['new_text'])) {
1608
  $modified['#link_text'] = $params['new_text'];
1609
  }
1610
+
1611
+ if (isset($params['meta_title'])) {
1612
+ $modified['title'] = $params['meta_title'];
1613
+ }
1614
+
1615
+ if (isset($params['follow']) && $params['follow'] == 0) {
1616
+ $modified['rel'] = 'nofollow';
1617
+ }else{
1618
+ $modified['rel'] = '';
1619
+ }
1620
  return $modified;
1621
  } else {
1622
  return $link['#raw'];
inc/class.metaseo-content-list-table.php CHANGED
@@ -144,6 +144,14 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
144
  $columns['col_meta_keywords'] = __('Meta Keywords', 'wp-meta-seo');
145
  }
146
  $columns['col_meta_desc'] = __('Meta Description', 'wp-meta-seo');
 
 
 
 
 
 
 
 
147
 
148
  return $columns;
149
  }
@@ -304,7 +312,7 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
304
  switch ($column_name) {
305
  case 'cb':
306
  echo '<th scope="row" class="check-column">';
307
- echo '<input id="cb-select-1" class="metaseo_post" type="checkbox" name="post[]" value="'.$rec->ID.'">';
308
  echo '</th>';
309
 
310
  break;
@@ -379,6 +387,26 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
379
  $input .= sprintf('<div class="desc-len" id="%1$s"></div>', 'metaseo-metadesc-len' . $rec->ID);
380
  echo sprintf('<td %2$s>%1$s</td>', $input, $attributes);
381
  break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
382
  }
383
  }
384
 
144
  $columns['col_meta_keywords'] = __('Meta Keywords', 'wp-meta-seo');
145
  }
146
  $columns['col_meta_desc'] = __('Meta Description', 'wp-meta-seo');
147
+ $settings = get_option( '_metaseo_settings' );
148
+ if(!empty($settings['metaseo_follow'])){
149
+ $columns['col_follow'] = __('Follow', 'wp-meta-seo');
150
+ }
151
+
152
+ if(!empty($settings['metaseo_index'])){
153
+ $columns['col_index'] = __('Index', 'wp-meta-seo');
154
+ }
155
 
156
  return $columns;
157
  }
312
  switch ($column_name) {
313
  case 'cb':
314
  echo '<th scope="row" class="check-column">';
315
+ echo '<input id="cb-select-'.$rec->ID.'" class="metaseo_post" type="checkbox" name="post[]" value="'.$rec->ID.'">';
316
  echo '</th>';
317
 
318
  break;
387
  $input .= sprintf('<div class="desc-len" id="%1$s"></div>', 'metaseo-metadesc-len' . $rec->ID);
388
  echo sprintf('<td %2$s>%1$s</td>', $input, $attributes);
389
  break;
390
+
391
+ case 'col_index':
392
+ $page_index = get_post_meta($rec->ID,'_metaseo_metaindex',true);
393
+ if(isset($page_index) && $page_index == 'noindex'){
394
+ $input = '<input class="metaseo_post_index" name="index[]" type="checkbox" value="'.$rec->ID.'">';
395
+ }else{
396
+ $input = '<input checked class="metaseo_post_index" name="index[]" type="checkbox" value="'.$rec->ID.'">';
397
+ }
398
+ echo sprintf('<td %2$s>%1$s</td>', $input, $attributes);
399
+ break;
400
+
401
+ case 'col_follow':
402
+ $page_follow = get_post_meta($rec->ID,'_metaseo_metafollow',true);
403
+ if(isset($page_follow) && $page_follow == 'nofollow'){
404
+ $input = '<input class="metaseo_post_follow" name="follow[]" type="checkbox" value="'.$rec->ID.'">';
405
+ }else{
406
+ $input = '<input checked class="metaseo_post_follow" name="follow[]" type="checkbox" value="'.$rec->ID.'">';
407
+ }
408
+ echo sprintf('<td %2$s>%1$s</td>', $input, $attributes);
409
+ break;
410
  }
411
  }
412
 
inc/class.metaseo-link-list-table.php CHANGED
@@ -8,7 +8,7 @@
8
  if (!class_exists('WP_List_Table')) {
9
  require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
10
  }
11
-
12
  class MetaSeo_Link_List_Table extends WP_List_Table {
13
 
14
  function __construct() {
@@ -30,11 +30,14 @@ class MetaSeo_Link_List_Table extends WP_List_Table {
30
  <input type="hidden" name="page" value="metaseo_image_meta" />
31
  <div class="alignleft actions bulkactions">
32
  <?php $this->months_fillter($p_type, 'sldate', 'filter_date_action'); ?>
 
33
  </div>
 
34
  <?php elseif ($which == 'bottom'): ?>
35
  <input type="hidden" name="page" value="metaseo_image_meta" />
36
  <div class="alignleft actions bulkactions">
37
  <?php $this->months_fillter($p_type, 'sldate1', 'filter_date_action'); ?>
 
38
  </div>
39
  <?php endif ?>
40
 
@@ -49,7 +52,17 @@ class MetaSeo_Link_List_Table extends WP_List_Table {
49
  <input type="number" required min="1" value="<?php echo $this->_pagination_args['per_page'] ?>" maxlength="3" name="metaseo_link_per_page" class="metaseo_imgs_per_page screen-per-page" max="999" min="1" step="1">
50
  <input type="submit" name="btn_perpage" class="button_perpage button" id="button_perpage" value="Apply" >
51
  </div>
52
-
 
 
 
 
 
 
 
 
 
 
53
  <?php $this->pagination($which); ?>
54
  <br class="clear" />
55
  </div>
@@ -133,17 +146,20 @@ class MetaSeo_Link_List_Table extends WP_List_Table {
133
  function get_columns() {
134
  return $columns = array(
135
  'cb' => '<input id="cb-select-all-1" type="checkbox">',
136
- 'col_id' => __('ID', 'wp-meta-seo'),
137
  'post_id' => __('Source', 'wp-meta-seo'),
138
  'col_link_url' => __('URL', 'wp-meta-seo'),
139
  'col_link_title' => __('Link title', 'wp-meta-seo'),
140
  'col_link_label' => __('Link text', 'wp-meta-seo'),
 
141
  );
142
  }
143
 
144
  function get_sortable_columns() {
145
  return $sortable = array(
146
- 'post_id' => array('post_title', true)
 
 
 
147
  );
148
  }
149
 
@@ -226,58 +242,33 @@ class MetaSeo_Link_List_Table extends WP_List_Table {
226
  }
227
  }
228
  }
229
-
230
  function prepare_items() {
231
  global $wpdb, $_wp_column_headers;
232
- //$GLOBALS['wp_filter']["manage_{$GLOBALS['screen']->id}_screen_columns"];
233
 
234
- $screen = get_current_screen();
235
-
236
- $where = array();
237
- $post_type = isset($_REQUEST['post_type_filter']) ? $_REQUEST['post_type_filter'] : "";
238
- if ($post_type == "-1") {
239
- $post_type = "";
240
  }
241
 
242
- $post_types = get_post_types(array('public' => true, 'exclude_from_search' => false));
243
- unset($post_types['attachment']);
244
- if (!empty($post_type) && !in_array($post_type, $post_types))
245
- $post_type = '\'post\'';
246
- else if (empty($post_type)) {
247
- $post_type = "'" . implode("', '", $post_types) . "'";
248
- } else {
249
- $post_type = "'" . $post_type . "'";
250
  }
251
-
252
- $where[] = "post_type IN ($post_type)";
253
- $states = get_post_stati(array('show_in_admin_all_list' => true));
254
- $states['trash'] = 'trash';
255
- $all_states = "'" . implode("', '", $states) . "'";
256
-
257
- if (empty($_REQUEST['post_status'])) {
258
- $where[] = "post_status IN ($all_states)";
259
- } else {
260
- $requested_state = $_REQUEST['post_status'];
261
- if (in_array($requested_state, $states)) {
262
- $where[] = "post_status IN ('$requested_state')";
263
- } else {
264
- $where[] = "post_status IN ($all_states)";
265
- }
266
- }
267
-
268
- if(!empty($_REQUEST['sldate'])){
269
- $where[] = $wpdb->prepare(" post_date Like %s","%" .$_REQUEST['sldate']. "%");
270
  }
271
 
272
- //Order By block
273
- $orderby = !empty($_GET["orderby"]) ? ($_GET["orderby"]) : 'post_title';
 
274
  $order = !empty($_GET["order"]) ? ($_GET["order"]) : 'asc';
275
-
276
  $sortable = $this->get_sortable_columns();
277
  if (in_array($orderby, $sortable)) {
278
  $orderStr = $orderby;
279
  } else {
280
- $orderStr = 'post_title';
281
  }
282
 
283
  if ($order == "asc") {
@@ -290,65 +281,23 @@ class MetaSeo_Link_List_Table extends WP_List_Table {
290
  $orderStr = ' ORDER BY ' . $orderStr;
291
  }
292
 
293
- $query = "SELECT ID, post_title, post_content ,post_name, post_type, post_status"
294
- . " FROM $wpdb->posts "
295
- . " WHERE " . implode(' AND ', $where) . $orderStr;
296
-
297
  $columns = $this->get_columns();
298
  $hidden = array();
299
  $sortable = $this->get_sortable_columns();
300
  $this->_column_headers = array($columns, $hidden, $sortable);
301
-
302
- $results = $wpdb->get_results($query);
303
- $keyword = !empty($_GET["txtkeyword"]) ? $_GET["txtkeyword"] : '';
304
- $list_link = array();
305
- foreach ($results as $post){
306
- $dom = new DOMDocument;
307
- libxml_use_internal_errors( true );
308
- if(isset($post->post_content) && $post->post_content != ''){
309
- if ($dom->loadHTML($post->post_content)) {
310
- // Extracting the specified elements from the web page
311
- preg_match_all("|<[^>]+>(.*)</[^>]+>|U",$post->post_content,$matches, PREG_PATTERN_ORDER);
312
- foreach (array_unique($matches[0]) as $match){
313
- if(strpos($match, '<a') !== false && strpos($match, 'a>') !== false){
314
- $dom = new DOMDocument;
315
- libxml_use_internal_errors( true );
316
- if ($dom->loadHTML($match)) {
317
- $tags = $dom->getElementsByTagName('a');
318
- $html_tag = $match;
319
- $link_title = $tags->item(0)->getAttribute('title');
320
- $link_url = $tags->item(0)->getAttribute('href');
321
- $link_label = $tags->item(0)->nodeValue;
322
- if(isset($link_label) && $link_label == ''){
323
- $link_label = __('(None)','wp-meta-seo');
324
- }
325
-
326
- if (isset($keyword) && $keyword != '') {
327
- if(strpos($link_label, $keyword) !== false || strpos($link_title, $keyword) !== false){
328
- $list_link[] = array('html_tag' => $html_tag , 'link_title' => $link_title , 'link_label' => $link_label , 'link_url' => $link_url , 'post_title' => $post->post_title , 'post_id' => $post->ID);
329
- }
330
- }else{
331
- $list_link[] = array('html_tag' => $html_tag , 'link_title' => $link_title , 'link_label' => $link_label , 'link_url' => $link_url ,'post_title' => $post->post_title , 'post_id' => $post->ID);
332
- }
333
- }
334
- }
335
- }
336
- }
337
- }
338
- }
339
-
340
- $total_items = count($list_link);
341
- if (!empty($_REQUEST['metaseo_link_per_page'])) {
342
- $_per_page = intval($_REQUEST['metaseo_link_per_page']);
343
  } else {
344
  $_per_page = 0;
345
  }
346
-
347
- $per_page = get_user_option('metaseo_link_per_page');
348
  if ($per_page !== false) {
349
  if ($_per_page && $_per_page !== $per_page) {
350
  $per_page = $_per_page;
351
- update_user_option(get_current_user_id(), 'metaseo_link_per_page', $per_page);
352
  }
353
  } else {
354
  if ($_per_page > 0) {
@@ -356,7 +305,7 @@ class MetaSeo_Link_List_Table extends WP_List_Table {
356
  } else {
357
  $per_page = 10;
358
  }
359
- add_user_meta(get_current_user_id(), 'metaseo_link_per_page', $per_page);
360
  }
361
 
362
  $paged = !empty($_GET["paged"]) ? $_GET["paged"] : '';
@@ -365,21 +314,21 @@ class MetaSeo_Link_List_Table extends WP_List_Table {
365
  }
366
 
367
  $total_pages = ceil($total_items / $per_page);
 
 
 
 
 
 
368
  $this->set_pagination_args(array(
369
  'total_items' => $total_items,
370
  'total_pages' => $total_pages,
371
  'per_page' => $per_page
372
  ));
373
-
374
- foreach ($list_link as $key => $item){
375
- if($key >= $paged*$per_page || $key < ($paged-1)*$per_page){
376
- unset($list_link[$key]);
377
- }
378
- }
379
 
380
- $this->items = $list_link;
381
  }
382
-
383
  function search_box1() {
384
  if (empty($_REQUEST['txtkeyword']) && !$this->has_items())
385
  return;
@@ -400,6 +349,36 @@ class MetaSeo_Link_List_Table extends WP_List_Table {
400
  </p>
401
  <?php
402
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
403
 
404
  function months_fillter($post_type, $name, $namebutton) {
405
  global $wpdb, $wp_locale;
@@ -443,14 +422,12 @@ class MetaSeo_Link_List_Table extends WP_List_Table {
443
  $url = URL;
444
  $url = preg_replace('/(^(http|https):\/\/[w]*\.*)/', '', $url);
445
  $records = $this->items;
446
- $i = 0;
447
  $alternate = "";
448
 
449
  list( $columns, $hidden ) = $this->get_column_info();
450
  if (!empty($records)) {
451
  foreach ($records as $rec) {
452
- $i++;
453
- echo '<tr id="record_' . $i . '" data-link="'.$i.'" data-post_id="'.$rec['post_id'].'">';
454
  foreach ($columns as $column_name => $column_display_name) {
455
 
456
  $class = sprintf('class="%1$s column-%1$s"', $column_name);
@@ -465,48 +442,48 @@ class MetaSeo_Link_List_Table extends WP_List_Table {
465
  switch ($column_name) {
466
  case 'cb':
467
  echo '<td scope="row" class="check-column" style="padding:8px 10px;">';
468
- echo '<input id="cb-select-1" class="metaseo_post" type="checkbox" name="post[]" value="">';
469
  echo '</td>';
470
  break;
471
 
472
- case 'col_id':
473
- echo '<td class="col_id">';
474
- echo $i;
475
- echo '</td>';
476
- break;
477
-
478
  case 'post_id':
 
479
  $row_action = array (
480
- 'edit' => '<a href="'.get_edit_post_link( $rec['post_id'] ).'" title="Edit this item">Edit</a>',
481
- 'view' => '<a href="'.get_post_permalink( $rec['post_id'] ).'" title="View &#8220;test&#8221;" rel="permalink">View</a>'
482
  );
483
  echo '<td class="col_id" colspan="3">';
484
- echo '<a href="'.get_edit_post_link( $rec['post_id'] ).'">'.$rec['post_title'].'</a>';
485
  echo $this->row_actions($row_action ,false);
486
  echo '</td>';
487
  break;
488
 
489
  case 'col_link_url':
490
  echo '<td class="wpms_link_html" colspan="3">';
491
- echo '<a target="_blank" href="'.$rec['link_url'].'">'.$rec['link_url'].'</a>';
492
- echo '<div style="display:none" class="wpms_new_link">'.$rec['html_tag'].'</div>';
493
  echo '</td>';
494
  break;
495
 
496
  case 'col_link_title':
497
- $link_title = $rec['link_title'];
498
  echo '<td colspan="3">';
499
- echo '<input type="text" data-post_id="'.$rec['post_id'].'" name="metaseo_link_title" id="metaseo_link_title" class="metaseo_link_title" value="'.$link_title.'">';
500
- echo '<input type="hidden" class="wpms_old_link" value="'.esc_attr($rec['html_tag']).'">';
501
- echo '<div data-post_id="'.$rec['post_id'].'" class="wpms_update_link">'.__('Update','wp-meta-seo').'</div>';
502
  echo '<strong class="wpms_mesage_link">'.__('Saved.','wp-meta-seo').'</strong>';
503
  echo '<strong class="wpms_error_mesage_link">'.__('Error.','wp-meta-seo').'</strong>';
504
  echo '</td>';
505
  break;
506
 
507
  case 'col_link_label':
508
- $link_label = $rec['link_label'];
509
- echo '<td colspan="3">'.$link_label.'</td>';
 
 
 
 
 
 
 
 
510
  break;
511
  }
512
  }
@@ -535,6 +512,11 @@ class MetaSeo_Link_List_Table extends WP_List_Table {
535
  $current_url = add_query_arg(array("paged" => intval($_POST['paged'])), $current_url);
536
  $redirect = true;
537
  }
 
 
 
 
 
538
 
539
  if (!empty($_POST['metaseo_link_per_page'])) {
540
  $current_url = add_query_arg(array("metaseo_link_per_page" => intval($_POST['metaseo_link_per_page'])), $current_url);
@@ -547,5 +529,4 @@ class MetaSeo_Link_List_Table extends WP_List_Table {
547
  exit();
548
  }
549
  }
550
-
551
  }
8
  if (!class_exists('WP_List_Table')) {
9
  require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
10
  }
11
+ wp_enqueue_style('metaseo-google-icon');
12
  class MetaSeo_Link_List_Table extends WP_List_Table {
13
 
14
  function __construct() {
30
  <input type="hidden" name="page" value="metaseo_image_meta" />
31
  <div class="alignleft actions bulkactions">
32
  <?php $this->months_fillter($p_type, 'sldate', 'filter_date_action'); ?>
33
+ <?php $this->link_source_fillter(); ?>
34
  </div>
35
+
36
  <?php elseif ($which == 'bottom'): ?>
37
  <input type="hidden" name="page" value="metaseo_image_meta" />
38
  <div class="alignleft actions bulkactions">
39
  <?php $this->months_fillter($p_type, 'sldate1', 'filter_date_action'); ?>
40
+ <?php $this->link_source_fillter(); ?>
41
  </div>
42
  <?php endif ?>
43
 
52
  <input type="number" required min="1" value="<?php echo $this->_pagination_args['per_page'] ?>" maxlength="3" name="metaseo_link_per_page" class="metaseo_imgs_per_page screen-per-page" max="999" min="1" step="1">
53
  <input type="submit" name="btn_perpage" class="button_perpage button" id="button_perpage" value="Apply" >
54
  </div>
55
+
56
+ <?php if ($which == 'top'): ?>
57
+ <div class="alignleft actions bulkactions">
58
+ <?php $this->follow_action(); ?>
59
+ </div>
60
+ <?php elseif ($which == 'bottom'): ?>
61
+ <div class="alignleft actions bulkactions">
62
+ <?php $this->follow_action(); ?>
63
+ </div>
64
+ <?php endif ?>
65
+
66
  <?php $this->pagination($which); ?>
67
  <br class="clear" />
68
  </div>
146
  function get_columns() {
147
  return $columns = array(
148
  'cb' => '<input id="cb-select-all-1" type="checkbox">',
 
149
  'post_id' => __('Source', 'wp-meta-seo'),
150
  'col_link_url' => __('URL', 'wp-meta-seo'),
151
  'col_link_title' => __('Link title', 'wp-meta-seo'),
152
  'col_link_label' => __('Link text', 'wp-meta-seo'),
153
+ 'col_follow' => __('Follow', 'wp-meta-seo')
154
  );
155
  }
156
 
157
  function get_sortable_columns() {
158
  return $sortable = array(
159
+ 'post_id' => array('post_title', true),
160
+ 'col_link_url' => array('col_link_url', true),
161
+ 'col_link_title' => array('col_link_title', true),
162
+ 'col_follow' => array('col_follow', true),
163
  );
164
  }
165
 
242
  }
243
  }
244
  }
245
+
246
  function prepare_items() {
247
  global $wpdb, $_wp_column_headers;
248
+ $where = array('1=1');
249
 
250
+ $keyword = !empty($_GET["txtkeyword"]) ? $_GET["txtkeyword"] : '';
251
+ if (isset($keyword) && $keyword != '') {
252
+ $where[] .= '(link_text LIKE "%' . $keyword . '%" OR link_url LIKE "%' . $keyword . '%")';
 
 
 
253
  }
254
 
255
+ if (isset($_GET['metaseo_link_source']) && $_GET['metaseo_link_source'] == 'internal') {
256
+ $where[] .= 'internal = 1';
 
 
 
 
 
 
257
  }
258
+
259
+ if (isset($_GET['metaseo_link_source']) && $_GET['metaseo_link_source'] == 'external') {
260
+ $where[] .= 'internal = 0';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
261
  }
262
 
263
+ $where[] .= 'type="url"';
264
+
265
+ $orderby = !empty($_GET["orderby"]) ? ($_GET["orderby"]) : 'id';
266
  $order = !empty($_GET["order"]) ? ($_GET["order"]) : 'asc';
 
267
  $sortable = $this->get_sortable_columns();
268
  if (in_array($orderby, $sortable)) {
269
  $orderStr = $orderby;
270
  } else {
271
+ $orderStr = 'id';
272
  }
273
 
274
  if ($order == "asc") {
281
  $orderStr = ' ORDER BY ' . $orderStr;
282
  }
283
 
284
+ $query = "SELECT * FROM " . $wpdb->prefix . "wpms_links WHERE " . implode(' AND ', $where) . $orderStr;
 
 
 
285
  $columns = $this->get_columns();
286
  $hidden = array();
287
  $sortable = $this->get_sortable_columns();
288
  $this->_column_headers = array($columns, $hidden, $sortable);
289
+ $total_items = $wpdb->query($query);
290
+ if (!empty($_REQUEST['metaseo_broken_link_per_page'])) {
291
+ $_per_page = intval($_REQUEST['metaseo_broken_link_per_page']);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
292
  } else {
293
  $_per_page = 0;
294
  }
295
+
296
+ $per_page = get_user_option('metaseo_broken_link_per_page');
297
  if ($per_page !== false) {
298
  if ($_per_page && $_per_page !== $per_page) {
299
  $per_page = $_per_page;
300
+ update_user_option(get_current_user_id(), 'metaseo_broken_link_per_page', $per_page);
301
  }
302
  } else {
303
  if ($_per_page > 0) {
305
  } else {
306
  $per_page = 10;
307
  }
308
+ add_user_meta(get_current_user_id(), 'metaseo_broken_link_per_page', $per_page);
309
  }
310
 
311
  $paged = !empty($_GET["paged"]) ? $_GET["paged"] : '';
314
  }
315
 
316
  $total_pages = ceil($total_items / $per_page);
317
+
318
+ if (!empty($paged) && !empty($per_page)) {
319
+ $offset = ($paged - 1) * $per_page;
320
+ $query .= ' LIMIT ' . (int) $offset . ',' . (int) $per_page;
321
+ }
322
+
323
  $this->set_pagination_args(array(
324
  'total_items' => $total_items,
325
  'total_pages' => $total_pages,
326
  'per_page' => $per_page
327
  ));
 
 
 
 
 
 
328
 
329
+ $this->items = $wpdb->get_results($query);
330
  }
331
+
332
  function search_box1() {
333
  if (empty($_REQUEST['txtkeyword']) && !$this->has_items())
334
  return;
349
  </p>
350
  <?php
351
  }
352
+
353
+ function follow_action(){
354
+ ?>
355
+ <select name="metaseo_follow_action" class="metaseo_follow_action">
356
+ <option value="0"><?php _e('-- Selection --','wp-meta-seo') ?></option>
357
+ <option value="follow_selected"><?php _e('Follow selected','wp-meta-seo') ?></option>
358
+ <option value="nofollow_selected"><?php _e('Nofollow selected','wp-meta-seo') ?></option>
359
+ <option value="follow_all"><?php _e('Follow all','wp-meta-seo') ?></option>
360
+ <option value="nofollow_all"><?php _e('Nofollow all','wp-meta-seo') ?></option>
361
+ </select>
362
+ <input type="button" class="button btn_apply_follow" value="<?php _e('Apply','wp-meta-seo') ?>">
363
+ <div data-comment_paged="1" data-paged="1" class="button wpms_scan_link page_link_meta"><?php _e('Re-index content links', 'wp-meta-seo') ?></div>
364
+ <span class="spinner spinner_apply_follow"></span>
365
+ <?php
366
+ }
367
+
368
+ function link_source_fillter(){
369
+ if(isset($_GET['metaseo_link_source'])){
370
+ $link_source = $_GET['metaseo_link_source'];
371
+ }else{
372
+ $link_source = 0;
373
+ }
374
+ ?>
375
+ <select name="metaseo_link_source" class="metaseo_link_source">
376
+ <option value="0" <?php selected($link_source, 0) ?>><?php _e('Link source','wp-meta-seo') ?></option>
377
+ <option value="internal" <?php selected($link_source, 'internal') ?>><?php _e('Internal','wp-meta-seo') ?></option>
378
+ <option value="external" <?php selected($link_source, 'external') ?>><?php _e('External','wp-meta-seo') ?></option>
379
+ </select>
380
+ <?php
381
+ }
382
 
383
  function months_fillter($post_type, $name, $namebutton) {
384
  global $wpdb, $wp_locale;
422
  $url = URL;
423
  $url = preg_replace('/(^(http|https):\/\/[w]*\.*)/', '', $url);
424
  $records = $this->items;
 
425
  $alternate = "";
426
 
427
  list( $columns, $hidden ) = $this->get_column_info();
428
  if (!empty($records)) {
429
  foreach ($records as $rec) {
430
+ echo '<tr id="record_' . $rec->id . '" data-link="'.$rec->id.'" data-post_id="'.$rec->source_id.'">';
 
431
  foreach ($columns as $column_name => $column_display_name) {
432
 
433
  $class = sprintf('class="%1$s column-%1$s"', $column_name);
442
  switch ($column_name) {
443
  case 'cb':
444
  echo '<td scope="row" class="check-column" style="padding:8px 10px;">';
445
+ echo '<input id="cb-select-'.$rec->id.'" class="metaseo_link" type="checkbox" name="link['.$rec->id.']" value="'.$rec->id.'">';
446
  echo '</td>';
447
  break;
448
 
 
 
 
 
 
 
449
  case 'post_id':
450
+ $post = get_post($rec->source_id);
451
  $row_action = array (
452
+ 'edit' => '<a target="_blank" href="'.get_edit_post_link( $rec->source_id ).'" title="Edit this item">Edit</a>',
453
+ 'view' => '<a target="_blank" href="'.get_post_permalink( $rec->source_id ).'" title="View &#8220;test&#8221;" rel="permalink">View</a>'
454
  );
455
  echo '<td class="col_id" colspan="3">';
456
+ echo '<a target="_blank" href="'.get_edit_post_link( $rec->source_id ).'">'.$post->post_title.'</a>';
457
  echo $this->row_actions($row_action ,false);
458
  echo '</td>';
459
  break;
460
 
461
  case 'col_link_url':
462
  echo '<td class="wpms_link_html" colspan="3">';
463
+ echo '<a target="_blank" href="'.$rec->link_url.'">'.$rec->link_url.'</a>';
 
464
  echo '</td>';
465
  break;
466
 
467
  case 'col_link_title':
 
468
  echo '<td colspan="3">';
469
+ echo '<input type="text" data-post_id="'.$rec->source_id.'" name="metaseo_link_title" id="metaseo_link_title" class="metaseo_link_title" value="'.$rec->meta_title.'">';
470
+ echo '<div data-post_id="'.$rec->source_id.'" class="wpms_update_link">'.__('Update','wp-meta-seo').'</div>';
 
471
  echo '<strong class="wpms_mesage_link">'.__('Saved.','wp-meta-seo').'</strong>';
472
  echo '<strong class="wpms_error_mesage_link">'.__('Error.','wp-meta-seo').'</strong>';
473
  echo '</td>';
474
  break;
475
 
476
  case 'col_link_label':
477
+ echo '<td colspan="3">'.strip_tags($rec->link_text).'</td>';
478
+ break;
479
+
480
+ case 'col_follow':
481
+ if($rec->follow==1){
482
+ $follow = '<i class="material-icons wpms_ok wpms_change_follow" data-type="done">done</i>';
483
+ }else{
484
+ $follow = '<i class="material-icons wpms_warning wpms_change_follow" data-type="warning">warning</i>';
485
+ }
486
+ echo '<td colspan="3">'.$follow.'</td>';
487
  break;
488
  }
489
  }
512
  $current_url = add_query_arg(array("paged" => intval($_POST['paged'])), $current_url);
513
  $redirect = true;
514
  }
515
+
516
+ if (isset($_POST['metaseo_link_source'])) {
517
+ $current_url = add_query_arg(array("metaseo_link_source" => $_POST['metaseo_link_source']), $current_url);
518
+ $redirect = true;
519
+ }
520
 
521
  if (!empty($_POST['metaseo_link_per_page'])) {
522
  $current_url = add_query_arg(array("metaseo_link_per_page" => intval($_POST['metaseo_link_per_page'])), $current_url);
529
  exit();
530
  }
531
  }
 
532
  }
inc/class.metaseo-meta.php CHANGED
@@ -49,7 +49,7 @@ class WPMSEO_Meta {
49
  'rows' => 2,
50
  'description' => '',
51
  'help' => '',
52
- ),
53
  ),
54
  'social' => array(
55
  'opengraph-title' => array(
49
  'rows' => 2,
50
  'description' => '',
51
  'help' => '',
52
+ )
53
  ),
54
  'social' => array(
55
  'opengraph-title' => array(
inc/class.metaseo-metabox.php CHANGED
@@ -71,7 +71,7 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
71
  self::$meta_fields['general']['desc']['title'] = __('Search engine description', 'wp-meta-seo');
72
  self::$meta_fields['general']['desc']['description'] = sprintf(__('<span id="metaseo_wpmseo_desc-length">%s</span>'),self::$meta_length_reason);
73
  self::$meta_fields['general']['desc']['help'] = __('The description of your content that may be displayed in search engine results aka meta description. By default search engine take an excerpt from your content (depending on the search query). 156 characters max allowed.', 'wp-meta-seo');
74
-
75
  self::$meta_fields['social']['opengraph-title']['title'] = __('Facebook Title','wp-meta-seo');
76
  self::$meta_fields['social']['opengraph-title']['description'] = __('Custom title to display when sharing this content on facebook, content title override','wp-meta-seo');
77
 
@@ -253,7 +253,7 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
253
  add_meta_box('wpmseo_meta', __('WP Meta SEO - Page optimization','wp-meta-seo'), array(
254
  $this,
255
  'meta_box',
256
- ), $post_type, 'normal', apply_filters('wpmseo_metabox_prio', 'high'));
257
  }
258
  }
259
  }
@@ -342,7 +342,7 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
342
  }else{
343
  if(!empty($tags_h1)) {
344
  foreach($tags_h1 as $order => $tagh1){
345
- $words_tagh1 = preg_split('~[^\p{L}\p{N}\']+~u',strtolower($tagh1->nodeValue));
346
  if(is_array($words_tagh1) && is_array($words_post_title)){
347
  foreach ($words_tagh1 as $mh){
348
  if(in_array($mh, $words_post_title) && $mh!=''){
@@ -358,7 +358,7 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
358
 
359
  if(!empty($tags_h2)) {
360
  foreach($tags_h2 as $order => $tagh2){
361
- $words_tagh2 = preg_split('~[^\p{L}\p{N}\']+~u',strtolower($tagh2->nodeValue));
362
  if(is_array($words_tagh2) && is_array($words_post_title)){
363
  foreach ($words_tagh2 as $mh){
364
  if(in_array($mh, $words_post_title) && $mh!=''){
@@ -374,7 +374,7 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
374
 
375
  if(!empty($tags_h3)) {
376
  foreach($tags_h3 as $order => $tagh3){
377
- $words_tagh3 = preg_split('~[^\p{L}\p{N}\']+~u',strtolower($tagh3->nodeValue));
378
  if(is_array($words_tagh3) && is_array($words_post_title)){
379
  foreach ($words_tagh3 as $mh){
380
  if(in_array($mh, $words_post_title) && $mh!=''){
@@ -390,7 +390,7 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
390
 
391
  if(!empty($tags_h4)) {
392
  foreach($tags_h4 as $order => $tagh4){
393
- $words_tagh4 = preg_split('~[^\p{L}\p{N}\']+~u',strtolower($tagh4->nodeValue));
394
  if(is_array($words_tagh4) && is_array($words_post_title)){
395
  foreach ($words_tagh4 as $mh){
396
  if(in_array($mh, $words_post_title) && $mh!=''){
@@ -406,7 +406,7 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
406
 
407
  if(!empty($tags_h5)) {
408
  foreach($tags_h5 as $order => $tagh5){
409
- $words_tagh5 = preg_split('~[^\p{L}\p{N}\']+~u',strtolower($tagh5->nodeValue));
410
  if(is_array($words_tagh5) && is_array($words_post_title)){
411
  foreach ($words_tagh5 as $mh){
412
  if(in_array($mh, $words_post_title) && $mh!=''){
@@ -422,7 +422,7 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
422
 
423
  if(!empty($tags_h6)) {
424
  foreach($tags_h6 as $order => $tagh6){
425
- $words_tagh6 = preg_split('~[^\p{L}\p{N}\']+~u',strtolower($tagh6->nodeValue));
426
  if(is_array($words_tagh6) && is_array($words_post_title)){
427
  foreach ($words_tagh6 as $mh){
428
  if(in_array($mh, $words_post_title) && $mh!=''){
@@ -605,6 +605,7 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
605
 
606
  $output = '';
607
  $circliful = ceil(100*($this->perc_score)/7);
 
608
  $output .= '<div class="metaseo_left">
609
  <div class="metaseo-progress-bar" data-post_id="'.$post->ID.'">
610
  <canvas id="inactiveProgress" class="metaseo-progress-inactive" height="275px" width="275px"></canvas>
@@ -618,7 +619,7 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
618
  $output .= '<div class="metaseo_right">';
619
  $output .= $headingtitle . $contenttitle . $output_pageurl . $output_metatitle . $output_metadesc . $output_imagewrong . $output_imagealt;
620
  $output .= '</div>';
621
-
622
  return $output;
623
  }
624
 
@@ -643,6 +644,37 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
643
  <?php
644
  if($id == 'general'){
645
  echo $this->metaseo_page_analysis($post);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
646
  }
647
  ?>
648
  </div>
71
  self::$meta_fields['general']['desc']['title'] = __('Search engine description', 'wp-meta-seo');
72
  self::$meta_fields['general']['desc']['description'] = sprintf(__('<span id="metaseo_wpmseo_desc-length">%s</span>'),self::$meta_length_reason);
73
  self::$meta_fields['general']['desc']['help'] = __('The description of your content that may be displayed in search engine results aka meta description. By default search engine take an excerpt from your content (depending on the search query). 156 characters max allowed.', 'wp-meta-seo');
74
+
75
  self::$meta_fields['social']['opengraph-title']['title'] = __('Facebook Title','wp-meta-seo');
76
  self::$meta_fields['social']['opengraph-title']['description'] = __('Custom title to display when sharing this content on facebook, content title override','wp-meta-seo');
77
 
253
  add_meta_box('wpmseo_meta', __('WP Meta SEO - Page optimization','wp-meta-seo'), array(
254
  $this,
255
  'meta_box',
256
+ ), $post_type, 'normal', apply_filters('wpmseo_metabox_prio', 'core'));
257
  }
258
  }
259
  }
342
  }else{
343
  if(!empty($tags_h1)) {
344
  foreach($tags_h1 as $order => $tagh1){
345
+ $words_tagh1 = preg_split('~[^\p{L}\p{N}\']+~u',utf8_decode(strtolower($tagh1->nodeValue)));
346
  if(is_array($words_tagh1) && is_array($words_post_title)){
347
  foreach ($words_tagh1 as $mh){
348
  if(in_array($mh, $words_post_title) && $mh!=''){
358
 
359
  if(!empty($tags_h2)) {
360
  foreach($tags_h2 as $order => $tagh2){
361
+ $words_tagh2 = preg_split('~[^\p{L}\p{N}\']+~u',utf8_decode(strtolower($tagh2->nodeValue)));
362
  if(is_array($words_tagh2) && is_array($words_post_title)){
363
  foreach ($words_tagh2 as $mh){
364
  if(in_array($mh, $words_post_title) && $mh!=''){
374
 
375
  if(!empty($tags_h3)) {
376
  foreach($tags_h3 as $order => $tagh3){
377
+ $words_tagh3 = preg_split('~[^\p{L}\p{N}\']+~u',utf8_decode(strtolower($tagh3->nodeValue)));
378
  if(is_array($words_tagh3) && is_array($words_post_title)){
379
  foreach ($words_tagh3 as $mh){
380
  if(in_array($mh, $words_post_title) && $mh!=''){
390
 
391
  if(!empty($tags_h4)) {
392
  foreach($tags_h4 as $order => $tagh4){
393
+ $words_tagh4 = preg_split('~[^\p{L}\p{N}\']+~u',utf8_decode(strtolower($tagh4->nodeValue)));
394
  if(is_array($words_tagh4) && is_array($words_post_title)){
395
  foreach ($words_tagh4 as $mh){
396
  if(in_array($mh, $words_post_title) && $mh!=''){
406
 
407
  if(!empty($tags_h5)) {
408
  foreach($tags_h5 as $order => $tagh5){
409
+ $words_tagh5 = preg_split('~[^\p{L}\p{N}\']+~u',utf8_decode(strtolower($tagh5->nodeValue)));
410
  if(is_array($words_tagh5) && is_array($words_post_title)){
411
  foreach ($words_tagh5 as $mh){
412
  if(in_array($mh, $words_post_title) && $mh!=''){
422
 
423
  if(!empty($tags_h6)) {
424
  foreach($tags_h6 as $order => $tagh6){
425
+ $words_tagh6 = preg_split('~[^\p{L}\p{N}\']+~u',utf8_decode(strtolower($tagh6->nodeValue)));
426
  if(is_array($words_tagh6) && is_array($words_post_title)){
427
  foreach ($words_tagh6 as $mh){
428
  if(in_array($mh, $words_post_title) && $mh!=''){
605
 
606
  $output = '';
607
  $circliful = ceil(100*($this->perc_score)/7);
608
+ $output .= '<div style="width:100%;float:left;">';
609
  $output .= '<div class="metaseo_left">
610
  <div class="metaseo-progress-bar" data-post_id="'.$post->ID.'">
611
  <canvas id="inactiveProgress" class="metaseo-progress-inactive" height="275px" width="275px"></canvas>
619
  $output .= '<div class="metaseo_right">';
620
  $output .= $headingtitle . $contenttitle . $output_pageurl . $output_metatitle . $output_metadesc . $output_imagewrong . $output_imagealt;
621
  $output .= '</div>';
622
+ $output .= '</div>';
623
  return $output;
624
  }
625
 
644
  <?php
645
  if($id == 'general'){
646
  echo $this->metaseo_page_analysis($post);
647
+ $settings = get_option( '_metaseo_settings' );
648
+ if(!empty($settings['metaseo_follow'])){
649
+ $page_follow = get_post_meta($post->ID,'_metaseo_metafollow',true);
650
+ $select_follow = '<select class="metaseo_metabox_follow" data-post_id="'.$post->ID.'">';
651
+ if($page_follow == 'nofollow'){
652
+ $select_follow .= '<option value="follow">'.__('Follow','wp-meta-seo').'</option>';
653
+ $select_follow .= '<option selected value="nofollow">'.__('Nofollow','wp-meta-seo').'</option>';
654
+ }else{
655
+ $select_follow .= '<option selected value="follow">'.__('Follow','wp-meta-seo').'</option>';
656
+ $select_follow .= '<option value="nofollow">'.__('Nofollow','wp-meta-seo').'</option>';
657
+ }
658
+ $select_follow .= '</select>';
659
+ echo '<p><span class="wpmslabel">'.__('Follow','wp-meta-seo').'<i class="material-icons alignright metaseo_help" id="deschelp" alt="'.__('Nofollow provides a way for webmasters to tell search engines: don\'t follow this link. So it may influence the link target’s ranking','wp-meta-seo').'" style="color:#32373C" data-hasqtip="2">chat_bubble</i></span>'.$select_follow.'</p>';
660
+
661
+ }
662
+
663
+ if(!empty($settings['metaseo_index'])){
664
+ $page_index = get_post_meta($post->ID,'_metaseo_metaindex',true);
665
+ $select_index = '<select class="metaseo_metabox_index" data-post_id="'.$post->ID.'">';
666
+ if($page_index == 'noindex'){
667
+ $select_index .= '<option value="index">'.__('Index','wp-meta-seo').'</option>';
668
+ $select_index .= '<option selected value="noindex">'.__('Noindex','wp-meta-seo').'</option>';
669
+ }else{
670
+ $select_index .= '<option selected value="index">'.__('Index','wp-meta-seo').'</option>';
671
+ $select_index .= '<option value="noindex">'.__('Noindex','wp-meta-seo').'</option>';
672
+ }
673
+
674
+ $select_index .= '</select>';
675
+ echo '<p><span class="wpmslabel">'.__('Index','wp-meta-seo').'<i class="material-icons alignright metaseo_help" id="deschelp" alt="'.__('Allow search engines robots to index this content, as default your content is indexed','wp-meta-seo').'" style="color:#32373C" data-hasqtip="2">chat_bubble</i></span>'.$select_index.'</p>';
676
+
677
+ }
678
  }
679
  ?>
680
  </div>
inc/pages/content-meta.php CHANGED
@@ -33,6 +33,26 @@ if (!empty($_REQUEST['_wp_http_referer'])) {
33
  </div>
34
  <script type="text/javascript">
35
  jQuery(document).ready(function($){
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  $('.metaseo-metatitle').each(function() {
37
  metaseo_titlelength(this.id, false , false);
38
  metaseo_updateTitle(this.id, false, false);
33
  </div>
34
  <script type="text/javascript">
35
  jQuery(document).ready(function($){
36
+ $('.metaseo_post_follow').on('click',function(){
37
+ var page_id = $(this).val();
38
+ if($(this).is(':checked')){
39
+ var follow = 'follow';
40
+ }else{
41
+ var follow = 'nofollow';
42
+ }
43
+ metaseo_update_pagefollow(page_id,follow);
44
+ });
45
+
46
+ $('.metaseo_post_index').on('click',function(){
47
+ var page_id = $(this).val();
48
+ if($(this).is(':checked')){
49
+ var index = 'index';
50
+ }else{
51
+ var index = 'noindex';
52
+ }
53
+ metaseo_update_pageindex(page_id,index);
54
+ });
55
+
56
  $('.metaseo-metatitle').each(function() {
57
  metaseo_titlelength(this.id, false , false);
58
  metaseo_updateTitle(this.id, false, false);
inc/pages/link-meta.php CHANGED
@@ -20,7 +20,7 @@ if (!empty($_REQUEST['_wp_http_referer'])) {
20
  <div class="wrap seo_extended_table_page">
21
  <div id="icon-edit-pages" class="icon32 icon32-posts-page"></div>
22
 
23
- <?php echo '<h1>' . __('Link Meta', 'wp-meta-seo') . '</h1>'; ?>
24
 
25
  <form id="wp-seo-meta-form" action="" method="post">
26
 
@@ -33,12 +33,25 @@ if (!empty($_REQUEST['_wp_http_referer'])) {
33
  <script type="text/javascript">
34
  jQuery(document).ready(function($){
35
  $('.metaseo_link_title').bind('input propertychange', function() {
36
- metaseo_updateLinktitle(this);
37
  });
38
 
39
  $('.wpms_update_link').on('click', function() {
40
  saveMetaLinkChanges(this);
41
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  });
43
 
44
  </script>
20
  <div class="wrap seo_extended_table_page">
21
  <div id="icon-edit-pages" class="icon32 icon32-posts-page"></div>
22
 
23
+ <?php echo '<h1>' . __('Link editor', 'wp-meta-seo') . '</h1>'; ?>
24
 
25
  <form id="wp-seo-meta-form" action="" method="post">
26
 
33
  <script type="text/javascript">
34
  jQuery(document).ready(function($){
35
  $('.metaseo_link_title').bind('input propertychange', function() {
36
+ $(this).closest('tr').find('.wpms_update_link').show();
37
  });
38
 
39
  $('.wpms_update_link').on('click', function() {
40
  saveMetaLinkChanges(this);
41
  });
42
+
43
+ $('.wpms_change_follow').on('click', function() {
44
+ wpmsChangeFollow(this);
45
+ });
46
+
47
+ $('.btn_apply_follow').on('click',function(){
48
+ wpmsUpdateFollow(this);
49
+ });
50
+
51
+ $('.wpms_scan_link').on('click',function(){
52
+ var $this = $(this);
53
+ wpms_scan_link($this);
54
+ });
55
  });
56
 
57
  </script>
inc/pages/metaseo-broken-link.php CHANGED
@@ -44,52 +44,7 @@ if (!empty($_REQUEST['_wp_http_referer'])) {
44
 
45
  $('.wpms_scan_link').on('click',function(){
46
  var $this = $(this);
47
- $.ajax({
48
- url: ajaxurl,
49
- method: 'POST',
50
- dataType: 'json',
51
- data: {
52
- 'action': 'wpms_scan_link',
53
- 'paged' : $this.data('paged'),
54
- 'comment_paged' : $this.data('comment_paged')
55
- },
56
- success: function (res) {
57
- if(res.status == false){
58
-
59
- if(res.type == 'limit'){
60
- var wpmf_process = $('.wpmf_process').data('w');
61
- var wpmf_process_new = parseFloat(wpmf_process) + parseFloat(res.percent);
62
- if(wpmf_process_new > 100) wpmf_process_new = 100;
63
- $('.wpmf_process').data('w' , wpmf_process_new);
64
- $('.wpmf_process').css('width' , wpmf_process_new +'%').show();
65
- $this.click();
66
- }else if(res.type == 'limit_comment_content'){
67
- var wpmf_process = $('.wpmf_process').data('w');
68
- if(wpmf_process < 33.33 ) wpmf_process = 33.33;
69
- var wpmf_process_new = parseFloat(wpmf_process) + parseFloat(res.percent);
70
- if(wpmf_process_new > 100) wpmf_process_new = 100;
71
- $('.wpmf_process').data('w' , wpmf_process_new);
72
- $('.wpmf_process').css('width' , wpmf_process_new +'%').show();
73
- $this.data('comment_paged' , parseInt(res.paged)+1);
74
- $this.click();
75
- }else{
76
- var wpmf_process = $('.wpmf_process').data('w');
77
- if(wpmf_process < 66.66 ) wpmf_process = 66.66;
78
- var wpmf_process_new = parseFloat(wpmf_process) + parseFloat(res.percent);
79
- if(wpmf_process_new > 100) wpmf_process_new = 100;
80
- $('.wpmf_process').data('w' , wpmf_process_new);
81
- $('.wpmf_process').css('width' , wpmf_process_new +'%').show();
82
- $this.data('paged' , parseInt(res.paged)+1);
83
- $this.click();
84
- }
85
- }else{
86
- $('.wpmf_process').data('w' , 100);
87
- $('.wpmf_process').css('width' , '100%');
88
- $('#wp-seo-meta-form .spinner').hide();
89
- window.location.assign(document.URL);
90
- }
91
- }
92
- });
93
  });
94
 
95
  $('.wpms_flush_link').on('click',function(){
44
 
45
  $('.wpms_scan_link').on('click',function(){
46
  var $this = $(this);
47
+ wpms_scan_link($this);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  });
49
 
50
  $('.wpms_flush_link').on('click',function(){
js/metaseo_admin.js CHANGED
@@ -85,31 +85,18 @@ function metaseo_updatekeywords(metakeywords_id, needToSave, updateSnippet) {
85
  oldKeywordsValues[postid] = keywords;
86
  }
87
 
88
- var wpms_link_array = [];
89
-
90
-
91
- function metaseo_updateLinktitle(input){
92
- var stt = jQuery(input).closest('tr').data('link');
93
- var link_title = jQuery.trim(metaseo_clean(jQuery(input).closest('tr').find('.metaseo_link_title').val()));
94
- var postid = jQuery(input).data('post_id');
95
- var link_old = jQuery(input).closest('tr').find('.wpms_old_link').val();
96
- jQuery(input).closest('tr').find('.wpms_new_link a').attr('title',link_title);
97
- jQuery(input).closest('tr').find('.wpms_update_link').show();
98
- var link_new = jQuery(input).closest('tr').find('.wpms_new_link').html();
99
- wpms_link_array[stt] = {postid : postid , link_old : link_old ,link_new : link_new , link_title : link_title };
100
- }
101
-
102
  function saveMetaLinkChanges(button_update){
103
- var stt = jQuery(button_update).closest('tr').data('link');
 
 
104
  jQuery.ajax({
105
  url : ajaxurl,
106
  method : 'POST',
107
  dataType: 'json',
108
  data: {
109
  'action' : 'metaseo_update_link',
110
- 'postid' : wpms_link_array[stt].postid,
111
- 'link_old' : wpms_link_array[stt].link_old,
112
- 'link_new' : wpms_link_array[stt].link_new,
113
  },
114
  success: function (response) {
115
  jQuery(button_update).closest('tr').find('.wpms_update_link').hide();
@@ -124,6 +111,168 @@ function saveMetaLinkChanges(button_update){
124
  });
125
  }
126
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  function metaseo_desclength(metadesc_id, needToSave) {
128
  var desc = jQuery.trim(metaseo_clean(jQuery('#' + metadesc_id).val()));
129
  var postid = metadesc_id.replace('metaseo-metadesc-', '');
@@ -687,51 +836,69 @@ jQuery(document).ready(function($) {
687
  });
688
 
689
  $('.metaseo_imgs_per_page').bind('input propertychange', function(){
690
- var perpage = $(this).val();
691
- $('.metaseo_imgs_per_page').each(function(i,e){
692
- if($(e).val() != perpage){
693
- $(e).val(perpage);
694
- }
695
- });
696
- });
697
-
698
- $('.metaseo-filter').bind('change', function(){
699
- var value = $(this).val();
700
- $('.metaseo-filter').each(function(i,e){
701
- if($(e).val() != value){
702
- $(e).val(value);
703
- }
704
- });
705
- });
706
-
707
- $('.redirect_fillter').bind('change', function(){
708
- var value = $(this).val();
709
- $('.redirect_fillter').each(function(i,e){
710
- if($(e).val() != value){
711
- $(e).val(value);
712
- }
713
- });
714
- });
715
-
716
- $('.broken_fillter').bind('change', function(){
717
- var value = $(this).val();
718
- $('.broken_fillter').each(function(i,e){
719
- if($(e).val() != value){
720
- $(e).val(value);
721
- }
722
- });
723
- });
724
 
725
- $('.mbulk_copy').bind('change', function(){
726
- var value = $(this).val();
727
- $('.mbulk_copy').each(function(i,e){
728
- if($(e).val() != value){
729
- $(e).val(value);
730
- }
731
- });
732
- });
733
 
734
- $('.metaseo-img-name').bind('input propertychange', function() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
735
  var savedInfo = $(this).parent().find('span.saved-info');
736
  var iname = validateiName( $(this).val() );
737
  var msg = iname.msg;
@@ -772,7 +939,7 @@ jQuery(document).ready(function($) {
772
  }
773
  });
774
 
775
- $('.dissmiss-import').bind('click', function(e){
776
  e.preventDefault();
777
  $(this).closest('.error').fadeOut(1000);
778
  setTimeout(function(){
@@ -797,7 +964,19 @@ jQuery(document).ready(function($) {
797
  }
798
  });
799
  }
800
- });
 
 
 
 
 
 
 
 
 
 
 
 
801
  //----------------------------------------------------------
802
  //Pop-up declaration
803
  $.fn.absoluteCenter = function() {
85
  oldKeywordsValues[postid] = keywords;
86
  }
87
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  function saveMetaLinkChanges(button_update){
89
+ var link_id = jQuery(button_update).closest('tr').data('link');
90
+ var meta_title = jQuery(button_update).closest('tr').find('.metaseo_link_title').val();
91
+ meta_title = jQuery.trim(metaseo_clean(meta_title));
92
  jQuery.ajax({
93
  url : ajaxurl,
94
  method : 'POST',
95
  dataType: 'json',
96
  data: {
97
  'action' : 'metaseo_update_link',
98
+ 'link_id' : link_id,
99
+ 'meta_title' : meta_title,
 
100
  },
101
  success: function (response) {
102
  jQuery(button_update).closest('tr').find('.wpms_update_link').hide();
111
  });
112
  }
113
 
114
+ function metaseo_update_pageindex(page_id,index){
115
+ jQuery.ajax({
116
+ url : ajaxurl,
117
+ method : 'POST',
118
+ dataType: 'json',
119
+ data: {
120
+ 'action' : 'metaseo_update_pageindex',
121
+ 'page_id' : page_id,
122
+ 'index' : index,
123
+ },
124
+ success: function (response) {
125
+
126
+ }
127
+ });
128
+ }
129
+
130
+ function metaseo_update_pagefollow(page_id,follow){
131
+ jQuery.ajax({
132
+ url : ajaxurl,
133
+ method : 'POST',
134
+ dataType: 'json',
135
+ data: {
136
+ 'action' : 'metaseo_update_pagefollow',
137
+ 'page_id' : page_id,
138
+ 'follow' : follow,
139
+ },
140
+ success: function (response) {
141
+
142
+ }
143
+ });
144
+ }
145
+
146
+ function wpmsChangeFollow(button){
147
+ var link_id = jQuery(button).closest('tr').data('link');
148
+ var type = jQuery(button).data('type');
149
+ var follow = 1;
150
+ if(type == 'done'){
151
+ jQuery(button).data('type','warning').html('warning');
152
+ jQuery(button).removeClass('wpms_ok').addClass('wpms_warning');
153
+ follow = 0;
154
+ }else{
155
+ jQuery(button).data('type','done').html('done');
156
+ jQuery(button).removeClass('wpms_warning').addClass('wpms_ok');
157
+ follow = 1;
158
+ }
159
+
160
+ jQuery.ajax({
161
+ url : ajaxurl,
162
+ method : 'POST',
163
+ dataType: 'json',
164
+ data: {
165
+ 'action' : 'metaseo_update_follow',
166
+ 'link_id' : link_id,
167
+ 'follow' : follow,
168
+ },
169
+ success: function (response) {
170
+
171
+ }
172
+ });
173
+ }
174
+
175
+ function wpms_scan_link($this){
176
+ if($this.hasClass('page_link_meta')){
177
+ jQuery('.spinner_apply_follow').css('visibility','visible').show();
178
+ }
179
+ jQuery.ajax({
180
+ url: ajaxurl,
181
+ method: 'POST',
182
+ dataType: 'json',
183
+ data: {
184
+ 'action': 'wpms_scan_link',
185
+ 'paged' : $this.data('paged'),
186
+ 'comment_paged' : $this.data('comment_paged')
187
+ },
188
+ success: function (res) {
189
+ if(res.status == false){
190
+
191
+ if(res.type == 'limit'){
192
+ var wpmf_process = jQuery('.wpmf_process').data('w');
193
+ var wpmf_process_new = parseFloat(wpmf_process) + parseFloat(res.percent);
194
+ if(wpmf_process_new > 100) wpmf_process_new = 100;
195
+ jQuery('.wpmf_process').data('w' , wpmf_process_new);
196
+ jQuery('.wpmf_process').css('width' , wpmf_process_new +'%').show();
197
+ $this.click();
198
+ }else if(res.type == 'limit_comment_content'){
199
+ var wpmf_process = jQuery('.wpmf_process').data('w');
200
+ if(wpmf_process < 33.33 ) wpmf_process = 33.33;
201
+ var wpmf_process_new = parseFloat(wpmf_process) + parseFloat(res.percent);
202
+ if(wpmf_process_new > 100) wpmf_process_new = 100;
203
+ jQuery('.wpmf_process').data('w' , wpmf_process_new);
204
+ jQuery('.wpmf_process').css('width' , wpmf_process_new +'%').show();
205
+ $this.data('comment_paged' , parseInt(res.paged)+1);
206
+ $this.click();
207
+ }else{
208
+ var wpmf_process = jQuery('.wpmf_process').data('w');
209
+ if(wpmf_process < 66.66 ) wpmf_process = 66.66;
210
+ var wpmf_process_new = parseFloat(wpmf_process) + parseFloat(res.percent);
211
+ if(wpmf_process_new > 100) wpmf_process_new = 100;
212
+ jQuery('.wpmf_process').data('w' , wpmf_process_new);
213
+ jQuery('.wpmf_process').css('width' , wpmf_process_new +'%').show();
214
+ $this.data('paged' , parseInt(res.paged)+1);
215
+ $this.click();
216
+ }
217
+ }else{
218
+ jQuery('.wpmf_process').data('w' , 100);
219
+ jQuery('.wpmf_process').css('width' , '100%');
220
+ jQuery('#wp-seo-meta-form .spinner').hide();
221
+ if($this.hasClass('page_link_meta')){
222
+ jQuery('.spinner_apply_follow').hide();
223
+ }
224
+ window.location.assign(document.URL);
225
+ }
226
+ }
227
+ });
228
+ }
229
+
230
+ function wpmsUpdateFollow(button){
231
+ var $this = jQuery(button);
232
+ jQuery('.spinner_apply_follow').css('visibility','visible').show();
233
+ var follow_value = jQuery('.metaseo_follow_action').val();
234
+ if(follow_value == 'follow_selected' || follow_value == 'nofollow_selected'){
235
+ if (follow_value == 0)
236
+ return;
237
+
238
+ var link_selected = [];
239
+ jQuery(".metaseo_link").each(function (index) {
240
+ if (jQuery(this).is(':checked')) {
241
+ link_selected.push(jQuery(this).val());
242
+ }
243
+ });
244
+ if(link_selected.length == 0) return;
245
+ var data = {
246
+ action : 'metaseo_update_multiplefollow',
247
+ linkids : link_selected,
248
+ follow_value : follow_value
249
+ };
250
+ }else{
251
+ var data = {
252
+ action : 'metaseo_update_multiplefollow',
253
+ follow_value : follow_value
254
+ };
255
+ }
256
+ jQuery.ajax({
257
+ url : ajaxurl,
258
+ method : 'POST',
259
+ dataType : 'json',
260
+ data : data,
261
+ success: function (response) {
262
+ if(response.status == true){
263
+ jQuery('.spinner_apply_follow').hide();
264
+ window.location.assign(document.URL);
265
+ }else{
266
+ if(follow_value == 'follow_all' || follow_value == 'nofollow_all'){
267
+ if(response.message == 'limit'){
268
+ $this.click();
269
+ }
270
+ }
271
+ }
272
+ }
273
+ });
274
+ }
275
+
276
  function metaseo_desclength(metadesc_id, needToSave) {
277
  var desc = jQuery.trim(metaseo_clean(jQuery('#' + metadesc_id).val()));
278
  var postid = metadesc_id.replace('metaseo-metadesc-', '');
836
  });
837
 
838
  $('.metaseo_imgs_per_page').bind('input propertychange', function(){
839
+ var perpage = $(this).val();
840
+ $('.metaseo_imgs_per_page').each(function(i,e){
841
+ if($(e).val() != perpage){
842
+ $(e).val(perpage);
843
+ }
844
+ });
845
+ });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
846
 
847
+ $('.metaseo_link_source').bind('change', function(){
848
+ var value = $(this).val();
849
+ $('.metaseo_link_source').each(function(i,e){
850
+ if($(e).val() != value){
851
+ $(e).val(value);
852
+ }
853
+ });
854
+ });
855
 
856
+ $('.metaseo_follow_action').bind('change', function(){
857
+ var value = $(this).val();
858
+ $('.metaseo_follow_action').each(function(i,e){
859
+ if($(e).val() != value){
860
+ $(e).val(value);
861
+ }
862
+ });
863
+ });
864
+
865
+ $('.metaseo-filter').bind('change', function(){
866
+ var value = $(this).val();
867
+ $('.metaseo-filter').each(function(i,e){
868
+ if($(e).val() != value){
869
+ $(e).val(value);
870
+ }
871
+ });
872
+ });
873
+
874
+ $('.redirect_fillter').bind('change', function(){
875
+ var value = $(this).val();
876
+ $('.redirect_fillter').each(function(i,e){
877
+ if($(e).val() != value){
878
+ $(e).val(value);
879
+ }
880
+ });
881
+ });
882
+
883
+ $('.broken_fillter').bind('change', function(){
884
+ var value = $(this).val();
885
+ $('.broken_fillter').each(function(i,e){
886
+ if($(e).val() != value){
887
+ $(e).val(value);
888
+ }
889
+ });
890
+ });
891
+
892
+ $('.mbulk_copy').bind('change', function(){
893
+ var value = $(this).val();
894
+ $('.mbulk_copy').each(function(i,e){
895
+ if($(e).val() != value){
896
+ $(e).val(value);
897
+ }
898
+ });
899
+ });
900
+
901
+ $('.metaseo-img-name').bind('input propertychange', function() {
902
  var savedInfo = $(this).parent().find('span.saved-info');
903
  var iname = validateiName( $(this).val() );
904
  var msg = iname.msg;
939
  }
940
  });
941
 
942
+ $('.dissmiss-import').bind('click', function(e){
943
  e.preventDefault();
944
  $(this).closest('.error').fadeOut(1000);
945
  setTimeout(function(){
964
  }
965
  });
966
  }
967
+ });
968
+
969
+ $('.metaseo_metabox_follow').on('change',function(){
970
+ var page_id = $(this).data('post_id');
971
+ var follow = $(this).val();
972
+ metaseo_update_pagefollow(page_id,follow);
973
+ });
974
+
975
+ $('.metaseo_metabox_index').on('change',function(){
976
+ var page_id = $(this).data('post_id');
977
+ var index = $(this).val();
978
+ metaseo_update_pageindex(page_id,index);
979
+ });
980
  //----------------------------------------------------------
981
  //Pop-up declaration
982
  $.fn.absoluteCenter = function() {
languages/wp-meta-seo-en_US.mo CHANGED
Binary file
languages/wp-meta-seo-en_US.po CHANGED
@@ -264,8 +264,8 @@ msgstr "WP Meta SEO"
264
  msgid "Content meta"
265
  msgstr "Content meta"
266
 
267
- msgid "Image meta"
268
- msgstr "Image meta"
269
 
270
  msgid "Settings"
271
  msgstr "Settings"
@@ -547,8 +547,8 @@ msgstr "Link title"
547
  msgid "Link text"
548
  msgstr "Link text"
549
 
550
- msgid "Link Meta"
551
- msgstr "Link Meta"
552
 
553
  msgid "Meta title as page title"
554
  msgstr "Meta title as page title"
@@ -579,3 +579,57 @@ msgstr "Hits number"
579
 
580
  msgid "Status"
581
  msgstr "Status"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
264
  msgid "Content meta"
265
  msgstr "Content meta"
266
 
267
+ msgid "Image information"
268
+ msgstr "Image information"
269
 
270
  msgid "Settings"
271
  msgstr "Settings"
547
  msgid "Link text"
548
  msgstr "Link text"
549
 
550
+ msgid "Link editor"
551
+ msgstr "Link editor"
552
 
553
  msgid "Meta title as page title"
554
  msgstr "Meta title as page title"
579
 
580
  msgid "Status"
581
  msgstr "Status"
582
+
583
+ msgid "Allow search engines robots to index this content, as default your content is indexed"
584
+ msgstr "Allow search engines robots to index this content, as default your content is indexed"
585
+
586
+ msgid "Provides show or do not show this page in search results in search results."
587
+ msgstr "Provides show or do not show this page in search results in search results."
588
+
589
+ msgid "Index"
590
+ msgstr "Index"
591
+
592
+ msgid "Follow"
593
+ msgstr "Follow"
594
+
595
+ msgid "Re-index content links"
596
+ msgstr "Re-index content links"
597
+
598
+ msgid "Apply"
599
+ msgstr "Apply"
600
+
601
+ msgid "-- Selection --"
602
+ msgstr "-- Selection --"
603
+
604
+ msgid "Follow selected"
605
+ msgstr "Follow selected"
606
+
607
+ msgid "Nofollow selected"
608
+ msgstr "Nofollow selected"
609
+
610
+ msgid "Follow all"
611
+ msgstr "Follow all"
612
+
613
+ msgid "Nofollow all"
614
+ msgstr "Nofollow all"
615
+
616
+ msgid "Link source"
617
+ msgstr "Link source"
618
+
619
+ msgid "Internal"
620
+ msgstr "Internal"
621
+
622
+ msgid "External"
623
+ msgstr "External"
624
+
625
+ msgid "Post/Page follow"
626
+ msgstr "Post/Page follow"
627
+
628
+ msgid "Post/Page index"
629
+ msgstr "Post/Page index"
630
+
631
+ msgid "Use ImageRecycle image compression plugin to activate this feature"
632
+ msgstr "Use ImageRecycle image compression plugin to activate this feature"
633
+
634
+ msgid "Images represent around 60% of a web page weight. An image compression reduce the image size by up to 70% while preserving the same visual quality. Small loading time is great for SEO!"
635
+ msgstr "Images represent around 60% of a web page weight. An image compression reduce the image size by up to 70% while preserving the same visual quality. Small loading time is great for SEO!"
languages/wp-meta-seo-fr_FR.mo CHANGED
Binary file
languages/wp-meta-seo-fr_FR.po CHANGED
@@ -14,68 +14,110 @@ msgstr ""
14
  msgid "Twitter username (without @)"
15
  msgstr "ID Twitter (sans le @)"
16
 
17
- msgid "2 plugins that are doing almost the same thing detected: disable AIO SEO or Yoast SEO to avoid conflict."
18
- msgstr "2 plugins sont présent et font tous les 2 du SEO: merci de désactiver AIO SEO ou Yoast SEO pour éviter les conflits"
 
 
 
 
19
 
20
- msgid "We have found that you’re using All In One SEO plugin, WP Meta SEO can import the meta from this plugin, %s"
21
- msgstr "Vous utilisez le plugin All in one SEO, nous pouvons importer les meta de ce plugin pour vous, %s"
 
 
 
 
22
 
23
- msgid "We have found that you’re using Yoast SEO plugin, WP Meta SEO can import the meta from this plugin, %s"
24
- msgstr "Vous utilisez le plugin Yoast SEO, nous pouvons importer les meta de ce plugin pour vous, %s"
 
 
 
 
25
 
26
  msgid "Results preview"
27
  msgstr "Prévisualisation"
28
 
29
- msgid "This is a preview of what your content will looks like in search engine results: title, description and URL"
 
 
30
  msgstr "Prévisualisation des résultats de recherche, titre, description et URL"
31
 
32
  msgid "Search engine title"
33
  msgstr "Titre"
34
 
35
- msgid "This is the title of your content that may be displayed in search engine results (meta title). By default it’s the content title (page title, post title…). 69 characters max allowed."
36
- msgstr "Ceci est le titre de votre contenu qui pourra être reprit par les moteurs de recherche (meta title). Par défaut il s'agit du titre du contenu. 69 caractères max"
 
 
 
 
 
 
37
 
38
  msgid "Search engine description"
39
  msgstr "Description"
40
 
41
- msgid "The description of your content that may be displayed in search engine results aka meta description. By default search engine take an excerpt from your content (depending on the search query). 156 characters max allowed."
42
- msgstr "Ceci est la description de votre contenu qui pourra être reprit par les moteurs de recherche (meta description). Par défaut il s'agit d'un extrait de votre contenu.156 caractères max"
 
 
 
 
 
 
43
 
44
  msgid "Facebook Title"
45
  msgstr "Titre facebook"
46
 
47
- msgid "Custom title to display when sharing this content on facebook, content title override"
 
 
48
  msgstr "Titre customisé lors du partage de ce contenu sur Facebook"
49
 
50
  msgid "Facebook Description"
51
  msgstr "Description Facebook"
52
 
53
- msgid "Custom description to display when sharing this content on facebook, content description override"
 
 
54
  msgstr "Description customisé lors du partage de ce contenu sur Facebook"
55
 
56
  msgid "Facebook Image"
57
  msgstr "Image Facebook"
58
 
59
- msgid "Custom image to display when sharing this content on facebook, content description override, recommended size is 1200px x 630px"
60
- msgstr "Image customisé lors du partage de ce contenu sur Facebook, taille recommandée 1200px x 630px"
 
 
 
 
61
 
62
  msgid "Twitter Title"
63
  msgstr "Titre Twitter"
64
 
65
- msgid "Custom title to display when sharing this content on twitter, content title override"
 
 
66
  msgstr "Titre customisé lors du partage de ce contenu sur Twitter"
67
 
68
  msgid "Twitter Description"
69
  msgstr "Description Twitter"
70
 
71
- msgid "Custom description to display when sharing this content on twitter, content description override"
 
 
72
  msgstr "Description customisé lors du partage de ce contenu sur Twitter"
73
 
74
  msgid "Twitter Image"
75
  msgstr "Image Twitter"
76
 
77
- msgid "Custom image to display when sharing this content on facebook, content description override, recommended min size 440px X 220px"
78
- msgstr "Image customisé lors du partage de ce contenu sur Twitter, taille recommandée 440px x 220px"
 
 
 
 
79
 
80
  msgid "Use Image"
81
  msgstr "Utiliser image"
@@ -158,8 +200,11 @@ msgstr "Tout selectionner"
158
  msgid "Filter"
159
  msgstr "Filtrer"
160
 
161
- msgid "We didn't find any image which needed to be updated regarding meta information"
162
- msgstr "Nous n'avons trouvé aucune image qui ont besoin d'être optimisé pour le SEO"
 
 
 
163
 
164
  msgid "This image has still not been inserted in any post!"
165
  msgstr "Cette image n'a été ajouté dans aucun de vos contenus"
@@ -207,7 +252,9 @@ msgid "Content of the post is empty, please check again"
207
  msgstr "Le contenu est vide, merci de revérifier"
208
 
209
  msgid "We can't get traffic rank from Alexa for this website"
210
- msgstr "Nous n'avons pas assez d'info (de trafic) Alexa pour avoir le \"Traffic Rank\""
 
 
211
 
212
  msgid "Meta Title"
213
  msgstr "Meta titre"
@@ -230,8 +277,12 @@ msgstr "Afficher"
230
  msgid "Preview"
231
  msgstr "Prévisualiser"
232
 
233
- msgid "This is a preview of what this content might looks like in Google's search results."
234
- msgstr "Prévisualisation de ce à quoi votre contenu peut ressembler dans les résultats de recherche"
 
 
 
 
235
 
236
  msgid "Snippet Preview %s"
237
  msgstr "Prévisualisation %s"
@@ -263,8 +314,8 @@ msgstr "WP Meta SEO"
263
  msgid "Content meta"
264
  msgstr "Contenu meta"
265
 
266
- msgid "Image meta"
267
- msgstr "Image meta"
268
 
269
  msgid "Settings"
270
  msgstr "Paramètres"
@@ -279,7 +330,9 @@ msgid "Well done! This image is perfect now."
279
  msgstr "Bien joué ! Image remise à la bonne taille !"
280
 
281
  msgid "Oops! An error occured when updating the post, please try again"
282
- msgstr "Oups! Une erreur est survenue durant la mise à jour du post, merci de réessayer"
 
 
283
 
284
  msgid "Resize image"
285
  msgstr "Redimensionner image"
@@ -338,8 +391,12 @@ msgstr "Nom image > alt texte"
338
  msgid "Image name as image title"
339
  msgstr "Nom image > titre d'image"
340
 
341
- msgid "Warning, you're about to replace existing image alt or tile content, are you sire about that?"
342
- msgstr "Vous êtes sur le point de remplacer des attributs de vos images, vous êtes sûr ?"
 
 
 
 
343
 
344
  msgid "Twitter card type "
345
  msgstr "Type Twitter card"
@@ -368,11 +425,15 @@ msgstr "Plus d'info sur le plugin WP Meta SEO"
368
  msgid "Other plugins from JoomUnited"
369
  msgstr "Autres plugin de JoomUnited"
370
 
371
- msgid "Check if a word of this content title is also in a title heading (h1, h2...)"
372
- msgstr "Vérifie si un mot du titre de page est aussi présent dans un titre du contenu (h1, h2...)"
 
 
 
373
 
374
  msgid "Check if a word of this content title is also in the text"
375
- msgstr "Vérifie si un mot du titre de page est aussi présent dans le contenu texte"
 
376
 
377
  msgid "Does the page title match with the permalink (URL structure)"
378
  msgstr "Vérifie si le titre de page correspond à l'URL (permalien)"
@@ -383,32 +444,72 @@ msgstr "Est-ce que les meta titres sont complétés?"
383
  msgid "Is the meta description of this page filled?"
384
  msgstr "Est-ce que les meta description sont complétés?"
385
 
386
- msgid "Check for image HTML resizing in content (usually image resized using handles)"
387
- msgstr "Vérifie si des images sont redimensionnées en HTML (habituellement en utilisant les poignées)"
 
 
 
 
388
 
389
  msgid "Check for image Alt text and title"
390
  msgstr "Vérifie si les textes alt and titre d'images sont remplis"
391
 
392
- msgid "It's better using a permalink structure that is adding in your URL the category name and content title. This parameter can be changed in Settings > Permalinks WordPress menu. Tag recommended is %category%/%postname%"
393
- msgstr "Il est préférable d'utiliser des URL dont le nom de la catégorie et le titre de page sont en clair. Ce paramètre peut être modifié depuis le menu Paramètres > Permaliens. Le tag recommandé est %category%/%postname%"
 
 
 
 
 
 
394
 
395
- msgid "Meta titles are displayed in search engine results as a page title. It's a good thing for SEO to have some custom and attractive ones. Be sure to fill at least the met information on your most popular pages"
396
- msgstr "Les titres Meta sont affichés dans les résultats de recherche comme titre de page. C'est une bonne chose de mettre des titres accrocheurs pour avoir un plus grand nombre de clics."
 
 
 
 
 
 
397
 
398
- msgid "Meta descriptions are displayed in search engine results as a page description. It's a good thing for SEO to have some custom and attractive ones. Be sure to fill at least the meta information on your most popular pages."
399
- msgstr "Les Meta descroption sont affichés dans les résultats de recherche comme description de page. C'est une bonne chose de mettre des descriptions accrocheuses pour avoir un plus grand nombre de clics."
 
 
 
 
 
 
 
400
 
401
- msgid "Display image at its natural size, do not use HTML resize. It happens usually when you use handles to resize an image. You have a bulk edition tool to fix that."
402
- msgstr "Utilisez des images à leur taille naturelle, pas en les redimensionnant en HTML (avec les poignées). Avec WP Meta SEO, vous disposez d'un outil pour corriger cela"
 
 
 
 
 
 
403
 
404
  msgid ""
405
- "We recommend to use both alt text and image title. The main advantage is that it helps search engines discover your images and display them in image search results. Plus, these tags improve the accessibility of your site and give more information about your "
406
- "images. Use our bulk image tool to quickly check and fix that."
 
 
 
407
  msgstr ""
408
- "Nous vous recommandons de compléter les le textes alternatif et les titres d'images. L'avantage c'est que cela permet aux moteur de recherche d'indexer vos images et apporte plus de contenu à vos pages. utilisez l'outil d'édition par lot pour aller plus vite! "
 
 
 
409
 
410
- msgid "It is highly recommended to update or add new content on your website quite frequently. At least 3 updated or new content per month would be great :)"
411
- msgstr "Il est fortement recommandé de mettre à jour ou d'ajouter du contenu sur votre site pour être mieux référencé. Au moins 3 mises à jour ou ajout de contenu par mois serait parfait :)"
 
 
 
 
 
412
 
413
  msgid "Social networks meta"
414
  msgstr "Meta réseaux sociaux"
@@ -449,17 +550,26 @@ msgstr "Parfait! image optimisée"
449
  msgid "The default card type to use"
450
  msgstr "Type de Twitter card"
451
 
452
- msgid "Be careful you installed 2 extensions doing almost the same thing, please deactivate AIOSEO or Yoast in order to work more clearly!"
453
- msgstr "Attention plusieurs plugins sont susceptibles d'effectuer les même tâches, essayez de désactiver AIO SEO ou Yoast SEO"
 
 
 
 
454
 
455
- msgid "We have found that you’re using All In One Pack Plugin, WP Meta SEO can import the meta from this plugin, %s"
456
- msgstr "Vous utilisez actuellement All In One SEO Plugin, WP Meta SEO put importer les données de ce plugin pour vous, %s"
 
 
 
 
457
 
458
  msgid "Name is existing"
459
  msgstr "Ce nom existe déjà"
460
 
461
  msgid "We found 0 image which needed to add or change meta information"
462
- msgstr "Nous n'avons pas trouvé d'images qui nécessite l'ajout ou l'édition des meta"
 
463
 
464
  msgid "The post is not existed, please choose one another!"
465
  msgstr "Ce post n'existe pas, merci d'un sélectionner un autre"
@@ -476,7 +586,9 @@ msgstr "Erreur lors de la mise à jour des meta"
476
  msgid "The post has been deleted before, please check again!"
477
  msgstr "Ce contenu a été supprimé, merci de recharger la page"
478
 
479
- msgid " This is a rendering of what this post might look like in Google's search results."
 
 
480
  msgstr "Prévisualisation des résultats de recherche Google"
481
 
482
  msgid "This post is not existed or deleted, please choose one another!"
@@ -503,8 +615,10 @@ msgstr "Mot clés enregistrés"
503
  msgid "Force SEO validation"
504
  msgstr "Forcer validation SEO"
505
 
506
- msgid "Allow user to force on page SEO criteria validation by clicking on the icon"
507
- msgstr "Autoriser la validation forcée des critères SEO dans l'analyse des pages"
 
 
508
 
509
  msgid "Meta keywords"
510
  msgstr "Mot clés"
@@ -521,8 +635,13 @@ msgstr "Ajouter un champ titre dans l'outil d'édition de lien"
521
  msgid "Link titles"
522
  msgstr "Titres lien"
523
 
524
- msgid "The link title attribute does not have any SEO value for links. BUT links titles can influence click behavior for users, which may indirectly affect your SEO performance"
525
- msgstr "Les titres des liens n'ont pas d'impact direct sur le SEO MAIS cela peut influencer le comportement des utilisateurs en les incitant a cliquer dessus"
 
 
 
 
 
526
 
527
  msgid "Links title completed"
528
  msgstr "Titre de lien ajouté"
@@ -545,26 +664,56 @@ msgstr "Titre liens"
545
  msgid "Link text"
546
  msgstr "Text lien"
547
 
548
- msgid "Link Meta"
549
- msgstr "Meta lien"
550
 
551
  msgid "Meta title as page title"
552
  msgstr "Meta titre vers titre page"
553
 
554
- msgid "When meta title is filled use it as page title instead of the content title"
555
- msgstr "Lorsque le meta titre est rempli, l'utiliser plutôt que le titre du contenu"
 
 
556
 
557
- msgid "It’s better using a permalink structure that is adding in your URL the category name and content title. This parameter can be changed in Settings > Permalinks WordPress menu. Tag recommended is %category%/%postname%"
558
- msgstr "Il est conseillé d'utiliser une structure d'URL qui inclus le nom de la catégorie et le titre du contenu. Ce paramètre peut être changé dans Paramètres > Permaliens. Le tag recommandé est %category%/%postname%"
 
 
 
 
 
 
559
 
560
- msgid "Meta descriptions are displayed in search engine results as a page description. It’s a good thing for SEO to have some custom and attractive ones. Be sure to fill at least the meta information on your most popular pages."
561
- msgstr "Les meta descriptions sont affichées dans les résultats de recherche si ils sont jugés pertinents. Il est bon pour avoir un taux de clics élevé d'en rédiger des attractifs. Assurez vous de les compléter au moins pour vos principales pages."
 
 
 
 
 
 
 
 
562
 
563
- msgid "Meta titles are displayed in search engine results as a page title. It’s a good thing for SEO to have some custom and attractive ones. Be sure to fill at least the met information on your most popular pages"
564
- msgstr "Les meta titres sont affichées dans les résultats de recherche. Il est bon pour avoir un taux de clics élevé d'en rédiger des attractifs. Assurez vous de les compléter au moins pour vos principales pages."
 
 
 
 
 
 
565
 
566
- msgid "A website with a bunch of 404 errors doesn’t provide a good user experience, which is significantly important in content marketing and SEO. We recommend to use our internal broken link checker and redirect tool to fix all the 404 error you can periodically."
567
- msgstr "Un site web qui contient beaucoup d'erreur 404 donne une mauvaise expérience d'utilisation, ce qui est très dommageable pour le marketing et le SEO. Nous vous recommandons de corriger le maximum d'erreur en faisant des redirections pertinentes."
 
 
 
 
 
 
 
 
568
 
569
  msgid "Index internal broken links"
570
  msgstr "Indexer les liens brisés"
@@ -577,3 +726,68 @@ msgstr "Nombre de clic"
577
 
578
  msgid "Status"
579
  msgstr "Status"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  msgid "Twitter username (without @)"
15
  msgstr "ID Twitter (sans le @)"
16
 
17
+ msgid ""
18
+ "2 plugins that are doing almost the same thing detected: disable AIO SEO or "
19
+ "Yoast SEO to avoid conflict."
20
+ msgstr ""
21
+ "2 plugins sont présent et font tous les 2 du SEO: merci de désactiver AIO "
22
+ "SEO ou Yoast SEO pour éviter les conflits"
23
 
24
+ msgid ""
25
+ "We have found that you’re using All In One SEO plugin, WP Meta SEO can "
26
+ "import the meta from this plugin, %s"
27
+ msgstr ""
28
+ "Vous utilisez le plugin All in one SEO, nous pouvons importer les meta de "
29
+ "ce plugin pour vous, %s"
30
 
31
+ msgid ""
32
+ "We have found that you’re using Yoast SEO plugin, WP Meta SEO can import the "
33
+ "meta from this plugin, %s"
34
+ msgstr ""
35
+ "Vous utilisez le plugin Yoast SEO, nous pouvons importer les meta de ce "
36
+ "plugin pour vous, %s"
37
 
38
  msgid "Results preview"
39
  msgstr "Prévisualisation"
40
 
41
+ msgid ""
42
+ "This is a preview of what your content will looks like in search engine "
43
+ "results: title, description and URL"
44
  msgstr "Prévisualisation des résultats de recherche, titre, description et URL"
45
 
46
  msgid "Search engine title"
47
  msgstr "Titre"
48
 
49
+ msgid ""
50
+ "This is the title of your content that may be displayed in search engine "
51
+ "results (meta title). By default it’s the content title (page title, post "
52
+ "title…). 69 characters max allowed."
53
+ msgstr ""
54
+ "Ceci est le titre de votre contenu qui pourra être reprit par les moteurs de "
55
+ "recherche (meta title). Par défaut il s'agit du titre du contenu. 69 "
56
+ "caractères max"
57
 
58
  msgid "Search engine description"
59
  msgstr "Description"
60
 
61
+ msgid ""
62
+ "The description of your content that may be displayed in search engine "
63
+ "results aka meta description. By default search engine take an excerpt from "
64
+ "your content (depending on the search query). 156 characters max allowed."
65
+ msgstr ""
66
+ "Ceci est la description de votre contenu qui pourra être reprit par les "
67
+ "moteurs de recherche (meta description). Par défaut il s'agit d'un extrait "
68
+ "de votre contenu.156 caractères max"
69
 
70
  msgid "Facebook Title"
71
  msgstr "Titre facebook"
72
 
73
+ msgid ""
74
+ "Custom title to display when sharing this content on facebook, content title "
75
+ "override"
76
  msgstr "Titre customisé lors du partage de ce contenu sur Facebook"
77
 
78
  msgid "Facebook Description"
79
  msgstr "Description Facebook"
80
 
81
+ msgid ""
82
+ "Custom description to display when sharing this content on facebook, content "
83
+ "description override"
84
  msgstr "Description customisé lors du partage de ce contenu sur Facebook"
85
 
86
  msgid "Facebook Image"
87
  msgstr "Image Facebook"
88
 
89
+ msgid ""
90
+ "Custom image to display when sharing this content on facebook, content "
91
+ "description override, recommended size is 1200px x 630px"
92
+ msgstr ""
93
+ "Image customisé lors du partage de ce contenu sur Facebook, taille "
94
+ "recommandée 1200px x 630px"
95
 
96
  msgid "Twitter Title"
97
  msgstr "Titre Twitter"
98
 
99
+ msgid ""
100
+ "Custom title to display when sharing this content on twitter, content title "
101
+ "override"
102
  msgstr "Titre customisé lors du partage de ce contenu sur Twitter"
103
 
104
  msgid "Twitter Description"
105
  msgstr "Description Twitter"
106
 
107
+ msgid ""
108
+ "Custom description to display when sharing this content on twitter, content "
109
+ "description override"
110
  msgstr "Description customisé lors du partage de ce contenu sur Twitter"
111
 
112
  msgid "Twitter Image"
113
  msgstr "Image Twitter"
114
 
115
+ msgid ""
116
+ "Custom image to display when sharing this content on facebook, content "
117
+ "description override, recommended min size 440px X 220px"
118
+ msgstr ""
119
+ "Image customisé lors du partage de ce contenu sur Twitter, taille "
120
+ "recommandée 440px x 220px"
121
 
122
  msgid "Use Image"
123
  msgstr "Utiliser image"
200
  msgid "Filter"
201
  msgstr "Filtrer"
202
 
203
+ msgid ""
204
+ "We didn't find any image which needed to be updated regarding meta "
205
+ "information"
206
+ msgstr ""
207
+ "Nous n'avons trouvé aucune image qui ont besoin d'être optimisé pour le SEO"
208
 
209
  msgid "This image has still not been inserted in any post!"
210
  msgstr "Cette image n'a été ajouté dans aucun de vos contenus"
252
  msgstr "Le contenu est vide, merci de revérifier"
253
 
254
  msgid "We can't get traffic rank from Alexa for this website"
255
+ msgstr ""
256
+ "Nous n'avons pas assez d'info (de trafic) Alexa pour avoir le \"Traffic Rank"
257
+ "\""
258
 
259
  msgid "Meta Title"
260
  msgstr "Meta titre"
277
  msgid "Preview"
278
  msgstr "Prévisualiser"
279
 
280
+ msgid ""
281
+ "This is a preview of what this content might looks like in Google's search "
282
+ "results."
283
+ msgstr ""
284
+ "Prévisualisation de ce à quoi votre contenu peut ressembler dans les "
285
+ "résultats de recherche"
286
 
287
  msgid "Snippet Preview %s"
288
  msgstr "Prévisualisation %s"
314
  msgid "Content meta"
315
  msgstr "Contenu meta"
316
 
317
+ msgid "Image information"
318
+ msgstr "Image information"
319
 
320
  msgid "Settings"
321
  msgstr "Paramètres"
330
  msgstr "Bien joué ! Image remise à la bonne taille !"
331
 
332
  msgid "Oops! An error occured when updating the post, please try again"
333
+ msgstr ""
334
+ "Oups! Une erreur est survenue durant la mise à jour du post, merci de "
335
+ "réessayer"
336
 
337
  msgid "Resize image"
338
  msgstr "Redimensionner image"
391
  msgid "Image name as image title"
392
  msgstr "Nom image > titre d'image"
393
 
394
+ msgid ""
395
+ "Warning, you're about to replace existing image alt or tile content, are you "
396
+ "sire about that?"
397
+ msgstr ""
398
+ "Vous êtes sur le point de remplacer des attributs de vos images, vous êtes "
399
+ "sûr ?"
400
 
401
  msgid "Twitter card type "
402
  msgstr "Type Twitter card"
425
  msgid "Other plugins from JoomUnited"
426
  msgstr "Autres plugin de JoomUnited"
427
 
428
+ msgid ""
429
+ "Check if a word of this content title is also in a title heading (h1, h2...)"
430
+ msgstr ""
431
+ "Vérifie si un mot du titre de page est aussi présent dans un titre du "
432
+ "contenu (h1, h2...)"
433
 
434
  msgid "Check if a word of this content title is also in the text"
435
+ msgstr ""
436
+ "Vérifie si un mot du titre de page est aussi présent dans le contenu texte"
437
 
438
  msgid "Does the page title match with the permalink (URL structure)"
439
  msgstr "Vérifie si le titre de page correspond à l'URL (permalien)"
444
  msgid "Is the meta description of this page filled?"
445
  msgstr "Est-ce que les meta description sont complétés?"
446
 
447
+ msgid ""
448
+ "Check for image HTML resizing in content (usually image resized using "
449
+ "handles)"
450
+ msgstr ""
451
+ "Vérifie si des images sont redimensionnées en HTML (habituellement en "
452
+ "utilisant les poignées)"
453
 
454
  msgid "Check for image Alt text and title"
455
  msgstr "Vérifie si les textes alt and titre d'images sont remplis"
456
 
457
+ msgid ""
458
+ "It's better using a permalink structure that is adding in your URL the "
459
+ "category name and content title. This parameter can be changed in Settings > "
460
+ "Permalinks WordPress menu. Tag recommended is %category%/%postname%"
461
+ msgstr ""
462
+ "Il est préférable d'utiliser des URL dont le nom de la catégorie et le titre "
463
+ "de page sont en clair. Ce paramètre peut être modifié depuis le menu "
464
+ "Paramètres > Permaliens. Le tag recommandé est %category%/%postname%"
465
 
466
+ msgid ""
467
+ "Meta titles are displayed in search engine results as a page title. It's a "
468
+ "good thing for SEO to have some custom and attractive ones. Be sure to fill "
469
+ "at least the met information on your most popular pages"
470
+ msgstr ""
471
+ "Les titres Meta sont affichés dans les résultats de recherche comme titre de "
472
+ "page. C'est une bonne chose de mettre des titres accrocheurs pour avoir un "
473
+ "plus grand nombre de clics."
474
 
475
+ msgid ""
476
+ "Meta descriptions are displayed in search engine results as a page "
477
+ "description. It's a good thing for SEO to have some custom and attractive "
478
+ "ones. Be sure to fill at least the meta information on your most popular "
479
+ "pages."
480
+ msgstr ""
481
+ "Les Meta descroption sont affichés dans les résultats de recherche comme "
482
+ "description de page. C'est une bonne chose de mettre des descriptions "
483
+ "accrocheuses pour avoir un plus grand nombre de clics."
484
 
485
+ msgid ""
486
+ "Display image at its natural size, do not use HTML resize. It happens "
487
+ "usually when you use handles to resize an image. You have a bulk edition "
488
+ "tool to fix that."
489
+ msgstr ""
490
+ "Utilisez des images à leur taille naturelle, pas en les redimensionnant en "
491
+ "HTML (avec les poignées). Avec WP Meta SEO, vous disposez d'un outil pour "
492
+ "corriger cela"
493
 
494
  msgid ""
495
+ "We recommend to use both alt text and image title. The main advantage is "
496
+ "that it helps search engines discover your images and display them in image "
497
+ "search results. Plus, these tags improve the accessibility of your site and "
498
+ "give more information about your images. Use our bulk image tool to quickly "
499
+ "check and fix that."
500
  msgstr ""
501
+ "Nous vous recommandons de compléter les le textes alternatif et les titres "
502
+ "d'images. L'avantage c'est que cela permet aux moteur de recherche d'indexer "
503
+ "vos images et apporte plus de contenu à vos pages. utilisez l'outil "
504
+ "d'édition par lot pour aller plus vite! "
505
 
506
+ msgid ""
507
+ "It is highly recommended to update or add new content on your website quite "
508
+ "frequently. At least 3 updated or new content per month would be great :)"
509
+ msgstr ""
510
+ "Il est fortement recommandé de mettre à jour ou d'ajouter du contenu sur "
511
+ "votre site pour être mieux référencé. Au moins 3 mises à jour ou ajout de "
512
+ "contenu par mois serait parfait :)"
513
 
514
  msgid "Social networks meta"
515
  msgstr "Meta réseaux sociaux"
550
  msgid "The default card type to use"
551
  msgstr "Type de Twitter card"
552
 
553
+ msgid ""
554
+ "Be careful you installed 2 extensions doing almost the same thing, please "
555
+ "deactivate AIOSEO or Yoast in order to work more clearly!"
556
+ msgstr ""
557
+ "Attention plusieurs plugins sont susceptibles d'effectuer les même tâches, "
558
+ "essayez de désactiver AIO SEO ou Yoast SEO"
559
 
560
+ msgid ""
561
+ "We have found that you’re using All In One Pack Plugin, WP Meta SEO can "
562
+ "import the meta from this plugin, %s"
563
+ msgstr ""
564
+ "Vous utilisez actuellement All In One SEO Plugin, WP Meta SEO put importer "
565
+ "les données de ce plugin pour vous, %s"
566
 
567
  msgid "Name is existing"
568
  msgstr "Ce nom existe déjà"
569
 
570
  msgid "We found 0 image which needed to add or change meta information"
571
+ msgstr ""
572
+ "Nous n'avons pas trouvé d'images qui nécessite l'ajout ou l'édition des meta"
573
 
574
  msgid "The post is not existed, please choose one another!"
575
  msgstr "Ce post n'existe pas, merci d'un sélectionner un autre"
586
  msgid "The post has been deleted before, please check again!"
587
  msgstr "Ce contenu a été supprimé, merci de recharger la page"
588
 
589
+ msgid ""
590
+ " This is a rendering of what this post might look like in Google's search "
591
+ "results."
592
  msgstr "Prévisualisation des résultats de recherche Google"
593
 
594
  msgid "This post is not existed or deleted, please choose one another!"
615
  msgid "Force SEO validation"
616
  msgstr "Forcer validation SEO"
617
 
618
+ msgid ""
619
+ "Allow user to force on page SEO criteria validation by clicking on the icon"
620
+ msgstr ""
621
+ "Autoriser la validation forcée des critères SEO dans l'analyse des pages"
622
 
623
  msgid "Meta keywords"
624
  msgstr "Mot clés"
635
  msgid "Link titles"
636
  msgstr "Titres lien"
637
 
638
+ msgid ""
639
+ "The link title attribute does not have any SEO value for links. BUT links "
640
+ "titles can influence click behavior for users, which may indirectly affect "
641
+ "your SEO performance"
642
+ msgstr ""
643
+ "Les titres des liens n'ont pas d'impact direct sur le SEO MAIS cela peut "
644
+ "influencer le comportement des utilisateurs en les incitant a cliquer dessus"
645
 
646
  msgid "Links title completed"
647
  msgstr "Titre de lien ajouté"
664
  msgid "Link text"
665
  msgstr "Text lien"
666
 
667
+ msgid "Link editor"
668
+ msgstr "Link editor"
669
 
670
  msgid "Meta title as page title"
671
  msgstr "Meta titre vers titre page"
672
 
673
+ msgid ""
674
+ "When meta title is filled use it as page title instead of the content title"
675
+ msgstr ""
676
+ "Lorsque le meta titre est rempli, l'utiliser plutôt que le titre du contenu"
677
 
678
+ msgid ""
679
+ "It’s better using a permalink structure that is adding in your URL the "
680
+ "category name and content title. This parameter can be changed in Settings > "
681
+ "Permalinks WordPress menu. Tag recommended is %category%/%postname%"
682
+ msgstr ""
683
+ "Il est conseillé d'utiliser une structure d'URL qui inclus le nom de la "
684
+ "catégorie et le titre du contenu. Ce paramètre peut être changé dans "
685
+ "Paramètres > Permaliens. Le tag recommandé est %category%/%postname%"
686
 
687
+ msgid ""
688
+ "Meta descriptions are displayed in search engine results as a page "
689
+ "description. It’s a good thing for SEO to have some custom and attractive "
690
+ "ones. Be sure to fill at least the meta information on your most popular "
691
+ "pages."
692
+ msgstr ""
693
+ "Les meta descriptions sont affichées dans les résultats de recherche si ils "
694
+ "sont jugés pertinents. Il est bon pour avoir un taux de clics élevé d'en "
695
+ "rédiger des attractifs. Assurez vous de les compléter au moins pour vos "
696
+ "principales pages."
697
 
698
+ msgid ""
699
+ "Meta titles are displayed in search engine results as a page title. It’s a "
700
+ "good thing for SEO to have some custom and attractive ones. Be sure to fill "
701
+ "at least the met information on your most popular pages"
702
+ msgstr ""
703
+ "Les meta titres sont affichées dans les résultats de recherche. Il est bon "
704
+ "pour avoir un taux de clics élevé d'en rédiger des attractifs. Assurez vous "
705
+ "de les compléter au moins pour vos principales pages."
706
 
707
+ msgid ""
708
+ "A website with a bunch of 404 errors doesn’t provide a good user experience, "
709
+ "which is significantly important in content marketing and SEO. We recommend "
710
+ "to use our internal broken link checker and redirect tool to fix all the 404 "
711
+ "error you can periodically."
712
+ msgstr ""
713
+ "Un site web qui contient beaucoup d'erreur 404 donne une mauvaise expérience "
714
+ "d'utilisation, ce qui est très dommageable pour le marketing et le SEO. Nous "
715
+ "vous recommandons de corriger le maximum d'erreur en faisant des "
716
+ "redirections pertinentes."
717
 
718
  msgid "Index internal broken links"
719
  msgstr "Indexer les liens brisés"
726
 
727
  msgid "Status"
728
  msgstr "Status"
729
+
730
+ msgid ""
731
+ "Allow search engines robots to index this content, as default your content "
732
+ "is indexed"
733
+ msgstr "Autoriser les moteurs de recherche à indexer ce contenu"
734
+
735
+ msgid ""
736
+ "Provides show or do not show this page in search results in search results."
737
+ msgstr "Afficher ou pas cette page dans les résultats des moteurs de recherche"
738
+
739
+ msgid "Index"
740
+ msgstr "Index"
741
+
742
+ msgid "Follow"
743
+ msgstr "Follow"
744
+
745
+ msgid "Re-index content links"
746
+ msgstr "Re-indexer liens"
747
+
748
+ msgid "Apply"
749
+ msgstr "Appliquer"
750
+
751
+ msgid "-- Selection --"
752
+ msgstr "-- Selection --"
753
+
754
+ msgid "Follow selected"
755
+ msgstr "Follow sélection"
756
+
757
+ msgid "Nofollow selected"
758
+ msgstr "Nofollow sélection"
759
+
760
+ msgid "Follow all"
761
+ msgstr "Follow tous"
762
+
763
+ msgid "Nofollow all"
764
+ msgstr "Nofollow tous"
765
+
766
+ msgid "Link source"
767
+ msgstr "Source lien"
768
+
769
+ msgid "Internal"
770
+ msgstr "Interne"
771
+
772
+ msgid "External"
773
+ msgstr "Externe"
774
+
775
+ msgid "Post/Page follow"
776
+ msgstr "Article/Page follow"
777
+
778
+ msgid "Post/Page index"
779
+ msgstr "Article/Page index"
780
+
781
+ msgid "Use ImageRecycle image compression plugin to activate this feature"
782
+ msgstr ""
783
+ "Activation : l'installation du plugin de compression d'image ImageRecycle "
784
+ "est nécessaire"
785
+
786
+ msgid ""
787
+ "Images represent around 60% of a web page weight. An image compression "
788
+ "reduce the image size by up to 70% while preserving the same visual quality. "
789
+ "Small loading time is great for SEO!"
790
+ msgstr ""
791
+ "Les images représentent en moyenne 60% du poids d'une page web. Une "
792
+ "compression sans perte de qualité réduit de manière importante le poids de "
793
+ "votre page, parfait pour le référencement !"
languages/wp-meta-seo.pot CHANGED
@@ -265,7 +265,7 @@ msgstr ""
265
  msgid "Content meta"
266
  msgstr ""
267
 
268
- msgid "Image meta"
269
  msgstr ""
270
 
271
  msgid "Settings"
@@ -544,7 +544,7 @@ msgstr ""
544
  msgid "Link text"
545
  msgstr ""
546
 
547
- msgid "Link Meta"
548
  msgstr ""
549
 
550
  msgid "Meta title as page title"
@@ -575,4 +575,58 @@ msgid "Hits number"
575
  msgstr ""
576
 
577
  msgid "Status"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
578
  msgstr ""
265
  msgid "Content meta"
266
  msgstr ""
267
 
268
+ msgid "Image information"
269
  msgstr ""
270
 
271
  msgid "Settings"
544
  msgid "Link text"
545
  msgstr ""
546
 
547
+ msgid "Link editor"
548
  msgstr ""
549
 
550
  msgid "Meta title as page title"
575
  msgstr ""
576
 
577
  msgid "Status"
578
+ msgstr ""
579
+
580
+ msgid "Allow search engines robots to index this content, as default your content is indexed"
581
+ msgstr ""
582
+
583
+ msgid "Provides show or do not show this page in search results in search results."
584
+ msgstr ""
585
+
586
+ msgid "Index"
587
+ msgstr ""
588
+
589
+ msgid "Follow"
590
+ msgstr ""
591
+
592
+ msgid "Re-index content links"
593
+ msgstr ""
594
+
595
+ msgid "Apply"
596
+ msgstr ""
597
+
598
+ msgid "-- Selection --"
599
+ msgstr ""
600
+
601
+ msgid "Follow selected"
602
+ msgstr ""
603
+
604
+ msgid "Nofollow selected"
605
+ msgstr ""
606
+
607
+ msgid "Follow all"
608
+ msgstr ""
609
+
610
+ msgid "Nofollow all"
611
+ msgstr ""
612
+
613
+ msgid "Link source"
614
+ msgstr ""
615
+
616
+ msgid "Internal"
617
+ msgstr ""
618
+
619
+ msgid "External"
620
+ msgstr ""
621
+
622
+ msgid "Post/Page follow"
623
+ msgstr ""
624
+
625
+ msgid "Post/Page index"
626
+ msgstr ""
627
+
628
+ msgid "Use ImageRecycle image compression plugin to activate this feature"
629
+ msgstr ""
630
+
631
+ msgid "Images represent around 60% of a web page weight. An image compression reduce the image size by up to 70% while preserving the same visual quality. Small loading time is great for SEO!"
632
  msgstr ""
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: JoomUnited
3
  Tags: google, webmaster tools, keywords, meta, meta description, meta keywords, meta title, robots meta, search engine optimization, seo, wordpress seo, yahoo, image optimization, image resize, custom post seo, redirect, redirection, 301, broken link
4
  Requires at least: 4.0
5
- Tested up to: 4.5.0
6
- Stable tag: 2.1.0
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
@@ -112,6 +112,8 @@ The redirect manager will help you to fix all types of 404 errors you can encoun
112
  * Check for SEO error: is robot.txt blocking search engine
113
  * Bulk edit SEO link title in your content
114
  * Add SEO link title box in editor link manager
 
 
115
  * Page title display as content title or SEO meta title
116
 
117
  = Main plugins from JoomUnited: =
@@ -203,6 +205,12 @@ This manual SEO validation on click on the reload analysis button.
203
 
204
  == Changelog ==
205
 
 
 
 
 
 
 
206
  = 2.1.0 =
207
  * Add ImageRecycle images and PDF compression integration (www.imagerecycle.com)
208
 
2
  Contributors: JoomUnited
3
  Tags: google, webmaster tools, keywords, meta, meta description, meta keywords, meta title, robots meta, search engine optimization, seo, wordpress seo, yahoo, image optimization, image resize, custom post seo, redirect, redirection, 301, broken link
4
  Requires at least: 4.0
5
+ Tested up to: 4.5.1
6
+ Stable tag: 2.2.0
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
112
  * Check for SEO error: is robot.txt blocking search engine
113
  * Bulk edit SEO link title in your content
114
  * Add SEO link title box in editor link manager
115
+ * Follow/Nofollow bulk link edition
116
+ * Follow/Nofollow on Wordpress content
117
  * Page title display as content title or SEO meta title
118
 
119
  = Main plugins from JoomUnited: =
205
 
206
  == Changelog ==
207
 
208
+ = 2.2.0 =
209
+ * Follow/Nofollow bulk link edition
210
+ * Link re-index tool from the bulk link editor
211
+ * Follow/Nofollow on Wordpress content (onpage SEO)
212
+ * Index/Noindex on Wordpress content (onpage SEO)
213
+
214
  = 2.1.0 =
215
  * Add ImageRecycle images and PDF compression integration (www.imagerecycle.com)
216
 
wp-meta-seo.php CHANGED
@@ -4,7 +4,7 @@
4
  * Plugin Name: WP Meta SEO
5
  * Plugin URI: http://www.joomunited.com/wordpress-products/wp-meta-seo
6
  * Description: WP Meta SEO is a plugin for WordPress to fill meta for content, images and main SEO info in a single view.
7
- * Version: 2.1.0
8
  * Text Domain: wp-meta-seo
9
  * Domain Path: /languages
10
  * Author: JoomUnited
@@ -47,7 +47,7 @@ if (!defined('URL'))
47
  define('URL', get_site_url());
48
 
49
  if (!defined('WPMSEO_VERSION')) {
50
- define('WPMSEO_VERSION', '2.0.3');
51
  }
52
 
53
  if (!defined('WPMSEO_FILE'))
@@ -107,6 +107,8 @@ if (is_admin()) {
107
  }else{
108
  $meta_keywords_esc = '';
109
  }
 
 
110
 
111
  // get meta description
112
  $meta_description = get_post_meta($wp_query->post->ID, '_metaseo_metadesc', true);
@@ -148,14 +150,14 @@ if (is_admin()) {
148
  $meta_twitter_site = get_user_meta($wp_query->post->post_author,'mtwitter',true);
149
  $facebook_admin = get_user_meta($wp_query->post->post_author,'mfacebook',true);
150
 
151
- $metaseo_settings = get_option( '_metaseo_settings' );
152
- if($metaseo_settings){
153
- if($meta_twitter_site == '' && $metaseo_settings['metaseo_showtwitter'] != ''){
154
- $meta_twitter_site = $metaseo_settings['metaseo_showtwitter'];
155
  }
156
 
157
- if($facebook_admin == '' && $metaseo_settings['metaseo_showfacebook'] != ''){
158
- $facebook_admin = $metaseo_settings['metaseo_showfacebook'];
159
  }
160
  }
161
 
@@ -188,9 +190,13 @@ if (is_admin()) {
188
  if($settings['metaseo_desc_home'] == ''){
189
  $meta_description_esc = $meta_twitter_desc = $meta_facebook_desc = esc_attr(get_bloginfo('description'));
190
  }
 
 
191
  }elseif($mshow_on_front == 'page'){ // is page posts
192
  $meta_title = $meta_title_esc = $meta_twitter_title = $meta_facebook_title = esc_attr(get_post_meta($mpage_for_posts, '_metaseo_metatitle', true));
193
  $meta_description = $meta_description_esc = $meta_twitter_desc = $meta_facebook_desc = esc_attr(get_post_meta($mpage_for_posts, '_metaseo_metadesc', true));
 
 
194
  }
195
  }
196
 
@@ -198,14 +204,20 @@ if (is_admin()) {
198
  if(is_front_page()){
199
  $meta_title = $meta_title_esc = $meta_twitter_title = $meta_facebook_title = esc_attr(get_post_meta($mpage_on_front, '_metaseo_metatitle', true));
200
  $meta_description = $meta_description_esc = $meta_twitter_desc = $meta_facebook_desc = esc_attr(get_post_meta($mpage_on_front, '_metaseo_metadesc', true));
 
 
201
  }
202
 
203
  if ( is_category() || is_tag() || is_tax() ) {
204
  $term = $wp_query->get_queried_object();
205
  $meta_title = $meta_title_esc = $meta_facebook_title = $meta_twitter_title = esc_attr($term->name);
206
  $meta_description_esc = $meta_facebook_desc = $meta_twitter_desc = esc_attr($term->description);
 
207
  }
208
- $current_url = esc_url($_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
 
 
 
209
  $patterns = array(
210
  'twitter_image' => array(
211
  '#<meta name="twitter:image" [^<>]+ ?>#i',
@@ -268,9 +280,19 @@ if (is_admin()) {
268
  'title' => array(
269
  '#<meta name="title" [^<>]+ ?>#i',
270
  '<meta name="title" content="' . $meta_title_esc . '" />',
271
- ($meta_title_esc != '' ? true : false)),
272
  );
273
 
 
 
 
 
 
 
 
 
 
 
274
  if(get_post_meta($wp_query->post->ID, '_metaseo_metatitle', true) != ''){
275
  $patterns['title'] = array(
276
  '#<meta name="title" [^<>]+ ?>#i',
4
  * Plugin Name: WP Meta SEO
5
  * Plugin URI: http://www.joomunited.com/wordpress-products/wp-meta-seo
6
  * Description: WP Meta SEO is a plugin for WordPress to fill meta for content, images and main SEO info in a single view.
7
+ * Version: 2.2.0
8
  * Text Domain: wp-meta-seo
9
  * Domain Path: /languages
10
  * Author: JoomUnited
47
  define('URL', get_site_url());
48
 
49
  if (!defined('WPMSEO_VERSION')) {
50
+ define('WPMSEO_VERSION', '2.2.0');
51
  }
52
 
53
  if (!defined('WPMSEO_FILE'))
107
  }else{
108
  $meta_keywords_esc = '';
109
  }
110
+ $page_follow = get_post_meta($wp_query->post->ID,'_metaseo_metafollow',true);
111
+ $page_index = get_post_meta($wp_query->post->ID,'_metaseo_metaindex',true);
112
 
113
  // get meta description
114
  $meta_description = get_post_meta($wp_query->post->ID, '_metaseo_metadesc', true);
150
  $meta_twitter_site = get_user_meta($wp_query->post->post_author,'mtwitter',true);
151
  $facebook_admin = get_user_meta($wp_query->post->post_author,'mfacebook',true);
152
 
153
+ $settings = get_option( '_metaseo_settings' );
154
+ if($settings){
155
+ if($meta_twitter_site == '' && $settings['metaseo_showtwitter'] != ''){
156
+ $meta_twitter_site = $settings['metaseo_showtwitter'];
157
  }
158
 
159
+ if($facebook_admin == '' && $settings['metaseo_showfacebook'] != ''){
160
+ $facebook_admin = $settings['metaseo_showfacebook'];
161
  }
162
  }
163
 
190
  if($settings['metaseo_desc_home'] == ''){
191
  $meta_description_esc = $meta_twitter_desc = $meta_facebook_desc = esc_attr(get_bloginfo('description'));
192
  }
193
+ $page_follow = 'follow';
194
+ $page_index = 'index';
195
  }elseif($mshow_on_front == 'page'){ // is page posts
196
  $meta_title = $meta_title_esc = $meta_twitter_title = $meta_facebook_title = esc_attr(get_post_meta($mpage_for_posts, '_metaseo_metatitle', true));
197
  $meta_description = $meta_description_esc = $meta_twitter_desc = $meta_facebook_desc = esc_attr(get_post_meta($mpage_for_posts, '_metaseo_metadesc', true));
198
+ $page_follow = get_post_meta($mpage_for_posts,'_metaseo_metafollow',true);
199
+ $page_index = get_post_meta($mpage_for_posts,'_metaseo_metaindex',true);
200
  }
201
  }
202
 
204
  if(is_front_page()){
205
  $meta_title = $meta_title_esc = $meta_twitter_title = $meta_facebook_title = esc_attr(get_post_meta($mpage_on_front, '_metaseo_metatitle', true));
206
  $meta_description = $meta_description_esc = $meta_twitter_desc = $meta_facebook_desc = esc_attr(get_post_meta($mpage_on_front, '_metaseo_metadesc', true));
207
+ $page_follow = get_post_meta($mpage_on_front,'_metaseo_metafollow',true);
208
+ $page_index = get_post_meta($mpage_on_front,'_metaseo_metaindex',true);
209
  }
210
 
211
  if ( is_category() || is_tag() || is_tax() ) {
212
  $term = $wp_query->get_queried_object();
213
  $meta_title = $meta_title_esc = $meta_facebook_title = $meta_twitter_title = esc_attr($term->name);
214
  $meta_description_esc = $meta_facebook_desc = $meta_twitter_desc = esc_attr($term->description);
215
+ $page_follow = 'follow';
216
  }
217
+
218
+ $current_url = 'http' . (isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) ? 's' : '') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
219
+ $current_url = esc_url($current_url);
220
+
221
  $patterns = array(
222
  'twitter_image' => array(
223
  '#<meta name="twitter:image" [^<>]+ ?>#i',
280
  'title' => array(
281
  '#<meta name="title" [^<>]+ ?>#i',
282
  '<meta name="title" content="' . $meta_title_esc . '" />',
283
+ ($meta_title_esc != '' ? true : false))
284
  );
285
 
286
+ if(empty($page_index)) $page_index = 'index';
287
+ if(empty($page_follow)) $page_follow = 'follow';
288
+
289
+ if(!empty($settings['metaseo_follow'])){
290
+ $patterns['follow'] = array(
291
+ '#<meta name="robots" [^<>]+ ?>#i',
292
+ '<meta name="robots" content="'.$page_index.','.$page_follow.'" />'
293
+ );
294
+ }
295
+
296
  if(get_post_meta($wp_query->post->ID, '_metaseo_metatitle', true) != ''){
297
  $patterns['title'] = array(
298
  '#<meta name="title" [^<>]+ ?>#i',