WP Meta SEO - Version 1.4.0

Version Description

  • Bulk copy new option: content title to meta title
  • Bulk copy new option: image name to alt text
  • Bulk copy new option: image name to image title
  • Fix twitter card on SEO on page optimization
  • Fix SEO meta empty in some themes
Download this release

Release Info

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

Code changes from version 1.3.0 to 1.4.0

css/metaseo_admin.css CHANGED
@@ -340,7 +340,7 @@ strong {
340
  color: #eee;
341
  }
342
  .note-no-data .col-pad {
343
- background: url("../img/no-data-alert.png") no-repeat scroll 0 50% transparent;
344
  display: block;
345
  padding-left: 45px;
346
  }
340
  color: #eee;
341
  }
342
  .note-no-data .col-pad {
343
+ background: url("../img/loop.png") no-repeat scroll 0 50% transparent;
344
  display: block;
345
  padding-left: 45px;
346
  }
css/style.css CHANGED
@@ -274,4 +274,8 @@ span.hz-loading{
274
 
275
  .metaseo-img-meta{
276
  max-width: 100%;
 
 
 
 
277
  }
274
 
275
  .metaseo-img-meta{
276
  max-width: 100%;
277
+ }
278
+
279
+ #wp-seo-meta-form #post-query-submit{
280
+ float: left;
281
  }
