WP Meta SEO - Version 1.6.0

Version Description

  • Add meta keywords edition in bulk editor
  • Add option to for SEO criteria validation
Download this release

Release Info

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

Code changes from version 1.5.1 to 1.6.0

css/metabox-tabs.css CHANGED
@@ -435,7 +435,7 @@ div.wpmseo-tab-content {
435
  position: relative;
436
  }
437
 
438
- #metaseo_wpmseo_desc-length,#metaseo_wpmseo_title-length{
439
  position: absolute;
440
  left: 20px;
441
  bottom: 12px;
@@ -448,7 +448,7 @@ div.wpmseo-tab-content {
448
  padding: 0px 10px;
449
  }
450
 
451
- #metaseo_wpmseo_desc-length.length-wrong,#metaseo_wpmseo_title-length.length-wrong{
452
  background: none repeat scroll 0% 0% #FFCC00;
453
  }
454
 
435
  position: relative;
436
  }
437
 
438
+ #metaseo_wpmseo_desc-length,#metaseo_wpmseo_title-length,#metaseo_wpmseo_keywords-length{
439
  position: absolute;
440
  left: 20px;
441
  bottom: 12px;
448
  padding: 0px 10px;
449
  }
450
 
451
+ #metaseo_wpmseo_desc-length.length-wrong,#metaseo_wpmseo_title-length.length-wrong,#metaseo_wpmseo_keywords-length.length-wrong{
452
  background: none repeat scroll 0% 0% #FFCC00;
453
  }
454
 
css/metaseo_admin.css CHANGED
@@ -20,7 +20,7 @@ and open the template in the editor.
20
  width: 30%;
21
  }
22
 
23
- .title-len, .desc-len, .word-exceed {
24
  color: #FFF;
25
  border-radius: 2px;
26
  min-width: 15px;
@@ -32,7 +32,7 @@ and open the template in the editor.
32
  left: 15px;
33
  }
34
 
35
- .title-len, .desc-len {
36
  background: none repeat scroll 0% 0% #7ad03a;
37
 
38
  }
@@ -137,7 +137,7 @@ a.info-content .tooltip-metacontent
137
  padding:4px 6px;
138
  }
139
  .action-wrapper{
140
- width:38%;
141
  float:left;
142
  }
143
  .snippet-wrapper{
20
  width: 30%;
21
  }
22
 
23
+ .title-len, .desc-len, .word-exceed , .keywords-len {
24
  color: #FFF;
25
  border-radius: 2px;
26
  min-width: 15px;
32
  left: 15px;
33
  }
34
 
35
+ .title-len, .desc-len, .keywords-len {
36
  background: none repeat scroll 0% 0% #7ad03a;
37
 
38
  }
137
  padding:4px 6px;
138
  }
139
  .action-wrapper{
140
+ /* width:38%;*/
141
  float:left;
142
  }
143
  .snippet-wrapper{
inc/class.metaseo-admin.php CHANGED
@@ -15,8 +15,10 @@ class MetaSeo_Admin {
15
  "metaseo_showfacebook"=>"",
16
  "metaseo_showtwitter"=>"",
17
  "metaseo_twitter_card"=>"summary",
 
18
  "metaseo_showtmetablock"=>1,
19
- "metaseo_showsocial" => 1
 
20
  );
21
  $settings = get_option( '_metaseo_settings' );
22
 
@@ -44,7 +46,6 @@ class MetaSeo_Admin {
44
  add_action( 'admin_init', array($this, 'stop_heartbeat') , 1 );
45
  add_action('admin_init', array($this,'metaseo_field_settings'));
46
  add_action('init', array($this,'wpms_load_langguage'));
47
- add_action('wp_ajax_metaseo_reload_analysis',array($this,'metaseo_reload_analysis'));
48
 
49
  if(!get_option('wpms_set_ignore', false)){
50
  add_option('wpms_set_ignore', 1, '', 'yes' );
@@ -52,7 +53,7 @@ class MetaSeo_Admin {
52
 
53
  add_action('wp_ajax_wpms_set_ignore',array($this,'wpms_set_ignore'));
54
  if ( '0' == get_option( 'blog_public' )) {
55
- add_action( 'admin_footer', array( $this, 'wpms_public_warning' ) );
56
  }
57
  }
58
 
@@ -102,6 +103,12 @@ class MetaSeo_Admin {
102
  load_plugin_textdomain( 'wpms', false, dirname( plugin_basename( WPMSEO_FILE ) ) . '/languages/' );
103
  }
104
 
 
 
 
 
 
 
105
  function metaseo_reload_analysis() {
106
  $tooltip_page = array();
107
  $tooltip_page['title_in_heading'] = __('Check if a word of this content title is also in a title heading (h1, h2...)','wpms');
@@ -111,10 +118,14 @@ class MetaSeo_Admin {
111
  $tooltip_page['meta_desc'] = __('Is the meta description of this page filled?','wpms');
112
  $tooltip_page['image_resize'] = __('Check for image HTML resizing in content (usually image resized using handles)','wpms');
113
  $tooltip_page['image_alt'] = __('Check for image Alt text and title','wpms');
114
-
115
  if(empty($_POST['datas'])){
116
  wp_send_json(false);
117
  }
 
 
 
 
 
118
  $check = 0;
119
  $output = '';
120
  // title heading
@@ -135,14 +146,14 @@ class MetaSeo_Admin {
135
  }
136
 
137
  if($test){
138
- $output .= '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['title_in_heading'].'"><div class="metaseo-dashicons dashicons-before dashicons-yes"></div>'.__('Page title word in content heading','wpms').'</div>';
139
  $check ++;
140
  }else{
141
- $output .= '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['title_in_heading'].'"><div class="metaseo-dashicons dashicons-before icons-mwarning"></div>'.__('Page title word in content heading','wpms').'</div>';
142
  }
143
 
144
  }else{
145
- $output .= '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['title_in_heading'].'"><div class="metaseo-dashicons dashicons-before dashicons-yes"></div>'.__('Page title word in content heading','wpms').'</div>';
146
  $check ++;
147
  }
148
 
@@ -163,41 +174,41 @@ class MetaSeo_Admin {
163
  }
164
 
165
  if($test1){
166
- $output .= '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['title_in_content'].'"><div class="metaseo-dashicons dashicons-before dashicons-yes"></div>'.__('Page title word in content','wpms').'</div>';
167
  $check ++;
168
  }else{
169
- $output .= '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['title_in_content'].'"><div class="metaseo-dashicons dashicons-before icons-mwarning"></div>'.__('Page title word in content','wpms').'</div>';
170
  }
171
 
172
  // page url matches page title
173
  $mtitle = $_POST['datas']['title'];
174
  if($_POST['datas']['mpageurl'] == sanitize_title($mtitle)){
175
- $output .= '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['page_url'].'"><div class="metaseo-dashicons dashicons-before dashicons-yes"></div>'.__('Page url matches with page title','wpms').'</div>';
176
  $check ++;
177
  }else{
178
- $output .= '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['page_url'].'"><div class="metaseo-dashicons dashicons-before icons-mwarning"></div>'.__('Page url matches with page title','wpms').'</div>';
179
  }
180
 
181
  // meta title filled
182
- if($_POST['datas']['meta_title'] != '' && strlen($_POST['datas']['meta_title']) <= self::$title_length){
183
- $output .= '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['meta_title'].'"><div class="metaseo-dashicons dashicons-before dashicons-yes"></div>'.__('Meta title filled','wpms').'</div>';
184
  $check++;
185
  }else{
186
- $output .= '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['meta_title'].'"><div class="metaseo-dashicons dashicons-before icons-mwarning"></div>'.__('Meta title filled','wpms').'</div>';
187
  }
188
 
189
  // desc filled
190
- if($_POST['datas']['meta_desc'] != '' && strlen($_POST['datas']['meta_desc']) <= self::$desc_length){
191
- $output .= '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['meta_desc'].'"><div class="metaseo-dashicons dashicons-before dashicons-yes"></div>'.__('Meta description filled','wpms').'</div>';
192
  $check++;
193
  }else{
194
- $output .= '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['meta_desc'].'"><div class="metaseo-dashicons dashicons-before icons-mwarning"></div>'.__('Meta description filled','wpms').'</div>';
195
  }
196
 
197
  // image resize
198
  if($_POST['datas']['content'] == '') {
199
- $output .= '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['image_resize'].'"><div class="metaseo-dashicons dashicons-before dashicons-yes"></div>'.__('Wrong image resize','wpms').'</div>';
200
- $output .= '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['image_alt'].'"><div class="metaseo-dashicons dashicons-before dashicons-yes"></div>'.__('Image have meta title or alt','wpms').'</div>';
201
  $check += 2;
202
  }else{
203
  $dom = new DOMDocument;
@@ -225,29 +236,42 @@ class MetaSeo_Admin {
225
  $img_wrong_alt = true;
226
  }
227
  }
228
-
229
- if($img_wrong){
230
- $output .= '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['image_resize'].'"><div class="metaseo-dashicons dashicons-before icons-mwarning"></div>'.__('Wrong image resize','wpms').'</div>';
231
- }else{
232
- $output .= '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['image_resize'].'"><div class="metaseo-dashicons dashicons-before dashicons-yes"></div>'.__('Wrong image resize','wpms').'</div>';
233
  $check++;
 
 
234
  }
235
 
236
- if($img_wrong_alt){
237
- $output .= '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['image_alt'].'"><div class="metaseo-dashicons dashicons-before icons-mwarning"></div>'.__('Image have meta title or alt','wpms').'</div>';
238
- }else{
239
- $output .= '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['image_alt'].'"><div class="metaseo-dashicons dashicons-before dashicons-yes"></div>'.__('Image have meta title or alt','wpms').'</div>';
240
  $check++;
 
 
241
  }
242
-
243
  }else{
244
- $output .= '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['image_resize'].'"><div class="metaseo-dashicons dashicons-before icons-mwarning"></div>'.__('Wrong image resize','wpms').'</div>';
 
245
  }
246
  }
247
 
248
  $circliful = ceil(100*($check)/7);
249
- wp_send_json(array('circliful' => $circliful,'output' => $output));
 
 
 
 
 
 
 
 
 
 
250
 
 
 
 
251
  }
252
 
253
  function metaseo_field_settings(){
@@ -258,8 +282,10 @@ class MetaSeo_Admin {
258
  add_settings_field('metaseo_showfacebook', __('Facebook profile URL', 'wpms'), array( $this, 'showfacebook' ), 'metaseo_settings', 'metaseo_dashboard');
259
  add_settings_field('metaseo_showtwitter', __('Twitter Username', 'wpms'), array( $this, 'showtwitter' ), 'metaseo_settings', 'metaseo_dashboard');
260
  add_settings_field('metaseo_twitter_card', __('The default card type to use', 'wpms'), array( $this, 'showtwittercard' ), 'metaseo_settings', 'metaseo_dashboard');
 
261
  add_settings_field('metaseo_showtmetablock', __('Meta block edition', 'wpms'), array( $this, 'showtmetablock' ), 'metaseo_settings', 'metaseo_dashboard');
262
  add_settings_field('metaseo_showsocial', __('Social networks meta', 'wpms'), array( $this, 'showsocial' ), 'metaseo_settings', 'metaseo_dashboard');
 
263
  }
264
 
265
  public function showSettings(){
@@ -276,6 +302,14 @@ class MetaSeo_Admin {
276
  echo '<input id="metaseo_desc_home" name="_metaseo_settings[metaseo_desc_home]" type="text" value="'.esc_attr( $home_desc ).'" size="50"/>';
277
  }
278
 
 
 
 
 
 
 
 
 
279
  public function showtmetablock(){
280
  echo '<input name="_metaseo_settings[metaseo_showtmetablock]" type="hidden" value="0"/>';
281
  ?>
@@ -292,6 +326,14 @@ class MetaSeo_Admin {
292
  <?php
293
  }
294
 
 
 
 
 
 
 
 
 
295
  public function showfacebook(){
296
  $face = isset( $this->settings['metaseo_showfacebook'] ) ? $this->settings['metaseo_showfacebook'] : '';
297
  echo '<input id="metaseo_showfacebook" name="_metaseo_settings[metaseo_showfacebook]" type="text" value="'.esc_attr( $face ).'" size="50"/>';
@@ -348,31 +390,40 @@ class MetaSeo_Admin {
348
  // wp_die();
349
  // }
350
 
351
- $response->msg = __('Modification was saved', 'wpms') ;
352
- if($metakey == 'metatitle') {
353
- if(!update_post_meta($postID, '_metaseo_metatitle', $value)) {
354
- $response->updated = false;
355
- $response->msg = __('Meta title was not saved', 'wpms') ;
356
- }
357
- else{
358
- $response->updated = true;
359
- $response->msg = __('Meta title was saved', 'wpms') ;
360
- }
361
- }
362
-
363
- if($metakey =='metadesc') {
364
- if(!update_post_meta($postID, '_metaseo_metadesc', $value)) {
365
- $response->updated = false;
366
- $response->msg = __('Meta description was not saved', 'wpms') ;
367
- }
368
- else{
369
- $response->updated = true;
370
  $response->msg = __('Meta description was saved', 'wpms') ;
371
- }
372
- }
373
-
374
- echo json_encode($response);
375
- wp_die();
 
 
 
 
 
 
 
 
 
 
376
  }
377
 
378
  /**
@@ -422,9 +473,9 @@ class MetaSeo_Admin {
422
  *
423
  */
424
  function addAdminStylesheets() {
425
- wp_enqueue_style('wpmetaseoAdmin', plugins_url('css/metaseo_admin.css', dirname(__FILE__)));
426
- wp_enqueue_style('tooltip-metaimage', plugins_url('/css/tooltip-metaimage.css',dirname(__FILE__)));
427
- wp_enqueue_style('style', plugins_url('/css/style.css', dirname(__FILE__) ) );
428
  }
429
 
430
  function register_menu_page() {
@@ -725,23 +776,25 @@ class MetaSeo_Admin {
725
  }
726
 
727
  private function ajaxHandle(){
728
- //
729
- add_action( 'wp_ajax_scanPosts', array('MetaSeo_Image_List_Table', 'scan_posts_callback') );
730
- add_action( 'wp_ajax_load_posts', array('MetaSeo_Image_List_Table', 'load_posts_callback') );
731
- add_action( 'wp_ajax_optimize_imgs', array('MetaSeo_Image_List_Table', 'optimizeImages') );
732
- add_action( 'wp_ajax_updateMeta', array('MetaSeo_Image_List_Table', 'updateMeta_callback') );
733
- //add_action( 'wp_ajax_opt_checking', array('MetaSeo_Dashboard', 'optimizationChecking') );
734
- //
735
- add_action( 'wp_ajax_import_meta_data', array('MetaSeo_Content_List_Table', 'importMetaData') );
736
- add_action( 'wp_ajax_dismiss_import_meta', array('MetaSeo_Content_List_Table', 'dismissImport') );
737
- add_action('wp_ajax_wpms_bulk_post_copy',array($this,'wpms_bulk_post_copy_title'));
738
- add_action('wp_ajax_wpms_bulk_image_copy',array($this,'wpms_bulk_image_copy'));
739
-
740
- //
741
- add_action( 'added_post_meta' , array( 'MetaSeo_Content_List_Table', 'updateMetaSync' ), 99, 4);
742
- add_action( 'updated_post_meta', array( 'MetaSeo_Content_List_Table', 'updateMetaSync' ), 99, 4);
743
- add_action( 'deleted_post_meta', array( 'MetaSeo_Content_List_Table', 'deleteMetaSync' ), 99, 4);
744
-
 
 
745
  }
746
 
747
  }
15
  "metaseo_showfacebook"=>"",
16
  "metaseo_showtwitter"=>"",
17
  "metaseo_twitter_card"=>"summary",
18
+ "metaseo_showkeywords"=>0,
19
  "metaseo_showtmetablock"=>1,
20
+ "metaseo_showsocial" => 1,
21
+ "metaseo_seovalidate" => 0
22
  );
23
  $settings = get_option( '_metaseo_settings' );
24
 
46
  add_action( 'admin_init', array($this, 'stop_heartbeat') , 1 );
47
  add_action('admin_init', array($this,'metaseo_field_settings'));
48
  add_action('init', array($this,'wpms_load_langguage'));
 
49
 
50
  if(!get_option('wpms_set_ignore', false)){
51
  add_option('wpms_set_ignore', 1, '', 'yes' );
53
 
54
  add_action('wp_ajax_wpms_set_ignore',array($this,'wpms_set_ignore'));
55
  if ( '0' == get_option( 'blog_public' )) {
56
+ add_action( 'admin_notices', array( $this, 'wpms_public_warning' ) );
57
  }
58
  }
59
 
103
  load_plugin_textdomain( 'wpms', false, dirname( plugin_basename( WPMSEO_FILE ) ) . '/languages/' );
104
  }
105
 
106
+ function metaseo_create_field($data_title,$alt,$dashicon,$label,$value_hidden){
107
+ $output = '<div class="metaseo_analysis metaseo_tool 123" data-title="'.$data_title.'" alt="'.$alt.'"><div class="metaseo-dashicons dashicons-before '.$dashicon.'"></div>'.$label.'</div>';
108
+ $output .= '<input type="hidden" class="wpms_analysis_hidden" name="wpms['.$data_title.']" value="'.$value_hidden.'">';
109
+ return $output;
110
+ }
111
+
112
  function metaseo_reload_analysis() {
113
  $tooltip_page = array();
114
  $tooltip_page['title_in_heading'] = __('Check if a word of this content title is also in a title heading (h1, h2...)','wpms');
118
  $tooltip_page['meta_desc'] = __('Is the meta description of this page filled?','wpms');
119
  $tooltip_page['image_resize'] = __('Check for image HTML resizing in content (usually image resized using handles)','wpms');
120
  $tooltip_page['image_alt'] = __('Check for image Alt text and title','wpms');
 
121
  if(empty($_POST['datas'])){
122
  wp_send_json(false);
123
  }
124
+
125
+ if(isset($_POST['datas']['post_id'])){
126
+ update_post_meta($_POST['datas']['post_id'], 'wpms_validate_analysis', '');
127
+ }
128
+
129
  $check = 0;
130
  $output = '';
131
  // title heading
146
  }
147
 
148
  if($test){
149
+ $output .= $this->metaseo_create_field('heading_title',$tooltip_page['title_in_heading'],'dashicons-yes',__('Page title word in content heading','wpms'),1);
150
  $check ++;
151
  }else{
152
+ $output .= $this->metaseo_create_field('heading_title',$tooltip_page['title_in_heading'],'icons-mwarning',__('Page title word in content heading','wpms'),0);
153
  }
154
 
155
  }else{
156
+ $output .= $this->metaseo_create_field('heading_title',$tooltip_page['title_in_heading'],'dashicons-yes',__('Page title word in content heading','wpms'),1);
157
  $check ++;
158
  }
159
 
174
  }
175
 
176
  if($test1){
177
+ $output .= $this->metaseo_create_field('content_title',$tooltip_page['title_in_content'],'dashicons-yes',__('Page title word in content','wpms'),1);
178
  $check ++;
179
  }else{
180
+ $output .= $this->metaseo_create_field('content_title',$tooltip_page['title_in_content'],'icons-mwarning',__('Page title word in content','wpms'),0);
181
  }
182
 
183
  // page url matches page title
184
  $mtitle = $_POST['datas']['title'];
185
  if($_POST['datas']['mpageurl'] == sanitize_title($mtitle)){
186
+ $output .= $this->metaseo_create_field('pageurl',$tooltip_page['page_url'],'dashicons-yes',__('Page url matches with page title','wpms'),1);
187
  $check ++;
188
  }else{
189
+ $output .= $this->metaseo_create_field('pageurl',$tooltip_page['page_url'],'icons-mwarning',__('Page url matches with page title','wpms'),0);
190
  }
191
 
192
  // meta title filled
193
+ if(($_POST['datas']['meta_title'] != '' && strlen($_POST['datas']['meta_title']) <= self::$title_length)){
194
+ $output .= $this->metaseo_create_field('metatitle',$tooltip_page['meta_title'],'dashicons-yes',__('Meta title filled','wpms'),1);
195
  $check++;
196
  }else{
197
+ $output .= $this->metaseo_create_field('metatitle',$tooltip_page['meta_title'],'icons-mwarning',__('Meta title filled','wpms'),0);
198
  }
199
 
200
  // desc filled
201
+ if(($_POST['datas']['meta_desc'] != '' && strlen($_POST['datas']['meta_desc']) <= self::$desc_length)){
202
+ $output .= $this->metaseo_create_field('metadesc',$tooltip_page['meta_desc'],'dashicons-yes',__('Meta description filled','wpms'),1);
203
  $check++;
204
  }else{
205
+ $output .= $this->metaseo_create_field('metadesc',$tooltip_page['meta_desc'],'icons-mwarning',__('Meta description filled','wpms'),0);
206
  }
207
 
208
  // image resize
209
  if($_POST['datas']['content'] == '') {
210
+ $output .= $this->metaseo_create_field('imgresize',$tooltip_page['image_resize'],'dashicons-yes',__('Wrong image resize','wpms'),1);
211
+ $output .= $this->metaseo_create_field('imgalt',$tooltip_page['image_alt'],'dashicons-yes',__('Image have meta title or alt','wpms'),1);
212
  $check += 2;
213
  }else{
214
  $dom = new DOMDocument;
236
  $img_wrong_alt = true;
237
  }
238
  }
