WP Meta SEO - Version 3.3.0

Version Description

  • Add : If an image information are filled, add it by default if empty if image is re-used
  • Add : Compatibility with WPML, Polylang for meta edition and Media SEO content
  • Add : Possibility to edit meta information on categories
  • Add : Pro version notifications of features in some views
  • Add : Dashboard widget with 6 SEO criteria
  • Fix : Change the 404 error page title to remove the plugin name by default
Download this release

Release Info

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

Code changes from version 3.2.6 to 3.3.0

css/category_field.css ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .cat-title-len , .cat-desc-len {
2
+ background: none repeat scroll 0% 0% #7ad03a;
3
+ color: #FFF;
4
+ border-radius: 2px;
5
+ min-width: 15px;
6
+ text-align: center;
7
+ float: left;
8
+ padding: 0px 10px;
9
+ position: relative;
10
+ bottom: 12px;
11
+ left: 15px;
12
+ }
13
+
14
+ .length-wrong {
15
+ background: none repeat scroll 0% 0% #FFCC00;
16
+ }
17
+
18
+ .wpms_custom_cat_field{
19
+ float: left;
20
+ }
21
+
22
+ .metaseo-qtip {
23
+ font-size: 14px !important;
24
+ line-height: 18px !important;
25
+ }
css/dashboard_widgets.css ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wpms_dashboard_widgets h1 {
2
+ padding: 10px 0px 10px 20px
3
+ }
4
+
5
+ .wpms_dash_widgets{
6
+ margin: 7px 0px;
7
+ }
8
+
9
+ .wpms_dash_widgets .percent_1{
10
+ font-size: 21px !important;
11
+ }
12
+
13
+ .wpms_dashboard_widgets_left{
14
+ width: 45%;
15
+ float: left;
16
+ }
17
+
18
+ .wpms_dashboard_widgets_right{
19
+ width: 47%;
20
+ float: left;
21
+ }
22
+
23
+ .wpms_dashboard_widgets_left{
24
+ padding: 10px;
25
+ }
26
+ /*progress*/
27
+ .wpms_dashboard_widgets .progress-rating {
28
+ position: relative;
29
+ height: 6px;
30
+ display: block;
31
+ width: 100%;
32
+ border-radius: 2px;
33
+ margin: 46px 0px;
34
+ overflow: hidden;
35
+ background-color: rgba(255, 255, 255, 0.33);
36
+ float: left;
37
+ }
38
+
39
+ .wpms_dashboard_widgets .progress-rating .determinate {
40
+ position: absolute;
41
+ background-color: inherit;
42
+ top: 0;
43
+ left: 0;
44
+ bottom: 0;
45
+ background-color: #fff;
46
+ -webkit-transition: width 0.3s linear;
47
+ -moz-transition: width 0.3s linear;
48
+ -o-transition: width 0.3s linear;
49
+ -ms-transition: width 0.3s linear;
50
+ transition: width 0.3s linear;
51
+ }
52
+
53
+ .wpms_dashboard_widgets .progress {
54
+ position: relative;
55
+ height: 5px;
56
+ display: block;
57
+ width: 100%;
58
+ background-color: #fff;
59
+ border-radius: 2px;
60
+ margin: 0.5rem 0 1rem 0;
61
+ overflow: hidden;
62
+ }
63
+
64
+ .wpms_dashboard_widgets .dashboard-title {
65
+ color: #fff !important;
66
+ }
67
+
68
+ .wpms_dashboard_widgets p.dashboard-title {
69
+ font-size: 10px !important;
70
+ }
71
+
72
+ .wpms_dashboard_widgets .dashboard-card {
73
+ background: #00AFF5;
74
+ }
75
+
76
+ .wpms_dashboard_widgets h4 {
77
+ font-weight: normal !important;
78
+ }
79
+
80
+ .wpms_dashboard_widgets .panel {
81
+ min-height: 95px !important;
82
+ box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
83
+ }
84
+
85
+ #dashboard-widgets h3, #dashboard-widgets h4, #dashboard_quick_press .drafts h2 {
86
+ margin: 0 12px 3px;
87
+ }
88
+
89
+ .wpms-widgets-qtip {
90
+ border: 1px solid #707070;
91
+ color: #fff;
92
+ background-color: #707070;
93
+ z-index: 10000;
94
+ border-radius: 2px;
95
+ line-height: 100%;
96
+ font-size: 12px !important;
97
+ line-height: 18px !important;
98
+ }
99
+
100
+ .wpms-widgets-qtip .qtip-tip{
101
+ opacity: 0 !important;
102
+ }
css/metaseo_admin.css CHANGED
@@ -496,12 +496,12 @@ strong {
496
  display: block;
497
  }
498
 
499
- .content-box{
500
  padding: 10px;
501
  display: none;
502
  }
503
 
504
- .content-wpms-global{
505
  display: block;
506
  }
507
 
496
  display: block;
497
  }
498
 
499
+ .wrap_wpms_settings .content-box{
500
  padding: 10px;
501
  display: none;
502
  }
503
 
504
+ .content-box.content-wpms-global{
505
  display: block;
506
  }
507
 
css/notification.css ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* dashboard */
2
+ .toplevel_page_metaseo_dashboard .wpms_dashboard_notification{
3
+ width: 75%;
4
+ margin: 0px auto;
5
+ padding: 0px 10px;
6
+ }
7
+
8
+ .toplevel_page_metaseo_dashboard .wpms_dashboard_notification h1 {
9
+ padding: 10px 0px 10px 20px
10
+ }
11
+
12
+ .toplevel_page_metaseo_dashboard .wpms_dashboard_notification .dashboard_noti_title {
13
+ font-weight: 100;
14
+ width: 100%;
15
+ font-size: 22px;
16
+ color: #fff;
17
+ margin: 10px 0px 15px 0px;
18
+ }
19
+
20
+ .toplevel_page_metaseo_dashboard .wpms_dashboard_notification .msg{
21
+ font-size: 14px !important;
22
+ margin: 10px 0px 30px 0px;
23
+ float: left;
24
+ }
25
+
26
+ .toplevel_page_metaseo_dashboard .wpms_dashboard_widgets_content{
27
+ width: 100%;
28
+ float: left;
29
+ }
30
+
31
+ .toplevel_page_metaseo_dashboard .wpms_dashboard_notification .dashboard-title {
32
+ color: #fff !important;
33
+ }
34
+
35
+ .toplevel_page_metaseo_dashboard .wpms_dashboard_notification .wpmsclose_notification {
36
+ font-size: 16px !important;
37
+ font-weight: 100;
38
+ cursor: pointer;
39
+ }
40
+
41
+ .toplevel_page_metaseo_dashboard .wpms_dashboard_notification .dashboard-card {
42
+ background: #00AFF5;
43
+ }
44
+
45
+ .toplevel_page_metaseo_dashboard .wpms_dashboard_notification .panel {
46
+ min-height: 95px !important;
47
+ box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
48
+ }
49
+
50
+ /* Sitemap */
51
+ .wpms_notification{
52
+ width: 99%;
53
+ margin: 0px auto;
54
+ float: left;
55
+ margin-top: 10px;
56
+ }
57
+
58
+ .wpms_notification h1 {
59
+ padding: 10px 0px 10px 20px
60
+ }
61
+
62
+ .wpms_notification .dashboard_noti_title {
63
+ font-weight: 100;
64
+ width: 100%;
65
+ font-size: 22px;
66
+ color: #fff;
67
+ margin: 10px 0px 15px 0px;
68
+ float: left;
69
+ }
70
+
71
+ .wpms_notification .msg{
72
+ font-size: 14px !important;
73
+ width: 100%;
74
+ }
75
+
76
+ .wpms_notification .wpms_dashboard_widgets_content{
77
+ width: 100%;
78
+ float: left;
79
+ margin: 10px;
80
+ }
81
+
82
+ .wpms_notification .dashboard-title {
83
+ color: #fff !important;
84
+ }
85
+
86
+ .wpms_notification .wpmsclose_notification {
87
+ font-size: 16px !important;
88
+ font-weight: 100;
89
+ cursor: pointer;
90
+ }
91
+
92
+ .wpms_notification .dashboard-card {
93
+ background: #00AFF5;
94
+ }
95
+
96
+ .wpms_notification .panel {
97
+ min-height: 140px !important;
98
+ box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
99
+ }
100
+
101
+ .more-info{
102
+ float: left;
103
+ color: #fff !important;
104
+ font-size: 16px !important;
105
+ margin-right: 20px;
106
+ text-decoration: none;
107
+ }
108
+
109
+ .more-info:hover{
110
+ color: #fff;
111
+ }
inc/class.metaseo-admin.php CHANGED
@@ -31,7 +31,8 @@ class MetaSeo_Admin {
31
  "metaseo_linkfield" => 1,
32
  "metaseo_metatitle_tab" => 0,
33
  "metaseo_follow" => 0,
34
- "metaseo_index" => 0
 
35
  );
36
  $settings = get_option('_metaseo_settings');
37
 
@@ -106,6 +107,84 @@ class MetaSeo_Admin {
106
 
107
  add_action( 'wp_head', array( 'MetaSeo_Google_Analytics', 'tracking_code' ), 99 );
108
  add_action('admin_footer', array($this, 'add_editor_footer'));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
  }
110
 