inc/class.metaseo-admin.php CHANGED
@@ -8,12 +8,21 @@ class MetaSeo_Admin {
8
  public static $desc_length = 156;
9
  public static $title_length = 69;
10
 
 
 
 
 
 
11
  function __construct() {
 
 
 
12
  $this->settings = array(
13
  "metaseo_title_home"=>"",
14
  "metaseo_desc_home"=>"",
15
  "metaseo_showfacebook"=>"",
16
  "metaseo_showtwitter"=>"",
 
17
  "metaseo_showtmetablock"=>0
18
  );
19
  $settings = get_option( '_metaseo_settings' );
@@ -193,6 +202,7 @@ class MetaSeo_Admin {
193
  add_settings_field('metaseo_desc_home', __('Homepage meta description ', 'wpms'), array( $this, 'metaseo_desc_home' ), 'metaseo_settings', 'metaseo_dashboard');
194
  add_settings_field('metaseo_showfacebook', __('Facebook profile URL ', 'wpms'), array( $this, 'showfacebook' ), 'metaseo_settings', 'metaseo_dashboard');
195
  add_settings_field('metaseo_showtwitter', __('Twitter Username ', 'wpms'), array( $this, 'showtwitter' ), 'metaseo_settings', 'metaseo_dashboard');
 
196
  add_settings_field('metaseo_showtmetablock', __('Meta block edition ', 'wpms'), array( $this, 'showtmetablock' ), 'metaseo_settings', 'metaseo_dashboard');
197
  }
198
 
@@ -237,6 +247,18 @@ class MetaSeo_Admin {
237
  echo '<input id="metaseo_showtwitter" name="_metaseo_settings[metaseo_showtwitter]" type="text" value="'.esc_attr( $twitter ).'" size="50"/>';
238
  }
239
 
 
 
 
 
 
 
 
 
 
 
 
 
240
 
241
  private function load_meta_boxes() {
242
  if ( in_array( $this->pagenow, array(
@@ -310,12 +332,18 @@ class MetaSeo_Admin {
310
  wp_enqueue_script('jquery');
311
 
312
  wp_enqueue_script(
313
- 'wpmetaseoAdmin', plugins_url('js/metaseo_admin.js', dirname(__FILE__)), array('jquery'), '0.1', true
314
  );
 
 
 
 
 
 
315
  if($current_screen->base == 'toplevel_page_metaseo_dashboard'){
316
- wp_enqueue_script('Chart', plugins_url('js/Chart.js', dirname(__FILE__)), array('jquery'), '0.1', true);
317
- wp_enqueue_script('jquery-knob', plugins_url('js/jquery.knob.js', dirname(__FILE__)), array('jquery'), '0.1', true);
318
- wp_enqueue_script('metaseo-dashboard', plugins_url('js/dashboard.js', dirname(__FILE__)), array('jquery'), '0.1', true);
319
  wp_enqueue_style('chart', plugins_url('/css/chart.css', dirname(__FILE__) ) );
320
  wp_enqueue_style('metaseo-quirk', plugins_url('/css/metaseo-quirk.css', dirname(__FILE__) ) );
321
  }
@@ -328,6 +356,12 @@ class MetaSeo_Admin {
328
  array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
329
  }
330
 
 
 
 
 
 
 
331
  /**
332
  * Load additional admin stylesheets
333
  * of jquery-ui
@@ -439,6 +473,201 @@ class MetaSeo_Admin {
439
  break;
440
  }
441
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
442
  }
443
 
444
  private function ajaxHandle(){
@@ -451,6 +680,9 @@ class MetaSeo_Admin {
451
  //
452
  add_action( 'wp_ajax_import_meta_data', array('MetaSeo_Content_List_Table', 'importMetaData') );
453
  add_action( 'wp_ajax_dismiss_import_meta', array('MetaSeo_Content_List_Table', 'dismissImport') );
 
 
 
454
  //
455
  add_action( 'added_post_meta' , array( 'MetaSeo_Content_List_Table', 'updateMetaSync' ), 99, 4);
456
  add_action( 'updated_post_meta', array( 'MetaSeo_Content_List_Table', 'updateMetaSync' ), 99, 4);
8
  public static $desc_length = 156;
9
  public static $title_length = 69;
10
 
11
+ public static $metaseo_twitter_card = array(
12
+ 'summary' => '',
13
+ 'summary_large_image' => '',
14
+ );
15
+
16
  function __construct() {
17
+ self::$metaseo_twitter_card['summary'] = __( 'Summary', 'wpms' );
18
+ self::$metaseo_twitter_card['summary_large_image'] = __( 'Summary with large image', 'wpms' );
19
+
20
  $this->settings = array(
21
  "metaseo_title_home"=>"",
22
  "metaseo_desc_home"=>"",
23
  "metaseo_showfacebook"=>"",
24
  "metaseo_showtwitter"=>"",
25
+ "metaseo_twitter_card"=>"summary",
26
  "metaseo_showtmetablock"=>0
27
  );
28
  $settings = get_option( '_metaseo_settings' );
202
  add_settings_field('metaseo_desc_home', __('Homepage meta description ', 'wpms'), array( $this, 'metaseo_desc_home' ), 'metaseo_settings', 'metaseo_dashboard');
203
  add_settings_field('metaseo_showfacebook', __('Facebook profile URL ', 'wpms'), array( $this, 'showfacebook' ), 'metaseo_settings', 'metaseo_dashboard');
204
  add_settings_field('metaseo_showtwitter', __('Twitter Username ', 'wpms'), array( $this, 'showtwitter' ), 'metaseo_settings', 'metaseo_dashboard');
205
+ add_settings_field('metaseo_twitter_card', __('The default card type to use ', 'wpms'), array( $this, 'showtwittercard' ), 'metaseo_settings', 'metaseo_dashboard');
206
  add_settings_field('metaseo_showtmetablock', __('Meta block edition ', 'wpms'), array( $this, 'showtmetablock' ), 'metaseo_settings', 'metaseo_dashboard');
207
  }
208
 
247
  echo '<input id="metaseo_showtwitter" name="_metaseo_settings[metaseo_showtwitter]" type="text" value="'.esc_attr( $twitter ).'" size="50"/>';
248
  }
249
 
250
+ public function showtwittercard(){
251
+ $twitter_card = isset( $this->settings['metaseo_twitter_card'] ) ? $this->settings['metaseo_twitter_card'] : 'summary';
252
+ echo '<select class="select" name="_metaseo_settings[metaseo_twitter_card]" id="metaseo_twitter_card">';
253
+ foreach (self::$metaseo_twitter_card as $k => $v){
254
+ if($twitter_card == $k){
255
+ echo '<option selected value="'.$k.'">'.$v.'</option>';
256
+ }else{
257
+ echo '<option value="'.$k.'">'.$v.'</option>';
258
+ }
259
+ }
260
+ echo '</select>';
261
+ }
262
 
263
  private function load_meta_boxes() {
264
  if ( in_array( $this->pagenow, array(
332
  wp_enqueue_script('jquery');
333
 
334
  wp_enqueue_script(
335
+ 'wpmetaseoAdmin', plugins_url('js/metaseo_admin.js', dirname(__FILE__)), array('jquery'), WPMSEO_VERSION, true
336
  );
337
+
338
+ if($current_screen->base == 'wp-meta-seo_page_metaseo_image_meta' || $current_screen->base == 'wp-meta-seo_page_metaseo_content_meta'){
339
+ wp_enqueue_script('wpms-bulk', plugins_url('js/wpms-bulk-action.js', dirname(__FILE__)), array('jquery'), WPMSEO_VERSION, true);
340
+ wp_localize_script('wpms-bulk', 'wpmseobulkL10n', $this->meta_seo_localize_script());
341
+ }
342
+
343
  if($current_screen->base == 'toplevel_page_metaseo_dashboard'){
344
+ wp_enqueue_script('Chart', plugins_url('js/Chart.js', dirname(__FILE__)), array('jquery'), WPMSEO_VERSION, true);
345
+ wp_enqueue_script('jquery-knob', plugins_url('js/jquery.knob.js', dirname(__FILE__)), array('jquery'), WPMSEO_VERSION, true);
346
+ wp_enqueue_script('metaseo-dashboard', plugins_url('js/dashboard.js', dirname(__FILE__)), array('jquery'), WPMSEO_VERSION, true);
347
  wp_enqueue_style('chart', plugins_url('/css/chart.css', dirname(__FILE__) ) );
348
  wp_enqueue_style('metaseo-quirk', plugins_url('/css/metaseo-quirk.css', dirname(__FILE__) ) );
349
  }
356
  array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
357
  }
358
 
359
+ public function meta_seo_localize_script() {
360
+ return array(
361
+ 'metaseo_message_false_copy' => __( 'We didn\'t find any element to apply a batch copy, congrats!', 'wpms' ),
362
+ );
363
+ }
364
+
365
  /**
366
  * Load additional admin stylesheets
367
  * of jquery-ui
473
  break;
474
  }
475
  }
476
+ }
477
+
478
+ function wpms_bulk_image_copy(){
479
+ global $wpdb;
480
+ if(empty($_POST['mtype'])) wp_send_json (false);
481
+ if(isset($_POST['sl_bulk']) && $_POST['sl_bulk'] == 'all'){
482
+ // select all
483
+ $limit = 500;
484
+ // check image alt and title empty
485
+ $margs = array(
486
+ 'posts_per_page' => -1,'post_type' => 'attachment','post_status' => 'any',
487
+ 'meta_query' => array(
488
+ 'relation' => 'OR',
489
+ array(
490
+ 'key' => '_wp_attachment_image_alt',
491
+ 'compare' => 'NOT EXISTS',
492
+ ),
493
+ array(
494
+ 'key' => '_wp_attachment_image_alt',
495
+ 'value' => false,
496
+ 'type' => 'BOOLEAN'
497
+ ),
498
+ ));
499
+
500
+ $m_newquery = new WP_Query( $margs );
501
+ $mposts_empty_alt = $m_newquery->get_posts();
502
+ $check_title = $wpdb->get_var("SELECT COUNT(posts.ID) as total FROM ".$wpdb->prefix."posts as posts WHERE posts.post_type = 'attachment' AND post_title = ''");
503
+
504
+ switch ($_POST['mtype']){
505
+ case 'image_alt':
506
+ if(count($mposts_empty_alt) == 0 ) wp_send_json (false);
507
+ break;
508
+
509
+ case 'image_title':
510
+ if($check_title == 0) wp_send_json (false);
511
+ break;
512
+ }
513
+
514
+ // query attachment and update meta
515
+ $total = $wpdb->get_var("SELECT COUNT(posts.ID) as total FROM ".$wpdb->prefix."posts as posts WHERE posts.post_type = 'attachment'");
516
+
517
+ $j = ceil((int)$total/$limit);
518
+ for($i = 0;$i<=$j; $i++){
519
+ $ofset = $i*$limit;
520
+ $attachments = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."posts as posts
521
+ WHERE posts.post_type = 'attachment' LIMIT $limit OFFSET $ofset");
522
+
523
+ foreach ($attachments as $attachment){
524
+ $i_info_url = pathinfo($attachment->guid);
525
+ $i_alt = get_post_meta($attachment->ID,'_wp_attachment_image_alt',true);
526
+
527
+ switch ($_POST['mtype']){
528
+ case 'image_alt':
529
+ if($i_alt == ''){
530
+ update_post_meta($attachment->ID , '_wp_attachment_image_alt',$i_info_url['filename']);
531
+ }
532
+ break;
533
+
534
+ case 'image_title':
535
+ if($attachment->post_title == ''){
536
+ wp_update_post(array('ID' => $attachment->ID,'post_title' => $i_info_url['filename']));
537
+ }
538
+ break;
539
+ }
540
+ }
541
+ }
542
+
543
+ wp_send_json(true);
544
+
545
+ }else{
546
+ // selected
547
+ if(isset($_POST['ids'])){
548
+ $ids = $_POST['ids'];
549
+ $margs = array(
550
+ 'posts_per_page' => -1,
551
+ 'post_type' => 'attachment',
552
+ 'post_status' => 'any',
553
+ 'post__in' => $ids,
554
+ 'meta_query' => array(
555
+ 'relation' => 'OR',
556
+ array(
557
+ 'key' => '_wp_attachment_image_alt',
558
+ 'compare' => 'NOT EXISTS',
559
+ ),
560
+ array(
561
+ 'key' => '_wp_attachment_image_alt',
562
+ 'value' => false,
563
+ 'type' => 'BOOLEAN'
564
+ ),
565
+ ));
566
+
567
+ $query = "SELECT *
568
+ FROM $wpdb->posts
569
+ WHERE `post_type` = 'attachment'
570
+ AND `post_mime_type` LIKE '%image%'
571
+ AND `post_title` = ''
572
+ AND `ID` IN (". implode(',', $ids).")
573
+ ";
574
+
575
+ $m_newquery = new WP_Query( $margs );
576
+ $mposts_empty_alt = $m_newquery->get_posts();
577
+ $mposts_empty_title = $wpdb->get_results($query);
578
+
579
+ switch ($_POST['mtype']){
580
+ case 'image_alt':
581
+ if(!empty($mposts_empty_alt)){
582
+ foreach ($mposts_empty_alt as $post){
583
+ $i_info_url = pathinfo($post->guid);
584
+ update_post_meta($post->ID , '_wp_attachment_image_alt',$i_info_url['filename']);
585
+ }
586
+ }else{
587
+ wp_send_json(false);
588
+ }
589
+ break;
590
+
591
+ case 'image_title':
592
+ if(!empty($mposts_empty_title)){
593
+ foreach ($mposts_empty_title as $post){
594
+ $i_info_url = pathinfo($post->guid);
595
+ wp_update_post(array('ID' => $post->ID,'post_title' => $i_info_url['filename']));
596
+ }
597
+ }else{
598
+ wp_send_json(false);
599
+ }
600
+ break;
601
+ }
602
+ wp_send_json(true);
603
+
604
+ }else{
605
+ wp_send_json(false);
606
+ }
607
+ }
608
+
609
+
610
+ }
611
+
612
+ function wpms_bulk_post_copy_title(){
613
+ $post_types = get_post_types( array('public' => true, 'exclude_from_search' => false) ) ;
614
+ unset($post_types['attachment']);
615
+ if(isset($_POST['sl_bulk']) && $_POST['sl_bulk'] == 'all'){
616
+ $margs = array(
617
+ 'posts_per_page' => -1,
618
+ 'post_type' => $post_types,
619
+ 'post_status' => array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash') ,
620
+ 'meta_query' => array(
621
+ 'relation' => 'OR',
622
+ array(
623
+ 'key' => '_metaseo_metatitle',
624
+ 'compare' => 'NOT EXISTS',
625
+ ),
626
+ array(
627
+ 'key' => '_metaseo_metatitle',
628
+ 'value' => false,
629
+ 'type' => 'BOOLEAN'
630
+ ),
631
+ ));
632
+ }else{
633
+ if(isset($_POST['ids'])){
634
+ $ids = $_POST['ids'];
635
+ $margs = array(
636
+ 'posts_per_page' => -1,
637
+ 'post_type' => $post_types,
638
+ 'post_status' => array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash') ,
639
+ 'post__in' => $ids,
640
+ 'meta_query' => array(
641
+ 'relation' => 'OR',
642
+ array(
643
+ 'key' => '_metaseo_metatitle',
644
+ 'compare' => 'NOT EXISTS',
645
+ ),
646
+ array(
647
+ 'key' => '_metaseo_metatitle',
648
+ 'value' => false,
649
+ 'type' => 'BOOLEAN'
650
+ ),
651
+ ));
652
+ }else{
653
+ wp_send_json(false);
654
+ }
655
+
656
+ }
657
+
658
+ $m_newquery = new WP_Query( $margs );
659
+ $mposts = $m_newquery->get_posts();
660
+ if(!empty($mposts)){
661
+ foreach ($mposts as $post){
662
+ update_post_meta($post->ID , '_metaseo_metatitle',$post->post_title);
663
+ }
664
+ wp_send_json(true);
665
+ }else{
666
+
667
+ wp_send_json(false);
668
+ }
669
+
670
+
671
  }
672
 
673
  private function ajaxHandle(){
680
  //
681
  add_action( 'wp_ajax_import_meta_data', array('MetaSeo_Content_List_Table', 'importMetaData') );
682
  add_action( 'wp_ajax_dismiss_import_meta', array('MetaSeo_Content_List_Table', 'dismissImport') );
683
+ add_action('wp_ajax_wpms_bulk_post_copy',array($this,'wpms_bulk_post_copy_title'));
684
+ add_action('wp_ajax_wpms_bulk_image_copy',array($this,'wpms_bulk_image_copy'));
685
+
686
  //
687
  add_action( 'added_post_meta' , array( 'MetaSeo_Content_List_Table', 'updateMetaSync' ), 99, 4);
688
  add_action( 'updated_post_meta', array( 'MetaSeo_Content_List_Table', 'updateMetaSync' ), 99, 4);
inc/class.metaseo-content-list-table.php CHANGED
@@ -90,7 +90,6 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
90
  }
91
 
92
  function extra_tablenav($which) {
93
-
94
  #if ('top' == $which) {
95
  echo '<div class="alignleft actions">';
96
  global $wpdb;
@@ -113,15 +112,13 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
113
  $obj = get_post_type_object($post_type->post_type);
114
  $options .= sprintf('<option value="%2$s" %3$s>%1$s</option>', $obj->labels->name, $post_type->post_type, selected($selected, $post_type->post_type, false));
115
  }
116
-
117
- if($which=='top') {
118
- echo sprintf('<select name="post_type_filter" class="metaseo-filter">%1$s</select>', $options);
119
- submit_button(__('Filter'), 'button', 'do_filter', false, array('id' => 'post-query-submit'));
120
- }else{
121
- echo sprintf('<select name="post_type_filter" class="metaseo-filter">%1$s</select>', $options);
122
- submit_button(__('Filter'), 'button', 'do_filter', false, array('id' => 'post-query-submit'));
123
- }
124
 
 
 
 
 
 
 
125
  echo "</div>";
126
  #echo "</form>";
127
  #}
@@ -129,6 +126,7 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
129
 
130
  function get_columns() {
131
  return $columns = array(
 
132
  'col_id' => __('', 'wpms'),
133
  'col_title' => __('Title', 'wpms'),
134
  'col_meta_title' => __('Meta Title', 'wpms'),
@@ -256,14 +254,13 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
256
  }
257
 
258
  function display_rows() {
259
-
260
  $records = $this->items;
261
  $i = 0;
262
  $alternate = "";
263
  $url = preg_replace('/(http|https):\/\/[w]*[.]?/', '', network_site_url('/'));
264
 
265
  list( $columns, $hidden ) = $this->get_column_info();
266
-
267
  if (!empty($records)) {
268
  foreach ($records as $rec) {
269
  $alternate = 'alternate' == $alternate ? '' : 'alternate';
@@ -285,6 +282,13 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
285
  $attributes = $class . $style;
286
 
287
  switch ($column_name) {
 
 
 
 
 
 
 
288
  case 'col_id':
289
  echo '<td class="col_id" >';
290
  echo $i;
@@ -378,6 +382,7 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
378
  }
379
 
380
  function process_action() {
 
381
  $current_url = set_url_scheme('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
382
  $redirect = false;
383
 
90
  }
91
 
92
  function extra_tablenav($which) {
 
93
  #if ('top' == $which) {
94
  echo '<div class="alignleft actions">';
95
  global $wpdb;
112
  $obj = get_post_type_object($post_type->post_type);
113
  $options .= sprintf('<option value="%2$s" %3$s>%1$s</option>', $obj->labels->name, $post_type->post_type, selected($selected, $post_type->post_type, false));
114
  }
 
 
 
 
 
 
 
 
115
 
116
+ $sl_bulk = '<select name="mbulk_copy" class="mbulk_copy"><option value="0">'.__('Bulk Copy','wpms').'</option><option value="all">'.__('All Posts','wpms').'</option><option value="bulk-copy-metatitle">'.__('Selected posts','wpms').'</option></select>';
117
+ $btn_bulk = '<input type="button" name="do_copy" id="post_do_copy" class="button button-primary btn_do_copy post_do_copy" value="'.__('Content title as meta title','wpms').'"><span class="spinner"></span>';
118
+
119
+ echo sprintf('<select name="post_type_filter" class="metaseo-filter">%1$s</select>', $options);
120
+ submit_button(__('Filter'), 'button', 'do_filter', false, array('id' => 'post-query-submit'));
121
+ echo $sl_bulk . $btn_bulk;
122
  echo "</div>";
123
  #echo "</form>";
124
  #}
126
 
127
  function get_columns() {
128
  return $columns = array(
129
+ 'cb' => '<input id="cb-select-all-1" type="checkbox" style="margin:0">',
130
  'col_id' => __('', 'wpms'),
131
  'col_title' => __('Title', 'wpms'),
132
  'col_meta_title' => __('Meta Title', 'wpms'),
254
  }
255
 
256
  function display_rows() {
 
257
  $records = $this->items;
258
  $i = 0;
259
  $alternate = "";
260
  $url = preg_replace('/(http|https):\/\/[w]*[.]?/', '', network_site_url('/'));
261
 
262
  list( $columns, $hidden ) = $this->get_column_info();
263
+
264
  if (!empty($records)) {
265
  foreach ($records as $rec) {
266
  $alternate = 'alternate' == $alternate ? '' : 'alternate';
282
  $attributes = $class . $style;
283
 
284
  switch ($column_name) {
285
+ case 'cb':
286
+ echo '<th scope="row" class="check-column">';
287
+ echo '<input id="cb-select-1" class="metaseo_post" type="checkbox" name="post[]" value="'.$rec->ID.'">';
288
+ echo '</th>';
289
+
290
+ break;
291
+
292
  case 'col_id':
293
  echo '<td class="col_id" >';
294
  echo $i;
382
  }
383
 
384
  function process_action() {
385
+
386
  $current_url = set_url_scheme('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
387
  $redirect = false;
388
 
inc/class.metaseo-dashboard.php CHANGED
@@ -182,7 +182,7 @@ class MetaSeo_Dashboard {
182
  }
183
 
184
  $html = trim($tmp_dom->saveHTML());
185
- $html = str_replace('We don\'t have', 'Alexa doesn\'t has', $html);
186
  $html = str_replace('Get Certified', '', $html);
187
  $html = str_replace('"/topsites/countries', '"http://www.alexa.com/topsites/countries', $html);
188
  return $html;
182
  }
183
 
184
  $html = trim($tmp_dom->saveHTML());
185
+ $html = str_replace('We don\'t have', __('Alexa doesn\'t have','wpms'), $html);
186
  $html = str_replace('Get Certified', '', $html);
187
  $html = str_replace('"/topsites/countries', '"http://www.alexa.com/topsites/countries', $html);
188
  return $html;
inc/class.metaseo-image-list-table.php CHANGED
@@ -38,7 +38,18 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
38
  <?php $this->months_fillter('attachment','sldate1','filter_date_action'); ?>
39
  </div>
40
  <?php endif ?>
41
-
 
 
 
 
 
 
 
 
 
 
 
42
  <input type="hidden" name="page" value="metaseo_image_meta" />
43
  <?php if (!empty($_REQUEST['post_status'])): ?>
44
  <input type="hidden" name="post_status" value="<?php echo esc_attr($_REQUEST['post_status']); ?>" />
@@ -103,7 +114,7 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
103
 
104
  function extra_tablenav($which) {
105
 
106
- #if ('top' == $which) {
107
  echo '<div class="alignleft actions">';
108
  global $wpdb;
109
 
@@ -125,7 +136,7 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
125
  $obj = get_post_type_object($post_type->post_type);
126
  $options .= sprintf('<option value="%2$s" %3$s>%1$s</option>', $obj->labels->name, $post_type->post_type, selected($selected, $post_type->post_type, false));
127
  }
128
-
129
  echo "</div>";
130
  #echo "</form>";
131
  #}
@@ -133,6 +144,7 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
133
 
134
  function get_columns() {
135
  return $columns = array(
 
136
  'col_id' => __('ID', 'wpms'),
137
  'col_image' => __('Image', 'wpms'),
138
  'col_image_name' => __('Name', 'wpms'),
@@ -179,7 +191,7 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
179
  if ( ! empty( $columns['cb'] ) ) {
180
  static $cb_counter = 1;
181
  $columns['cb'] = '<label class="screen-reader-text" for="cb-select-all-' . $cb_counter . '">' . __( 'Select All' ) . '</label>'
182
- . '<input id="cb-select-all-' . $cb_counter . '" type="checkbox" />';
183
  $cb_counter++;
184
  }
185
 
@@ -227,9 +239,11 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
227
  elseif($column_key === 'col_image_info'){
228
  echo "<th scope='col' $id $class $style colspan=\"5\">$column_display_name</th>";
229
  }
230
- else{
231
- echo "<th scope='col' $id $class $style colspan=\"3\">$column_display_name</th>";
232
- }
 
 
233
  }
234
  }
235
 
@@ -432,7 +446,6 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
432
  }
433
 
434
  echo '<tr id="record_' . $rec->ID . '" class="' . $classes . '" >';
435
-
436
  foreach ($columns as $column_name => $column_display_name) {
437
 
438
  $class = sprintf('class="%1$s column-%1$s"', $column_name);
@@ -445,6 +458,12 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
445
  $attributes = $class . $style;
446
 
447
  switch ($column_name) {
 
 
 
 
 
 
448
  case 'col_id':
449
  echo '<td class="col_id" colspan="1">';
450
  echo $i;
38
  <?php $this->months_fillter('attachment','sldate1','filter_date_action'); ?>
39
  </div>
40
  <?php endif ?>
41
+
42
+ <div class="alignleft">
43
+ <select name="image_mbulk_copy" class="mbulk_copy">
44
+ <option value="0"><?php _e('Bulk Copy','wpms') ?></option>
45
+ <option value="all"><?php _e('All Images','wpms') ?></option>
46
+ <option value="bulk-copy-title-alt"><?php _e('Selected images','wpms') ?></option>
47
+ </select>
48
+ <input type="button" name="image_do_copy_alt" class="button button-primary btn_do_copy image_do_copy_alt" value="<?php _e('Image name as alt text','wpms') ?>">
49
+ <input type="button" name="image_do_copy_title" class="button button-primary btn_do_copy image_do_copy_title" value="<?php _e('Image name as image title','wpms') ?>">
50
+ <span class="spinner"></span>
51
+ </div>
52
+
53
  <input type="hidden" name="page" value="metaseo_image_meta" />
54
  <?php if (!empty($_REQUEST['post_status'])): ?>
55
  <input type="hidden" name="post_status" value="<?php echo esc_attr($_REQUEST['post_status']); ?>" />
114
 
115
  function extra_tablenav($which) {
116
 
117
+ #if ('top' == $which) {
118
  echo '<div class="alignleft actions">';
119
  global $wpdb;
120
 
136
  $obj = get_post_type_object($post_type->post_type);
137
  $options .= sprintf('<option value="%2$s" %3$s>%1$s</option>', $obj->labels->name, $post_type->post_type, selected($selected, $post_type->post_type, false));
138
  }
139
+
140
  echo "</div>";
141
  #echo "</form>";
142
  #}
144
 
145
  function get_columns() {
146
  return $columns = array(
147
+ 'cb' => '<input id="cb-select-all-1" type="checkbox">',
148
  'col_id' => __('ID', 'wpms'),
149
  'col_image' => __('Image', 'wpms'),
150
  'col_image_name' => __('Name', 'wpms'),
191
  if ( ! empty( $columns['cb'] ) ) {
192
  static $cb_counter = 1;
193
  $columns['cb'] = '<label class="screen-reader-text" for="cb-select-all-' . $cb_counter . '">' . __( 'Select All' ) . '</label>'
194
+ . '<input id="cb-select-all-' . $cb_counter . '" type="checkbox" style="margin:0;" />';
195
  $cb_counter++;
196
  }
197
 
239
  elseif($column_key === 'col_image_info'){
240
  echo "<th scope='col' $id $class $style colspan=\"5\">$column_display_name</th>";
241
  }
242
+ elseif($column_key === 'cb'){
243
+ echo "<th scope='col' $id $class style='padding:8px 10px;'>$column_display_name</th>";
244
+ }else{
245
+ echo "<th scope='col' $id $class $style colspan=\"3\">$column_display_name</th>";
246
+ }
247
  }
248
  }
249
 
446
  }
447
 
448
  echo '<tr id="record_' . $rec->ID . '" class="' . $classes . '" >';
 
449
  foreach ($columns as $column_name => $column_display_name) {
450
 
451
  $class = sprintf('class="%1$s column-%1$s"', $column_name);
458
  $attributes = $class . $style;
459
 
460
  switch ($column_name) {
461
+ case 'cb':
462
+ echo '<td scope="row" class="check-column" style="padding:8px 10px;">';
463
+ echo '<input id="cb-select-1" class="metaseo_post" type="checkbox" name="post[]" value="'.$rec->ID.'">';
464
+ echo '</td>';
465
+ break;
466
+
467
  case 'col_id':
468
  echo '<td class="col_id" colspan="1">';
469
  echo $i;
inc/class.metaseo-metabox.php CHANGED
@@ -167,23 +167,16 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
167
  $cached_replacement_vars = array();
168
 
169
  $vars_to_cache = array(
170
- 'date',
171
- 'id',
172
- 'sitename',
173
  'sitedesc',
174
  'sep',
175
  'page',
176
- 'currenttime',
177
- 'currentdate',
178
- 'currentday',
179
- 'currentmonth',
180
- 'currentyear',
181
  );
182
-
183
  foreach ($vars_to_cache as $var) {
184
  $cached_replacement_vars[$var] = $var;
185
  }
186
-
 
187
  return array_merge($cached_replacement_vars, array(
188
  'field_prefix' => self::$form_prefix,
189
  'choose_image' => __('Use Image', 'wpms'),
167
  $cached_replacement_vars = array();
168
 
169
  $vars_to_cache = array(
 
 
 
170
  'sitedesc',
171
  'sep',
172
  'page',
 
 
 
 
 
173
  );
174
+
175
  foreach ($vars_to_cache as $var) {
176
  $cached_replacement_vars[$var] = $var;
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'),
js/dashboard-chart.js DELETED
@@ -1,84 +0,0 @@
1
- function optimizationChecking(call_back) {
2
- var ret;
3
- jQuery.ajax({
4
- url: myAjax.ajax_url,
5
- async: false,
6
- type: 'post',
7
- data: {'action': 'opt_checking'},
8
- dataType: 'json',
9
- beforeSend: function() {
10
- },
11
- success: function(response) {
12
- ret = response;
13
- for (sid in response) {
14
- jQuery('#' + sid).removeClass('hz-loading').text(response[sid][0] + '/' + response[sid][1]);
15
- }
16
- if (typeof (call_back) == "function") {
17
- call_back(response);
18
- }
19
- },
20
- error: function() {
21
-
22
- }
23
-
24
- });
25
-
26
- return ret;
27
- }
28
-
29
-
30
- function drawChart(metacontent,notmetacontent, imagemeta,notimagemeta, imageoptimi,notimageoptimi) {
31
-
32
- var doughnutData = [
33
- {
34
- value: metacontent,
35
- color: "rgba(92,155,213,1)",
36
- highlight: "#5c9bd5",
37
- label: "Content Meta- Completed"
38
- },
39
- {
40
- value: notmetacontent,
41
- color: "#CECECE",
42
- label: "Content Meta- Imcompleted"
43
- },
44
- {
45
- value: imagemeta,
46
- color: "rgba(241,145,79,1)",
47
- highlight: "#ed7d31",
48
- label: "Image Meta - Completed"
49
- },
50
- {
51
- value: notimagemeta,
52
- color: "#CECECE",
53
- label: "Image Meta - Imcompleted"
54
- },
55
-
56
- {
57
- value: imageoptimi,
58
- color: "rgba(70,191,189,1)",
59
- highlight: "#46BFBD",
60
- label: "Image Optimized"
61
- },
62
- {
63
- value: notimageoptimi,
64
- color: "#CECECE",
65
- label: "Image not Optimized"
66
- }
67
-
68
-
69
- ];
70
-
71
- var ctx = document.getElementById("chart-area").getContext("2d");
72
- window.myDoughnut = new Chart(ctx).Doughnut(doughnutData, {
73
- responsive: true,
74
- tooltipTitleFontSize: 13,
75
- tooltipXOffset: 5,
76
- tooltipTemplate: "<%if (label){%><%=label%>: <%}%><%= ((value*3) %1 !=0)?(value*3).toFixed(2):(value*3) %> %",
77
- percentageInnerCutout: 70,
78
- scaleShowLabels: true,
79
- segmentShowStroke : false,
80
-
81
- });
82
-
83
-
84
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
js/metaseo_admin.js CHANGED
@@ -655,6 +655,15 @@ jQuery(document).ready(function($) {
655
  }
656
  });
657
  });
 
 
 
 
 
 
 
 
 
658
 
659
  $('.metaseo-img-name').bind('input propertychange', function() {
660
  var savedInfo = $(this).parent().find('span.saved-info');
655
  }
656
  });
657
  });
658
+
659
+ $('.mbulk_copy').bind('change', function(){
660
+ var value = $(this).val();
661
+ $('.mbulk_copy').each(function(i,e){
662
+ if($(e).val() != value){
663
+ $(e).val(value);
664
+ }
665
+ });
666
+ });
667
 
668
  $('.metaseo-img-name').bind('input propertychange', function() {
669
  var savedInfo = $(this).parent().find('span.saved-info');
js/wp-metaseo-metabox.js CHANGED
@@ -27,16 +27,8 @@ function msReplaceVariables(str, callback) {
27
  str = str.replace(/%%sitedesc%%/g, wpmseoMetaboxL10n.sitedesc);
28
  str = str.replace(/%%sitename%%/g, wpmseoMetaboxL10n.sitename);
29
  str = str.replace(/%%sep%%/g, wpmseoMetaboxL10n.sep);
30
- str = str.replace(/%%date%%/g, wpmseoMetaboxL10n.date);
31
- str = str.replace(/%%id%%/g, wpmseoMetaboxL10n.id);
32
  str = str.replace(/%%page%%/g, wpmseoMetaboxL10n.page);
33
- str = str.replace(/%%currenttime%%/g, wpmseoMetaboxL10n.currenttime);
34
- str = str.replace(/%%currentdate%%/g, wpmseoMetaboxL10n.currentdate);
35
- str = str.replace(/%%currentday%%/g, wpmseoMetaboxL10n.currentday);
36
- str = str.replace(/%%currentmonth%%/g, wpmseoMetaboxL10n.currentmonth);
37
- str = str.replace(/%%currentyear%%/g, wpmseoMetaboxL10n.currentyear);
38
-
39
- // str = str.replace(/%%mfocuskw%%/g, jQuery('#metaseo_wpmseo_mfocuskw').val().replace(/(<([^>]+)>)/ig, ''));
40
  // excerpt
41
  var excerpt = '';
42
  if (jQuery('#excerpt').length) {
27
  str = str.replace(/%%sitedesc%%/g, wpmseoMetaboxL10n.sitedesc);
28
  str = str.replace(/%%sitename%%/g, wpmseoMetaboxL10n.sitename);
29
  str = str.replace(/%%sep%%/g, wpmseoMetaboxL10n.sep);
 
 
30
  str = str.replace(/%%page%%/g, wpmseoMetaboxL10n.page);
31
+
 
 
 
 
 
 
32
  // excerpt
33
  var excerpt = '';
34
  if (jQuery('#excerpt').length) {
js/wpms-bulk-action.js ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(document).ready(function ($) {
2
+
3
+ $('.tablenav.top #post-query-submit , .tablenav.bottom #post-query-submit').click(function (e) {
4
+ if ($('.metaseo-filter').val() == 'bulk-copy-metatitle') {
5
+ e.preventDefault();
6
+ $('#bulk-copy-metatitle').show();
7
+ }
8
+ });
9
+
10
+ $('.btn_do_copy').click(function (e) {
11
+ var $this = $(this);
12
+ var sl_bulk = $('.mbulk_copy').val();
13
+ if (sl_bulk == 0)
14
+ return;
15
+
16
+ var mpost_selected = [];
17
+ if (sl_bulk != 'all') {
18
+ $(".metaseo_post").each(function (index) {
19
+ if ($(this).is(':checked')) {
20
+ mpost_selected.push($(this).val());
21
+ }
22
+ });
23
+ }
24
+
25
+ if ($this.hasClass('post_do_copy')) {
26
+ var maction = 'wpms_bulk_post_copy';
27
+ var mtype = 'post_title';
28
+ } else {
29
+ var maction = 'wpms_bulk_image_copy';
30
+ if($this.hasClass('image_do_copy_alt')){
31
+ var mtype = 'image_alt';
32
+ }else{
33
+ var mtype = 'image_title';
34
+ }
35
+ }
36
+
37
+ $this.closest('.tablenav').find('.spinner').show().css('visibility', 'visible');
38
+ $.ajax({
39
+ url: ajaxurl,
40
+ method: 'POST',
41
+ dataType: 'json',
42
+ data: {
43
+ action: maction,
44
+ ids: mpost_selected,
45
+ sl_bulk: sl_bulk,
46
+ mtype:mtype
47
+ },
48
+ success: function (res) {
49
+ if (res == true) {
50
+ window.location.assign(document.URL);
51
+ } else {
52
+ alert(wpmseobulkL10n.metaseo_message_false_copy);
53
+ }
54
+ $this.closest('.tablenav').find('.spinner').hide();
55
+ }
56
+
57
+ });
58
+ });
59
+
60
+ });
languages/wpms-en_GB.mo CHANGED
Binary file
languages/wpms-en_GB.po CHANGED
@@ -9,7 +9,7 @@ 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 @)"
@@ -378,6 +378,60 @@ msgstr "Homepage meta title "
378
  msgid "Homepage meta description "
379
  msgstr "Homepage meta description "
380
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
381
  #~ msgid ""
382
  #~ " This is a rendering of what this content might looks like in Google's "
383
  #~ "search results."
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 @)"
378
  msgid "Homepage meta description "
379
  msgstr "Homepage meta description "
380
 
381
+ msgid "Bulk Copy"
382
+ msgstr "Bulk Copy"
383
+
384
+ msgid "All Posts"
385
+ msgstr "All Posts"
386
+
387
+ msgid "Selected posts"
388
+ msgstr "Selected posts"
389
+
390
+ msgid "Content title as meta title"
391
+ msgstr "Content title as meta title"
392
+
393
+ msgid "All Images"
394
+ msgstr "All Images"
395
+
396
+ msgid "Selected images"
397
+ msgstr "Selected images"
398
+
399
+ msgid "Image name as alt text"
400
+ msgstr "Image name as alt text"
401
+
402
+ msgid "Image name as image title"
403
+ msgstr "Image name as image title"
404
+
405
+ msgid "We didn't find any element to apply a batch copy, congrats!"
406
+ msgstr "We didn't find any element to apply a batch copy, congrats!"
407
+
408
+ msgid "The default card type to use "
409
+ msgstr "The default card type to use "
410
+
411
+ msgid "Summary"
412
+ msgstr "Summary"
413
+
414
+ msgid "Summary with large image"
415
+ msgstr "Summary with large image"
416
+
417
+ msgid "Optimized at"
418
+ msgstr "Optimized at"
419
+
420
+ msgid "Wrong resized images"
421
+ msgstr "Wrong resized images"
422
+
423
+ msgid "Latest month new or updated content"
424
+ msgstr "Latest month new or updated content"
425
+
426
+ msgid "Image data filled (in content)"
427
+ msgstr "Image data filled (in content)"
428
+
429
+ msgid "More information about WP Meta SEO"
430
+ msgstr "More information about WP Meta SEO"
431
+
432
+ msgid "Other plugins from JoomUnited"
433
+ msgstr "Other plugins from JoomUnited"
434
+
435
  #~ msgid ""
436
  #~ " This is a rendering of what this content might looks like in Google's "
437
  #~ "search results."
languages/wpms-fr_FR.mo CHANGED
Binary file
languages/wpms-fr_FR.po CHANGED
@@ -9,7 +9,7 @@ msgstr ""
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
  "Language: fr_FR\n"
12
- "X-Generator: Poedit 1.8.5\n"
13
 
14
  msgid "Twitter username (without @)"
15
  msgstr "ID Twitter (sans le @)"
@@ -316,3 +316,57 @@ msgstr "Meta info page d'accueil"
316
 
317
  msgid "Homepage meta description "
318
  msgstr "Description page d'accueil"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
  "Language: fr_FR\n"
12
+ "X-Generator: Poedit 1.7.4\n"
13
 
14
  msgid "Twitter username (without @)"
15
  msgstr "ID Twitter (sans le @)"
316
 
317
  msgid "Homepage meta description "
318
  msgstr "Description page d'accueil"
319
+
320
+ msgid "Bulk Copy"
321
+ msgstr "Copy par lot"
322
+
323
+ msgid "All Posts"
324
+ msgstr "Tous les posts"
325
+
326
+ msgid "Selected posts"
327
+ msgstr "Sélection de contenu"
328
+
329
+ msgid "Content title as meta title"
330
+ msgstr "Titre contenu > meta titre"
331
+
332
+ msgid "All Images"
333
+ msgstr "Toutes les images"
334
+
335
+ msgid "Selected images"
336
+ msgstr "Sélection d'images"
337
+
338
+ msgid "Image name as alt text"
339
+ msgstr "Nom image > alt texte"
340
+
341
+ msgid "Image name as image title"
342
+ msgstr "Nom image > titre d'image"
343
+
344
+ msgid "We didn't find any element to apply a batch copy, congrats!"
345
+ msgstr "Aucun élément sur le quel appliquer une action, félicitations !"
346
+
347
+ msgid "The default card type to use "
348
+ msgstr "Type de Twitter card par défaut"
349
+
350
+ msgid "Summary"
351
+ msgstr "Sommaire"
352
+
353
+ msgid "Summary with large image"
354
+ msgstr "Sommaire avec large image"
355
+
356
+ msgid "Optimized at"
357
+ msgstr "Optimisé à"
358
+
359
+ msgid "Wrong resized images"
360
+ msgstr "Image redimentionnées"
361
+
362
+ msgid "Latest month new or updated content"
363
+ msgstr "Contenu ajouté ou mis à jour le mois dernier"
364
+
365
+ msgid "Image data filled (in content)"
366
+ msgstr "Informations images complétées"
367
+
368
+ msgid "More information about WP Meta SEO"
369
+ msgstr "Plus d'info sur le plugin WP Meta SEO"
370
+
371
+ msgid "Other plugins from JoomUnited"
372
+ msgstr "Autres plugin de JoomUnited"
languages/wpms.pot CHANGED
@@ -11,6 +11,7 @@ msgstr ""
11
  "Content-Transfer-Encoding: 8bit\n"
12
  "Language: en_GB\n"
13
  "X-Generator: Poedit 1.8.5\n"
 
14
 
15
  msgid "Twitter username (without @)"
16
  msgstr ""
@@ -317,3 +318,64 @@ msgstr ""
317
 
318
  msgid "Homepage meta description "
319
  msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  "Content-Transfer-Encoding: 8bit\n"
12
  "Language: en_GB\n"
13
  "X-Generator: Poedit 1.8.5\n"
14
+ "X-Poedit-SourceCharset: UTF-8\n"
15
 
16
  msgid "Twitter username (without @)"
17
  msgstr ""
318
 
319
  msgid "Homepage meta description "
320
  msgstr ""
321
+
322
+ msgid "Bulk copy"
323
+ msgstr ""
324
+
325
+ msgid "All content"
326
+ msgstr ""
327
+
328
+ msgid "Selected posts"
329
+ msgstr ""
330
+
331
+ msgid "Content title as meta title"
332
+ msgstr ""
333
+
334
+ msgid "All images"
335
+ msgstr ""
336
+
337
+ msgid "Selected images"
338
+ msgstr ""
339
+
340
+ msgid "Image name as alt text"
341
+ msgstr ""
342
+
343
+ msgid "Image name as image title"
344
+ msgstr ""
345
+
346
+ msgid "We didn't find any element to apply a batch copy, congrats!"
347
+ msgstr ""
348
+
349
+ msgid "The default card type to use "
350
+ msgstr ""
351
+
352
+ msgid "Summary"
353
+ msgstr ""
354
+
355
+ msgid "Summary with large image"
356
+ msgstr ""
357
+
358
+ msgid "Optimized at"
359
+ msgstr ""
360
+
361
+ msgid "Wrong resized images"
362
+ msgstr ""
363
+
364
+ msgid "Latest month new or updated content"
365
+ msgstr ""
366
+
367
+ msgid "Image data filled (in content)"
368
+ msgstr ""
369
+
370
+ msgid "More information about WP Meta SEO"
371
+ msgstr ""
372
+
373
+ msgid "Other plugins from JoomUnited"
374
+ msgstr ""
375
+
376
+ msgid "More information about WP Meta SEO"
377
+ msgstr ""
378
+
379
+ msgid "Other plugins from JoomUnited"
380
+ msgstr ""
381
+
readme.txt CHANGED
@@ -1,6 +1,6 @@
1
  === WP Meta SEO ===
2
  Contributors: JoomUnited
3
- Tags: google, webmaster tools, keywords, meta, meta description, meta keywords, meta title, robots meta, search engine optimization, seo, wordpress seo, yahoo, image optimization, image resize, custom post seo, alt, facebook, twitter, seo score, open graph, og, title, title tag
4
  Requires at least: 4.0
5
  Tested up to: 4.3.1
6
  Stable tag: 1.3.0
@@ -25,15 +25,21 @@ WP Meta SEO gives you the control over all your meta content and images. Bulk SE
25
 
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
- A bunch of people reduce the size of the pictures handling the border and resizing in html/css. You can now optimize the size of your images in articles, click fix and it's replaced.
 
 
 
 
 
 
29
 
30
 
31
  = On page SEO optimization and analysis =
32
 
33
  * Content SEO smart analysis bellow content
34
  * Search engine snippet preview
35
- * AJAX analysis refresh
36
- * 7 criteria of analysis
37
  * Check: Page title word in content heading
38
  * Check: Page title word in content
39
  * Check: Page URL matches with page title
@@ -48,28 +54,32 @@ A bunch of people reduce the size of the pictures handling the border and resizi
48
  [vimeo https://vimeo.com/113695156]
49
 
50
 
51
- = SEO features list =
52
 
53
- * Reduce page weight by fix image size
54
  * All alt tags edition on single view
55
  * See all your snippet in one view
56
  * Image name, title, description and legend
57
  * Dashboard SEO check
58
- * Automatic AJAX saving
59
  * On page analysis: fix SEO criteria
60
- * Custom type mate edition
 
61
  * Yoast SEO import & sync
62
- * Alexa world rank
63
- * Meta content filtering
64
- * Optimize images in all your post and pages
65
- * Live Google snippet preview
66
- * Edit images file name in single view
67
- * All in one SEO importer and sync Filter content by post type: post, page, custom
 
68
  * Image date filtering
69
  * Content meta length limit (Google + Yahoo + Bing)
70
  * SEO problem warning
71
  * Bulk image resizing
72
  * One click image title copy
 
 
73
 
74
  = Main plugins from JoomUnited: =
75
  * WP Media Folder: https://www.joomunited.com/wordpress-products/wp-media-folder
@@ -80,7 +90,8 @@ A bunch of people reduce the size of the pictures handling the border and resizi
80
 
81
  = Support =
82
 
83
- A PDF support document is provided and a dedicated support can be provided additionally with a membership.
 
84
  **More details here:** http://www.joomunited.com/wordpress-products/wp-meta-seo
85
 
86
  == Installation ==
@@ -88,23 +99,32 @@ A PDF support document is provided and a dedicated support can be provided addit
88
  = To install the automatically: =
89
  * Through WordPress admin, use the menu: Plugin > Add new
90
  * Search for WP Meta SEO
91
- * Click on install then activate link
92
 
93
  = To install the plugin manually: =
94
  * Download and unzip the plugin wp-meta-seo.zip
95
- * Upload the seo-ultimate directory to /wp-content/plugins/
96
- * Activate the plugin through the 'Plugins' menu in WordPress.
 
97
 
98
  Once the plugin is installed, open the bulk edition through the admin menu or open a content to load SEO on page analysis
99
 
100
  == Frequently Asked Questions ==
101
 
102
- = Which browsers work best with the WP Meta SEO administration interface? =
103
- WP Meta SEO is using HTML5 features so to be sure run the latest version of Chrome / Firefox / Safari or IE9+
 
 
 
 
104
 
105
  = Is WP Meta SEO slowing down my website? =
106
  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)
107
 
 
 
 
 
108
  = Compatibility =
109
  What's the minimum version of WordPress required to run WP Meta SEO? WordPress 4.0 is required. WP Meta SEO may generate PHP errors if you tried to run it on an earlier version, and so it will simply refuse to activate on any version of WordPress that's older than 4.0
110
 
@@ -116,6 +136,9 @@ In the admin of WordPress, on the left menu named WP Meta SEO and its sub menu f
116
  Go to the Plugins > WP Meta SEO > Deactivate > Delete
117
  If you choose to install it later all your SEO data will remain in place (database stored)
118
 
 
 
 
119
  == Screenshots ==
120
 
121
  1. Main dashboard of the plugin with SEO optimization check
@@ -127,10 +150,15 @@ If you choose to install it later all your SEO data will remain in place (databa
127
  1. Detail and alert on the element that you can optimize
128
  1. Image replace confirmation
129
 
130
-
131
-
132
  == Changelog ==
133
 
 
 
 
 
 
 
 
134
  = 1.3.0 =
135
  * New SEO check dashboard
136
  * Check for SEO permalinks
@@ -172,14 +200,5 @@ If you choose to install it later all your SEO data will remain in place (databa
172
 
173
  == Upgrade Notice ==
174
 
175
- Update through the automatic WordPress updater, all WP Meta SEO content will remain in place
176
-
177
-
178
- <PageMap>
179
- <DataObject type="thumbnail">
180
- <Attribute name="src" value="https://www.joomunited.com/images/WP-Meta-SEO/icon-128x128.png"/>
181
- <Attribute name="width" value="100"/>
182
- <Attribute name="height" value="130"/>
183
- </DataObject>
184
- </PageMap>
185
-
1
  === WP Meta SEO ===
2
  Contributors: JoomUnited
3
+ Tags: google, webmaster tools, keywords, meta, meta description, meta keywords, meta title, robots meta, search engine optimization, seo, wordpress seo, yahoo, image optimization, image resize, custom post seo
4
  Requires at least: 4.0
5
  Tested up to: 4.3.1
6
  Stable tag: 1.3.0
25
 
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).
35
 
36
 
37
  = On page SEO optimization and analysis =
38
 
39
  * Content SEO smart analysis bellow content
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
54
  [vimeo https://vimeo.com/113695156]
55
 
56
 
57
+ = SEO full features list =
58
 
59
+ * Reduce page weight by fixing HTML image resizing
60
  * All alt tags edition on single view
61
  * See all your snippet in one view
62
  * Image name, title, description and legend
63
  * Dashboard SEO check
64
+ * Automatic AJAX saving SEO content on bulk edition
65
  * On page analysis: fix SEO criteria
66
+ * Custom post type meta edition
67
+ * All custom post type and WooCommerce SEO optimization
68
  * Yoast SEO import & sync
69
+ * All in one SEO importer and sync
70
+ * Alexa traffic rank
71
+ * Meta content filtering by type
72
+ * Optimize images and replace all inside your content
73
+ * Live Google snippet preview
74
+ * Edit images file name in single view
75
+ * Filter content by post type: post, page, custom
76
  * Image date filtering
77
  * Content meta length limit (Google + Yahoo + Bing)
78
  * SEO problem warning
79
  * Bulk image resizing
80
  * One click image title copy
81
+ * SEO bulk copy: Copy image name to image alt and/or image title
82
+ * SEO bulk copy: Copy content title to content meta title
83
 
84
  = Main plugins from JoomUnited: =
85
  * WP Media Folder: https://www.joomunited.com/wordpress-products/wp-media-folder
90
 
91
  = Support =
92
 
93
+ A PDF support document is provided with WP Meta SEO on JoomUnited website
94
+ Feel free to ask SEO questions on our forum or here in the support section
95
  **More details here:** http://www.joomunited.com/wordpress-products/wp-meta-seo
96
 
97
  == Installation ==
99
  = To install the automatically: =
100
  * Through WordPress admin, use the menu: Plugin > Add new
101
  * Search for WP Meta SEO
102
+ * Click on install then click activate link
103
 
104
  = To install the plugin manually: =
105
  * Download and unzip the plugin wp-meta-seo.zip
106
+ * Upload the /wp-meta-seo directory to /wp-content/plugins/
107
+ * Activate the plugin through the 'Plugins' menu in WordPress
108
+ * Use the WP Meta SEO WordPress left menu
109
 
110
  Once the plugin is installed, open the bulk edition through the admin menu or open a content to load SEO on page analysis
111
 
112
  == Frequently Asked Questions ==
113
 
114
+ = Will the image rename bulk feature generate broken links? =
115
+ Not at all, it would have been bad for SEO :) the image name is dynamically replaced in all your content.
116
+
117
+ = If I edit image title and alt text, will that information be loaded each time my image is in a content? =
118
+ There's an SEO option for that :) WP Meta SEO will detect that the image has missing information and once edit it, you will have a list of all the image instance and where it's loaded.
119
+ So you'll be able to define SEO info for each instance.
120
 
121
  = Is WP Meta SEO slowing down my website? =
122
  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)
123
 
124
+ = Can I translate WP Meta SEO? =
125
+ 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.
126
+ You can contact us if you want it to be included in the WP Meta SEO package.
127
+
128
  = Compatibility =
129
  What's the minimum version of WordPress required to run WP Meta SEO? WordPress 4.0 is required. WP Meta SEO may generate PHP errors if you tried to run it on an earlier version, and so it will simply refuse to activate on any version of WordPress that's older than 4.0
130
 
136
  Go to the Plugins > WP Meta SEO > Deactivate > Delete
137
  If you choose to install it later all your SEO data will remain in place (database stored)
138
 
139
+ = Which browsers work best with the WP Meta SEO administration interface? =
140
+ WP Meta SEO is using HTML5 features so to be sure run the latest version of Chrome / Firefox / Safari or IE9+
141
+
142
  == Screenshots ==
143
 
144
  1. Main dashboard of the plugin with SEO optimization check
150
  1. Detail and alert on the element that you can optimize
151
  1. Image replace confirmation
152
 
 
 
153
  == Changelog ==
154
 
155
+ = 1.4.0 =
156
+ * Bulk copy new option: content title to meta title
157
+ * Bulk copy new option: image name to alt text
158
+ * Bulk copy new option: image name to image title
159
+ * Fix twitter card on SEO on page optimization
160
+ * Fix SEO meta empty in some themes
161
+
162
  = 1.3.0 =
163
  * New SEO check dashboard
164
  * Check for SEO permalinks
200
 
201
  == Upgrade Notice ==
202
 
203
+ Update through the automatic WordPress updater, all WP Meta SEO content will remain in place.
204
+ You WON'T loose 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.3.0
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.3.0');
49
 
50
  if (!defined('WPMSEO_FILE'))
51
  define('WPMSEO_FILE', __FILE__);
@@ -96,7 +96,9 @@ if (is_admin()) {
96
 
97
  // get meta description
98
  $meta_description = get_post_meta($wp_query->post->ID, '_metaseo_metadesc', true);
99
- if($meta_description == '') $meta_description = $wp_query->post->post_title;
 
 
100
  $meta_description_esc = esc_attr($meta_description);
101
 
102
  // get option reading
@@ -104,21 +106,19 @@ if (is_admin()) {
104
  $mpage_on_front = get_option('page_on_front');
105
  $mshow_on_front = get_option('show_on_front');
106
 
 
107
  // check homepage is latest post
108
- if((empty($mpage_for_posts) && empty($mpage_on_front) && $mshow_on_front == 'posts') || (empty($page_on_front) && !empty($mpage_for_posts) && $mshow_on_front== 'page') && is_home()){
109
- $settings = get_option( '_metaseo_settings' );
110
  $meta_title_esc = esc_attr($settings['metaseo_title_home']);
111
  $meta_description_esc = esc_attr($settings['metaseo_desc_home']);
112
  }
113
 
114
  // check homepage is a page
115
  if(get_post_meta($wp_query->post->ID, '_metaseo_metatitle', true) == '' && is_front_page() ){
116
- $settings = get_option( '_metaseo_settings' );
117
  $meta_title_esc = esc_attr($settings['metaseo_title_home']);
118
  }
119
 
120
  if(get_post_meta($wp_query->post->ID, '_metaseo_metadesc', true) == '' && is_front_page() ){
121
- $settings = get_option( '_metaseo_settings' );
122
  $meta_description_esc = esc_attr($settings['metaseo_desc_home']);
123
  }
124
 
@@ -148,7 +148,7 @@ if (is_admin()) {
148
  }
149
  }
150
 
151
- $meta_twitter_card = 'summary';
152
  $meta_twitter_image = get_post_meta($wp_query->post->ID,'_metaseo_metatwitter-image',true);
153
 
154
  $meta_facebook_title = get_post_meta($wp_query->post->ID,'_metaseo_metaopengraph-title',true);
@@ -210,7 +210,10 @@ if (is_admin()) {
210
  '<meta name="description" content="' . $meta_description_esc . '" />',
211
  ($meta_description_esc != '' ? true : false)),
212
 
213
- 'title' => array(),
 
 
 
214
  );
215
 
216
  if(get_post_meta($wp_query->post->ID, '_metaseo_metatitle', true) != ''){
@@ -219,7 +222,23 @@ if (is_admin()) {
219
  '<meta name="title" content="' . $meta_title_esc . '" />',
220
  ($meta_title_esc != '' ? true : false));
221
  }
222
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
223
  foreach($patterns as $k => $pattern){
224
  if(preg_match_all($pattern[0], $buffer, $matches)){
225
  $replacement = array();
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.4.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.4.0');
49
 
50
  if (!defined('WPMSEO_FILE'))
51
  define('WPMSEO_FILE', __FILE__);
96
 
97
  // get meta description
98
  $meta_description = get_post_meta($wp_query->post->ID, '_metaseo_metadesc', true);
99
+ if($meta_description == '') {
100
+ $meta_description = (strlen($wp_query->post->post_content) > 156)?substr($wp_query->post->post_content,0,152) . ' ...':$wp_query->post->post_content;
101
+ }
102
  $meta_description_esc = esc_attr($meta_description);
103
 
104
  // get option reading
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
  // check homepage is latest post
111
+ if((empty($mpage_for_posts) && empty($mpage_on_front) && $mshow_on_front == 'posts' && is_home()) || (empty($mpage_on_front) && !empty($mpage_for_posts) && $mshow_on_front== 'page' && is_home())){
 
112
  $meta_title_esc = esc_attr($settings['metaseo_title_home']);
113
  $meta_description_esc = esc_attr($settings['metaseo_desc_home']);
114
  }
115
 
116
  // check homepage is a page
117
  if(get_post_meta($wp_query->post->ID, '_metaseo_metatitle', true) == '' && is_front_page() ){
 
118
  $meta_title_esc = esc_attr($settings['metaseo_title_home']);
119
  }
120
 
121
  if(get_post_meta($wp_query->post->ID, '_metaseo_metadesc', true) == '' && is_front_page() ){
 
122
  $meta_description_esc = esc_attr($settings['metaseo_desc_home']);
123
  }
124
 
148
  }
149
  }
150
 
151
+ $meta_twitter_card = (!empty($settings['metaseo_twitter_card']))?$settings['metaseo_twitter_card']:'summary';
152
  $meta_twitter_image = get_post_meta($wp_query->post->ID,'_metaseo_metatwitter-image',true);
153
 
154
  $meta_facebook_title = get_post_meta($wp_query->post->ID,'_metaseo_metaopengraph-title',true);
210
  '<meta name="description" content="' . $meta_description_esc . '" />',
211
  ($meta_description_esc != '' ? true : false)),
212
 
213
+ 'title' => array(
214
+ '#<meta name="title" [^<>]+ ?>#i',
215
+ '<meta name="title" content="' . $meta_title_esc . '" />',
216
+ ($meta_title_esc != '' ? true : false)),
217
  );
218
 
219
  if(get_post_meta($wp_query->post->ID, '_metaseo_metatitle', true) != ''){
222
  '<meta name="title" content="' . $meta_title_esc . '" />',
223
  ($meta_title_esc != '' ? true : false));
224
  }
225
+
226
+ if($meta_twitter_site == ''){
227
+ unset($patterns['twitter_site']);
228
+ }
229
+
230
+ if($meta_twitter_image == ''){
231
+ unset($patterns['twitter_image']);
232
+ }
233
+
234
+ if($facebook_admin == ''){
235
+ unset($patterns['facebook_admin']);
236
+ }
237
+
238
+ if($meta_facebook_image == ''){
239
+ unset($patterns['facebook_image']);
240
+ }
241
+
242
  foreach($patterns as $k => $pattern){
243
  if(preg_match_all($pattern[0], $buffer, $matches)){
244
  $replacement = array();