239
+
240
+ if($img_wrong == false){
241
+ $output .= $this->metaseo_create_field('imgresize',$tooltip_page['image_resize'],'dashicons-yes',__('Wrong image resize','wpms'),1);
 
 
242
  $check++;
243
+ }else{
244
+ $output .= $this->metaseo_create_field('imgresize',$tooltip_page['image_resize'],'icons-mwarning',__('Wrong image resize','wpms'),0);
245
  }
246
 
247
+ if($img_wrong_alt == false){
248
+ $output .= $this->metaseo_create_field('imgalt',$tooltip_page['image_alt'],'dashicons-yes',__('Image have meta title or alt','wpms'),1);
 
 
249
  $check++;
250
+ }else{
251
+ $output .= $this->metaseo_create_field('imgalt',$tooltip_page['image_alt'],'icons-mwarning',__('Image have meta title or alt','wpms'),0);
252
  }
 
253
  }else{
254
+ $output .= $this->metaseo_create_field('imgresize',$tooltip_page['image_resize'],'icons-mwarning',__('Wrong image resize','wpms'),0);
255
+ $output .= $this->metaseo_create_field('imgalt',$tooltip_page['image_alt'],'icons-mwarning',__('Image have meta title or alt','wpms'),0);
256
  }
257
  }
258
 
259
  $circliful = ceil(100*($check)/7);
260
+ wp_send_json(array('circliful' => $circliful,'output' => $output ,'check' => $check));
261
+
262
+ }
263
+
264
+ function metaseo_validate_analysis(){
265
+ $post_id = $_POST['post_id'];
266
+ $key = 'wpms_validate_analysis';
267
+ $analysis = get_post_meta($post_id, $key,true);
268
+ if(empty($analysis) ) {
269
+ $analysis = array();
270
+ }
271
 
272
+ $analysis[$_POST['field']] = 1;
273
+ update_post_meta($post_id, $key, $analysis);
274
+ wp_send_json(true);
275
  }
276
 
277
  function metaseo_field_settings(){
282
  add_settings_field('metaseo_showfacebook', __('Facebook profile URL', 'wpms'), array( $this, 'showfacebook' ), 'metaseo_settings', 'metaseo_dashboard');
283
  add_settings_field('metaseo_showtwitter', __('Twitter Username', 'wpms'), array( $this, 'showtwitter' ), 'metaseo_settings', 'metaseo_dashboard');
284
  add_settings_field('metaseo_twitter_card', __('The default card type to use', 'wpms'), array( $this, 'showtwittercard' ), 'metaseo_settings', 'metaseo_dashboard');
285
+ add_settings_field('metaseo_showkeywords', __('Meta keywords', 'wpms'), array( $this, 'showkeywords' ), 'metaseo_settings', 'metaseo_dashboard');
286
  add_settings_field('metaseo_showtmetablock', __('Meta block edition', 'wpms'), array( $this, 'showtmetablock' ), 'metaseo_settings', 'metaseo_dashboard');
287
  add_settings_field('metaseo_showsocial', __('Social networks meta', 'wpms'), array( $this, 'showsocial' ), 'metaseo_settings', 'metaseo_dashboard');
288
+ add_settings_field('metaseo_seovalidate', __('Force SEO validation', 'wpms'), array( $this, 'showseovalidate' ), 'metaseo_settings', 'metaseo_dashboard');
289
  }
290
 
291
  public function showSettings(){
302
  echo '<input id="metaseo_desc_home" name="_metaseo_settings[metaseo_desc_home]" type="text" value="'.esc_attr( $home_desc ).'" size="50"/>';
303
  }
304
 
305
+ public function showkeywords(){
306
+ echo '<input name="_metaseo_settings[metaseo_showkeywords]" type="hidden" value="0"/>';
307
+ ?>
308
+ <label><input name="_metaseo_settings[metaseo_showkeywords]" type="checkbox" id="metaseo_showkeywords" value="1" <?php checked( 1, $this->settings['metaseo_showkeywords']); ?> />
309
+ <?php _e( 'Active meta keywords','wpms'); ?></label>
310
+ <?php
311
+ }
312
+
313
  public function showtmetablock(){
314
  echo '<input name="_metaseo_settings[metaseo_showtmetablock]" type="hidden" value="0"/>';
315
  ?>
326
  <?php
327
  }
328
 
329
+ public function showseovalidate(){
330
+ echo '<input name="_metaseo_settings[metaseo_seovalidate]" type="hidden" value="0"/>';
331
+ ?>
332
+ <label><input name="_metaseo_settings[metaseo_seovalidate]" type="checkbox" id="metaseo_seovalidate" value="1" <?php checked( 1, $this->settings['metaseo_seovalidate']); ?> />
333
+ <?php _e( 'Allow user to force on page SEO criteria validation by clicking on the icon','wpms' ); ?></label>
334
+ <?php
335
+ }
336
+
337
  public function showfacebook(){
338
  $face = isset( $this->settings['metaseo_showfacebook'] ) ? $this->settings['metaseo_showfacebook'] : '';
339
  echo '<input id="metaseo_showfacebook" name="_metaseo_settings[metaseo_showfacebook]" type="text" value="'.esc_attr( $face ).'" size="50"/>';
390
  // wp_die();
391
  // }
392
 
393
+ $response->msg = __('Modification was saved', 'wpms') ;
394
+ if($metakey == 'metatitle') {
395
+ if(!update_post_meta($postID, '_metaseo_metatitle', $value)) {
396
+ $response->updated = false;
397
+ $response->msg = __('Meta title was not saved', 'wpms') ;
398
+ }
399
+ else{
400
+ $response->updated = true;
401
+ $response->msg = __('Meta title was saved', 'wpms') ;
402
+ }
403
+ }
404
+
405
+ if($metakey =='metadesc') {
406
+ if(!update_post_meta($postID, '_metaseo_metadesc', $value)) {
407
+ $response->updated = false;
408
+ $response->msg = __('Meta description was not saved', 'wpms') ;
409
+ }else{
410
+ $response->updated = true;
 
411
  $response->msg = __('Meta description was saved', 'wpms') ;
412
+ }
413
+ }
414
+
415
+ if ($metakey == 'metakeywords') {
416
+ if (!update_post_meta($postID, '_metaseo_metakeywords', $value)) {
417
+ $response->updated = false;
418
+ $response->msg = __('Meta keywords was not saved', 'wpms');
419
+ } else {
420
+ $response->updated = true;
421
+ $response->msg = __('Meta keywords was saved', 'wpms');
422
+ }
423
+ }
424
+
425
+ echo json_encode($response);
426
+ wp_die();
427
  }
428
 
429
  /**
473
  *
474
  */
475
  function addAdminStylesheets() {
476
+ wp_enqueue_style('wpmetaseoAdmin', plugins_url('css/metaseo_admin.css', dirname(__FILE__)),array(), WPMSEO_VERSION);
477
+ wp_enqueue_style('tooltip-metaimage', plugins_url('/css/tooltip-metaimage.css',dirname(__FILE__)),array(), WPMSEO_VERSION);
478
+ wp_enqueue_style('style', plugins_url('/css/style.css', dirname(__FILE__) ),array(), WPMSEO_VERSION);
479
  }
480
 
481
  function register_menu_page() {
776
  }
777
 
778
  private function ajaxHandle(){
779
+ //
780
+ add_action( 'wp_ajax_scanPosts', array('MetaSeo_Image_List_Table', 'scan_posts_callback') );
781
+ add_action( 'wp_ajax_load_posts', array('MetaSeo_Image_List_Table', 'load_posts_callback') );
782
+ add_action( 'wp_ajax_optimize_imgs', array('MetaSeo_Image_List_Table', 'optimizeImages') );
783
+ add_action( 'wp_ajax_updateMeta', array('MetaSeo_Image_List_Table', 'updateMeta_callback') );
784
+ //add_action( 'wp_ajax_opt_checking', array('MetaSeo_Dashboard', 'optimizationChecking') );
785
+ //
786
+ add_action( 'wp_ajax_import_meta_data', array('MetaSeo_Content_List_Table', 'importMetaData') );
787
+ add_action( 'wp_ajax_dismiss_import_meta', array('MetaSeo_Content_List_Table', 'dismissImport') );
788
+ add_action('wp_ajax_wpms_bulk_post_copy',array($this,'wpms_bulk_post_copy_title'));
789
+ add_action('wp_ajax_wpms_bulk_image_copy',array($this,'wpms_bulk_image_copy'));
790
+
791
+ //
792
+ add_action( 'added_post_meta' , array( 'MetaSeo_Content_List_Table', 'updateMetaSync' ), 99, 4);
793
+ add_action( 'updated_post_meta', array( 'MetaSeo_Content_List_Table', 'updateMetaSync' ), 99, 4);
794
+ add_action( 'deleted_post_meta', array( 'MetaSeo_Content_List_Table', 'deleteMetaSync' ), 99, 4);
795
+
796
+ add_action('wp_ajax_metaseo_reload_analysis',array($this,'metaseo_reload_analysis'));
797
+ add_action('wp_ajax_metaseo_validate_analysis',array($this,'metaseo_validate_analysis'));
798
  }
799
 
800
  }
inc/class.metaseo-content-list-table.php CHANGED
@@ -137,9 +137,14 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
137
  'col_title' => __('Title', 'wpms'),
138
  'col_snippet' => sprintf(__('Snippet Preview %s', 'wpms'),$info),
139
  'col_meta_title' => __('Meta Title', 'wpms'),
140
- 'col_meta_desc' => __('Meta Description', 'wpms')
141
  );
142
- //$columns['col_snippet'] .= $info;
 
 
 
 
 
 
143
  return $columns;
144
  }
145
 
@@ -207,10 +212,11 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
207
  $orderStr =' ORDER BY ' . $orderStr;
208
  }
209
 
210
- $query = "SELECT ID, post_title, post_name, post_type, post_status , mt.meta_value AS metatitle, md.meta_value AS metadesc "
211
  . " FROM $wpdb->posts "