111
  public function add_editor_footer() {
@@ -120,9 +199,8 @@ class MetaSeo_Admin {
120
  */
121
  function metaseo_create_db() {
122
  global $wpdb;
123
- $option_v = 'metaseo_db_version2.2.0';
124
  $db_installed = get_option($option_v, false);
125
-
126
  if (!$db_installed) {
127
  // create table wpms_links
128
  $sql = "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}wpms_links`(
@@ -173,9 +251,9 @@ class MetaSeo_Admin {
173
  }
174
 
175
  // create page 404
176
- $sql = $wpdb->prepare("SELECT COUNT(*) FROM " . $wpdb->prefix . "posts WHERE post_title = %s AND post_excerpt = %s AND post_type = %s", array("WP Meta SEO 404 Page", "metaseo_404_page", "page"));
177
- $post_if = $wpdb->get_var($sql);
178
- if ($post_if < 1) {
179
  $content = '<div class="wall" style="background-color: #F2F3F7; border: 30px solid #fff; width: 90%; height: 90%; margin: 0 auto;">
180
 
181
  <h1 style="text-align: center; font-family:\'open-sans\', arial; color: #444; font-size: 60px; padding: 50px;">ERROR 404 <br />-<br />NOT FOUND</h1>
@@ -186,13 +264,20 @@ class MetaSeo_Admin {
186
  <p style="text-align: center;"><a style=" font-family:\'open-sans\', arial; color: #444; font-size: 20px; padding: 20px; line-height: 30px; text-decoration: none;" href="' . get_home_url() . '"><< Go back to home page >></a></p>
187
  </div>';
188
  $_page404 = array(
189
- 'post_title' => 'WP Meta SEO 404 Page',
190
  'post_content' => $content,
191
  'post_status' => 'publish',
192
  'post_excerpt' => 'metaseo_404_page',
193
  'post_type' => 'page',
194
  );
195
  wp_insert_post($_page404);
 
 
 
 
 
 
 
196
  }
197
 
198
  $sql = $wpdb->prepare("SELECT COUNT(*) FROM " . $wpdb->prefix . "posts WHERE post_title = %s AND post_excerpt = %s AND post_type = %s", array("WPMS HTML Sitemap", "metaseo_html_sitemap", "page"));
@@ -779,6 +864,7 @@ class MetaSeo_Admin {
779
  add_settings_field('metaseo_linkfield', __('Link text field', 'wp-meta-seo'), array($this, 'showlinkfield'), 'metaseo_settings', 'metaseo_dashboard', array('label_for' => __('Add the link title field in the text editor and in the bulk link edition view', 'wp-meta-seo')));
780
  add_settings_field('metaseo_follow', __('Post/Page follow', 'wp-meta-seo'), array($this, 'showfollow'), 'metaseo_settings', 'metaseo_dashboard', array('label_for' => __('Add an option to setup Follow/Nofollow instruction for each content', 'wp-meta-seo')));
781
  add_settings_field('metaseo_index', __('Post/Page index', 'wp-meta-seo'), array($this, 'showindex'), 'metaseo_settings', 'metaseo_dashboard', array('label_for' => __('Add an option to say to search engine: hey! Do not index this content', 'wp-meta-seo')));
 
782
  }
783
 
784
  /*
@@ -889,6 +975,17 @@ class MetaSeo_Admin {
889
  <?php
890
  }
891
 
 
 
 
 
 
 
 
 
 
 
 
892
  /*
893
  * Display showfacebook input
894
  */
@@ -1031,6 +1128,20 @@ class MetaSeo_Admin {
1031
  wp_enqueue_style('m-font-awesome', plugins_url('css/font-awesome.css', dirname(__FILE__)), array(), WPMSEO_VERSION);
1032
  }
1033
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1034
  wp_register_style('m-style-qtip', plugins_url('css/jquery.qtip.css', dirname(__FILE__)), array(), WPMSEO_VERSION);
1035
  wp_register_script('jquery-qtip', plugins_url('js/jquery.qtip.min.js', dirname(__FILE__)), array('jquery'), '2.2.1', true);
1036
  wp_register_script('wpms-broken-link', plugins_url('js/wpms-broken-link.js', dirname(__FILE__)), array('jquery'), WPMSEO_VERSION, true);
@@ -1128,7 +1239,12 @@ class MetaSeo_Admin {
1128
  }
1129
 
1130
  // in JavaScript, object properties are accessed as ajax_object.ajax_url, ajax_object.we_value
1131
- wp_localize_script('wpmetaseoAdmin', 'myAjax', array('ajax_url' => admin_url('admin-ajax.php')));
 
 
 
 
 
1132
  }
1133
 
1134
  /**
@@ -1472,6 +1588,10 @@ class MetaSeo_Admin {
1472
  }
1473
  }
1474
  }
 
 
 
 
1475
  break;
1476
  case 'metaseo_google_sitemap':
1477
  if (!class_exists('MetaSeo_Content_List_Table')) {
@@ -1741,6 +1861,17 @@ class MetaSeo_Admin {
1741
  wp_send_json(false);
1742
  }
1743
  }
 
 
 
 
 
 
 
 
 
 
 
1744
 
1745
  /*
1746
  * Add ajax
@@ -1783,5 +1914,6 @@ class MetaSeo_Admin {
1783
  add_action('wp_ajax_wpms_dash_metatitle', array('MetaSeo_Dashboard', 'wpms_dash_metatitle'));
1784
  add_action('wp_ajax_wpms_dash_metadesc', array('MetaSeo_Dashboard', 'wpms_dash_metadesc'));
1785
  add_action('wp_ajax_wpms_dash_imgsmeta', array('MetaSeo_Dashboard', 'wpms_dash_imgsmeta'));
 
1786
  }
1787
  }
31
  "metaseo_linkfield" => 1,
32
  "metaseo_metatitle_tab" => 0,
33
  "metaseo_follow" => 0,
34
+ "metaseo_index" => 0,
35
+ "metaseo_overridemeta" => 1
36
  );
37
  $settings = get_option('_metaseo_settings');
38
 
107
 
108
  add_action( 'wp_head', array( 'MetaSeo_Google_Analytics', 'tracking_code' ), 99 );
109
  add_action('admin_footer', array($this, 'add_editor_footer'));
110
+ add_action('wp_dashboard_setup', array($this,'wpms_add_dashboard_widgets') );
111
+ add_action( 'category_add_form_fields', array($this,'wpms_category_add_new_meta_field'), 10, 2 );
112
+ add_action ('edit_category_form_fields', array($this,'wpms_category_fields'));
113
+ add_action( 'edited_category', array($this,'wpms_save_category_custom_meta'), 10, 2 );
114
+ add_action( 'create_category', array($this,'wpms_save_category_custom_meta'), 10, 2 );
115
+ }
116
+
117
+ public function wpms_category_add_new_meta_field() {
118
+ wp_enqueue_style('m-style-qtip', plugins_url('css/jquery.qtip.css', dirname(__FILE__)), array(), WPMSEO_VERSION);
119
+ wp_enqueue_script('jquery-qtip', plugins_url('js/jquery.qtip.min.js', dirname(__FILE__)), array('jquery'), '2.2.1', true);
120
+ wp_enqueue_style('wpms-category-field');
121
+ wp_enqueue_script('wpms-category-field');
122
+ // this will add the custom meta field to the add new term page
123
+ ?>
124
+ <div class="form-field">
125
+ <label class="wpms_custom_cat_field" alt="<?php _e('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.','wp-meta-seo') ?>"><?php _e('Search engine title','wp-meta-seo'); ?></label>
126
+ <textarea name="wpms_category_metatitle" class="wpms_category_metatitle"></textarea><br />
127
+ <div class="cat-title-len"><?php echo WPMS_CAT_METATITLE_LENGTH; ?></div>
128
+ </div>
129
+ <div class="form-field" style="margin-top: 20px;margin-bottom: 20px;">
130
+ <label for="extra1" class="wpms_custom_cat_field" alt="<?php _e('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.','wp-meta-seo') ?>"><?php _e('Search engine description','wp-meta-seo'); ?></label>
131
+ <textarea name="wpms_category_metadesc" class="wpms_category_metadesc"></textarea><br />
132
+ <div class="cat-desc-len"><?php echo WPMS_CAT_METADESC_LENGTH; ?></div>
133
+ </div>
134
+ <?php
135
+ }
136
+
137
+ public function wpms_save_category_custom_meta( $term_id ) {
138
+ if ( isset( $_POST['wpms_category_metatitle'] ) ) {
139
+ update_term_meta( $term_id, 'wpms_category_metatitle' , $_POST['wpms_category_metatitle']);
140
+ }
141
+
142
+ if ( isset( $_POST['wpms_category_metadesc'] ) ) {
143
+ update_term_meta( $term_id, 'wpms_category_metadesc' , $_POST['wpms_category_metadesc']);
144
+ }
145
+ }
146
+
147
+ //add extra fields to category edit form callback function
148
+ public function wpms_category_fields( $tag ) {
149
+ wp_enqueue_style('m-style-qtip', plugins_url('css/jquery.qtip.css', dirname(__FILE__)), array(), WPMSEO_VERSION);
150
+ wp_enqueue_script('jquery-qtip', plugins_url('js/jquery.qtip.min.js', dirname(__FILE__)), array('jquery'), '2.2.1', true);
151
+ wp_enqueue_style('wpms-category-field');
152
+ wp_enqueue_script('wpms-category-field');
153
+ $t_id = $tag->term_id;
154
+ $cat_metatitle = get_term_meta($t_id,'wpms_category_metatitle',true);
155
+ $cat_metadesc = get_term_meta($t_id,'wpms_category_metadesc',true);
156
+ ?>
157
+ <tr class="form-field">
158
+ <th scope="row" valign="top"><label class="wpms_custom_cat_field" alt="<?php _e('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.','wp-meta-seo') ?>"><?php _e('Search engine title','wp-meta-seo'); ?></label></th>
159
+ <td>
160
+ <textarea name="wpms_category_metatitle" class="wpms_category_metatitle"><?php echo $cat_metatitle ? $cat_metatitle : ''; ?></textarea><br />
161
+ <div class="cat-title-len"><?php echo $cat_metatitle ? WPMS_CAT_METATITLE_LENGTH-strlen($cat_metatitle) : WPMS_CAT_METATITLE_LENGTH; ?></div>
162
+ </td>
163
+ </tr>
164
+ <tr class="form-field">
165
+ <th scope="row" valign="top"><label for="extra1" class="wpms_custom_cat_field" alt="<?php _e('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.','wp-meta-seo') ?>"><?php _e('Search engine description','wp-meta-seo'); ?></label></th>
166
+ <td>
167
+ <textarea name="wpms_category_metadesc" class="wpms_category_metadesc"><?php echo $cat_metadesc ? WPMS_CAT_METADESC_LENGTH-strlen($cat_metatitle) : WPMS_CAT_METADESC_LENGTH; ?></textarea><br />
168
+ <div class="cat-desc-len">156</div>
169
+ </td>
170
+ </tr>
171
+ <?php
172
+ }
173
+
174
+ // Function that outputs the contents of the dashboard widget
175
+ public function wpms_dashboard_widget( $post, $callback_args ) {
176
+ wp_enqueue_style('m-style-qtip', plugins_url('css/jquery.qtip.css', dirname(__FILE__)), array(), WPMSEO_VERSION);
177
+ wp_enqueue_script('jquery-qtip', plugins_url('js/jquery.qtip.min.js', dirname(__FILE__)), array('jquery'), '2.2.1', true);
178
+ wp_enqueue_style('wpms-dashboard-widgets');
179
+ wp_enqueue_script('wpms-dashboard-widgets', plugins_url('js/dashboard_widgets.js', dirname(__FILE__)), array('jquery'), WPMSEO_VERSION);
180
+ $error_404 = MetaSeo_Dashboard::get_404_link();
181
+ require_once ( WPMETASEO_PLUGIN_DIR . 'inc/pages/dashboard_widgets.php' );
182
+ }
183
+
184
+ // Function used in the action hook
185
+ public function wpms_add_dashboard_widgets() {
186
+
187
+ wp_add_dashboard_widget('wpms_dashboard_widget', __('WP Meta SEO: Quick SEO preview','wp-meta-seo'), array($this,'wpms_dashboard_widget'));
188
  }
189
 
190
  public function add_editor_footer() {
199
  */
200
  function metaseo_create_db() {
201
  global $wpdb;
202
+ $option_v = 'metaseo_db_version3.3.0';
203
  $db_installed = get_option($option_v, false);
 
204
  if (!$db_installed) {
205
  // create table wpms_links
206
  $sql = "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}wpms_links`(
251
  }
252
 
253
  // create page 404
254
+ $sql = $wpdb->prepare("SELECT * FROM " . $wpdb->prefix . "posts WHERE post_title = %s AND post_excerpt = %s AND post_type = %s", array("WP Meta SEO 404 Page", "metaseo_404_page", "page"));
255
+ $post_if = $wpdb->get_results($sql);
256
+ if (empty($post_if)) {
257
  $content = '<div class="wall" style="background-color: #F2F3F7; border: 30px solid #fff; width: 90%; height: 90%; margin: 0 auto;">
258
 
259
  <h1 style="text-align: center; font-family:\'open-sans\', arial; color: #444; font-size: 60px; padding: 50px;">ERROR 404 <br />-<br />NOT FOUND</h1>
264
  <p style="text-align: center;"><a style=" font-family:\'open-sans\', arial; color: #444; font-size: 20px; padding: 20px; line-height: 30px; text-decoration: none;" href="' . get_home_url() . '"><< Go back to home page >></a></p>
265
  </div>';
266
  $_page404 = array(
267
+ 'post_title' => '404 error page',
268
  'post_content' => $content,
269
  'post_status' => 'publish',
270
  'post_excerpt' => 'metaseo_404_page',
271
  'post_type' => 'page',
272
  );
273
  wp_insert_post($_page404);
274
+ }else{
275
+ $my_post = array(
276
+ 'ID' => $post_if[0]->ID,
277
+ 'post_title' => '404 error page'
278
+ );
279
+
280
+ wp_update_post( $my_post );
281
  }
282
 
283
  $sql = $wpdb->prepare("SELECT COUNT(*) FROM " . $wpdb->prefix . "posts WHERE post_title = %s AND post_excerpt = %s AND post_type = %s", array("WPMS HTML Sitemap", "metaseo_html_sitemap", "page"));
864
  add_settings_field('metaseo_linkfield', __('Link text field', 'wp-meta-seo'), array($this, 'showlinkfield'), 'metaseo_settings', 'metaseo_dashboard', array('label_for' => __('Add the link title field in the text editor and in the bulk link edition view', 'wp-meta-seo')));
865
  add_settings_field('metaseo_follow', __('Post/Page follow', 'wp-meta-seo'), array($this, 'showfollow'), 'metaseo_settings', 'metaseo_dashboard', array('label_for' => __('Add an option to setup Follow/Nofollow instruction for each content', 'wp-meta-seo')));
866
  add_settings_field('metaseo_index', __('Post/Page index', 'wp-meta-seo'), array($this, 'showindex'), 'metaseo_settings', 'metaseo_dashboard', array('label_for' => __('Add an option to say to search engine: hey! Do not index this content', 'wp-meta-seo')));
867
+ add_settings_field('metaseo_overridemeta', __('Auto override Meta', 'wp-meta-seo'), array($this, 'showoverridemeta'), 'metaseo_settings', 'metaseo_dashboard', array('label_for' => __('Auto override image meta in post content when update meta', 'wp-meta-seo')));
868
  }
869
 
870
  /*
975
  <?php
976
  }
977
 
978
+ /*
979
+ * Display override meta
980
+ */
981
+ public function showoverridemeta() {
982
+ echo '<input name="_metaseo_settings[metaseo_overridemeta]" type="hidden" value="0"/>';
983
+ ?>
984
+ <label><input name="_metaseo_settings[metaseo_overridemeta]" type="checkbox" id="metaseo_overridemeta" value="1" <?php checked(1, $this->settings['metaseo_overridemeta']); ?> />
985
+ <?php _e("Override meta image in post content when update meta", "wp-meta-seo"); ?></label>
986
+ <?php
987
+ }
988
+
989
  /*
990
  * Display showfacebook input
991
  */
1128
  wp_enqueue_style('m-font-awesome', plugins_url('css/font-awesome.css', dirname(__FILE__)), array(), WPMSEO_VERSION);
1129
  }
1130
 
1131
+ $lists_pages = array(
1132
+ 'toplevel_page_metaseo_dashboard',
1133
+ 'wp-meta-seo_page_metaseo_google_sitemap',
1134
+ 'wp-meta-seo_page_metaseo_link_meta',
1135
+ 'wp-meta-seo_page_metaseo_broken_link',
1136
+ 'wp-meta-seo_page_metaseo_google_analytics');
1137
+ if(in_array($current_screen->base,$lists_pages)){
1138
+ wp_enqueue_style('wpms_notification_style', plugins_url('css/notification.css', dirname(__FILE__)), array(), WPMSEO_VERSION);
1139
+ wp_enqueue_script('wpms_notification_script', plugins_url('js/notification.js', dirname(__FILE__)), array(), WPMSEO_VERSION);
1140
+ }
1141
+
1142
+ wp_register_style('wpms-dashboard-widgets', plugins_url('css/dashboard_widgets.css', dirname(__FILE__)), null, WPMSEO_VERSION);
1143
+ wp_register_style('wpms-category-field', plugins_url('css/category_field.css', dirname(__FILE__)), null, WPMSEO_VERSION);
1144
+ wp_register_script('wpms-category-field', plugins_url('js/category_field.js', dirname(__FILE__)), array('jquery'), WPMSEO_VERSION, true);
1145
  wp_register_style('m-style-qtip', plugins_url('css/jquery.qtip.css', dirname(__FILE__)), array(), WPMSEO_VERSION);
1146
  wp_register_script('jquery-qtip', plugins_url('js/jquery.qtip.min.js', dirname(__FILE__)), array('jquery'), '2.2.1', true);
1147
  wp_register_script('wpms-broken-link', plugins_url('js/wpms-broken-link.js', dirname(__FILE__)), array('jquery'), WPMSEO_VERSION, true);
1239
  }
1240
 
1241
  // in JavaScript, object properties are accessed as ajax_object.ajax_url, ajax_object.we_value
1242
+ wp_localize_script('wpmetaseoAdmin', 'wpms_localize', array(
1243
+ 'ajax_url' => admin_url('admin-ajax.php'),
1244
+ 'settings' => $this->settings,
1245
+ 'wpms_cat_metatitle_length' => WPMS_CAT_METATITLE_LENGTH,
1246
+ 'wpms_cat_metadesc_length' => WPMS_CAT_METADESC_LENGTH
1247
+ ));
1248
  }
1249
 
1250
  /**
1588
  }
1589
  }
1590
  }
1591
+ $w = '99%';
1592
+ $text = __('Bring your WordPress website SEO to the next level with the PRO Addon: Email Report, Google Search Console Connect, Automatic Redirect, Advanced Sitemaps and more!','wp-meta-seo');
1593
+ $class_btn_close = 'close_gga';
1594
+ require_once( WPMETASEO_PLUGIN_DIR . 'inc/pages/notification.php' );
1595
  break;
1596
  case 'metaseo_google_sitemap':
1597
  if (!class_exists('MetaSeo_Content_List_Table')) {
1861
  wp_send_json(false);
1862
  }
1863
  }
1864
+
1865
+ /**
1866
+ * set cookie notification
1867
+ */
1868
+ public function wpms_setcookie_notification(){
1869
+ if(isset($_POST['page'])){
1870
+ setcookie($_POST['page'], time(), time() + (86400 * 30), "/");
1871
+ wp_send_json(true);
1872
+ }
1873
+ wp_send_json(false);
1874
+ }
1875
 
1876
  /*
1877
  * Add ajax
1914
  add_action('wp_ajax_wpms_dash_metatitle', array('MetaSeo_Dashboard', 'wpms_dash_metatitle'));
1915
  add_action('wp_ajax_wpms_dash_metadesc', array('MetaSeo_Dashboard', 'wpms_dash_metadesc'));
1916
  add_action('wp_ajax_wpms_dash_imgsmeta', array('MetaSeo_Dashboard', 'wpms_dash_imgsmeta'));
1917
+ add_action('wp_ajax_wpms_setcookie_notification', array($this, 'wpms_setcookie_notification'));
1918
  }
1919
  }
inc/class.metaseo-content-list-table.php CHANGED
@@ -263,7 +263,7 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
263
 
264
  $total_items = $wpdb->get_var($query);
265
 
266
- $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 "
267
  . " FROM $wpdb->posts "
268
  . " LEFT JOIN (SELECT * FROM $wpdb->postmeta WHERE meta_key = '_metaseo_metatitle') mt ON mt.post_id = $wpdb->posts.ID "
269
  . " LEFT JOIN (SELECT * FROM $wpdb->postmeta WHERE meta_key = '_metaseo_metadesc') md ON md.post_id = $wpdb->posts.ID "
263
 
264
  $total_items = $wpdb->get_var($query);
265
 
266
+ $query = "SELECT DISTINCT ID, post_title, post_name, post_type, post_status , mt.meta_value AS metatitle, md.meta_value AS metadesc ,mk.meta_value AS metakeywords "
267
  . " FROM $wpdb->posts "
268
  . " LEFT JOIN (SELECT * FROM $wpdb->postmeta WHERE meta_key = '_metaseo_metatitle') mt ON mt.post_id = $wpdb->posts.ID "
269
  . " LEFT JOIN (SELECT * FROM $wpdb->postmeta WHERE meta_key = '_metaseo_metadesc') md ON md.post_id = $wpdb->posts.ID "
inc/class.metaseo-dashboard.php CHANGED
@@ -284,6 +284,9 @@ class MetaSeo_Dashboard {
284
  */
285
  public static function wpms_dash_metatitle(){
286
  $results = MetaSeo_Dashboard::update_dashboard('metatitle');
 
 
 
287
  ob_start();
288
  require_once WPMETASEO_PLUGIN_DIR . 'inc/pages/dashboard/meta_title.php';
289
  $html = ob_get_contents();
@@ -338,6 +341,9 @@ class MetaSeo_Dashboard {
338
  */
339
  public static function wpms_dash_metadesc(){
340
  $results = MetaSeo_Dashboard::update_dashboard('metadesc');
 
 
 
341
  ob_start();
342
  require_once WPMETASEO_PLUGIN_DIR . 'inc/pages/dashboard/meta_desc.php';
343
  $html = ob_get_contents();
@@ -370,6 +376,9 @@ class MetaSeo_Dashboard {
370
  */
371
  public static function wpms_dash_linkmeta(){
372
  $results = MetaSeo_Dashboard::wpms_linkmeta();
 
 
 
373
  ob_start();
374
  require_once WPMETASEO_PLUGIN_DIR . 'inc/pages/dashboard/link_meta.php';
375
  $html = ob_get_contents();
@@ -398,6 +407,9 @@ class MetaSeo_Dashboard {
398
  */
399
  public static function wpms_dash_permalink(){
400
  $permalink = MetaSeo_Dashboard::wpms_permalink();
 
 
 
401
  ob_start();
402
  require_once WPMETASEO_PLUGIN_DIR . 'inc/pages/dashboard/permalink.php';
403
  $html = ob_get_contents();
@@ -437,6 +449,9 @@ class MetaSeo_Dashboard {
437
  */
438
  public static function wpms_dash_newcontent(){
439
  $results = MetaSeo_Dashboard::update_dashboard('newcontent');
 
 
 
440
  ob_start();
441
  require_once WPMETASEO_PLUGIN_DIR . 'inc/pages/dashboard/new_content.php';
442
  $html = ob_get_contents();
@@ -589,6 +604,10 @@ class MetaSeo_Dashboard {
589
  $option_last_dash_update = get_option('_wpms_dash_last_update');
590
  if(!empty($options_dashboard) && is_array($options_dashboard) && !empty($options_dashboard['image_meta']) && $option_last_update_post < $option_last_dash_update){
591
  $results = $options_dashboard['image_meta'];
 
 
 
 
592
  ob_start();
593
  require_once WPMETASEO_PLUGIN_DIR . 'inc/pages/dashboard/imgsresize.php';
594
  $html_imgresize = ob_get_contents();
@@ -715,6 +734,10 @@ class MetaSeo_Dashboard {
715
 
716
  $options_dashboard = get_option('options_dashboard');
717
  $results = $options_dashboard['image_meta'];
 
 
 
 
718
  ob_start();
719
  require_once WPMETASEO_PLUGIN_DIR . 'inc/pages/dashboard/imgsresize.php';
720
  $html_imgresize = ob_get_contents();
284
  */
285
  public static function wpms_dash_metatitle(){
286
  $results = MetaSeo_Dashboard::update_dashboard('metatitle');
287
+ if(isset($_POST['type']) && $_POST['type'] == 'dashboard_widgets'){
288
+ wp_send_json($results);
289
+ }
290
  ob_start();
291
  require_once WPMETASEO_PLUGIN_DIR . 'inc/pages/dashboard/meta_title.php';
292
  $html = ob_get_contents();
341
  */
342
  public static function wpms_dash_metadesc(){
343
  $results = MetaSeo_Dashboard::update_dashboard('metadesc');
344
+ if(isset($_POST['type']) && $_POST['type'] == 'dashboard_widgets'){
345
+ wp_send_json($results);
346
+ }
347
  ob_start();
348
  require_once WPMETASEO_PLUGIN_DIR . 'inc/pages/dashboard/meta_desc.php';
349
  $html = ob_get_contents();
376
  */
377
  public static function wpms_dash_linkmeta(){
378
  $results = MetaSeo_Dashboard::wpms_linkmeta();
379
+ if(isset($_POST['type']) && $_POST['type'] == 'dashboard_widgets'){
380
+ wp_send_json($results);
381
+ }
382
  ob_start();
383
  require_once WPMETASEO_PLUGIN_DIR . 'inc/pages/dashboard/link_meta.php';
384
  $html = ob_get_contents();
407
  */
408
  public static function wpms_dash_permalink(){
409
  $permalink = MetaSeo_Dashboard::wpms_permalink();
410
+ if(isset($_POST['type']) && $_POST['type'] == 'dashboard_widgets'){
411
+ wp_send_json($permalink);
412
+ }
413
  ob_start();
414
  require_once WPMETASEO_PLUGIN_DIR . 'inc/pages/dashboard/permalink.php';
415
  $html = ob_get_contents();
449
  */
450
  public static function wpms_dash_newcontent(){
451
  $results = MetaSeo_Dashboard::update_dashboard('newcontent');
452
+ if(isset($_POST['type']) && $_POST['type'] == 'dashboard_widgets'){
453
+ wp_send_json($results);
454
+ }
455
  ob_start();
456
  require_once WPMETASEO_PLUGIN_DIR . 'inc/pages/dashboard/new_content.php';
457
  $html = ob_get_contents();
604
  $option_last_dash_update = get_option('_wpms_dash_last_update');
605
  if(!empty($options_dashboard) && is_array($options_dashboard) && !empty($options_dashboard['image_meta']) && $option_last_update_post < $option_last_dash_update){
606
  $results = $options_dashboard['image_meta'];
607
+ if(isset($_POST['type']) && $_POST['type'] == 'dashboard_widgets'){
608
+ $results['status'] = true;
609
+ wp_send_json($results);
610
+ }
611
  ob_start();
612
  require_once WPMETASEO_PLUGIN_DIR . 'inc/pages/dashboard/imgsresize.php';
613
  $html_imgresize = ob_get_contents();
734
 
735
  $options_dashboard = get_option('options_dashboard');
736
  $results = $options_dashboard['image_meta'];
737
+ if(isset($_POST['type']) && $_POST['type'] == 'dashboard_widgets'){
738
+ $results['status'] = true;
739
+ wp_send_json($results);
740
+ }
741
  ob_start();
742
  require_once WPMETASEO_PLUGIN_DIR . 'inc/pages/dashboard/imgsresize.php';
743
  $html_imgresize = ob_get_contents();
inc/class.metaseo-image-list-table.php CHANGED
@@ -1039,11 +1039,11 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
1039
  $response = new stdClass();
1040
  $response->updated = false;
1041
  if (!empty($_POST['addition']['meta_key'])) {
1042
- self::updateImgMeta_call_back($_POST['addition']);
1043
  }
1044
 
1045
  if (!empty($_POST['meta_type']) and $_POST['meta_type'] == 'change_image_name') {
1046
- self::updateImageName_callback($_POST);
1047
  }
1048
 
1049
  if (!empty($_POST['meta_type']) && !empty($_POST['post_id'])) {
@@ -1080,6 +1080,17 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
1080
  $response->updated = true;
1081
  $response->msg = __($label . ' was saved', 'wp-meta-seo');
1082
  }
 
 
 
 
 
 
 
 
 
 
 
1083
  } else {
1084
  $response->msg = __('There is a problem when update image meta!', 'wp-meta-seo');
1085
  }
@@ -1087,6 +1098,75 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
1087
  echo json_encode($response);
1088
  wp_die();
1089
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1090
 
1091
  /*
1092
  * Update image name
@@ -1256,10 +1336,11 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
1256
  /*
1257
  * Update image meta
1258
  */
1259
- public static function updateImgMeta_call_back($wpmspost) {
1260
  global $wpdb;
1261
  $response = new stdClass();
1262
  $response->updated = false;
 
1263
  foreach ($wpmspost as $k => $v) {
1264
  if (!$v && !in_array($k, array('meta_value', 'meta_order'))) {
1265
  $response->msg = __('There is a problem when update image meta!', 'wp-meta-seo');
@@ -1275,7 +1356,6 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
1275
  $meta_order = intval($wpmspost['meta_order']);
1276
  $img_post_id = intval($wpmspost['img_post_id']);
1277
  $post_id = intval($wpmspost['post_id']);
1278
-
1279
  $meta = get_post_meta($img_post_id, $meta_key, true);
1280
  //Update new value for meta info of this image in wp_postmeta
1281
  $meta[$post_id]['meta'][$meta_order]['type'][$meta_type] = metaseo_utf8($meta_value);
@@ -1287,28 +1367,25 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
1287
  $response->msg = __('The post has been deleted before, please check again!', 'wp-meta-seo');
1288
  } else {
1289
  if ($post->post_content !== '') {
 
1290
  //Split content part that do not contain img tag
1291
  $post_content_split = preg_split('/(<img[\s]+[^>]*src\s*=\s*)([\"\'])([^>]+?)\2([^<>]*>)/i', $post->post_content);
1292
  //Get all img tag from the content
1293
  preg_match_all('/(<img[\s]+[^>]*src\s*=\s*)([\"\'])([^>]+?)\2([^<>]*>)/i', $post->post_content, $matches);
1294
  $img_tags = $matches[0];
1295
-
1296
  if (isset($img_tags[$meta_order])) {
1297
  $pattern = '/' . $meta_type . '\s*?\=?\"[^\"]*\"/i';
1298
  $replacement = $meta_type . '="' . $meta_value . '"';
1299
-
1300
  if (!preg_match($pattern, $img_tags[$meta_order], $match)) {
1301
  $pattern = '/\/>/i';
1302
  $replacement = $meta_type . '="' . $meta_value . '" />';
1303
  }
1304
-
 
1305
  preg_match('/'.$meta_type.'="(.+?)"/', $img_tags[$meta_order], $matches);
1306
- $find = $matches[1];
1307
- if(isset($find)){
1308
- $img_tags[$meta_order] = preg_replace('/<img([^>]*)'.$meta_type.'=["\']["\'\\/]?([^"\']*)["\']/', '<img\1'.$meta_type.'="'.$meta_value.'"', $img_tags[$meta_order]);
1309
- }else{
1310
- $img_tags[$meta_order] = preg_replace('/(<img\b[^><]*)>/i', '$1 '.$meta_type.'="'.$meta_value.'">', $img_tags[$meta_order]);
1311
- }
1312
  // create new post content
1313
  $post_content = '';
1314
  foreach ($post_content_split as $key => $split) {
@@ -1319,9 +1396,9 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
1319
  }
1320
  $post_content .= $split . $img_tag;
1321
  }
1322
-
1323
  remove_action('post_updated', array('MetaSeo_Broken_Link_Table', 'wpms_update_post'));
1324
-
1325
  //Update content of this post.
1326
  if (!wp_update_post(array('ID' => $post->ID, 'post_content' => $post_content))) {
1327
  $response->msg = __('The post haven\'t been updated, please check again!', 'wp-meta-seo');
@@ -1337,9 +1414,9 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
1337
  }
1338
  }
1339
 
1340
-
1341
- echo json_encode($response);
1342
- wp_die();
 
1343
  }
1344
-
1345
  }
1039
  $response = new stdClass();
1040
  $response->updated = false;
1041
  if (!empty($_POST['addition']['meta_key'])) {
1042
+ self::updateImgMeta_call_back($_POST['addition'],true);
1043
  }
1044
 
1045
  if (!empty($_POST['meta_type']) and $_POST['meta_type'] == 'change_image_name') {
1046
+ self::updateImageName_callback($_POST,true);
1047
  }
1048
 
1049
  if (!empty($_POST['meta_type']) && !empty($_POST['post_id'])) {
1080
  $response->updated = true;
1081
  $response->msg = __($label . ' was saved', 'wp-meta-seo');
1082
  }
1083
+
1084
+ if($meta_type == 'alt_text' || $meta_type == 'image_title'){
1085
+ $settings = get_option('_metaseo_settings');
1086
+ if(!isset($settings['metaseo_overridemeta']) || (!empty($settings['metaseo_overridemeta']) && $settings['metaseo_overridemeta'] == 1)){
1087
+ // call function auto override in content
1088
+ self::wpms_auto_update_post_content($post_id,$meta_type,$meta_value);
1089
+ $response->type = 'auto_override';
1090
+ $response->pid = $post_id;
1091
+ $response->imgname = $_POST['img_name'];
1092
+ }
1093
+ }
1094
  } else {
1095
  $response->msg = __('There is a problem when update image meta!', 'wp-meta-seo');
1096
  }
1098
  echo json_encode($response);
1099
  wp_die();
1100
  }
1101
+
1102
+ /**
1103
+ * function auto override in content
1104
+ */
1105
+ public function wpms_auto_update_post_content($post_id,$meta_type,$meta_value){
1106
+ $_POST = stripslashes_deep($_POST);
1107
+ $img = trim($_POST['img_name']);
1108
+ if ($post_id && !empty($img)) {
1109
+ $fn = "display_fix_metas_list";
1110
+ if (method_exists('MetaSeo_Image_List_Table', $fn)) {
1111
+ //Get list of posts contain this image and its clones
1112
+ $posts = ImageHelper::_get_post_list($post_id, 'fix_metas');
1113
+
1114
+ if (count($posts) > 0) {
1115
+ $img_counter = 0;
1116
+ //Now the time to resize the images
1117
+ $toEdit = false;
1118
+ $pIDs = array();
1119
+ foreach ($posts as $ID => &$post) {
1120
+ $img_counter += count($post['meta']);
1121
+ foreach ($post['meta'] as $order => $meta) {
1122
+ if ($meta['type']['alt'] == '' || $meta['type']['title'] == '') {
1123
+ $toEdit = true;
1124
+ }
1125
+
1126
+ if ($meta['type']['alt'] != '' && $meta['type']['title'] != '') {
1127
+ $pIDs[$ID][] = $order;
1128
+ }
1129
+ }
1130
+ }
1131
+
1132
+ if ($toEdit === true) {
1133
+ foreach ($pIDs as $ID => $orders) {
1134
+ foreach ($orders as $order) {
1135
+ unset($posts[$ID]['meta'][$order]);
1136
+ if ($img_counter > 0) {
1137
+ $img_counter--;
1138
+ }
1139
+ }
1140
+
1141
+ if (empty($posts[$ID]['meta'])) {
1142
+ unset($posts[$ID]);
1143
+ }
1144
+ }
1145
+ }
1146
+ //-----------------------------
1147
+ }
1148
+ }
1149
+ }
1150
+ if(!empty($posts)){
1151
+ foreach ($posts as $p){
1152
+ foreach ($p['meta'] as $k => $meta){
1153
+ $addition = array();
1154
+ $addition['meta_key'] = '_metaseo_fix_metas';
1155
+ if($meta_type == 'image_title'){
1156
+ $addition['meta_type'] = 'title';
1157
+ }else{
1158
+ $addition['meta_type'] = 'alt';
1159
+ }
1160
+
1161
+ $addition['meta_value'] = $meta_value;
1162
+ $addition['post_id'] = $p['ID'];
1163
+ $addition['meta_order'] = $k;
1164
+ $addition['img_post_id'] = $post_id;
1165
+ self::updateImgMeta_call_back($addition,false);
1166
+ }
1167
+ }
1168
+ }
1169
+ }
1170
 
1171
  /*
1172
  * Update image name
1336
  /*
1337
  * Update image meta
1338
  */
1339
+ public static function updateImgMeta_call_back($wpmspost,$return = true) {
1340
  global $wpdb;
1341
  $response = new stdClass();
1342
  $response->updated = false;
1343
+
1344
  foreach ($wpmspost as $k => $v) {
1345
  if (!$v && !in_array($k, array('meta_value', 'meta_order'))) {
1346
  $response->msg = __('There is a problem when update image meta!', 'wp-meta-seo');
1356
  $meta_order = intval($wpmspost['meta_order']);
1357
  $img_post_id = intval($wpmspost['img_post_id']);
1358
  $post_id = intval($wpmspost['post_id']);
 
1359
  $meta = get_post_meta($img_post_id, $meta_key, true);
1360
  //Update new value for meta info of this image in wp_postmeta
1361
  $meta[$post_id]['meta'][$meta_order]['type'][$meta_type] = metaseo_utf8($meta_value);
1367
  $response->msg = __('The post has been deleted before, please check again!', 'wp-meta-seo');
1368
  } else {
1369
  if ($post->post_content !== '') {
1370
+
1371
  //Split content part that do not contain img tag
1372
  $post_content_split = preg_split('/(<img[\s]+[^>]*src\s*=\s*)([\"\'])([^>]+?)\2([^<>]*>)/i', $post->post_content);
1373
  //Get all img tag from the content
1374
  preg_match_all('/(<img[\s]+[^>]*src\s*=\s*)([\"\'])([^>]+?)\2([^<>]*>)/i', $post->post_content, $matches);
1375
  $img_tags = $matches[0];
 
1376
  if (isset($img_tags[$meta_order])) {
1377
  $pattern = '/' . $meta_type . '\s*?\=?\"[^\"]*\"/i';
1378
  $replacement = $meta_type . '="' . $meta_value . '"';
1379
+
1380
  if (!preg_match($pattern, $img_tags[$meta_order], $match)) {
1381
  $pattern = '/\/>/i';
1382
  $replacement = $meta_type . '="' . $meta_value . '" />';
1383
  }
1384
+ // remove attr
1385
+ $img_tags[$meta_order] = preg_replace('#(<img.+?)'.$meta_type.'=(["\']?)\d*\2(.*?/?>)#i', '$1$3', $img_tags[$meta_order]);
1386
  preg_match('/'.$meta_type.'="(.+?)"/', $img_tags[$meta_order], $matches);
1387
+ // update attr
1388
+ $img_tags[$meta_order] = preg_replace('/(<img\b[^><]*)>/i', '$1 '.$meta_type.'="'.$meta_value.'">', $img_tags[$meta_order]);
 
 
 
 
1389
  // create new post content
1390
  $post_content = '';
1391
  foreach ($post_content_split as $key => $split) {
1396
  }
1397
  $post_content .= $split . $img_tag;
1398
  }
1399
+
1400
  remove_action('post_updated', array('MetaSeo_Broken_Link_Table', 'wpms_update_post'));
1401
+
1402
  //Update content of this post.
1403
  if (!wp_update_post(array('ID' => $post->ID, 'post_content' => $post_content))) {
1404
  $response->msg = __('The post haven\'t been updated, please check again!', 'wp-meta-seo');
1414
  }
1415
  }
1416
 
1417
+ if($return == true){
1418
+ echo json_encode($response);
1419
+ wp_die();
1420
+ }
1421
  }
 
1422
  }
inc/class.wp-metaseo.php CHANGED
@@ -27,25 +27,30 @@ class WpMetaSeo {
27
  * Attached to activate_{ plugin_basename( __FILES__ ) } by register_activation_hook()
28
  * @static
29
  */
30
- public static function plugin_activation() {
31
- if (version_compare($GLOBALS['wp_version'], WPMETASEO_MINIMUM_WP_VERSION, '<')) {
32
- deactivate_plugins(basename(__FILE__));
33
- wp_die('<p>The <strong>WP Meta SEO</strong> plugin requires WordPress ' . WPMETASEO_MINIMUM_WP_VERSION . ' or higher.</p>', 'Plugin Activation Error', array('response' => 200, 'back_link' => TRUE));
 
 
 
 
 
 
 
 
 
 
34
  }
35
 
 
 
 
 
36
  if (!class_exists('DOMDocument')) {
37
  deactivate_plugins(basename(__FILE__));
38
  wp_die('<p>To active WP Meta SEO plugin , please install “dom” PHP extension </p>', 'Plugin Activation Error', array('response' => 200, 'back_link' => TRUE));
39
  }
40
-
41
-
42
- global $wpdb;
43
- //Set two param as flags that determine whether show import meta data from other SEO plugin button or not to 0
44
- update_option('_aio_import_notice_flag', 0);
45
- update_option('_yoast_import_notice_flag', 0);
46
- update_option('plugin_to_sync_with', 0);
47
-
48
- self::install_db();
49
  }
50
 
51
  /* create metaseo_images table */
27
  * Attached to activate_{ plugin_basename( __FILES__ ) } by register_activation_hook()
28
  * @static
29
  */
30
+ public static function plugin_activation($wp = '4.0', $php = '5.3.0') {
31
+ global $wp_version;
32
+ if (version_compare(PHP_VERSION, $php, '<')) {
33
+ $flag = 'PHP';
34
+ } elseif (version_compare($wp_version, $wp, '<')) {
35
+ $flag = 'WordPress';
36
+ } else {
37
+ global $wpdb;
38
+ //Set two param as flags that determine whether show import meta data from other SEO plugin button or not to 0
39
+ update_option('_aio_import_notice_flag', 0);
40
+ update_option('_yoast_import_notice_flag', 0);
41
+ update_option('plugin_to_sync_with', 0);
42
+ self::install_db();
43
+ return;
44
  }
45
 
46
+ $version = 'PHP' == $flag ? $php : $wp;
47
+ deactivate_plugins(basename(__FILE__));
48
+ wp_die('<p>The <strong>WP Meta SEO</strong> plugin requires ' . $flag . ' version ' . $version . ' or greater.</p>', 'Plugin Activation Error', array('response' => 200, 'back_link' => TRUE));
49
+
50
  if (!class_exists('DOMDocument')) {
51
  deactivate_plugins(basename(__FILE__));
52
  wp_die('<p>To active WP Meta SEO plugin , please install “dom” PHP extension </p>', 'Plugin Activation Error', array('response' => 200, 'back_link' => TRUE));
53
  }
 
 
 
 
 
 
 
 
 
54
  }
55
 
56
  /* create metaseo_images table */
inc/pages/dashboard.php CHANGED
@@ -273,6 +273,33 @@ $plugin_imgRecycle_file = 'imagerecycle-pdf-image-compression/wp-image-recycle.p
273
  </div>
274
  </div>
275
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
276
  </div>
277
 
278
  <script type="text/javascript">
273
  </div>
274
  </div>
275
  </div>
276
+ <?php
277
+ if(!empty($_COOKIE['close_dashboard'])){
278
+ $check = time() - (int)$_COOKIE['close_dashboard'];
279
+ $month = 30*24*60*60;
280
+ }
281
+
282
+ if(empty($_COOKIE['close_dashboard']) || (!empty($_COOKIE['close_dashboard']) && $check >= $month )):
283
+ ?>
284
+ <div class="wpms_dashboard_notification wpms_wrap_notification">
285
+ <div class="notification_dashboard">
286
+ <div class="tooltipped">
287
+ <div class="panel panel-updates dashboard-card">
288
+ <div class="panel-body">
289
+ <div class="row">
290
+ <div class="wpms_dashboard_widgets_content">
291
+ <p class="dashboard_noti_title"><?php _e('WP META SEO PRO ADDON','wp-meta-seo') ?></p>
292
+ <p class="dashboard-title msg"><?php _e('Bring your WordPress website SEO to the next level with the PRO Addon: Email Report, Google Search Console Connect, Automatic Redirect, Advanced Sitemaps and more!','wp-meta-seo') ?></p>
293
+ <a class="more-info" href="https://www.joomunited.com/wordpress-products/wp-meta-seo" target="_blank"><?php _e('MORE INFORMATION','wp-meta-seo') ?></a>
294
+ <a data-page="close_dashboard" class="dashboard-title wpmsclose_notification close_dashboard"><?php _e('CLOSE FOR ONE MONTH','wp-meta-seo') ?></a>
295
+ </div>
296
+ </div>
297
+ </div>
298
+ </div>
299
+ </div>
300
+ </div>
301
+ </div>
302
+ <?php endif; ?>
303
  </div>
304
 
305
  <script type="text/javascript">
inc/pages/dashboard_widgets.php ADDED
@@ -0,0 +1,185 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="wpms_dashboard_widgets">
2
+ <div class="wpms_dash_widgets wpms_dash_permalink" alt="<?php _e('It’s better using a permalink structure that is adding in your URL the category name and content title. This parameter can be changed in Settings > Permalinks WordPress menu. Tag recommended is %category%/%postname%', 'wp-meta-seo') ?>">
3
+ <div class="row panel-statistics">
4
+ <div class="tooltipped">
5
+ <div class="panel panel-updates dashboard-card">
6
+ <div class="panel-body">
7
+ <div class="row">
8
+ <div class="wpms_dashboard_widgets_left">
9
+ <h4 class="panel-title dashboard-title"><?php _e('PERMALINKS SETTINGS','wp-meta-seo') ?></h4>
10
+ <h3 class="dashboard-title percent_1">50%</h3>
11
+ <p class="dashboard-title percent_2"><?php _e('Optimized at:','wp-meta-seo') ?> <span class="percent">50%</span></p>
12
+ </div>
13
+ <div class="wpms_dashboard_widgets_right">
14
+ <div class="progress-rating">
15
+ <div class="determinate percent_3" style="width: 50%"></div>
16
+ </div>
17
+ </div>
18
+ </div>
19
+ </div>
20
+ </div>
21
+ </div>
22
+ </div>
23
+ </div>
24
+
25
+ <div class="wpms_dash_widgets wpms_dash_metatitle" alt="<?php _e('Meta titles are displayed in search engine results as a page title. It’s a good thing for SEO to have some custom and attractive ones. Be sure to fill at least the met information on your most popular pages', 'wp-meta-seo') ?>">
26
+ <div class="row panel-statistics">
27
+ <div class="tooltipped">
28
+ <div class="panel panel-updates dashboard-card">
29
+ <div class="panel-body">
30
+ <div class="row">
31
+ <div class="wpms_dashboard_widgets_left">
32
+ <h4 class="panel-title dashboard-title"><?php _e('META TITLE','wp-meta-seo') ?></h4>
33
+ <h3 class="dashboard-title percent_1">0%</h3>
34
+ <p class="dashboard-title percent_2"><?php _e('Meta title filled:','wp-meta-seo') ?> <span class="percent">0%</span></p>
35
+ </div>
36
+ <div class="wpms_dashboard_widgets_right">
37
+ <div class="progress-rating">
38
+ <div class="determinate percent_3" style="width: 0%"></div>
39
+ </div>
40
+ </div>
41
+ </div>
42
+ </div>
43
+ </div>
44
+ </div>
45
+ </div>
46
+ </div>
47
+
48
+ <div class="wpms_dash_widgets wpms_dash_metadesc" alt="<?php _e('Meta descriptions are displayed in search engine results as a page description. It’s a good thing for SEO to have some custom and attractive ones. Be sure to fill at least the meta information on your most popular pages.', 'wp-meta-seo') ?>">
49
+ <div class="row panel-statistics">
50
+ <div class="tooltipped">
51
+ <div class="panel panel-updates dashboard-card">
52
+ <div class="panel-body">
53
+ <div class="row">
54
+ <div class="wpms_dashboard_widgets_left">
55
+ <h4 class="panel-title dashboard-title"><?php _e('Meta Description','wp-meta-seo') ?></h4>
56
+ <h3 class="dashboard-title percent_1">0%</h3>
57
+ <p class="dashboard-title percent_2"><?php _e('Meta description filled:','wp-meta-seo') ?> <span class="percent">0%</span></p>
58
+ </div>
59
+ <div class="wpms_dashboard_widgets_right">
60
+ <div class="progress-rating">
61
+ <div class="determinate percent_3" style="width: 0%"></div>
62
+ </div>
63
+ </div>
64
+ </div>
65
+ </div>
66
+ </div>
67
+ </div>
68
+ </div>
69
+ </div>
70
+
71
+ <div class="wpms_dash_widgets wpms_dash_imgsresize" alt="<?php _e('Display image at its natural size, do not use HTML resize. It happens usually when you use handles to resize an image. You have a bulk edition tool to fix that.', 'wp-meta-seo') ?>">
72
+ <div class="row panel-statistics">
73
+ <div class="tooltipped">
74
+ <div class="panel panel-updates dashboard-card">
75
+ <div class="panel-body">
76
+ <div class="row">
77
+ <div class="wpms_dashboard_widgets_left">
78
+ <h4 class="panel-title dashboard-title"><?php _e('HTML image resizing','wp-meta-seo') ?></h4>
79
+ <h3 class="dashboard-title percent_1">0%</h3>
80
+ <p class="dashboard-title percent_2"><?php _e('Wrong resized images:','wp-meta-seo') ?> <span class="percent">0%</span></p>
81
+ </div>
82
+ <div class="wpms_dashboard_widgets_right">
83
+ <div class="progress-rating">
84
+ <div class="determinate percent_3" style="width: 0%"></div>
85
+ </div>
86
+ </div>
87
+ </div>
88
+ </div>
89
+ </div>
90
+ </div>
91
+ </div>
92
+ </div>
93
+
94
+ <div class="wpms_dash_widgets wpms_dash_imgsmeta" alt="<?php _e('We recommend to use both alt text and image title. The main advantage is that it helps search engines discover your images and display them in image search results. Plus, these tags improve the accessibility of your site and give more information about your images. Use our bulk image tool to quickly check and fix that.', 'wp-meta-seo') ?>">
95
+ <div class="row panel-statistics">
96
+ <div class="tooltipped">
97
+ <div class="panel panel-updates dashboard-card">
98
+ <div class="panel-body">
99
+ <div class="row">
100
+ <div class="wpms_dashboard_widgets_left">
101
+ <h4 class="panel-title dashboard-title"><?php _e('Image title/alt','wp-meta-seo') ?></h4>
102
+ <h3 class="dashboard-title percent_1">0%</h3>
103
+ <p class="dashboard-title percent_2"><?php _e('Image data filled (in content):','wp-meta-seo') ?> <span class="percent">0%</span></p>
104
+ </div>
105
+ <div class="wpms_dashboard_widgets_right">
106
+ <div class="progress-rating">
107
+ <div class="determinate percent_3" style="width: 0%"></div>
108
+ </div>
109
+ </div>
110
+ </div>
111
+ </div>
112
+ </div>
113
+ </div>
114
+ </div>
115
+ </div>
116
+
117
+ <div class="wpms_dash_widgets wpms_dash_newcontent" alt="<?php _e('It is highly recommended to update or add new content on your website quite frequently. At least 3 updated or new content per month would be great :)', 'wp-meta-seo') ?>">
118
+ <div class="row panel-statistics">
119
+ <div class="tooltipped">
120
+ <div class="panel panel-updates dashboard-card">
121
+ <div class="panel-body">
122
+ <div class="row">
123
+ <div class="wpms_dashboard_widgets_left">
124
+ <h4 class="panel-title dashboard-title"><?php _e('New or updated content','wp-meta-seo') ?></h4>
125
+ <h3 class="dashboard-title percent_1">0%</h3>
126
+ <p class="dashboard-title percent_2"><?php _e('Latest month new or updated content:','wp-meta-seo') ?> <span class="percent">0%</span></p>
127
+ </div>
128
+ <div class="wpms_dashboard_widgets_right">
129
+ <div class="progress-rating">
130
+ <div class="determinate percent_3" style="width: 0%"></div>
131
+ </div>
132
+ </div>
133
+ </div>
134
+ </div>
135
+ </div>
136
+ </div>
137
+ </div>
138
+ </div>
139
+
140
+ <div class="wpms_dash_widgets wpms_dash_linkmeta" alt="<?php _e('The link title attribute does not have any SEO value for links. BUT links titles can influence click behavior for users, which may indirectly affect your SEO performance', 'wp-meta-seo') ?>">
141
+ <div class="row panel-statistics">
142
+ <div class="tooltipped">
143
+ <div class="panel panel-updates dashboard-card">
144
+ <div class="panel-body">
145
+ <div class="row">
146
+ <div class="wpms_dashboard_widgets_left">
147
+ <h4 class="panel-title dashboard-title"><?php _e('Link titles','wp-meta-seo') ?></h4>
148
+ <h3 class="dashboard-title percent_1">0%</h3>
149
+ <p class="dashboard-title percent_2"><?php _e('Links title completed:','wp-meta-seo') ?> <span class="percent">0%</span></p>
150
+ </div>
151
+ <div class="wpms_dashboard_widgets_right">
152
+ <div class="progress-rating">
153
+ <div class="determinate percent_3" style="width: 0%"></div>
154
+ </div>
155
+ </div>
156
+ </div>
157
+ </div>
158
+ </div>
159
+ </div>
160
+ </div>
161
+ </div>
162
+
163
+ <div class="wpms_dash_widgets wpms_dash_404_error" alt="<?php _e('A website with a bunch of 404 errors doesn’t provide a good user experience, which is significantly important in content marketing and SEO. We recommend to use our internal broken link checker and redirect tool to fix all the 404 error you can periodically.', 'wp-meta-seo') ?>">
164
+ <div class="row panel-statistics">
165
+ <div class="tooltipped">
166
+ <div class="panel panel-updates dashboard-card">
167
+ <div class="panel-body">
168
+ <div class="row">
169
+ <div class="wpms_dashboard_widgets_left">
170
+ <h4 class="panel-title dashboard-title">404 ERRORS</h4>
171
+ <h3 class="dashboard-title"><?php echo $error_404['percent'] ?>%</h3>
172
+ <p class="dashboard-title">Redirected 404 errors: <?php echo $error_404['count_404_redirected'] . '/' . $error_404['count_404'] ?></p>
173
+ </div>
174
+ <div class="wpms_dashboard_widgets_right">
175
+ <div class="progress-rating">
176
+ <div class="determinate" style="width: <?php echo $error_404['percent'] ?>%"></div>
177
+ </div>
178
+ </div>
179
+ </div>
180
+ </div>
181
+ </div>
182
+ </div>
183
+ </div>
184
+ </div>
185
+ </div>
inc/pages/link-meta.php CHANGED
@@ -25,6 +25,12 @@ if (!empty($_REQUEST['_wp_http_referer'])) {
25
  <?php $metaseo_list_table->display(); ?>
26
  </form>
27
 
 
 
 
 
 
 
28
  </div>
29
  <script type="text/javascript">
30
  jQuery(document).ready(function ($) {
25
  <?php $metaseo_list_table->display(); ?>
26
  </form>
27
 
28
+ <?php
29
+ $w = '100%';
30
+ $text = __('Bring your WordPress website SEO to the next level with the PRO Addon: Email Report, Google Search Console Connect, Automatic Redirect, Advanced Sitemaps and more!','wp-meta-seo');
31
+ $class_btn_close = 'close_linkmeta';
32
+ require_once( WPMETASEO_PLUGIN_DIR . 'inc/pages/notification.php' );
33
+ ?>
34
  </div>
35
  <script type="text/javascript">
36
  jQuery(document).ready(function ($) {
inc/pages/metaseo-broken-link.php CHANGED
@@ -30,6 +30,12 @@ if (!empty($_REQUEST['_wp_http_referer'])) {
30
  <?php $metaseo_list_table->display(); ?>
31
  </form>
32
 
 
 
 
 
 
 
33
  </div>
34
  <?php
35
  wp_enqueue_script('wpms-broken-link');
30
  <?php $metaseo_list_table->display(); ?>
31
  </form>
32
 
33
+ <?php
34
+ $w = '100%';
35
+ $text = __('Bring your WordPress website SEO to the next level with the PRO Addon: Automatic redirect based on rules, automatic 404 error index, redirect with link manager, Email notification and more!','wp-meta-seo');
36
+ $class_btn_close = 'close_broken_link';
37
+ require_once( WPMETASEO_PLUGIN_DIR . 'inc/pages/notification.php' );
38
+ ?>
39
  </div>
40
  <?php
41
  wp_enqueue_script('wpms-broken-link');
inc/pages/notification.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if(!empty($_COOKIE[$class_btn_close])){
3
+ $check = time() - (int)$_COOKIE[$class_btn_close];
4
+ $month = 30*24*60*60;
5
+ }
6
+
7
+ if(empty($_COOKIE[$class_btn_close]) || (!empty($_COOKIE[$class_btn_close]) && $check >= $month )):
8
+ ?>
9
+ <div class="wpms_notification wpms_wrap_notification" style="width: <?php echo $w ?>">
10
+ <div class="notification_dashboard">
11
+ <div class="tooltipped">
12
+ <div class="panel panel-updates dashboard-card">
13
+ <div class="panel-body">
14
+ <div class="row">
15
+ <div class="wpms_dashboard_widgets_content">
16
+ <span class="dashboard_noti_title"><?php _e('WP META SEO PRO ADDON','wp-meta-seo') ?></span>
17
+ <p class="dashboard-title msg"><?php echo $text ?></p>
18
+ <a class="more-info" href="https://www.joomunited.com/wordpress-products/wp-meta-seo" target="_blank"><?php _e('MORE INFORMATION','wp-meta-seo') ?></a>
19
+ <a data-page="<?php echo $class_btn_close ?>" class="dashboard-title wpmsclose_notification <?php echo $class_btn_close ?>"><?php _e('CLOSE FOR ONE MONTH','wp-meta-seo') ?></a>
20
+ </div>
21
+ </div>
22
+ </div>
23
+ </div>
24
+ </div>
25
+ </div>
26
+ </div>
27
+ <?php endif; ?>
inc/pages/sitemaps/metaseo-google-sitemap.php CHANGED
@@ -29,4 +29,11 @@
29
  }
30
  ?>
31
  </form>
32
- </div>
 
 
 
 
 
 
 
29
  }
30
  ?>
31
  </form>
32
+ </div>
33
+
34
+ <?php
35
+ $w = '99%';
36
+ $text = __('Bring your WordPress website SEO to the next level with the PRO Addon: Sitemap for any custom post type, auto submission to the Google Search Console and more!','wp-meta-seo');
37
+ $class_btn_close = 'close_sitemap';
38
+ require_once( WPMETASEO_PLUGIN_DIR . 'inc/pages/notification.php' );
39
+ ?>
js/category_field.js ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ function wpms_cat_status_length(len, mclass) {
2
+ if (len < 0) {
3
+ jQuery(mclass).addClass('length-wrong').removeClass('length-true');
4
+ } else {
5
+ jQuery(mclass).addClass('length-true').removeClass('length-wrong');
6
+ }
7
+ }
8
+
9
+ function wpms_cat_show_length(){
10
+ var titleElm = jQuery('.wpms_category_metatitle');
11
+ if(titleElm.length > 0){
12
+ if (titleElm.val() !== '') {
13
+ var len = wpms_localize.wpms_cat_metatitle_length - titleElm.val().length;
14
+ wpms_cat_status_length(len, '.cat-title-len');
15
+ jQuery('.cat-title-len').html(len);
16
+ } else {
17
+ jQuery('.cat-title-len').addClass('length-true').removeClass('length-wrong').html('<span class="good">' + wpms_localize.wpms_cat_metatitle_length + '</span>');
18
+ }
19
+ }
20
+
21
+ var descElm = jQuery('.wpms_category_metadesc');
22
+ if(descElm.length > 0) {
23
+ if (descElm.val() !== '') {
24
+ var len = wpms_localize.wpms_cat_metadesc_length - descElm.val().length;
25
+ wpms_cat_status_length(len, '.cat-desc-len');
26
+ jQuery('.cat-desc-len').html(len);
27
+ } else {
28
+ jQuery('.cat-desc-len').addClass('length-true').removeClass('length-wrong').html('<span class="good">' + wpms_localize.wpms_cat_metadesc_length + '</span>');
29
+ }
30
+ }
31
+ }
32
+
33
+ jQuery(document).ready(function ($) {
34
+ jQuery('.wpms_custom_cat_field').qtip({
35
+ content: {
36
+ attr: 'alt'
37
+ },
38
+ position: {
39
+ my: 'bottom left',
40
+ at: 'top center'
41
+ },
42
+ style: {
43
+ tip: {
44
+ corner: true,
45
+ },
46
+ classes: 'metaseo-qtip qtip-rounded'
47
+ },
48
+ show: 'hover',
49
+ hide: {
50
+ fixed: true,
51
+ delay: 10
52
+ }
53
+
54
+ });
55
+
56
+ jQuery('.wpms_category_metatitle').keyup(function () {
57
+ var titleElm = jQuery(this);
58
+
59
+ if (titleElm.val() !== '') {
60
+ var len = wpms_localize.wpms_cat_metatitle_length - titleElm.val().length;
61
+ wpms_cat_status_length(len, '.cat-title-len');
62
+ jQuery('.cat-title-len').html(len);
63
+ } else {
64
+ jQuery('.cat-title-len').addClass('length-true').removeClass('length-wrong').html('<span class="good">' + wpms_localize.wpms_cat_metatitle_length + '</span>');
65
+ }
66
+ });
67
+
68
+ jQuery('.wpms_category_metadesc').keyup(function () {
69
+ var descElm = jQuery(this);
70
+
71
+ if (descElm.val() !== '') {
72
+ var len = wpms_localize.wpms_cat_metadesc_length - descElm.val().length;
73
+ wpms_cat_status_length(len, '.cat-desc-len');
74
+ jQuery('.cat-desc-len').html(len);
75
+ } else {
76
+ jQuery('.cat-desc-len').addClass('length-true').removeClass('length-wrong').html('<span class="good">' + wpms_localize.wpms_cat_metadesc_length + '</span>');
77
+ }
78
+ });
79
+
80
+ wpms_cat_show_length();
81
+ });
js/dashboard_widgets.js ADDED
@@ -0,0 +1,160 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(document).ready(function ($) {
2
+ 'use strict';
3
+ var wpms_dash_widgets = 0;
4
+ // Knob
5
+ $.ajax({
6
+ url: ajaxurl,
7
+ method: 'POST',
8
+ dataType: 'json',
9
+ data: {
10
+ action: 'wpms_dash_permalink',
11
+ type: 'dashboard_widgets'
12
+ },
13
+ success: function (res) {
14
+ $('.wpms_dash_permalink .percent_1').html(res +'%');
15
+ $('.wpms_dash_permalink .percent_2 span.percent').html(res +'%');
16
+ $('.wpms_dash_permalink .percent_3').css('width',res + '%');
17
+ wpms_dash_widgets++;
18
+ if(wpms_dash_widgets == 1){
19
+ wpms_dash_widgets_newcontent();
20
+ }
21
+ }
22
+ });
23
+
24
+ function wpms_dash_widgets_newcontent(){
25
+ $.ajax({
26
+ url: ajaxurl,
27
+ method: 'POST',
28
+ dataType: 'json',
29
+ data: {
30
+ action: 'wpms_dash_newcontent',
31
+ type: 'dashboard_widgets'
32
+ },
33
+ success: function (res) {
34
+ $('.wpms_dash_newcontent .percent_1').html(res[0] +'%');
35
+ $('.wpms_dash_newcontent .percent_2 span.percent').html(res[1][0]);
36
+ $('.wpms_dash_newcontent .percent_3').css('width',res[0] + '%');
37
+ wpms_dash_widgets++;
38
+ if(wpms_dash_widgets == 2){
39
+ wpms_dash_widgets_linkmeta();
40
+ }
41
+ }
42
+ });
43
+ }
44
+
45
+ function wpms_dash_widgets_linkmeta(){
46
+ $.ajax({
47
+ url: ajaxurl,
48
+ method: 'POST',
49
+ dataType: 'json',
50
+ data: {
51
+ action: 'wpms_dash_linkmeta',
52
+ type: 'dashboard_widgets'
53
+ },
54
+ success: function (res) {
55
+ $('.wpms_dash_linkmeta .percent_1').html(res[0] +'%');
56
+ $('.wpms_dash_linkmeta .percent_2 span.percent').html(res[1][0] + '/' + res[1][1]);
57
+ $('.wpms_dash_linkmeta .percent_3').css('width',res[0] + '%');
58
+ wpms_dash_widgets++;
59
+ if(wpms_dash_widgets == 3){
60
+ wpms_dash_widgets_metatitle();
61
+ }
62
+ }
63
+ });
64
+ }
65
+
66
+ function wpms_dash_widgets_metatitle(){
67
+ $.ajax({
68
+ url: ajaxurl,
69
+ method: 'POST',
70
+ dataType: 'json',
71
+ data: {
72
+ action: 'wpms_dash_metatitle',
73
+ type: 'dashboard_widgets'
74
+ },
75
+ success: function (res) {
76
+ $('.wpms_dash_metatitle .percent_1').html(res[0] +'%');
77
+ $('.wpms_dash_metatitle .percent_2 span.percent').html(res[1][0] + '/' + res[1][1]);
78
+ $('.wpms_dash_metatitle .percent_3').css('width',res[0] + '%');
79
+
80
+ wpms_dash_widgets++;
81
+ if(wpms_dash_widgets == 4){
82
+ wpms_dash_widgets_imagemeta(1,0,0,0);
83
+ }
84
+ }
85
+ });
86
+ }
87
+
88
+ function wpms_dash_widgets_imagemeta(page,imgs_statis,imgs_meta,imgs_count){
89
+ $.ajax({
90
+ url: ajaxurl,
91
+ method: 'POST',
92
+ dataType: 'json',
93
+ data: {
94
+ action: 'wpms_dash_imgsmeta',
95
+ type: 'dashboard_widgets',
96
+ page : page,
97
+ imgs_statis : imgs_statis,
98
+ imgs_metas_statis : imgs_meta,
99
+ imgs_count : imgs_count
100
+ },
101
+ success: function (res) {
102
+ if(typeof res.status == "undefined"){
103
+ wpms_dash_widgets_imagemeta(page+1 , res.imgs_statis[0] , res.imgs_metas_statis[0] , res.imgs_count);
104
+ }else{
105
+ $('.wpms_dash_imgsresize .percent_1').html(res.imgs_statis[2] +'%');
106
+ $('.wpms_dash_imgsresize .percent_2 span.percent').html(res.imgs_statis[0] +'/'+ res.imgs_statis[1]);
107
+ $('.wpms_dash_imgsresize .percent_3').css('width',res.imgs_statis[2] + '%');
108
+
109
+ $('.wpms_dash_imgsmeta .percent_1').html(res.imgs_metas_statis[2] +'%');
110
+ $('.wpms_dash_imgsmeta .percent_2 span.percent').html(res.imgs_metas_statis[0] +'/'+ res.imgs_metas_statis[1]);
111
+ $('.wpms_dash_imgsmeta .percent_3').css('width',res.imgs_metas_statis[2] + '%');
112
+
113
+ wpms_dash_widgets++;
114
+ if(wpms_dash_widgets == 5){
115
+ wpms_dash_widgets_metadesc();
116
+ }
117
+ }
118
+ }
119
+ });
120
+ }
121
+
122
+ function wpms_dash_widgets_metadesc(){
123
+ $.ajax({
124
+ url: ajaxurl,
125
+ method: 'POST',
126
+ dataType: 'json',
127
+ data: {
128
+ action: 'wpms_dash_metadesc',
129
+ type: 'dashboard_widgets'
130
+ },
131
+ success: function (res) {
132
+ $('.wpms_dash_metadesc .percent_1').html(res[0] +'%');
133
+ $('.wpms_dash_metadesc .percent_2 span.percent').html(res[1][0] + '/' + res[1][1]);
134
+ $('.wpms_dash_metadesc .percent_3').css('width',res[0] + '%');
135
+ }
136
+ });
137
+ }
138
+
139
+ jQuery('.wpms_dash_widgets').qtip({
140
+ content: {
141
+ attr: 'alt'
142
+ },
143
+ position: {
144
+ my: 'bottom center',
145
+ at: 'top center'
146
+ },
147
+ style: {
148
+ tip: {
149
+ corner: true,
150
+ },
151
+ classes: 'wpms-widgets-qtip'
152
+ },
153
+ show: 'hover',
154
+ hide: {
155
+ fixed: true,
156
+ delay: 10
157
+ }
158
+
159
+ });
160
+ });
js/metaseo_admin.js CHANGED
@@ -314,7 +314,7 @@ function saveMetaContentChanges(metakey, postid, data) {
314
  'value': data
315
  };
316
  // We can also pass the url value separately from ajaxurl for front end AJAX implementations
317
- jQuery.post(myAjax.ajax_url, postData, function (response) {
318
  jQuery('.wpms_loader' + postid).hide();
319
  result = jQuery.parseJSON(response);
320
 
@@ -369,6 +369,8 @@ function saveChanges(element_id, post_id, meta_type, meta_value) {
369
  'post_id': post_id,
370
  'meta_type': meta_type,
371
  'meta_value': meta_value,
 
 
372
  'addition': {
373
  'meta_key': element.data('meta-key'),
374
  'meta_type': element.data('meta-type'),
@@ -381,7 +383,7 @@ function saveChanges(element_id, post_id, meta_type, meta_value) {
381
 
382
  // We can also pass the url value separately from ajaxurl for front end AJAX implementations
383
  jQuery.ajax({
384
- url: myAjax.ajax_url,
385
  async: false,
386
  type: 'post',
387
  data: postData,
@@ -415,7 +417,7 @@ function saveChanges(element_id, post_id, meta_type, meta_value) {
415
  }
416
  //Scan post and update post_meta
417
  var img = jQuery('[data-img-post-id="' + postData['addition']['img_post_id'] + '"]');
418
-
419
  if (img.length > 0) {
420
  _metaSeoScanImages(
421
 
@@ -427,6 +429,16 @@ function saveChanges(element_id, post_id, meta_type, meta_value) {
427
  );
428
  }
429
 
 
 
 
 
 
 
 
 
 
 
430
  } else {
431
  element.val(response.iname);
432
  savedInfo.removeClass('metaseo-msg-success').addClass('metaseo-msg-warning')
@@ -466,7 +478,7 @@ function _metaSeoScanImages(imgs) {
466
  }
467
 
468
  jQuery.ajax({
469
- url: myAjax.ajax_url,
470
  method: 'post',
471
  data: {'action': 'scanPosts', 'imgs': imgs},
472
  dataType: 'json',
@@ -577,7 +589,7 @@ function optimize_imgs(element) {
577
  alert('Cant do the optimization because of missing image ID.\\nPlease check again!');
578
  } else {
579
  jQuery.ajax({
580
- url: myAjax.ajax_url,
581
  async: false,
582
  data: {
583
  'action': 'optimize_imgs',
@@ -709,7 +721,7 @@ function showPostsList(element) {
709
 
710
  if (that.data('img-name') != '') {
711
  jQuery.ajax({
712
- url: myAjax.ajax_url,
713
  type: 'post',
714
  dataType: 'html',
715
  data: data,
@@ -747,7 +759,7 @@ function importMetaData(that, event) {
747
  event.preventDefault();
748
  if (that.id === '_aio_' || that.id === '_yoast_') {
749
  jQuery.ajax({
750
- url: myAjax.ajax_url,
751
  type: 'post',
752
  data: {'action': 'import_meta_data', 'plugin': that.id},
753
  dataType: 'json',
@@ -948,7 +960,7 @@ jQuery(document).ready(function ($) {
948
 
949
  if (plugin === '_aio_' || plugin === '_yoast_') {
950
  $.ajax({
951
- url: myAjax.ajax_url,
952
  type: 'post',
953
  data: {'action': 'dismiss_import_meta', 'plugin': plugin},
954
  dataType: 'json',
314
  'value': data
315
  };
316
  // We can also pass the url value separately from ajaxurl for front end AJAX implementations
317
+ jQuery.post(wpms_localize.ajax_url, postData, function (response) {
318
  jQuery('.wpms_loader' + postid).hide();
319
  result = jQuery.parseJSON(response);
320
 
369
  'post_id': post_id,
370
  'meta_type': meta_type,
371
  'meta_value': meta_value,
372
+ 'img_name': element.closest('tr').find('.fix-metas').data('img-name'),
373
+ 'opt_key': element.closest('tr').find('.fix-metas').data('opt-key'),
374
  'addition': {
375
  'meta_key': element.data('meta-key'),
376
  'meta_type': element.data('meta-type'),
383
 
384
  // We can also pass the url value separately from ajaxurl for front end AJAX implementations
385
  jQuery.ajax({
386
+ url: wpms_localize.ajax_url,
387
  async: false,
388
  type: 'post',
389
  data: postData,
417
  }
418
  //Scan post and update post_meta
419
  var img = jQuery('[data-img-post-id="' + postData['addition']['img_post_id'] + '"]');
420
+
421
  if (img.length > 0) {
422
  _metaSeoScanImages(
423
 
429
  );
430
  }
431
 
432
+ if(typeof response.type != "undefined" && response.type == 'auto_override'){
433
+ _metaSeoScanImages(
434
+ {
435
+ 'name': response.imgname,
436
+ 'img_post_id': response.pid
437
+ }
438
+
439
+ );
440
+ }
441
+
442
  } else {
443
  element.val(response.iname);
444
  savedInfo.removeClass('metaseo-msg-success').addClass('metaseo-msg-warning')
478
  }
479
 
480
  jQuery.ajax({
481
+ url: wpms_localize.ajax_url,
482
  method: 'post',
483
  data: {'action': 'scanPosts', 'imgs': imgs},
484
  dataType: 'json',
589
  alert('Cant do the optimization because of missing image ID.\\nPlease check again!');
590
  } else {
591
  jQuery.ajax({
592
+ url: wpms_localize.ajax_url,
593
  async: false,
594
  data: {
595
  'action': 'optimize_imgs',
721
 
722
  if (that.data('img-name') != '') {
723
  jQuery.ajax({
724
+ url: wpms_localize.ajax_url,
725
  type: 'post',
726
  dataType: 'html',
727
  data: data,
759
  event.preventDefault();
760
  if (that.id === '_aio_' || that.id === '_yoast_') {
761
  jQuery.ajax({
762
+ url: wpms_localize.ajax_url,
763
  type: 'post',
764
  data: {'action': 'import_meta_data', 'plugin': that.id},
765
  dataType: 'json',
960
 
961
  if (plugin === '_aio_' || plugin === '_yoast_') {
962
  $.ajax({
963
+ url: wpms_localize.ajax_url,
964
  type: 'post',
965
  data: {'action': 'dismiss_import_meta', 'plugin': plugin},
966
  dataType: 'json',
js/notification.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(document).ready(function($){
2
+ $('.wpmsclose_notification').click(function(){
3
+ var $this = $(this);
4
+ var page = $this.data('page');
5
+ $.ajax({
6
+ url: ajaxurl,
7
+ method: 'POST',
8
+ dataType: 'json',
9
+ data:{
10
+ action: 'wpms_setcookie_notification',
11
+ page: page
12
+ },
13
+ success: function(res){
14
+ if(res){
15
+ $this.closest('.wpms_wrap_notification').remove();
16
+ }
17
+ }
18
+ });
19
+ });
20
+ });
languages/wp-meta-seo-en_US.mo CHANGED
Binary file
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: JoomUnited
3
  Tags: google, webmaster tools, keywords, meta, meta description, meta keywords, meta title, robots meta, search engine optimization, seo, wordpress seo, yahoo, image optimization, image resize, custom post seo, redirect, redirection, 301, broken link
4
  Requires at least: 4.0
5
- Tested up to: 4.7.2
6
- Stable tag: 3.2.6
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
@@ -36,6 +36,8 @@ WP Meta SEO gives you the control over all your meta content and images. Bulk SE
36
 
37
  > <a href="https://www.joomunited.com/wordpress-products/wp-meta-seo" rel="friend">More information and feature details here!</a>
38
 
 
 
39
 
40
  = Bulk meta edition and image resizing =
41
 
@@ -101,7 +103,7 @@ The redirect manager will help you to fix all types of 404 errors you can encoun
101
  * Setup update frequency and priority for each sitemap link
102
 
103
 
104
- **More details here:** http://www.joomunited.com/wordpress-products/wp-meta-seo
105
 
106
  = Video demo: =
107
  [vimeo https://vimeo.com/113695156]
@@ -155,19 +157,18 @@ The redirect manager will help you to fix all types of 404 errors you can encoun
155
  * Google Ananlytics tracking and statistics display
156
 
157
  = Main plugins from JoomUnited: =
158
- * WP Media Folder: https://www.joomunited.com/wordpress-products/wp-media-folder
159
- * WP File Download: https://www.joomunited.com/wordpress-products/wp-table-manager
160
- * WP Table Manager: https://www.joomunited.com/wordpress-products/wp-file-download
161
- * WP Speed of Light: https://www.joomunited.com/wordpress-products/wp-speed-of-light
162
- * WP Latest Posts: https://www.joomunited.com/wordpress-products/wp-latest-posts
163
 
164
- **Still not sure! test the plugin live on a demo website:** https://addendio.com/try-plugin/?slug=wp-meta-seo
165
 
166
  = Support =
167
 
168
  A HTML support document is provided with WP Meta SEO on JoomUnited website
169
  Feel free to ask SEO questions on our forum or here in the support section
170
- **Documentation here:** https://www.joomunited.com/documentation/wp-meta-seo-documentation
171
 
172
  == Installation ==
173
 
@@ -254,6 +255,14 @@ It could be! if you have a lot of pages that need to be indexed with no specific
254
 
255
  == Changelog ==
256
 
 
 
 
 
 
 
 
 
257
  = 3.2.6 =
258
  * Add : Add builtin translation tool
259
  * Fix : Wrong function used to get description length
@@ -426,7 +435,7 @@ Sitemap feature with XML for the Google Search console and HTML with display opt
426
 
427
  = SEO vision =
428
 
429
- Search engines are a major source of traffic for most websites. Thats why our users often ask us for SEO tips and plugins that can help improve SEO of their WordPress sites.
430
  WP Meta SEO has been created to give to professionals and final users some real SEO tools to get better SEO rank. We think that SEO has to be something logic and durable. Overall SEO optimization requires a lot of time for each website, each client.
431
 
432
  WP Meta SEO provides some automatic tools to analyze your content and give to search engine a better content to analyze.
@@ -437,4 +446,4 @@ Site-wide SEO: it's more about your whole site and structure between multiple ar
437
 
438
  And... don't forget to check each month your SEO dashboard :)
439
 
440
- PHP 5.3+, WP 4.3+
2
  Contributors: JoomUnited
3
  Tags: google, webmaster tools, keywords, meta, meta description, meta keywords, meta title, robots meta, search engine optimization, seo, wordpress seo, yahoo, image optimization, image resize, custom post seo, redirect, redirection, 301, broken link
4
  Requires at least: 4.0
5
+ Tested up to: 4.7.3
6
+ Stable tag: 3.3.0
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
36
 
37
  > <a href="https://www.joomunited.com/wordpress-products/wp-meta-seo" rel="friend">More information and feature details here!</a>
38
 
39
+ **<a href="https://addendio.com/try-plugin/?slug=wp-meta-seo" rel="friend">Still not sure! test the plugin live on a sandbox demo website</a>**
40
+
41
 
42
  = Bulk meta edition and image resizing =
43
 
103
  * Setup update frequency and priority for each sitemap link
104
 
105
 
106
+ **More details here:** <a href="http://www.joomunited.com/wordpress-products/wp-meta-seo" rel="friend">http://www.joomunited.com/wordpress-products/wp-meta-seo</a>
107
 
108
  = Video demo: =
109
  [vimeo https://vimeo.com/113695156]
157
  * Google Ananlytics tracking and statistics display
158
 
159
  = Main plugins from JoomUnited: =
160
+ * WP Media Folder: <a href="https://www.joomunited.com/wordpress-products/wp-media-folder" rel="friend"> https://www.joomunited.com/wordpress-products/wp-media-folder</a>
161
+ * WP File Download: <a href="https://www.joomunited.com/wordpress-products/wp-table-manager" rel="friend"> https://www.joomunited.com/wordpress-products/wp-table-manager</a>
162
+ * WP Table Manager: <a href="https://www.joomunited.com/wordpress-products/wp-file-download" rel="friend">https://www.joomunited.com/wordpress-products/wp-file-download</a>
163
+ * WP Speed of Light: <a href="https://www.joomunited.com/wordpress-products/wp-speed-of-light" rel="friend">https://www.joomunited.com/wordpress-products/wp-speed-of-light</a>
164
+ * WP Latest Posts: <a href="https://www.joomunited.com/wordpress-products/wp-latest-posts" rel="friend">https://www.joomunited.com/wordpress-products/wp-latest-posts</a>
165
 
 
166
 
167
  = Support =
168
 
169
  A HTML support document is provided with WP Meta SEO on JoomUnited website
170
  Feel free to ask SEO questions on our forum or here in the support section
171
+ **Documentation here:** <a href="https://www.joomunited.com/documentation/wp-meta-seo-documentation" rel="friend">https://www.joomunited.com/documentation/wp-meta-seo-documentation</a>
172
 
173
  == Installation ==
174
 
255
 
256
  == Changelog ==
257
 
258
+ = 3.3.0 =
259
+ * Add : If an image information are filled, add it by default if empty if image is re-used
260
+ * Add : Compatibility with WPML, Polylang for meta edition and Media SEO content
261
+ * Add : Possibility to edit meta information on categories
262
+ * Add : Pro version notifications of features in some views
263
+ * Add : Dashboard widget with 6 SEO criteria
264
+ * Fix : Change the 404 error page title to remove the plugin name by default
265
+
266
  = 3.2.6 =
267
  * Add : Add builtin translation tool
268
  * Fix : Wrong function used to get description length
435
 
436
  = SEO vision =
437
 
438
+ Search engines are a major source of traffic for most websites. That's why our users often ask us for SEO tips and plugins that can help improve SEO of their WordPress sites.
439
  WP Meta SEO has been created to give to professionals and final users some real SEO tools to get better SEO rank. We think that SEO has to be something logic and durable. Overall SEO optimization requires a lot of time for each website, each client.
440
 
441
  WP Meta SEO provides some automatic tools to analyze your content and give to search engine a better content to analyze.
446
 
447
  And... don't forget to check each month your SEO dashboard :)
448
 
449
+ PHP 5.3+, WP 4.3+
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: 3.2.6
8
  * Text Domain: wp-meta-seo
9
  * Domain Path: /languages
10
  * Author: JoomUnited
@@ -62,7 +62,7 @@ if (version_compare(PHP_VERSION, '5.3', '<')) {
62
 
63
  //Include the jutranslation helpers
64
  include_once('jutranslation' . DIRECTORY_SEPARATOR . 'jutranslation.php');
65
- \Joomunited\WPMetaSEO\Jutranslation\Jutranslation::init(__FILE__, 'wp-meta-seo', 'WP Meta SEO', 'wp-meta-seo', DIRECTORY_SEPARATOR . 'languages' . DIRECTORY_SEPARATOR . 'wp-meta-seo-en_US.mo');
66
 
67
 
68
  if (!defined('WPMETASEO_MINIMUM_WP_VERSION'))
@@ -75,7 +75,7 @@ if (!defined('URL'))
75
  define('URL', get_site_url());
76
 
77
  if (!defined('WPMSEO_VERSION')) {
78
- define('WPMSEO_VERSION', '3.2.6');
79
  }
80
 
81
  if (!defined('WPMS_CLIENTID')) {
@@ -86,6 +86,14 @@ if (!defined('WPMS_CLIENTSECRET')) {
86
  define('WPMS_CLIENTSECRET', 'tyF4XICemXdORWX2qjyazfqP');
87
  }
88
 
 
 
 
 
 
 
 
 
89
  if (!defined('WPMSEO_FILE'))
90
  define('WPMSEO_FILE', __FILE__);
91
 
@@ -276,8 +284,20 @@ if (is_admin()) {
276
 
277
  if (is_category() || is_tag() || is_tax()) {
278
  $term = $wp_query->get_queried_object();
279
- $meta_title = $meta_title_esc = $meta_facebook_title = $meta_twitter_title = esc_attr($term->name);
280
- $meta_description_esc = $meta_facebook_desc = $meta_twitter_desc = esc_attr($term->description);
 
 
 
 
 
 
 
 
 
 
 
 
281
  $page_follow = 'follow';
282
  }
283
 
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: 3.3.0
8
  * Text Domain: wp-meta-seo
9
  * Domain Path: /languages
10
  * Author: JoomUnited
62
 
63
  //Include the jutranslation helpers
64
  include_once('jutranslation' . DIRECTORY_SEPARATOR . 'jutranslation.php');
65
+ call_user_func('\Joomunited\WPMetaSEO\Jutranslation\Jutranslation::init',__FILE__, 'wp-meta-seo', 'WP Meta SEO', 'wp-meta-seo', 'languages' . DIRECTORY_SEPARATOR . 'wp-meta-seo-en_US.mo');
66
 
67
 
68
  if (!defined('WPMETASEO_MINIMUM_WP_VERSION'))
75
  define('URL', get_site_url());
76
 
77
  if (!defined('WPMSEO_VERSION')) {
78
+ define('WPMSEO_VERSION', '3.3.0');
79
  }
80
 
81
  if (!defined('WPMS_CLIENTID')) {
86
  define('WPMS_CLIENTSECRET', 'tyF4XICemXdORWX2qjyazfqP');
87
  }
88
 
89
+ if (!defined('WPMS_CAT_METATITLE_LENGTH')) {
90
+ define('WPMS_CAT_METATITLE_LENGTH', 69);
91
+ }
92
+
93
+ if (!defined('WPMS_CAT_METADESC_LENGTH')) {
94
+ define('WPMS_CAT_METADESC_LENGTH', 156);
95
+ }
96
+
97
  if (!defined('WPMSEO_FILE'))
98
  define('WPMSEO_FILE', __FILE__);
99
 
284
 
285
  if (is_category() || is_tag() || is_tax()) {
286
  $term = $wp_query->get_queried_object();
287
+ $cat_metatitle = get_term_meta($term->term_id,'wpms_category_metatitle',true);
288
+ $cat_metadesc = get_term_meta($term->term_id,'wpms_category_metadesc',true);
289
+ if(isset($cat_metatitle) && $cat_metatitle != ''){
290
+ $meta_title = $meta_title_esc = $meta_facebook_title = $meta_twitter_title = esc_attr($cat_metatitle);
291
+ }else{
292
+ $meta_title = $meta_title_esc = $meta_facebook_title = $meta_twitter_title = esc_attr($term->name);
293
+ }
294
+
295
+ if(isset($cat_metadesc) && $cat_metadesc != ''){
296
+ $meta_description_esc = $meta_facebook_desc = $meta_twitter_desc = esc_attr($cat_metadesc);
297
+ }else{
298
+ $meta_description_esc = $meta_facebook_desc = $meta_twitter_desc = esc_attr($term->description);
299
+ }
300
+
301
  $page_follow = 'follow';
302
  }
303