212
  . " LEFT JOIN (SELECT * FROM $wpdb->postmeta WHERE meta_key = '_metaseo_metatitle') mt ON mt.post_id = $wpdb->posts.ID "
213
  . " LEFT JOIN (SELECT * FROM $wpdb->postmeta WHERE meta_key = '_metaseo_metadesc') md ON md.post_id = $wpdb->posts.ID "
 
214
  . " WHERE ". implode(' AND ', $where) . $orderStr;
215
 
216
  $total_items = $wpdb->query($query);
@@ -355,6 +361,12 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
355
  $input .= sprintf('<div class="title-len" id="%1$s"></div>', 'metaseo-metatitle-len' . $rec->ID);
356
  echo sprintf('<td %2$s>%1$s</td>', $input, $attributes);
357
  break;
 
 
 
 
 
 
358
 
359
  case 'col_meta_desc':
360
  $input = sprintf('</br><textarea class="large-text metaseo-metadesc" rows="3" id="%1$s" name="%2$s" autocomplete="off">%3$s</textarea>', 'metaseo-metadesc-' . $rec->ID, ' metades['. $rec->ID.']', (($rec->metadesc ) ? $rec->metadesc : ''));
137
  'col_title' => __('Title', 'wpms'),
138
  'col_snippet' => sprintf(__('Snippet Preview %s', 'wpms'),$info),
139
  'col_meta_title' => __('Meta Title', 'wpms'),
 
140
  );
141
+
142
+ $settings = get_option( '_metaseo_settings' );
143
+ if(isset($settings['metaseo_showkeywords']) && $settings['metaseo_showkeywords'] == 1){
144
+ $columns['col_meta_keywords'] = __('Meta Keywords', 'wpms');
145
+ }
146
+ $columns['col_meta_desc'] = __('Meta Description', 'wpms');
147
+
148
  return $columns;
149
  }
150
 
212
  $orderStr =' ORDER BY ' . $orderStr;
213
  }
214
 
215
+ $query = "SELECT ID, post_title, post_name, post_type, post_status , mt.meta_value AS metatitle, md.meta_value AS metadesc ,mk.meta_value AS metakeywords "
216
  . " FROM $wpdb->posts "
217
  . " LEFT JOIN (SELECT * FROM $wpdb->postmeta WHERE meta_key = '_metaseo_metatitle') mt ON mt.post_id = $wpdb->posts.ID "
218
  . " LEFT JOIN (SELECT * FROM $wpdb->postmeta WHERE meta_key = '_metaseo_metadesc') md ON md.post_id = $wpdb->posts.ID "
219
+ . " LEFT JOIN (SELECT * FROM $wpdb->postmeta WHERE meta_key = '_metaseo_metakeywords') mk ON mk.post_id = $wpdb->posts.ID "
220
  . " WHERE ". implode(' AND ', $where) . $orderStr;
221
 
222
  $total_items = $wpdb->query($query);
361
  $input .= sprintf('<div class="title-len" id="%1$s"></div>', 'metaseo-metatitle-len' . $rec->ID);
362
  echo sprintf('<td %2$s>%1$s</td>', $input, $attributes);
363
  break;
364
+
365
+ case 'col_meta_keywords':
366
+ $input = sprintf('</br><textarea class="large-text metaseo-metakeywords" rows="3" id="%1$s" name="%2$s" autocomplete="off">%3$s</textarea>', 'metaseo-metakeywords-' . $rec->ID, 'metakeywords['. $rec->ID.']', ( ($rec->metakeywords ) ? $rec->metakeywords : ''));
367
+ $input .= sprintf('<div class="keywords-len" id="%1$s"></div>', 'metaseo-metakeywords-len' . $rec->ID);
368
+ echo sprintf('<td %2$s>%1$s</td>', $input, $attributes);
369
+ break;
370
 
371
  case 'col_meta_desc':
372
  $input = sprintf('</br><textarea class="large-text metaseo-metadesc" rows="3" id="%1$s" name="%2$s" autocomplete="off">%3$s</textarea>', 'metaseo-metadesc-' . $rec->ID, ' metades['. $rec->ID.']', (($rec->metadesc ) ? $rec->metadesc : ''));
inc/class.metaseo-dashboard.php CHANGED
@@ -31,9 +31,6 @@ class MetaSeo_Dashboard {
31
  $response = array(
32
  'imgs_statis' => array(0, 0),
33
  'imgs_metas_statis' => array(0, 0),
34
- 'meta_title_statis' => array(0, 0),
35
- 'meta_desc_statis' => array(0, 0),
36
- 'metacontent' => array(0, 0),
37
  );
38
  foreach ($meta_keys as $meta_key) {
39
  $imgs_metas_are_good[$meta_key] = 0;
@@ -54,6 +51,8 @@ class MetaSeo_Dashboard {
54
  $upload_dir = wp_upload_dir();
55
 
56
  foreach ($posts as $post) {
 
 
57
  $dom = $doc->loadHTML($post->post_content);
58
  $tags = $doc->getElementsByTagName('img');
59
  foreach ($tags as $tag) {
@@ -82,13 +81,12 @@ class MetaSeo_Dashboard {
82
  $width = $height * ($ratio_origin);
83
  }
84
 
85
- if ($real_width <= $width && $real_height <= $height) {
86
  $imgs_are_good++;
87
  }
88
-
89
  foreach ($meta_keys as $meta_key) {
90
 
91
- if (trim($tag->getAttribute($meta_key))) {
92
  $imgs_metas_are_good[$meta_key] ++;
93
  }
94
  }
@@ -97,7 +95,7 @@ class MetaSeo_Dashboard {
97
  $imgs++;
98
  }
99
  }
100
-
101
  //Report analytic of images optimization
102
  $response['imgs_statis'][0] = $imgs_are_good;
103
  $response['imgs_statis'][1] = $imgs;
@@ -105,40 +103,6 @@ class MetaSeo_Dashboard {
105
  $response['imgs_metas_statis'][1] = $imgs;
106
  }
107
 
108
- //Get number of post/page and number of images inserted into them
109
- $posts_counter = wp_count_posts('post');
110
- $pages_counter = wp_count_posts('page');
111
- $posts_pages_total = $posts_counter->publish + $pages_counter->publish;
112
- $response['meta_title_statis'][1] = $posts_pages_total;
113
- $response['meta_desc_statis'][1] = $posts_pages_total;
114
-
115
- $query = "SELECT `meta_key`, count( `meta_value` ) as total
116
- FROM $wpdb->postmeta
117
- WHERE `meta_key` = '_metaseo_metatitle' AND `meta_value` <> ''
118
- UNION (
119
- SELECT `meta_key`, count( `meta_value` ) as total
120
- FROM $wpdb->postmeta
121
- WHERE `meta_key` = '_metaseo_metadesc' AND `meta_value` <> ''
122
- )";
123
-
124
- $alias_names = array('_metaseo_metatitle' => 'meta_title_statis', '_metaseo_metadesc' => 'meta_desc_statis');
125
-
126
- $results = $wpdb->get_results($query);
127
- if (count($results) > 0) {
128
- $count_tt_desc = 0;
129
- foreach ($results as $result) {
130
- if ($result->meta_key === NULL) {
131
- continue;
132
- }
133
- //Report analytic of content meta
134
- $count_tt_desc +=(int) $result->total;
135
- $response[$alias_names[$result->meta_key]][0] = (int) $result->total;
136
- $response[$alias_names[$result->meta_key]][1] = $posts_pages_total;
137
- }
138
- $response['metacontent'][0] = ceil($count_tt_desc / 2);
139
- $response['metacontent'][1] = $posts_pages_total;
140
- }
141
-
142
  return $response;
143
  }
144
 
@@ -235,13 +199,16 @@ class MetaSeo_Dashboard {
235
  return $results;
236
  }else{
237
  foreach ($mposts as $post){
 
 
 
238
  $meta_title = get_post_meta($post->ID, '_metaseo_metatitle', true);
239
  $meta_desc = get_post_meta($post->ID, '_metaseo_metadesc', true);
240
- if($meta_title != '' && strlen($meta_title) <= self::$meta_title_length ){
241
  self::$metatitle_filled++;
242
  }
243
 
244
- if($meta_desc != '' && strlen($meta_desc) <= self::$meta_desc_length ){
245
  self::$metadesc_filled++;
246
  }
247
  }
31
  $response = array(
32
  'imgs_statis' => array(0, 0),
33
  'imgs_metas_statis' => array(0, 0),
 
 
 
34
  );
35
  foreach ($meta_keys as $meta_key) {
36
  $imgs_metas_are_good[$meta_key] = 0;
51
  $upload_dir = wp_upload_dir();
52
 
53
  foreach ($posts as $post) {
54
+ $meta_analysis = get_post_meta($post->ID, 'wpms_validate_analysis',true);
55
+ if(empty($meta_analysis)) $meta_analysis = array();
56
  $dom = $doc->loadHTML($post->post_content);
57
  $tags = $doc->getElementsByTagName('img');
58
  foreach ($tags as $tag) {
81
  $width = $height * ($ratio_origin);
82
  }
83
 
84
+ if (($real_width <= $width && $real_height <= $height) || (!empty($meta_analysis) && !empty($meta_analysis['imgresize']))) {
85
  $imgs_are_good++;
86
  }
 
87
  foreach ($meta_keys as $meta_key) {
88
 
89
+ if (trim($tag->getAttribute($meta_key)) || (!empty($meta_analysis) && !empty($meta_analysis['imgalt']))) {
90
  $imgs_metas_are_good[$meta_key] ++;
91
  }
92
  }
95
  $imgs++;
96
  }
97
  }
98
+
99
  //Report analytic of images optimization
100
  $response['imgs_statis'][0] = $imgs_are_good;
101
  $response['imgs_statis'][1] = $imgs;
103
  $response['imgs_metas_statis'][1] = $imgs;
104
  }
105
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
  return $response;
107
  }
108
 
199
  return $results;
200
  }else{
201
  foreach ($mposts as $post){
202
+ $meta_analysis = get_post_meta($post->ID, 'wpms_validate_analysis',true);
203
+ if(empty($meta_analysis)) $meta_analysis = array();
204
+
205
  $meta_title = get_post_meta($post->ID, '_metaseo_metatitle', true);
206
  $meta_desc = get_post_meta($post->ID, '_metaseo_metadesc', true);
207
+ if(($meta_title != '' && strlen($meta_title) <= self::$meta_title_length ) || (!empty($meta_analysis) && !empty($meta_analysis['metatitle']))){
208
  self::$metatitle_filled++;
209
  }
210
 
211
+ if(($meta_desc != '' && strlen($meta_desc) <= self::$meta_desc_length ) || (!empty($meta_analysis) && !empty($meta_analysis['metadesc'])) ){
212
  self::$metadesc_filled++;
213
  }
214
  }
inc/class.metaseo-meta.php CHANGED
@@ -6,7 +6,9 @@ class WPMSEO_Meta {
6
  public static $form_prefix = 'metaseo_wpmseo_';
7
  public static $meta_length = 156;
8
  public static $meta_title_length = 69;
 
9
  public static $meta_length_reason = '';
 
10
  public static $meta_fields = array(
11
  'general' => array(
12
  'snippetpreview' => array(
@@ -22,6 +24,14 @@ class WPMSEO_Meta {
22
  'help' => '', // Translation added later.
23
  'rows' => 2
24
  ),
 
 
 
 
 
 
 
 
25
  'desc' => array(
26
  'type' => 'textarea',
27
  'title' => '', // Translation added later.
6
  public static $form_prefix = 'metaseo_wpmseo_';
7
  public static $meta_length = 156;
8
  public static $meta_title_length = 69;
9
+ public static $meta_keywords_length = 256;
10
  public static $meta_length_reason = '';
11
+
12
  public static $meta_fields = array(
13
  'general' => array(
14
  'snippetpreview' => array(
24
  'help' => '', // Translation added later.
25
  'rows' => 2
26
  ),
27
+ 'keywords' => array(
28
+ 'type' => 'textarea',
29
+ 'title' => '', // Translation added later.
30
+ 'default_value' => '',
31
+ 'description' => '', // Translation added later.
32
+ 'help' => '', // Translation added later.
33
+ 'rows' => 2
34
+ ),
35
  'desc' => array(
36
  'type' => 'textarea',
37
  'title' => '', // Translation added later.
inc/class.metaseo-metabox.php CHANGED
@@ -60,6 +60,16 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
60
  self::$meta_fields['general']['title']['title'] = __('Search engine title', 'wpms');
61
  self::$meta_fields['general']['title']['description'] = sprintf(__('<span id="metaseo_wpmseo_title-length">%s</span>'),self::$meta_length_reason);
62
  self::$meta_fields['general']['title']['help'] = __('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.', 'wpms');
 
 
 
 
 
 
 
 
 
 
63
 
64
  self::$meta_fields['general']['desc']['title'] = __('Search engine description', 'wpms');
65
  self::$meta_fields['general']['desc']['description'] = sprintf(__('<span id="metaseo_wpmseo_desc-length">%s</span>'),self::$meta_length_reason);
@@ -115,12 +125,31 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
115
  wp_enqueue_script('metaseo-cliffpyles', plugins_url('js/cliffpyles.js', WPMSEO_FILE), array('jquery'),WPMSEO_VERSION, true);
116
  wp_localize_script('m-wp-seo-metabox', 'wpmseoMetaboxL10n', $this->meta_seo_localize_script());
117
  wp_localize_script( 'mwpseo-admin-media', 'wpmseoMediaL10n', $this->metaseo_localize_media_script() );
 
118
  }
119
  }
120
 
121
  public function metaseo_localize_media_script() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
122
  return array(
123
  'choose_image' => __( 'Use Image', 'wpms' ),
 
124
  );
125
  }
126
 
@@ -177,18 +206,26 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
177
  }
178
 
179
  $cached_replacement_vars['sitename'] = get_option('blogname');
180
- return array_merge($cached_replacement_vars, array(
181
  'field_prefix' => self::$form_prefix,
182
  'choose_image' => __('Use Image', 'wpms'),
183
  'wpmseo_meta_desc_length' => self::$meta_length,
184
  'wpmseo_meta_title_length' => self::$meta_title_length,
 
185
  'wpmseo_title_template' => $title_template,
186
  'wpmseo_desc_template' => $desc_template,
187
  'wpmseo_permalink_template' => $sample_permalink,
188
  'wpmseo_keyword_suggest_nonce' => wp_create_nonce('wpmseo-get-suggest'),
189
  'wpmseo_replace_vars_nonce' => wp_create_nonce('wpmseo-replace-vars'),
190
  'no_parent_text' => __('(no parent)', 'wpms'),
191
- ));
 
 
 
 
 
 
 
192
  }
193
 
194
  function is_metabox_hidden($post_type = null) {
@@ -279,7 +316,13 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
279
  echo '</div>';
280
  }
281
 
282
- function metaseo_check_headingtitle($post,$meta_title,$tooltip_page){
 
 
 
 
 
 
283
  if($meta_title != ''){
284
  $words_meta_title = preg_split('~[^\p{L}\p{N}\']+~u',strtolower($meta_title));//explode(' ' , strtolower($meta_title));
285
  $words_post_title = preg_split('~[^\p{L}\p{N}\']+~u',strtolower($post->post_title)); //explode(' ' , strtolower($post->post_title));
@@ -297,21 +340,21 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
297
  $test = false;
298
  }
299
 
300
- if($test){
301
- $output = '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['title_in_heading'].'"><div class="metaseo-dashicons dashicons-before dashicons-yes"></div>'.__('Page title word in content heading','wpms').'</div>';
302
  $this->perc_score++;
303
  }else{
304
- $output = '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['title_in_heading'].'"><div class="metaseo-dashicons dashicons-before icons-mwarning"></div>'.__('Page title word in content heading','wpms').'</div>';
305
  }
306
 
307
  }else{
308
- $output = '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['title_in_heading'].'"><div class="metaseo-dashicons dashicons-before dashicons-yes"></div>'.__('Page title word in content heading','wpms').'</div>';
309
  $this->perc_score++;
310
  }
311
  return $output;
312
  }
313
 
314
- function metaseo_check_content($post,$tooltip_page){
315
  $words_meta_title = preg_split('~[^\p{L}\p{N}\']+~u',strtolower($post->post_title));
316
  $words_post_content = preg_split('~[^\p{L}\p{N}\']+~u',strtolower($post->post_content));
317
  $test1 = false;
@@ -325,54 +368,54 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
325
  }else{
326
  $test1 = false;
327
  }
328
-
329
- if($test1){
330
- $output = '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['title_in_content'].'"><div class="metaseo-dashicons dashicons-before dashicons-yes"></div>'.__('Page title word in content','wpms').'</div>';
331
  $this->perc_score++;
332
  }else{
333
- $output = '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['title_in_content'].'"><div class="metaseo-dashicons dashicons-before icons-mwarning"></div>'.__('Page title word in content','wpms').'</div>';
334
  }
335
 
336
  return $output;
337
  }
338
 
339
- function metaseo_check_pageurl($post,$tooltip_page){
340
  $pageurl = get_permalink($post->ID);
341
  $info = pathinfo($pageurl);
342
 
343
- if($info['filename'] == sanitize_title($post->post_title)){
344
- $output = '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['page_url'].'"><div class="metaseo-dashicons dashicons-before dashicons-yes"></div>'.__('Page url matches with page title','wpms').'</div>';
345
  $this->perc_score++;
346
  }else{
347
- $output = '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['page_url'].'"><div class="metaseo-dashicons dashicons-before icons-mwarning"></div>'.__('Page url matches with page title','wpms').'</div>';
348
  }
349
 
350
  return $output;
351
  }
352
 
353
- function metaseo_check_metatitle($meta_title,$tooltip_page){
354
- if($meta_title != '' && strlen($meta_title) <= self::$meta_title_length){
355
- $output = '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['meta_title'].'"><div class="metaseo-dashicons dashicons-before dashicons-yes"></div>'.__('Meta title filled','wpms').'</div>';
356
  $this->perc_score++;
357
  }else{
358
- $output = '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['meta_title'].'"><div class="metaseo-dashicons dashicons-before icons-mwarning"></div>'.__('Meta title filled','wpms').'</div>';
359
  }
360
  return $output;
361
  }
362
 
363
- function metaseo_check_metadesc($meta_desc,$tooltip_page){
364
- if($meta_desc != '' && strlen($meta_desc) <= self::$meta_length){
365
- $output = '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['meta_desc'].'"><div class="metaseo-dashicons dashicons-before dashicons-yes"></div>'.__('Meta description filled','wpms').'</div>';
366
  $this->perc_score++;
367
  }else{
368
- $output = '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['meta_desc'].'"><div class="metaseo-dashicons dashicons-before icons-mwarning"></div>'.__('Meta description filled','wpms').'</div>';
369
  }
370
  return $output;
371
  }
372
 
373
- function metaseo_check_imageresize($content,$tooltip_page){
374
  if($content == '') {
375
- $output = '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['image_resize'].'"><div class="metaseo-dashicons dashicons-before dashicons-yes"></div>'.__('Wrong image resize','wpms').'</div>';
376
  $this->perc_score++;
377
  return $output;
378
  }
@@ -395,22 +438,22 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
395
  }
396
  }
397
 
398
- if($img_wrong){
399
- $output = '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['image_resize'].'"><div class="metaseo-dashicons dashicons-before icons-mwarning"></div>'.__('Wrong image resize','wpms').'</div>';
400
- }else{
401
- $output = '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['image_resize'].'"><div class="metaseo-dashicons dashicons-before dashicons-yes"></div>'.__('Wrong image resize','wpms').'</div>';
402
  $this->perc_score++;
 
 
403
  }
404
 
405
  }else{
406
- $output = '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['image_resize'].'"><div class="metaseo-dashicons dashicons-before icons-mwarning"></div>'.__('Wrong image resize','wpms').'</div>';
407
  }
408
  return $output;
409
  }
410
 
411
- function metaseo_check_imagealt($content,$tooltip_page){
412
  if($content == '') {
413
- $output = '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['image_alt'].'"><div class="metaseo-dashicons dashicons-before dashicons-yes"></div>'.__('Image have meta title or alt','wpms').'</div>';
414
  $this->perc_score++;
415
  return $output;
416
  }
@@ -428,15 +471,15 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
428
  }
429
  }
430
 
431
- if($img_wrong){
432
- $output = '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['image_alt'].'"><div class="metaseo-dashicons dashicons-before icons-mwarning"></div>'.__('Image have meta title or alt','wpms').'</div>';
433
- }else{
434
- $output = '<div class="metaseo_analysis metaseo_tool" alt="'.$tooltip_page['image_alt'].'"><div class="metaseo-dashicons dashicons-before dashicons-yes"></div>'.__('Image have meta title or alt','wpms').'</div>';
435
  $this->perc_score++;
 
 
436
  }
437
 
438
  }else{
439
- $output = '<div class="metaseo_analysis"><div class="metaseo-dashicons dashicons-before icons-mwarning"></div>'.__('Image have meta title or alt','wpms').'</div>';
440
  }
441
  return $output;
442
  }
@@ -453,24 +496,27 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
453
 
454
  $meta_title = get_post_meta($post->ID, '_metaseo_metatitle', true);
455
  $meta_desc = get_post_meta($post->ID, '_metaseo_metadesc', true);
456
- $headingtitle = $this->metaseo_check_headingtitle($post,$meta_title,$tooltip_page);
457
- $contenttitle = $this->metaseo_check_content($post,$tooltip_page);
458
- $output_pageurl = $this->metaseo_check_pageurl($post,$tooltip_page);
459
- $output_metatitle = $this->metaseo_check_metatitle($meta_title,$tooltip_page);
460
- $output_metadesc = $this->metaseo_check_metadesc($meta_desc,$tooltip_page);
461
- $output_imagewrong = $this->metaseo_check_imageresize($post->post_content,$tooltip_page);
462
- $output_imagealt = $this->metaseo_check_imagealt($post->post_content,$tooltip_page);
 
 
463
 
464
  $output = '';
465
  $circliful = ceil(100*($this->perc_score)/7);
466
  //$output .= '<div class="metaseo_right"><div id="metaseo_circliful"data-dimension="250" data-text="'.$circliful.'%" data-info="" data-width="20" data-fontsize="38" data-percent="'.$circliful.'" data-fgcolor="#7bd095" data-bgcolor="#e5e5e5" style="color:#7bd095" ></div><div>';
467
  $output .= '<div class="metaseo_left">
468
- <div class="metaseo-progress-bar">
469
  <canvas id="inactiveProgress" class="metaseo-progress-inactive" height="275px" width="275px"></canvas>
470
  <canvas id="activeProgress" class="metaseo-progress-active" height="275px" width="275px"></canvas>
471
  <p>0%</p>
472
  </div>
473
  <input type="hidden" id="progressController" value="'.$circliful.'" />
 
474
  </div>';
475
 
476
  $output .= '<div class="metaseo_right">';
60
  self::$meta_fields['general']['title']['title'] = __('Search engine title', 'wpms');
61
  self::$meta_fields['general']['title']['description'] = sprintf(__('<span id="metaseo_wpmseo_title-length">%s</span>'),self::$meta_length_reason);
62
  self::$meta_fields['general']['title']['help'] = __('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.', 'wpms');
63
+
64
+ $settings = get_option( '_metaseo_settings' );
65
+ if(isset($settings['metaseo_showkeywords']) && $settings['metaseo_showkeywords'] == 1){
66
+ self::$meta_fields['general']['keywords']['title'] = __('Search engine keywords', 'wpms');
67
+ self::$meta_fields['general']['keywords']['description'] = '<span id="metaseo_wpmseo_keywords-length"></span>';
68
+ self::$meta_fields['general']['keywords']['help'] = __('This is the keywords of your content that may be displayed in search engine results (meta keywords).', 'wpms');
69
+ }else{
70
+ unset(self::$meta_fields['general']['keywords']);
71
+ }
72
+
73
 
74
  self::$meta_fields['general']['desc']['title'] = __('Search engine description', 'wpms');
75
  self::$meta_fields['general']['desc']['description'] = sprintf(__('<span id="metaseo_wpmseo_desc-length">%s</span>'),self::$meta_length_reason);
125
  wp_enqueue_script('metaseo-cliffpyles', plugins_url('js/cliffpyles.js', WPMSEO_FILE), array('jquery'),WPMSEO_VERSION, true);
126
  wp_localize_script('m-wp-seo-metabox', 'wpmseoMetaboxL10n', $this->meta_seo_localize_script());
127
  wp_localize_script( 'mwpseo-admin-media', 'wpmseoMediaL10n', $this->metaseo_localize_media_script() );
128
+ wp_localize_script( 'metaseo-cliffpyles', 'wpmscliffpyles', $this->metaseo_localize_media_script() );
129
  }
130
  }
131
 
132
  public function metaseo_localize_media_script() {
133
+ $this->settings = array(
134
+ "metaseo_title_home"=>"",
135
+ "metaseo_desc_home"=>"",
136
+ "metaseo_showfacebook"=>"",
137
+ "metaseo_showtwitter"=>"",
138
+ "metaseo_twitter_card"=>"summary",
139
+ "metaseo_showkeywords"=>0,
140
+ "metaseo_showtmetablock"=>1,
141
+ "metaseo_showsocial" => 1,
142
+ "metaseo_seovalidate" => 0
143
+ );
144
+ $settings = get_option( '_metaseo_settings' );
145
+
146
+ if(is_array($settings)){
147
+ $this->settings = array_merge($this->settings, $settings);
148
+ }
149
+
150
  return array(
151
  'choose_image' => __( 'Use Image', 'wpms' ),
152
+ 'use_validate' => $this->settings['metaseo_seovalidate']
153
  );
154
  }
155
 
206
  }
207
 
208
  $cached_replacement_vars['sitename'] = get_option('blogname');
209
+ $array_keyword = array(
210
  'field_prefix' => self::$form_prefix,
211
  'choose_image' => __('Use Image', 'wpms'),
212
  'wpmseo_meta_desc_length' => self::$meta_length,
213
  'wpmseo_meta_title_length' => self::$meta_title_length,
214
+ 'wpmseo_meta_keywords_length' => self::$meta_keywords_length,
215
  'wpmseo_title_template' => $title_template,
216
  'wpmseo_desc_template' => $desc_template,
217
  'wpmseo_permalink_template' => $sample_permalink,
218
  'wpmseo_keyword_suggest_nonce' => wp_create_nonce('wpmseo-get-suggest'),
219
  'wpmseo_replace_vars_nonce' => wp_create_nonce('wpmseo-replace-vars'),
220
  'no_parent_text' => __('(no parent)', 'wpms'),
221
+ 'show_keywords' => 0
222
+ );
223
+ $settings = get_option( '_metaseo_settings' );
224
+ if(isset($settings['metaseo_showkeywords']) && $settings['metaseo_showkeywords'] == 1){
225
+ $array_keyword['show_keywords'] = 1;
226
+ }
227
+
228
+ return array_merge($cached_replacement_vars, $array_keyword);
229
  }
230
 
231
  function is_metabox_hidden($post_type = null) {
316
  echo '</div>';
317
  }
318
 
319
+ function metaseo_create_field($data_title,$alt,$dashicon,$label,$value_hidden){
320
+ $output = '<div class="metaseo_analysis metaseo_tool 123" data-title="'.$data_title.'" alt="'.$alt.'"><div class="metaseo-dashicons dashicons-before '.$dashicon.'"></div>'.$label.'</div>';
321
+ $output .= '<input type="hidden" class="wpms_analysis_hidden" name="wpms['.$data_title.']" value="'.$value_hidden.'">';
322
+ return $output;
323
+ }
324
+
325
+ function metaseo_check_headingtitle($post,$meta_title,$tooltip_page,$meta_analysis){
326
  if($meta_title != ''){
327
  $words_meta_title = preg_split('~[^\p{L}\p{N}\']+~u',strtolower($meta_title));//explode(' ' , strtolower($meta_title));
328
  $words_post_title = preg_split('~[^\p{L}\p{N}\']+~u',strtolower($post->post_title)); //explode(' ' , strtolower($post->post_title));
340
  $test = false;
341
  }
342
 
343
+ if($test || (!empty($meta_analysis) && !empty($meta_analysis['heading_title']))){
344
+ $output = $this->metaseo_create_field('heading_title',$tooltip_page['title_in_heading'],'dashicons-yes',__('Page title word in content heading','wpms'),1);
345
  $this->perc_score++;
346
  }else{
347
+ $output = $this->metaseo_create_field('heading_title',$tooltip_page['title_in_heading'],'icons-mwarning',__('Page title word in content heading','wpms'),0);
348
  }
349
 
350
  }else{
351
+ $output = $this->metaseo_create_field('heading_title',$tooltip_page['title_in_heading'],'dashicons-yes',__('Page title word in content heading','wpms'),1);
352
  $this->perc_score++;
353
  }
354
  return $output;
355
  }
356
 
357
+ function metaseo_check_content($post,$tooltip_page,$meta_analysis){
358
  $words_meta_title = preg_split('~[^\p{L}\p{N}\']+~u',strtolower($post->post_title));
359
  $words_post_content = preg_split('~[^\p{L}\p{N}\']+~u',strtolower($post->post_content));
360
  $test1 = false;
368
  }else{
369
  $test1 = false;
370
  }
371
+
372
+ if($test1 || (!empty($meta_analysis) && !empty($meta_analysis['content_title']))){
373
+ $output = $this->metaseo_create_field('content_title',$tooltip_page['title_in_content'],'dashicons-yes',__('Page title word in content','wpms'),1);
374
  $this->perc_score++;
375
  }else{
376
+ $output = $this->metaseo_create_field('content_title',$tooltip_page['title_in_content'],'icons-mwarning',__('Page title word in content','wpms'),0);
377
  }
378
 
379
  return $output;
380
  }
381
 
382
+ function metaseo_check_pageurl($post,$tooltip_page,$meta_analysis){
383
  $pageurl = get_permalink($post->ID);
384
  $info = pathinfo($pageurl);
385
 
386
+ if($info['filename'] == sanitize_title($post->post_title) || (!empty($meta_analysis) && !empty($meta_analysis['pageurl']))){
387
+ $output = $this->metaseo_create_field('pageurl',$tooltip_page['page_url'],'dashicons-yes',__('Page url matches with page title','wpms'),1);
388
  $this->perc_score++;
389
  }else{
390
+ $output = $this->metaseo_create_field('pageurl',$tooltip_page['page_url'],'icons-mwarning',__('Page url matches with page title','wpms'),0);
391
  }
392
 
393
  return $output;
394
  }
395
 
396
+ function metaseo_check_metatitle($meta_title,$tooltip_page,$meta_analysis){
397
+ if(($meta_title != '' && strlen($meta_title) <= self::$meta_title_length) || (!empty($meta_analysis) && !empty($meta_analysis['metatitle'])) ){
398
+ $output = $this->metaseo_create_field('metatitle',$tooltip_page['meta_title'],'dashicons-yes',__('Meta title filled','wpms'),1);
399
  $this->perc_score++;
400
  }else{
401
+ $output = $this->metaseo_create_field('metatitle',$tooltip_page['meta_title'],'icons-mwarning',__('Meta title filled','wpms'),0);
402
  }
403
  return $output;
404
  }
405
 
406
+ function metaseo_check_metadesc($meta_desc,$tooltip_page,$meta_analysis){
407
+ if(($meta_desc != '' && strlen($meta_desc) <= self::$meta_length) || (!empty($meta_analysis) && !empty($meta_analysis['metadesc'])) ){
408
+ $output = $this->metaseo_create_field('metadesc',$tooltip_page['meta_desc'],'dashicons-yes',__('Meta description filled','wpms'),1);
409
  $this->perc_score++;
410
  }else{
411
+ $output = $this->metaseo_create_field('metadesc',$tooltip_page['meta_desc'],'icons-mwarning',__('Meta description filled','wpms'),0);
412
  }
413
  return $output;
414
  }
415
 
416
+ function metaseo_check_imageresize($content,$tooltip_page,$meta_analysis){
417
  if($content == '') {
418
+ $output = $this->metaseo_create_field('imgresize',$tooltip_page['image_resize'],'dashicons-yes',__('Wrong image resize','wpms'),1);
419
  $this->perc_score++;
420
  return $output;
421
  }
438
  }
439
  }
440
 
441
+ if($img_wrong == false || (!empty($meta_analysis) && !empty($meta_analysis['imgresize']))){
442
+ $output = $this->metaseo_create_field('imgresize',$tooltip_page['image_resize'],'dashicons-yes',__('Wrong image resize','wpms'),1);
 
 
443
  $this->perc_score++;
444
+ }else{
445
+ $output = $this->metaseo_create_field('imgresize',$tooltip_page['image_resize'],'icons-mwarning',__('Wrong image resize','wpms'),0);
446
  }
447
 
448
  }else{
449
+ $output = $this->metaseo_create_field('imgresize',$tooltip_page['image_resize'],'icons-mwarning',__('Wrong image resize','wpms'),0);
450
  }
451
  return $output;
452
  }
453
 
454
+ function metaseo_check_imagealt($content,$tooltip_page,$meta_analysis){
455
  if($content == '') {
456
+ $output = $this->metaseo_create_field('imgalt',$tooltip_page['image_alt'],'dashicons-yes',__('Image have meta title or alt','wpms'),1);
457
  $this->perc_score++;
458
  return $output;
459
  }
471
  }
472
  }
473
 
474
+ if($img_wrong == false || (!empty($meta_analysis) && !empty($meta_analysis['imgalt']))){
475
+ $output = $this->metaseo_create_field('imgalt',$tooltip_page['image_alt'],'dashicons-yes',__('Image have meta title or alt','wpms'),1);
 
 
476
  $this->perc_score++;
477
+ }else{
478
+ $output = $this->metaseo_create_field('imgalt',$tooltip_page['image_alt'],'icons-mwarning',__('Image have meta title or alt','wpms'),0);
479
  }
480
 
481
  }else{
482
+ $output = $this->metaseo_create_field('imgalt',$tooltip_page['image_alt'],'icons-mwarning',__('Image have meta title or alt','wpms'),0);
483
  }
484
  return $output;
485
  }
496
 
497
  $meta_title = get_post_meta($post->ID, '_metaseo_metatitle', true);
498
  $meta_desc = get_post_meta($post->ID, '_metaseo_metadesc', true);
499
+ $meta_analysis = get_post_meta($post->ID, 'wpms_validate_analysis',true);
500
+ if(empty($meta_analysis)) $meta_analysis = array();
501
+ $headingtitle = $this->metaseo_check_headingtitle($post,$meta_title,$tooltip_page,$meta_analysis);
502
+ $contenttitle = $this->metaseo_check_content($post,$tooltip_page,$meta_analysis);
503
+ $output_pageurl = $this->metaseo_check_pageurl($post,$tooltip_page,$meta_analysis);
504
+ $output_metatitle = $this->metaseo_check_metatitle($meta_title,$tooltip_page,$meta_analysis);
505
+ $output_metadesc = $this->metaseo_check_metadesc($meta_desc,$tooltip_page,$meta_analysis);
506
+ $output_imagewrong = $this->metaseo_check_imageresize($post->post_content,$tooltip_page,$meta_analysis);
507
+ $output_imagealt = $this->metaseo_check_imagealt($post->post_content,$tooltip_page,$meta_analysis);
508
 
509
  $output = '';
510
  $circliful = ceil(100*($this->perc_score)/7);
511
  //$output .= '<div class="metaseo_right"><div id="metaseo_circliful"data-dimension="250" data-text="'.$circliful.'%" data-info="" data-width="20" data-fontsize="38" data-percent="'.$circliful.'" data-fgcolor="#7bd095" data-bgcolor="#e5e5e5" style="color:#7bd095" ></div><div>';
512
  $output .= '<div class="metaseo_left">
513
+ <div class="metaseo-progress-bar" data-post_id="'.$post->ID.'">
514
  <canvas id="inactiveProgress" class="metaseo-progress-inactive" height="275px" width="275px"></canvas>
515
  <canvas id="activeProgress" class="metaseo-progress-active" height="275px" width="275px"></canvas>
516
  <p>0%</p>
517
  </div>
518
  <input type="hidden" id="progressController" value="'.$circliful.'" />
519
+ <input type="hidden" id="metaseo_alanysis_ok" value="'.$this->perc_score.'" />
520
  </div>';
521
 
522
  $output .= '<div class="metaseo_right">';
inc/pages/content-meta.php CHANGED
@@ -33,6 +33,11 @@ jQuery(document).ready(function($){
33
  $('.metaseo-metatitle').each(function() {
34
  metaseo_updateTitle(this.id, false, false);
35
  });
 
 
 
 
 
36
  $('.metaseo-metadesc').each(function() {
37
  metaseo_updateDesc(this.id,false);
38
  });
@@ -40,6 +45,10 @@ jQuery(document).ready(function($){
40
  $('.metaseo-metatitle').bind('input propertychange', function() {
41
  metaseo_updateTitle(this.id, true);
42
  });
 
 
 
 
43
 
44
  $('.metaseo-metadesc').bind('input propertychange', function() {
45
  metaseo_updateDesc(this.id, true);
33
  $('.metaseo-metatitle').each(function() {
34
  metaseo_updateTitle(this.id, false, false);
35
  });
36
+
37
+ $('.metaseo-metakeywords').each(function() {
38
+ metaseo_updatekeywords(this.id, false, false);
39
+ });
40
+
41
  $('.metaseo-metadesc').each(function() {
42
  metaseo_updateDesc(this.id,false);
43
  });
45
  $('.metaseo-metatitle').bind('input propertychange', function() {
46
  metaseo_updateTitle(this.id, true);
47
  });
48
+
49
+ $('.metaseo-metakeywords').bind('input propertychange', function() {
50
+ metaseo_updatekeywords(this.id, true);
51
+ });
52
 
53
  $('.metaseo-metadesc').bind('input propertychange', function() {
54
  metaseo_updateDesc(this.id, true);
inc/pages/dashboard.php CHANGED
@@ -9,7 +9,6 @@ $url = 'http://www.alexa.com/siteinfo/' . $site_name;
9
  $dashboard = new MetaSeo_Dashboard();
10
  $results = $dashboard->evolutive_dashboard();
11
  $results_image = $dashboard->moptimizationChecking();
12
-
13
  if(!empty($results_image['imgs_statis'][1])){
14
  $percent_iresizing = ceil($results_image['imgs_statis'][0]/$results_image['imgs_statis'][1]*100);
15
  }else{
9
  $dashboard = new MetaSeo_Dashboard();
10
  $results = $dashboard->evolutive_dashboard();
11
  $results_image = $dashboard->moptimizationChecking();
 
12
  if(!empty($results_image['imgs_statis'][1])){
13
  $percent_iresizing = ceil($results_image['imgs_statis'][0]/$results_image['imgs_statis'][1]*100);
14
  }else{
js/cliffpyles.js CHANGED
@@ -4,6 +4,11 @@ jQuery(document).ready(function ($) {
4
  var iProgress = document.getElementById('inactiveProgress');
5
  var aProgress = document.getElementById('activeProgress');
6
  var iProgressCTX = iProgress.getContext('2d');
 
 
 
 
 
7
 
8
  jQuery('#reload_analysis').on('click',function(){
9
  $('.wpmseotab .spinner').css({'visibility':' inherit'}).show();
@@ -18,7 +23,7 @@ jQuery(document).ready(function ($) {
18
  mcontent = tinyMCE.editors.content.getContent();
19
  }
20
 
21
- var data = {'title':title , 'meta_title':meta_title , 'mpageurl':mpageurl , 'meta_desc':meta_desc , 'content':mcontent};
22
  $.ajax({
23
  dataType : 'json',
24
  method : 'POST',
@@ -31,6 +36,7 @@ jQuery(document).ready(function ($) {
31
  if(res != false){
32
  $('.wpmseotab .spinner').hide();
33
  $('.metaseo_right').html(res.output);
 
34
  $('#progressController').val(res.circliful).change();
35
  jQuery('.metaseo_tool').qtip({
36
  content: {
@@ -66,7 +72,7 @@ jQuery(document).ready(function ($) {
66
  var percentage = $(this).val() / 100;
67
  drawProgress(aProgress, percentage, $pCaption);
68
  });
69
-
70
  function drawInactive(iProgressCTX) {
71
  iProgressCTX.lineCap = 'square';
72
 
@@ -112,6 +118,36 @@ jQuery(document).ready(function ($) {
112
 
113
  var percentage = $pc.val() / 100;
114
  drawProgress(aProgress, percentage, $pCaption);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
115
 
116
 
117
  });
4
  var iProgress = document.getElementById('inactiveProgress');
5
  var aProgress = document.getElementById('activeProgress');
6
  var iProgressCTX = iProgress.getContext('2d');
7
+ var mcheck = 0;
8
+ if(typeof wpmscliffpyles.use_validate != "undefined" && wpmscliffpyles.use_validate == 1){
9
+ wpms_validate_analysis();
10
+ }
11
+
12
 
13
  jQuery('#reload_analysis').on('click',function(){
14
  $('.wpmseotab .spinner').css({'visibility':' inherit'}).show();
23
  mcontent = tinyMCE.editors.content.getContent();
24
  }
25
 
26
+ var data = {'post_id': jQuery('.metaseo-progress-bar').data('post_id'),'title':title , 'meta_title':meta_title , 'mpageurl':mpageurl , 'meta_desc':meta_desc , 'content':mcontent};
27
  $.ajax({
28
  dataType : 'json',
29
  method : 'POST',
36
  if(res != false){
37
  $('.wpmseotab .spinner').hide();
38
  $('.metaseo_right').html(res.output);
39
+ mcheck = res.check;
40
  $('#progressController').val(res.circliful).change();
41
  jQuery('.metaseo_tool').qtip({
42
  content: {
72
  var percentage = $(this).val() / 100;
73
  drawProgress(aProgress, percentage, $pCaption);
74
  });
75
+
76
  function drawInactive(iProgressCTX) {
77
  iProgressCTX.lineCap = 'square';
78
 
118
 
119
  var percentage = $pc.val() / 100;
120
  drawProgress(aProgress, percentage, $pCaption);
121
+
122
+ function wpms_validate_analysis() {
123
+ jQuery(document).on('click', '.metaseo-dashicons.icons-mwarning', function(event) {
124
+ var $this = $(this);
125
+ jQuery(this).removeClass('icons-mwarning').addClass('dashicons-yes');
126
+ if(mcheck == 0){
127
+ mcheck = jQuery('#metaseo_alanysis_ok').val();
128
+ mcheck++;
129
+ }else{
130
+ mcheck++;
131
+ }
132
+ var circliful = Math.ceil((mcheck*100)/7);
133
+ jQuery.ajax({
134
+ dataType : 'json',
135
+ method : 'POST',
136
+ url : ajaxurl,
137
+ data: {
138
+ 'action': 'metaseo_validate_analysis',
139
+ 'post_id' : jQuery('.metaseo-progress-bar').data('post_id'),
140
+ 'field' : $this.parent('.metaseo_analysis').data('title'),
141
+ },
142
+ success: function(res){
143
+ if(res != false){
144
+ $('#progressController').val(circliful).change();
145
+ }
146
+ }
147
+ });
148
+
149
+ });
150
+ }
151
 
152
 
153
  });
js/metaseo_admin.js CHANGED
@@ -5,6 +5,7 @@
5
  */
6
  var title_max_len = 69;
7
  var desc_max_len = 156;
 
8
  var metaseoValueHolder = {};
9
  var iUnchecked = 0;
10
 
@@ -22,6 +23,7 @@ function metaseo_clean(str) {
22
  }
23
 
24
  var oldTitleValues = {};
 
25
  var oldDescValues = {};
26
  var metaContentChangeWait;
27
  function metaseo_updateTitle(metatitle_id, needToSave, updateSnippet) {
@@ -56,6 +58,36 @@ function metaseo_updateTitle(metatitle_id, needToSave, updateSnippet) {
56
  oldTitleValues[postid] = title;
57
  }
58
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  function metaseo_updateDesc(metadesc_id, needToSave) {
60
  var desc = jQuery.trim(metaseo_clean(jQuery('#' + metadesc_id).val()));
61
  var postid = metadesc_id.replace('metaseo-metadesc-', '');
5
  */
6
  var title_max_len = 69;
7
  var desc_max_len = 156;
8
+ var keywords_max_len = 256;
9
  var metaseoValueHolder = {};
10
  var iUnchecked = 0;
11
 
23
  }
24
 
25
  var oldTitleValues = {};
26
+ var oldKeywordsValues = {};
27
  var oldDescValues = {};
28
  var metaContentChangeWait;
29
  function metaseo_updateTitle(metatitle_id, needToSave, updateSnippet) {
58
  oldTitleValues[postid] = title;
59
  }
60
 
61
+ function metaseo_updatekeywords(metakeywords_id, needToSave, updateSnippet) {
62
+ var keywords = jQuery.trim(metaseo_clean(jQuery('#' + metakeywords_id).val()));
63
+ var postid = metakeywords_id.replace('metaseo-metakeywords-', '');
64
+
65
+ var counter_id = 'metaseo-metakeywords-len' + postid;
66
+ console.log(keywords_max_len-keywords.length);
67
+ console.log(counter_id);
68
+ jQuery('#' + counter_id).text(keywords_max_len-keywords.length);
69
+
70
+ if (keywords.length >= keywords_max_len) {
71
+ jQuery('#' + counter_id).addClass('word-exceed');
72
+ }
73
+ else {
74
+ jQuery('#' + counter_id).removeClass('word-exceed');
75
+ }
76
+
77
+ // jQuery('#snippet_keywords' + postid).text(desc.substr(0, desc_max_len) );
78
+
79
+ if (needToSave === true && oldKeywordsValues[postid] != keywords ) {
80
+
81
+ clearTimeout(metaContentChangeWait);
82
+ metaContentChangeWait = setTimeout(function() {
83
+ saveMetaContentChanges('metakeywords', postid, keywords);
84
+ }, 1000);
85
+ }
86
+
87
+ //Push the new value into the array
88
+ oldKeywordsValues[postid] = keywords;
89
+ }
90
+
91
  function metaseo_updateDesc(metadesc_id, needToSave) {
92
  var desc = jQuery.trim(metaseo_clean(jQuery('#' + metadesc_id).val()));
93
  var postid = metadesc_id.replace('metaseo-metadesc-', '');
js/wp-metaseo-metabox.js CHANGED
@@ -143,6 +143,19 @@ function msUpdateTitle(force) {
143
  });
144
  }
145
 
 
 
 
 
 
 
 
 
 
 
 
 
 
146
  function msSanitizeTitle(title) {
147
  title = msClean(title);
148
  return title;
@@ -228,6 +241,9 @@ function msUpdateURL() {
228
  }
229
 
230
  function msUpdateSnippet() {
 
 
 
231
  msUpdateURL();
232
  msUpdateTitle();
233
  msUpdateDesc();
@@ -259,19 +275,19 @@ function metaseo_status_length(len,id){
259
 
260
  jQuery(document).ready(function ($) {
261
  // add countdown for title and description
262
- var titleval = jQuery.trim(msClean(jQuery('#' + wpmseoMetaboxL10n.field_prefix + 'title').val()));
263
- var descval = jQuery.trim(msClean(jQuery('#' + wpmseoMetaboxL10n.field_prefix + 'desc').val()));
264
- if (titleval === '') {
265
- jQuery('#' + wpmseoMetaboxL10n.field_prefix + 'title-length').html('<span class="good">'+ wpmseoMetaboxL10n.wpmseo_meta_title_length +'</span>');
266
- }else{
267
- metaseo_status_length(titleval.length,'#' + wpmseoMetaboxL10n.field_prefix + 'title-length');
268
- }
269
- if (descval === '') {
270
- jQuery('#' + wpmseoMetaboxL10n.field_prefix + 'desc-length').html('<span class="good">'+ wpmseoMetaboxL10n.wpmseo_meta_desc_length +'</span>');
271
- }else{
272
- metaseo_status_length(descval.length,'#' + wpmseoMetaboxL10n.field_prefix + 'desc-length');
273
- }
274
-
275
  var replacedVars = []; // jshint ignore:line
276
 
277
  if (jQuery('.wpmseo-metabox-tabs-div').length > 0) {
@@ -314,6 +330,10 @@ jQuery(document).ready(function ($) {
314
  jQuery('#' + wpmseoMetaboxL10n.field_prefix + 'title').keyup(function () {
315
  msUpdateTitle();
316
  });
 
 
 
 
317
 
318
  jQuery('#title').keyup(function () {
319
  msUpdateTitle();
143
  });
144
  }
145
 
146
+ function msUpdateKeywords(){
147
+ var keywords = '';
148
+ var keywordsElm = jQuery('#' + wpmseoMetaboxL10n.field_prefix + 'keywords');
149
+ var keywordsLengthError = jQuery('#' + wpmseoMetaboxL10n.field_prefix + 'keywords-length-warning');
150
+ if (keywordsElm.val() !== '') {
151
+ var len = wpmseoMetaboxL10n.wpmseo_meta_keywords_length - keywordsElm.val().length;
152
+ metaseo_status_length(len,'#' + wpmseoMetaboxL10n.field_prefix + 'keywords-length');
153
+ jQuery('#' + wpmseoMetaboxL10n.field_prefix + 'keywords-length').html(len);
154
+ } else {
155
+ jQuery('#' + wpmseoMetaboxL10n.field_prefix + 'keywords-length').addClass('length-true').removeClass('length-wrong').html('<span class="good">'+ wpmseoMetaboxL10n.wpmseo_meta_keywords_length +'</span>');
156
+ }
157
+ }
158
+
159
  function msSanitizeTitle(title) {
160
  title = msClean(title);
161
  return title;
241
  }
242
 
243
  function msUpdateSnippet() {
244
+ if(typeof wpmseoMetaboxL10n.show_keywords !="undefined" && wpmseoMetaboxL10n.show_keywords == 1){
245
+ msUpdateKeywords();
246
+ }
247
  msUpdateURL();
248
  msUpdateTitle();
249
  msUpdateDesc();
275
 
276
  jQuery(document).ready(function ($) {
277
  // add countdown for title and description
278
+ // var titleval = jQuery.trim(msClean(jQuery('#' + wpmseoMetaboxL10n.field_prefix + 'title').val()));
279
+ // var descval = jQuery.trim(msClean(jQuery('#' + wpmseoMetaboxL10n.field_prefix + 'desc').val()));
280
+ // if (titleval === '') {
281
+ // jQuery('#' + wpmseoMetaboxL10n.field_prefix + 'title-length').html('<span class="good">'+ wpmseoMetaboxL10n.wpmseo_meta_title_length +'</span>');
282
+ // }else{
283
+ // metaseo_status_length(titleval.length,'#' + wpmseoMetaboxL10n.field_prefix + 'title-length');
284
+ // }
285
+ // if (descval === '') {
286
+ // jQuery('#' + wpmseoMetaboxL10n.field_prefix + 'desc-length').html('<span class="good">'+ wpmseoMetaboxL10n.wpmseo_meta_desc_length +'</span>');
287
+ // }else{
288
+ // metaseo_status_length(descval.length,'#' + wpmseoMetaboxL10n.field_prefix + 'desc-length');
289
+ // }
290
+ //
291
  var replacedVars = []; // jshint ignore:line
292
 
293
  if (jQuery('.wpmseo-metabox-tabs-div').length > 0) {
330
  jQuery('#' + wpmseoMetaboxL10n.field_prefix + 'title').keyup(function () {
331
  msUpdateTitle();
332
  });
333
+
334
+ jQuery('#' + wpmseoMetaboxL10n.field_prefix + 'keywords').keyup(function () {
335
+ msUpdateKeywords();
336
+ });
337
 
338
  jQuery('#title').keyup(function () {
339
  msUpdateTitle();
languages/wpms-en_US.mo CHANGED
Binary file
languages/wpms-en_US.po CHANGED
@@ -9,66 +9,66 @@ msgstr ""
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "X-Generator: Poedit 1.8.5\n"
13
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
14
 
15
  msgid "Twitter username (without @)"
16
  msgstr "Twitter username (without @)"
17
 
18
  msgid ""
19
- "2 plugins that are doing almost the same thing detected: disable AIO SEO or "
20
- "Yoast SEO to avoid conflict."
21
  msgstr ""
22
- "2 plugins that are doing almost the same thing detected: disable AIO SEO or "
23
- "Yoast SEO to avoid conflict."
24
 
25
  msgid ""
26
- "We have found that you’re using All In One SEO plugin, WP Meta SEO can "
27
- "import the meta from this plugin, %s"
28
  msgstr ""
29
- "We have found that you’re using All In One SEO plugin, WP Meta SEO can "
30
- "import the meta from this plugin, %s"
31
 
32
  msgid ""
33
- "We have found that you’re using Yoast SEO plugin, WP Meta SEO can import the "
34
- "meta from this plugin, %s"
35
  msgstr ""
36
- "We have found that you’re using Yoast SEO plugin, WP Meta SEO can import the "
37
- "meta from this plugin, %s"
38
 
39
  msgid "Results preview"
40
  msgstr "Results preview"
41
 
42
  msgid ""
43
- "This is a preview of what your content will looks like in search engine "
44
- "results: title, description and URL"
45
  msgstr ""
46
- "This is a preview of what your content will looks like in search engine "
47
- "results: title, description and URL"
48
 
49
  msgid "Search engine title"
50
  msgstr "Search engine title"
51
 
52
  msgid ""
53
- "This is the title of your content that may be displayed in search engine "
54
- "results (meta title). By default it’s the content title (page title, post "
55
- "title…). 69 characters max allowed."
56
  msgstr ""
57
- "This is the title of your content that may be displayed in search engine "
58
- "results (meta title). By default it’s the content title (page title, post "
59
- "title…). 69 characters max allowed."
60
 
61
  msgid "Search engine description"
62
  msgstr "Search engine description"
63
 
64
  msgid ""
65
- "The description of your content that may be displayed in search engine "
66
- "results aka meta description. By default search engine take an excerpt from "
67
- "your content (depending on the search query). 156 characters max allowed."
68
  msgstr ""
69
- "The description of your content that may be displayed in search engine "
70
- "results aka meta description. By default search engine take an excerpt from "
71
- "your content (depending on the search query). 156 characters max allowed."
72
 
73
  msgid "Facebook Title"
74
  msgstr "Facebook Title"
@@ -212,11 +212,9 @@ msgid "Filter"
212
  msgstr "Filter"
213
 
214
  msgid ""
215
- "We didn't find any image which needed to be updated regarding meta "
216
- "information"
217
  msgstr ""
218
- "We didn't find any image which needed to be updated regarding meta "
219
- "information"
220
 
221
  msgid "This image has still not been inserted in any post!"
222
  msgstr "This image has still not been inserted in any post!"
@@ -291,8 +289,8 @@ msgid ""
291
  "This is a preview of what this content might looks like in Google's search "
292
  "results."
293
  msgstr ""
294
- "Prévisualisation de la manière dont le contenu sera affiché dans les "
295
- "résultats de recherche"
296
 
297
  msgid "Snippet Preview %s"
298
  msgstr "Snippet Preview %s"
@@ -429,8 +427,7 @@ msgstr "More information about WP Meta SEO"
429
  msgid "Other plugins from JoomUnited"
430
  msgstr "Other plugins from JoomUnited"
431
 
432
- msgid ""
433
- "Check if a word of this content title is also in a title heading (h1, h2...)"
434
  msgstr ""
435
  "Check if a word of this content title is also in a title heading (h1, h2...)"
436
 
@@ -447,65 +444,59 @@ msgid "Is the meta description of this page filled?"
447
  msgstr "Is the meta description of this page filled?"
448
 
449
  msgid ""
450
- "Check for image HTML resizing in content (usually image resized using "
451
- "handles)"
452
  msgstr ""
453
- "Check for image HTML resizing in content (usually image resized using "
454
- "handles)"
455
 
456
  msgid "Check for image Alt text and title"
457
  msgstr "Check for image Alt text and title"
458
 
459
  msgid ""
460
- "It's better using a permalink structure that is adding in your URL the "
461
- "category name and content title. This parameter can be changed in Settings > "
462
- "Permalinks WordPress menu. Tag recommended is %category%/%postname%"
463
  msgstr ""
464
- "It's better using a permalink structure that is adding in your URL the "
465
- "category name and content title. This parameter can be changed in Settings > "
466
- "Permalinks WordPress menu. Tag recommended is %category%/%postname%"
467
 
468
  msgid ""
469
- "Meta titles are displayed in search engine results as a page title. It's a "
470
- "good thing for SEO to have some custom and attractive ones. Be sure to fill "
471
- "at least the met information on your most popular pages"
472
  msgstr ""
473
- "Meta titles are displayed in search engine results as a page title. It's a "
474
- "good thing for SEO to have some custom and attractive ones. Be sure to fill "
475
- "at least the met information on your most popular pages"
476
 
477
  msgid ""
478
- "Meta descriptions are displayed in search engine results as a page "
479
- "description. It's a good thing for SEO to have some custom and attractive "
480
- "ones. Be sure to fill at least the meta information on your most popular "
481
- "pages."
482
  msgstr ""
483
- "Meta descriptions are displayed in search engine results as a page "
484
- "description. It's a good thing for SEO to have some custom and attractive "
485
- "ones. Be sure to fill at least the meta information on your most popular "
486
- "pages."
487
 
488
  msgid ""
489
- "Display image at its natural size, do not use HTML resize. It happens "
490
- "usually when you use handles to resize an image. You have a bulk edition "
491
- "tool to fix that."
492
  msgstr ""
493
- "Display image at its natural size, do not use HTML resize. It happens "
494
- "usually when you use handles to resize an image. You have a bulk edition "
495
- "tool to fix that."
496
 
497
  msgid ""
498
- "We recommend to use both alt text and image title. The main advantage is "
499
- "that it helps search engines discover your images and display them in image "
500
- "search results. Plus, these tags improve the accessibility of your site and "
501
- "give more information about your images. Use our bulk image tool to quickly "
502
- "check and fix that."
503
  msgstr ""
504
- "We recommend to use both alt text and image title. The main advantage is "
505
- "that it helps search engines discover your images and display them in image "
506
- "search results. Plus, these tags improve the accessibility of your site and "
507
- "give more information about your images. Use our bulk image tool to quickly "
508
- "check and fix that."
509
 
510
  msgid ""
511
  "It is highly recommended to update or add new content on your website quite "
@@ -561,11 +552,11 @@ msgstr ""
561
  "deactivate AIOSEO or Yoast in order to work more clearly!"
562
 
563
  msgid ""
564
- "We have found that you’re using All In One Pack Plugin, WP Meta SEO can "
565
- "import the meta from this plugin, %s"
566
  msgstr ""
567
- "We have found that you’re using All In One Pack Plugin, WP Meta SEO can "
568
- "import the meta from this plugin, %s"
569
 
570
  msgid "Name is existing"
571
  msgstr "Name is existing"
@@ -589,11 +580,9 @@ msgid "The post has been deleted before, please check again!"
589
  msgstr "The post has been deleted before, please check again!"
590
 
591
  msgid ""
592
- " This is a rendering of what this post might look like in Google's search "
593
- "results."
594
  msgstr ""
595
- " This is a rendering of what this post might look like in Google's search "
596
- "results."
597
 
598
  msgid "This post is not existed or deleted, please choose one another!"
599
  msgstr "This post is not existed or deleted, please choose one another!"
@@ -609,3 +598,18 @@ msgstr "WP Meta SEO - Page optimization"
609
 
610
  msgid "Meta title was saved"
611
  msgstr "Meta title was saved"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 1.7.4\n"
13
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
14
 
15
  msgid "Twitter username (without @)"
16
  msgstr "Twitter username (without @)"
17
 
18
  msgid ""
19
+ "2 plugins that are doing almost the same thing detected: disable AIO SEO or Yoast "
20
+ "SEO to avoid conflict."
21
  msgstr ""
22
+ "2 plugins that are doing almost the same thing detected: disable AIO SEO or Yoast "
23
+ "SEO to avoid conflict."
24
 
25
  msgid ""
26
+ "We have found that you’re using All In One SEO plugin, WP Meta SEO can import the "
27
+ "meta from this plugin, %s"
28
  msgstr ""
29
+ "We have found that you’re using All In One SEO plugin, WP Meta SEO can import the "
30
+ "meta from this plugin, %s"
31
 
32
  msgid ""
33
+ "We have found that you’re using Yoast SEO plugin, WP Meta SEO can import the meta "
34
+ "from this plugin, %s"
35
  msgstr ""
36
+ "We have found that you’re using Yoast SEO plugin, WP Meta SEO can import the meta "
37
+ "from this plugin, %s"
38
 
39
  msgid "Results preview"
40
  msgstr "Results preview"
41
 
42
  msgid ""
43
+ "This is a preview of what your content will looks like in search engine results: "
44
+ "title, description and URL"
45
  msgstr ""
46
+ "This is a preview of what your content will looks like in search engine results: "
47
+ "title, description and URL"
48
 
49
  msgid "Search engine title"
50
  msgstr "Search engine title"
51
 
52
  msgid ""
53
+ "This is the title of your content that may be displayed in search engine results "
54
+ "(meta title). By default it’s the content title (page title, post title…). 69 "
55
+ "characters max allowed."
56
  msgstr ""
57
+ "This is the title of your content that may be displayed in search engine results "
58
+ "(meta title). By default it’s the content title (page title, post title…). 69 "
59
+ "characters max allowed."
60
 
61
  msgid "Search engine description"
62
  msgstr "Search engine description"
63
 
64
  msgid ""
65
+ "The description of your content that may be displayed in search engine results "
66
+ "aka meta description. By default search engine take an excerpt from your content "
67
+ "(depending on the search query). 156 characters max allowed."
68
  msgstr ""
69
+ "The description of your content that may be displayed in search engine results "
70
+ "aka meta description. By default search engine take an excerpt from your content "
71
+ "(depending on the search query). 156 characters max allowed."
72
 
73
  msgid "Facebook Title"
74
  msgstr "Facebook Title"
212
  msgstr "Filter"
213
 
214
  msgid ""
215
+ "We didn't find any image which needed to be updated regarding meta information"
 
216
  msgstr ""
217
+ "We didn't find any image which needed to be updated regarding meta information"
 
218
 
219
  msgid "This image has still not been inserted in any post!"
220
  msgstr "This image has still not been inserted in any post!"
289
  "This is a preview of what this content might looks like in Google's search "
290
  "results."
291
  msgstr ""
292
+ "Prévisualisation de la manière dont le contenu sera affiché dans les résultats de "
293
+ "recherche"
294
 
295
  msgid "Snippet Preview %s"
296
  msgstr "Snippet Preview %s"
427
  msgid "Other plugins from JoomUnited"
428
  msgstr "Other plugins from JoomUnited"
429
 
430
+ msgid "Check if a word of this content title is also in a title heading (h1, h2...)"
 
431
  msgstr ""
432
  "Check if a word of this content title is also in a title heading (h1, h2...)"
433
 
444
  msgstr "Is the meta description of this page filled?"
445
 
446
  msgid ""
447
+ "Check for image HTML resizing in content (usually image resized using handles)"
 
448
  msgstr ""
449
+ "Check for image HTML resizing in content (usually image resized using handles)"
 
450
 
451
  msgid "Check for image Alt text and title"
452
  msgstr "Check for image Alt text and title"
453
 
454
  msgid ""
455
+ "It's better using a permalink structure that is adding in your URL the category "
456
+ "name and content title. This parameter can be changed in Settings > Permalinks "
457
+ "WordPress menu. Tag recommended is %category%/%postname%"
458
  msgstr ""
459
+ "It's better using a permalink structure that is adding in your URL the category "
460
+ "name and content title. This parameter can be changed in Settings > Permalinks "
461
+ "WordPress menu. Tag recommended is %category%/%postname%"
462
 
463
  msgid ""
464
+ "Meta titles are displayed in search engine results as a page title. It's a good "
465
+ "thing for SEO to have some custom and attractive ones. Be sure to fill at least "
466
+ "the met information on your most popular pages"
467
  msgstr ""
468
+ "Meta titles are displayed in search engine results as a page title. It's a good "
469
+ "thing for SEO to have some custom and attractive ones. Be sure to fill at least "
470
+ "the met information on your most popular pages"
471
 
472
  msgid ""
473
+ "Meta descriptions are displayed in search engine results as a page description. "
474
+ "It's a good thing for SEO to have some custom and attractive ones. Be sure to "
475
+ "fill at least the meta information on your most popular pages."
 
476
  msgstr ""
477
+ "Meta descriptions are displayed in search engine results as a page description. "
478
+ "It's a good thing for SEO to have some custom and attractive ones. Be sure to "
479
+ "fill at least the meta information on your most popular pages."
 
480
 
481
  msgid ""
482
+ "Display image at its natural size, do not use HTML resize. It happens usually "
483
+ "when you use handles to resize an image. You have a bulk edition tool to fix that."
 
484
  msgstr ""
485
+ "Display image at its natural size, do not use HTML resize. It happens usually "
486
+ "when you use handles to resize an image. You have a bulk edition tool to fix that."
 
487
 
488
  msgid ""
489
+ "We recommend to use both alt text and image title. The main advantage is that it "
490
+ "helps search engines discover your images and display them in image search "
491
+ "results. Plus, these tags improve the accessibility of your site and give more "
492
+ "information about your images. Use our bulk image tool to quickly check and fix "
493
+ "that."
494
  msgstr ""
495
+ "We recommend to use both alt text and image title. The main advantage is that it "
496
+ "helps search engines discover your images and display them in image search "
497
+ "results. Plus, these tags improve the accessibility of your site and give more "
498
+ "information about your images. Use our bulk image tool to quickly check and fix "
499
+ "that."
500
 
501
  msgid ""
502
  "It is highly recommended to update or add new content on your website quite "
552
  "deactivate AIOSEO or Yoast in order to work more clearly!"
553
 
554
  msgid ""
555
+ "We have found that you’re using All In One Pack Plugin, WP Meta SEO can import "
556
+ "the meta from this plugin, %s"
557
  msgstr ""
558
+ "We have found that you’re using All In One Pack Plugin, WP Meta SEO can import "
559
+ "the meta from this plugin, %s"
560
 
561
  msgid "Name is existing"
562
  msgstr "Name is existing"
580
  msgstr "The post has been deleted before, please check again!"
581
 
582
  msgid ""
583
+ " This is a rendering of what this post might look like in Google's search results."
 
584
  msgstr ""
585
+ " This is a rendering of what this post might look like in Google's search results."
 
586
 
587
  msgid "This post is not existed or deleted, please choose one another!"
588
  msgstr "This post is not existed or deleted, please choose one another!"
598
 
599
  msgid "Meta title was saved"
600
  msgstr "Meta title was saved"
601
+
602
+ msgid "Meta keywords was saved"
603
+ msgstr "Meta keywords was saved"
604
+
605
+ msgid "Force SEO validation"
606
+ msgstr "Force SEO validation"
607
+
608
+ msgid "Allow user to force on page SEO criteria validation by clicking on the icon"
609
+ msgstr "Allow user to force on page SEO criteria validation by clicking on the icon"
610
+
611
+ msgid "Meta keywords"
612
+ msgstr "Meta keywords"
613
+
614
+ msgid "Active meta keywords"
615
+ msgstr "Active meta keywords"
languages/wpms-fr_FR.mo CHANGED
Binary file
languages/wpms-fr_FR.po CHANGED
@@ -18,54 +18,54 @@ 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"
@@ -90,8 +90,8 @@ 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"
@@ -116,8 +116,8 @@ 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"
@@ -201,8 +201,7 @@ 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
 
@@ -253,8 +252,7 @@ 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"
@@ -281,8 +279,8 @@ 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"
@@ -331,8 +329,7 @@ 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"
@@ -424,12 +421,11 @@ msgstr "Autres plugin de JoomUnited"
424
  msgid ""
425
  "Check if a word of this content title is also in a title heading (h1, h2...)"
426
  msgstr ""
427
- "Vérifie si un mot du titre de page est aussi présent dans un titre du "
428
- "contenu (h1, h2...)"
429
 
430
  msgid "Check if a word of this content title is also in the text"
431
- msgstr ""
432
- "Vérifie si un mot du titre de page est aussi présent dans le contenu texte"
433
 
434
  msgid "Does the page title match with the permalink (URL structure)"
435
  msgstr "Vérifie si le titre de page correspond à l'URL (permalien)"
@@ -441,71 +437,69 @@ msgid "Is the meta description of this page filled?"
441
  msgstr "Est-ce que les meta description sont complétés?"
442
 
443
  msgid ""
444
- "Check for image HTML resizing in content (usually image resized using "
445
- "handles)"
446
  msgstr ""
447
- "Vérifie si des images sont redimensionnées en HTML (habituellement en "
448
- "utilisant les poignées)"
449
 
450
  msgid "Check for image Alt text and title"
451
  msgstr "Vérifie si les textes alt and titre d'images sont remplis"
452
 
453
  msgid ""
454
- "It's better using a permalink structure that is adding in your URL the "
455
- "category name and content title. This parameter can be changed in Settings > "
456
- "Permalinks WordPress menu. Tag recommended is %category%/%postname%"
457
  msgstr ""
458
- "Il est préférable d'utiliser des URL dont le nom de la catégorie et le titre "
459
- "de page sont en clair. Ce paramètre peut être modifié depuis le menu "
460
- "Paramètres > Permaliens. Le tag recommandé est %category%/%postname%"
461
 
462
  msgid ""
463
- "Meta titles are displayed in search engine results as a page title. It's a "
464
- "good thing for SEO to have some custom and attractive ones. Be sure to fill "
465
- "at least the met information on your most popular pages"
466
  msgstr ""
467
  "Les titres Meta sont affichés dans les résultats de recherche comme titre de "
468
- "page. C'est une bonne chose de mettre des titres accrocheurs pour avoir un "
469
- "plus grand nombre de clics."
470
 
471
  msgid ""
472
- "Meta descriptions are displayed in search engine results as a page "
473
- "description. It's a good thing for SEO to have some custom and attractive "
474
- "ones. Be sure to fill at least the meta information on your most popular "
475
- "pages."
476
  msgstr ""
477
  "Les Meta descroption sont affichés dans les résultats de recherche comme "
478
  "description de page. C'est une bonne chose de mettre des descriptions "
479
  "accrocheuses pour avoir un plus grand nombre de clics."
480
 
481
  msgid ""
482
- "Display image at its natural size, do not use HTML resize. It happens "
483
- "usually when you use handles to resize an image. You have a bulk edition "
484
- "tool to fix that."
485
  msgstr ""
486
- "Utilisez des images à leur taille naturelle, pas en les redimensionnant en "
487
- "HTML (avec les poignées). Avec WP Meta SEO, vous disposez d'un outil pour "
488
- "corriger cela"
489
 
490
  msgid ""
491
- "We recommend to use both alt text and image title. The main advantage is "
492
- "that it helps search engines discover your images and display them in image "
493
- "search results. Plus, these tags improve the accessibility of your site and "
494
- "give more information about your images. Use our bulk image tool to quickly "
495
- "check and fix that."
496
  msgstr ""
497
  "Nous vous recommandons de compléter les le textes alternatif et les titres "
498
- "d'images. L'avantage c'est que cela permet aux moteur de recherche d'indexer "
499
- "vos images et apporte plus de contenu à vos pages. utilisez l'outil "
500
- "d'édition par lot pour aller plus vite! "
501
 
502
  msgid ""
503
  "It is highly recommended to update or add new content on your website quite "
504
  "frequently. At least 3 updated or new content per month would be great :)"
505
  msgstr ""
506
- "Il est fortement recommandé de mettre à jour ou d'ajouter du contenu sur "
507
- "votre site pour être mieux référencé. Au moins 3 mises à jour ou ajout de "
508
- "contenu par mois serait parfait :)"
509
 
510
  msgid "Social networks meta"
511
  msgstr "Meta réseaux sociaux"
@@ -554,11 +548,11 @@ msgstr ""
554
  "essayez de désactiver AIO SEO ou Yoast SEO"
555
 
556
  msgid ""
557
- "We have found that you’re using All In One Pack Plugin, WP Meta SEO can "
558
- "import the meta from this plugin, %s"
559
  msgstr ""
560
- "Vous utilisez actuellement All In One SEO Plugin, WP Meta SEO put importer "
561
- "les données de ce plugin pour vous, %s"
562
 
563
  msgid "Name is existing"
564
  msgstr "Ce nom existe déjà"
@@ -601,3 +595,18 @@ msgstr "WP Meta SEO - Page optimisation"
601
 
602
  msgid "Meta title was saved"
603
  msgstr "Metz"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 SEO ou "
22
+ "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 import "
26
+ "the meta from this plugin, %s"
27
  msgstr ""
28
+ "Vous utilisez le plugin All in one SEO, nous pouvons importer les meta de ce "
29
+ "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 plugin "
36
+ "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 results: "
43
+ "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 results "
51
+ "(meta title). By default it’s the content title (page title, post title…). 69 "
52
+ "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 caractères "
56
+ "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 results "
63
+ "aka meta description. By default search engine take an excerpt from your content "
64
+ "(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 moteurs "
67
+ "de recherche (meta description). Par défaut il s'agit d'un extrait de votre "
68
+ "contenu.156 caractères max"
69
 
70
  msgid "Facebook Title"
71
  msgstr "Titre facebook"
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 recommandée "
94
+ "1200px x 630px"
95
 
96
  msgid "Twitter Title"
97
  msgstr "Titre Twitter"
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 recommandée "
120
+ "440px x 220px"
121
 
122
  msgid "Use Image"
123
  msgstr "Utiliser image"
201
  msgstr "Filtrer"
202
 
203
  msgid ""
204
+ "We didn't find any image which needed to be updated regarding meta information"
 
205
  msgstr ""
206
  "Nous n'avons trouvé aucune image qui ont besoin d'être optimisé pour le SEO"
207
 
252
 
253
  msgid "We can't get traffic rank from Alexa for this website"
254
  msgstr ""
255
+ "Nous n'avons pas assez d'info (de trafic) Alexa pour avoir le \"Traffic Rank\""
 
256
 
257
  msgid "Meta Title"
258
  msgstr "Meta titre"
279
  "This is a preview of what this content might looks like in Google's search "
280
  "results."
281
  msgstr ""
282
+ "Prévisualisation de ce à quoi votre contenu peut ressembler dans les résultats "
283
+ "de recherche"
284
 
285
  msgid "Snippet Preview %s"
286
  msgstr "Prévisualisation %s"
329
 
330
  msgid "Oops! An error occured when updating the post, please try again"
331
  msgstr ""
332
+ "Oups! Une erreur est survenue durant la mise à jour du post, merci de réessayer"
 
333
 
334
  msgid "Resize image"
335
  msgstr "Redimensionner image"
421
  msgid ""
422
  "Check if a word of this content title is also in a title heading (h1, h2...)"
423
  msgstr ""
424
+ "Vérifie si un mot du titre de page est aussi présent dans un titre du contenu "
425
+ "(h1, h2...)"
426
 
427
  msgid "Check if a word of this content title is also in the text"
428
+ msgstr "Vérifie si un mot du titre de page est aussi présent dans le contenu texte"
 
429
 
430
  msgid "Does the page title match with the permalink (URL structure)"
431
  msgstr "Vérifie si le titre de page correspond à l'URL (permalien)"
437
  msgstr "Est-ce que les meta description sont complétés?"
438
 
439
  msgid ""
440
+ "Check for image HTML resizing in content (usually image resized using handles)"
 
441
  msgstr ""
442
+ "Vérifie si des images sont redimensionnées en HTML (habituellement en utilisant "
443
+ "les poignées)"
444
 
445
  msgid "Check for image Alt text and title"
446
  msgstr "Vérifie si les textes alt and titre d'images sont remplis"
447
 
448
  msgid ""
449
+ "It's better using a permalink structure that is adding in your URL the category "
450
+ "name and content title. This parameter can be changed in Settings > Permalinks "
451
+ "WordPress menu. Tag recommended is %category%/%postname%"
452
  msgstr ""
453
+ "Il est préférable d'utiliser des URL dont le nom de la catégorie et le titre de "
454
+ "page sont en clair. Ce paramètre peut être modifié depuis le menu Paramètres > "
455
+ "Permaliens. Le tag recommandé est %category%/%postname%"
456
 
457
  msgid ""
458
+ "Meta titles are displayed in search engine results as a page title. It's a good "
459
+ "thing for SEO to have some custom and attractive ones. Be sure to fill at least "
460
+ "the met information on your most popular pages"
461
  msgstr ""
462
  "Les titres Meta sont affichés dans les résultats de recherche comme titre de "
463
+ "page. C'est une bonne chose de mettre des titres accrocheurs pour avoir un plus "
464
+ "grand nombre de clics."
465
 
466
  msgid ""
467
+ "Meta descriptions are displayed in search engine results as a page description. "
468
+ "It's a good thing for SEO to have some custom and attractive ones. Be sure to "
469
+ "fill at least the meta information on your most popular pages."
 
470
  msgstr ""
471
  "Les Meta descroption sont affichés dans les résultats de recherche comme "
472
  "description de page. C'est une bonne chose de mettre des descriptions "
473
  "accrocheuses pour avoir un plus grand nombre de clics."
474
 
475
  msgid ""
476
+ "Display image at its natural size, do not use HTML resize. It happens usually "
477
+ "when you use handles to resize an image. You have a bulk edition tool to fix "
478
+ "that."
479
  msgstr ""
480
+ "Utilisez des images à leur taille naturelle, pas en les redimensionnant en HTML "
481
+ "(avec les poignées). Avec WP Meta SEO, vous disposez d'un outil pour corriger "
482
+ "cela"
483
 
484
  msgid ""
485
+ "We recommend to use both alt text and image title. The main advantage is that it "
486
+ "helps search engines discover your images and display them in image search "
487
+ "results. Plus, these tags improve the accessibility of your site and give more "
488
+ "information about your images. Use our bulk image tool to quickly check and fix "
489
+ "that."
490
  msgstr ""
491
  "Nous vous recommandons de compléter les le textes alternatif et les titres "
492
+ "d'images. L'avantage c'est que cela permet aux moteur de recherche d'indexer vos "
493
+ "images et apporte plus de contenu à vos pages. utilisez l'outil d'édition par "
494
+ "lot pour aller plus vite! "
495
 
496
  msgid ""
497
  "It is highly recommended to update or add new content on your website quite "
498
  "frequently. At least 3 updated or new content per month would be great :)"
499
  msgstr ""
500
+ "Il est fortement recommandé de mettre à jour ou d'ajouter du contenu sur votre "
501
+ "site pour être mieux référencé. Au moins 3 mises à jour ou ajout de contenu par "
502
+ "mois serait parfait :)"
503
 
504
  msgid "Social networks meta"
505
  msgstr "Meta réseaux sociaux"
548
  "essayez de désactiver AIO SEO ou Yoast SEO"
549
 
550
  msgid ""
551
+ "We have found that you’re using All In One Pack Plugin, WP Meta SEO can import "
552
+ "the meta from this plugin, %s"
553
  msgstr ""
554
+ "Vous utilisez actuellement All In One SEO Plugin, WP Meta SEO put importer les "
555
+ "données de ce plugin pour vous, %s"
556
 
557
  msgid "Name is existing"
558
  msgstr "Ce nom existe déjà"
595
 
596
  msgid "Meta title was saved"
597
  msgstr "Metz"
598
+
599
+ msgid "Meta keywords was saved"
600
+ msgstr "Mot clés enregistrés"
601
+
602
+ msgid "Force SEO validation"
603
+ msgstr "Forcer validation SEO"
604
+
605
+ msgid "Allow user to force on page SEO criteria validation by clicking on the icon"
606
+ msgstr "Autoriser la validation forcée des critères SEO dans l'analyse des pages"
607
+
608
+ msgid "Meta keywords"
609
+ msgstr "Mot clés"
610
+
611
+ msgid "Active meta keywords"
612
+ msgstr "Activer les mot clés meta"
languages/wpms.pot CHANGED
@@ -494,4 +494,19 @@ msgid "Meta title was saved"
494
  msgstr ""
495
 
496
  msgid "Content Meta"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
497
  msgstr ""
494
  msgstr ""
495
 
496
  msgid "Content Meta"
497
+ msgstr ""
498
+
499
+ msgid "Meta keywords was saved"
500
+ msgstr ""
501
+
502
+ msgid "Force SEO validation"
503
+ msgstr ""
504
+
505
+ msgid "Allow user to force on page SEO criteria validation by clicking on the icon"
506
+ msgstr ""
507
+
508
+ msgid "Meta keywords"
509
+ msgstr ""
510
+
511
+ msgid "Active meta keywords"
512
  msgstr ""
readme.txt CHANGED
@@ -3,7 +3,7 @@ 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
4
  Requires at least: 4.0
5
  Tested up to: 4.3.1
6
- Stable tag: 1.5.1
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
@@ -26,9 +26,10 @@ WP Meta SEO gives you the control over all your meta content and images. Bulk SE
26
  It was annoying to edit meta on an existing website, open each post, page and almost nobody was doing it. Especially if you need to edit content + image meta.
27
  WP Meta SEO is going to list all posts, pages, custom post types and all images. Type your meta content and fix image size and everything is AJAX saved.
28
  Plus, a bulk copy feature is available to save tons of time in your SEO optimization process:
29
- * Content title to All meta titles
30
  * Image name to Image title
31
  * Image name to Image alt
 
32
 
33
  A bunch of people reduce the size of the pictures in content using handles that results to a HTML resizing. And that's something wrong for SEO, for page loading time and for image quality.
34
  WP Meta SEO also include this feature in the bulk edition view, you are notified and you can now optimize the size of your images in articles, click fix and it's replaced in your content (no broken links).
@@ -40,6 +41,7 @@ WP Meta SEO also include this feature in the bulk edition view, you are notified
40
  * Search engine snippet preview
41
  * AJAX SEO analysis refresh
42
  * 7 criteria of SEO analysis
 
43
  * Check: Page title word in content heading
44
  * Check: Page title word in content
45
  * Check: Page URL matches with page title
@@ -124,7 +126,7 @@ So you'll be able to define SEO info for each instance.
124
  Nope :) All your SEO content is properly stored in the database and automatic SEO checks are also cached or run every 72 hours (unless you force the process)
125
 
126
  = Is WP Meta SEO compatible with 3rd party plugins? =
127
- YES it is :) All plugins and themes that are using custom post type are compatibler and you'll be able to setup SEO for those content. Plus Yoast SEO and All in one SEO content can also be imported.
128
 
129
  = Can I translate WP Meta SEO? =
130
  You're welcome! in the WP Meta SEO package you got English and French included as standard .po/.mo files. Use the .pot file also available in the /language folder to create your own.
@@ -146,6 +148,13 @@ WP Meta SEO is using HTML5 features so to be sure run the latest version of Chro
146
  = Can I help with WP Meta SEO translation? =
147
  Yes! you can contact us on our forum. SEO as its own language and expression, we would be happy to add yours.
148
 
 
 
 
 
 
 
 
149
  == Screenshots ==
150
 
151
  1. Main dashboard of the plugin with SEO optimization check
@@ -159,6 +168,10 @@ Yes! you can contact us on our forum. SEO as its own language and expression, we
159
 
160
  == Changelog ==
161
 
 
 
 
 
162
  = 1.5.1 =
163
  * Fix home page meta not working on some themes
164
  * Fix break foreach when search title in SEO content (title in heading)
@@ -219,4 +232,4 @@ Yes! you can contact us on our forum. SEO as its own language and expression, we
219
  == Upgrade Notice ==
220
 
221
  Update through the automatic WordPress updater, all WP Meta SEO content will remain in place.
222
- You WON'T loose any SEO content: meta, alt, titles,...
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
4
  Requires at least: 4.0
5
  Tested up to: 4.3.1
6
+ Stable tag: 1.6.0
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
26
  It was annoying to edit meta on an existing website, open each post, page and almost nobody was doing it. Especially if you need to edit content + image meta.
27
  WP Meta SEO is going to list all posts, pages, custom post types and all images. Type your meta content and fix image size and everything is AJAX saved.
28
  Plus, a bulk copy feature is available to save tons of time in your SEO optimization process:
29
+ * Content title to All meta titles (optional meta keywords)
30
  * Image name to Image title
31
  * Image name to Image alt
32
+ * Optional keyword edition
33
 
34
  A bunch of people reduce the size of the pictures in content using handles that results to a HTML resizing. And that's something wrong for SEO, for page loading time and for image quality.
35
  WP Meta SEO also include this feature in the bulk edition view, you are notified and you can now optimize the size of your images in articles, click fix and it's replaced in your content (no broken links).
41
  * Search engine snippet preview
42
  * AJAX SEO analysis refresh
43
  * 7 criteria of SEO analysis
44
+ * Force SEO criteria validation
45
  * Check: Page title word in content heading
46
  * Check: Page title word in content
47
  * Check: Page URL matches with page title
126
  Nope :) All your SEO content is properly stored in the database and automatic SEO checks are also cached or run every 72 hours (unless you force the process)
127
 
128
  = Is WP Meta SEO compatible with 3rd party plugins? =
129
+ YES it is :) All plugins and themes that are using custom post type are compatible and you'll be able to setup SEO for those content. Plus, Yoast SEO and All in one SEO content can also be imported.
130
 
131
  = Can I translate WP Meta SEO? =
132
  You're welcome! in the WP Meta SEO package you got English and French included as standard .po/.mo files. Use the .pot file also available in the /language folder to create your own.
148
  = Can I help with WP Meta SEO translation? =
149
  Yes! you can contact us on our forum. SEO as its own language and expression, we would be happy to add yours.
150
 
151
+ = Why including meta keywords edition as it's not a SEO rank criteria? =
152
+ Because it may help in some case for SEO, mainly for multilingual website, it help search engines to validate the page language. Some automatic SEO tool may use it too.
153
+
154
+ = Some criteria of the SEO on page analysis does not fit my content =
155
+ Yes it maybe the case when, for example, you are calling 3rd party plugins in content or using specific page layouts. You have a global option to force validation of SEO criteria.
156
+ This manual SEO validation on click on the reload analysis button.
157
+
158
  == Screenshots ==
159
 
160
  1. Main dashboard of the plugin with SEO optimization check
168
 
169
  == Changelog ==
170
 
171
+ = 1.6.0 =
172
+ * Add meta keywords edition in bulk editor
173
+ * Add option to for SEO criteria validation
174
+
175
  = 1.5.1 =
176
  * Fix home page meta not working on some themes
177
  * Fix break foreach when search title in SEO content (title in heading)
232
  == Upgrade Notice ==
233
 
234
  Update through the automatic WordPress updater, all WP Meta SEO content will remain in place.
235
+ You WON'T lose any SEO content: meta, alt, titles...
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: 1.5.1
8
  * Author: JoomUnited
9
  * Author URI: http://www.joomunited.com
10
  * License: GPL2
@@ -45,7 +45,7 @@ if (!defined('URL'))
45
  define('URL', get_site_url());
46
 
47
  if (!defined('WPMSEO_VERSION'))
48
- define('WPMSEO_VERSION', '1.5.1');
49
 
50
  if (!defined('WPMSEO_FILE'))
51
  define('WPMSEO_FILE', __FILE__);
@@ -94,6 +94,15 @@ if (is_admin()) {
94
  if($meta_title == '') $meta_title = $wp_query->post->post_title;
95
  $meta_title_esc = esc_attr($meta_title);
96
 
 
 
 
 
 
 
 
 
 
97
  // get meta description
98
  $meta_description = get_post_meta($wp_query->post->ID, '_metaseo_metadesc', true);
99
  if($meta_description == '') {
@@ -106,8 +115,6 @@ if (is_admin()) {
106
  $mpage_on_front = get_option('page_on_front');
107
  $mshow_on_front = get_option('show_on_front');
108
 
109
- $settings = get_option( '_metaseo_settings' );
110
-
111
  // check homepage is a page
112
  if(get_post_meta($wp_query->post->ID, '_metaseo_metatitle', true) == '' && is_front_page() ){
113
  $meta_title_esc = esc_attr($settings['metaseo_title_home']);
@@ -126,8 +133,7 @@ if (is_admin()) {
126
  $twitter_desc = get_post_meta($wp_query->post->ID, '_metaseo_metatwitter-desc', true);
127
  $meta_twitter_desc = esc_attr($twitter_desc);
128
  if($meta_twitter_desc == '') $meta_twitter_desc = $meta_description_esc;
129
-
130
-
131
  $sitename = get_bloginfo('name');
132
  $meta_twitter_site = get_user_meta($wp_query->post->post_author,'mtwitter',true);
133
  $facebook_admin = get_user_meta($wp_query->post->post_author,'mfacebook',true);
@@ -218,7 +224,10 @@ if (is_admin()) {
218
  '#<meta name="description" [^<>]+ ?>#i',
219
  '<meta name="description" content="' . $meta_description_esc . '" />',
220
  ($meta_description_esc != '' ? true : false)),
221
-
 
 
 
222
  'title' => array(
223
  '#<meta name="title" [^<>]+ ?>#i',
224
  '<meta name="title" content="' . $meta_title_esc . '" />',
@@ -232,10 +241,14 @@ if (is_admin()) {
232
  ($meta_title_esc != '' ? true : false));
233
  }
234
 
 
 
 
 
235
  if($meta_twitter_site == ''){
236
  unset($patterns['twitter_site']);
237
  }
238
-
239
  if($meta_twitter_image == ''){
240
  unset($patterns['twitter_image']);
241
  }
@@ -270,6 +283,7 @@ if (is_admin()) {
270
  "metaseo_showfacebook"=>"",
271
  "metaseo_showtwitter"=>"",
272
  "metaseo_twitter_card"=>"summary",
 
273
  "metaseo_showtmetablock"=>1,
274
  "metaseo_showsocial" => 1
275
  );
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: 1.6.0
8
  * Author: JoomUnited
9
  * Author URI: http://www.joomunited.com
10
  * License: GPL2
45
  define('URL', get_site_url());
46
 
47
  if (!defined('WPMSEO_VERSION'))
48
+ define('WPMSEO_VERSION', '1.6.0');
49
 
50
  if (!defined('WPMSEO_FILE'))
51
  define('WPMSEO_FILE', __FILE__);
94
  if($meta_title == '') $meta_title = $wp_query->post->post_title;
95
  $meta_title_esc = esc_attr($meta_title);
96
 
97
+ // get meta keyword
98
+ $settings = get_option( '_metaseo_settings' );
99
+ if(isset($settings['metaseo_showkeywords']) && $settings['metaseo_showkeywords'] == 1){
100
+ $meta_keywords = get_post_meta($wp_query->post->ID, '_metaseo_metakeywords', true);
101
+ $meta_keywords_esc = esc_attr($meta_keywords);
102
+ }else{
103
+ $meta_keywords_esc = '';
104
+ }
105
+
106
  // get meta description
107
  $meta_description = get_post_meta($wp_query->post->ID, '_metaseo_metadesc', true);
108
  if($meta_description == '') {
115
  $mpage_on_front = get_option('page_on_front');
116
  $mshow_on_front = get_option('show_on_front');
117
 
 
 
118
  // check homepage is a page
119
  if(get_post_meta($wp_query->post->ID, '_metaseo_metatitle', true) == '' && is_front_page() ){
120
  $meta_title_esc = esc_attr($settings['metaseo_title_home']);
133
  $twitter_desc = get_post_meta($wp_query->post->ID, '_metaseo_metatwitter-desc', true);
134
  $meta_twitter_desc = esc_attr($twitter_desc);
135
  if($meta_twitter_desc == '') $meta_twitter_desc = $meta_description_esc;
136
+
 
137
  $sitename = get_bloginfo('name');
138
  $meta_twitter_site = get_user_meta($wp_query->post->post_author,'mtwitter',true);
139
  $facebook_admin = get_user_meta($wp_query->post->post_author,'mfacebook',true);
224
  '#<meta name="description" [^<>]+ ?>#i',
225
  '<meta name="description" content="' . $meta_description_esc . '" />',
226
  ($meta_description_esc != '' ? true : false)),
227
+ 'keywords' => array(
228
+ '#<meta name="keywords" [^<>]+ ?>#i',
229
+ '<meta name="keywords" content="' . $meta_keywords_esc . '" />',
230
+ ($meta_keywords_esc != '' ? true : false)),
231
  'title' => array(
232
  '#<meta name="title" [^<>]+ ?>#i',
233
  '<meta name="title" content="' . $meta_title_esc . '" />',
241
  ($meta_title_esc != '' ? true : false));
242
  }
243
 
244
+ if($meta_keywords_esc == ''){
245
+ unset($patterns['keywords']);
246
+ }
247
+
248
  if($meta_twitter_site == ''){
249
  unset($patterns['twitter_site']);
250
  }
251
+
252
  if($meta_twitter_image == ''){
253
  unset($patterns['twitter_image']);
254
  }
283
  "metaseo_showfacebook"=>"",
284
  "metaseo_showtwitter"=>"",
285
  "metaseo_twitter_card"=>"summary",
286
+ "metaseo_showkeywords"=>0,
287
  "metaseo_showtmetablock"=>1,
288
  "metaseo_showsocial" => 1
289
  );