SEO Ultimate - Version 4.5

Version Description

Download this release

Release Info

Developer SEO Design Solutions
Plugin Icon 128x128 SEO Ultimate
Version 4.5
Comparing to
See all releases

Code changes from version 4.4 to 4.5

includes/jlfunctions/io.php CHANGED
@@ -41,6 +41,14 @@ class suio {
41
 
42
  //Get the rows
43
  while (($row = fgetcsv($handle, 99999, ',')) !== false) {
 
 
 
 
 
 
 
 
44
  $new = array_combine($headers, $row);
45
  if ($new !== false) $result[] = $new;
46
  }
41
 
42
  //Get the rows
43
  while (($row = fgetcsv($handle, 99999, ',')) !== false) {
44
+
45
+ if (count($row) > count($headers))
46
+ //Too long
47
+ $row = array_slice($row, 0, count($headers));
48
+ elseif (count($row) < count($headers))
49
+ //Too short
50
+ $row = array_pad($row, count($headers), '');
51
+
52
  $new = array_combine($headers, $row);
53
  if ($new !== false) $result[] = $new;
54
  }
modules/autolinks/content-autolinks.php CHANGED
@@ -103,9 +103,10 @@ class SU_ContentAutolinks extends SU_Module {
103
 
104
  $links = array();
105
 
 
 
106
  for ($i=0; $i <= $num_links; $i++) {
107
 
108
- $guid = stripslashes($_POST['_link_guid']);
109
  $anchor = stripslashes($_POST["link_{$i}_anchor"]);
110
  $to_type= stripslashes($_POST["link_{$i}_to_type__{$guid}"]);
111
  $to_id = stripslashes($_POST["link_{$i}_to_id_{$to_type}__{$guid}"]);
@@ -151,8 +152,7 @@ class SU_ContentAutolinks extends SU_Module {
151
 
152
  //Get post options
153
  $posttypeobjs = suwp::get_post_type_objects();
154
- $posttypes = array();
155
- $posts = array();
156
  foreach ($posttypeobjs as $posttypeobj) {
157
 
158
  $stati = get_available_post_statuses($posttypeobj->name);
@@ -162,7 +162,8 @@ class SU_ContentAutolinks extends SU_Module {
162
  $typeposts = get_posts("post_status=$stati&numberposts=-1&post_type=".$posttypeobj->name);
163
  if (count($typeposts)) {
164
  $posttypes['posttype_'.$posttypeobj->name] = $posttypeobj->labels->singular_name;
165
- $posts['posttype_'.$posttypeobj->name] = suarr::simplify($typeposts, 'ID', 'post_title');
 
166
  }
167
  }
168
 
@@ -176,11 +177,17 @@ class SU_ContentAutolinks extends SU_Module {
176
  foreach ($posts as $posttype => $typeposts) {
177
  $typeposts = array(0 => '') + $typeposts; //Maintains numeric array keys, unlike array_unshift or array_merge
178
  $postdropdowns[$posttype] = $this->get_input_element('dropdown', "link_{$i}_to_id_{$posttype}__$guid", $link['to_id'], $typeposts);
 
 
 
 
 
 
 
179
  }
180
 
181
  $cells = array(
182
- 'link-anchor' => $this->get_input_element('hidden', '_link_guid', $guid)
183
- . $this->get_input_element('textbox', "link_{$i}_anchor", $link['anchor'])
184
  , 'link-to_type' => $this->get_input_element('dropdown', "link_{$i}_to_type__$guid", $link['to_type'], array(
185
  __('Custom', 'seo-ultimate') => array('url' => __('URL', 'seo-ultimate'))
186
  , __('Content Items', 'seo-ultimate') => $posttypes
@@ -191,7 +198,7 @@ class SU_ContentAutolinks extends SU_Module {
191
  , 'link-title' => $this->get_input_element('textbox', "link_{$i}_title", $link['title'])
192
  , 'link-options' =>
193
  $this->get_input_element('checkbox', "link_{$i}_nofollow", $link['nofollow'], __('Nofollow', 'seo-ultimate'))
194
- .$this->get_input_element('checkbox', "link_{$i}_target", $link['target'] != 'self', __('New window', 'seo-ultimate'))
195
  );
196
  if ($delete_option)
197
  $cells['link-delete'] = $this->get_input_element('checkbox', "link_{$i}_delete");
@@ -202,6 +209,7 @@ class SU_ContentAutolinks extends SU_Module {
202
  }
203
 
204
  $this->admin_wftable_end();
 
205
  }
206
 
207
  function get_post_autolinks($value, $key, $post) {
103
 
104
  $links = array();
105
 
106
+ $guid = stripslashes($_POST['_link_guid']);
107
+
108
  for ($i=0; $i <= $num_links; $i++) {
109
 
 
110
  $anchor = stripslashes($_POST["link_{$i}_anchor"]);
111
  $to_type= stripslashes($_POST["link_{$i}_to_type__{$guid}"]);
112
  $to_id = stripslashes($_POST["link_{$i}_to_id_{$to_type}__{$guid}"]);
152
 
153
  //Get post options
154
  $posttypeobjs = suwp::get_post_type_objects();
155
+ $posttypes = $posts = $postoptions = array();
 
156
  foreach ($posttypeobjs as $posttypeobj) {
157
 
158
  $stati = get_available_post_statuses($posttypeobj->name);
162
  $typeposts = get_posts("post_status=$stati&numberposts=-1&post_type=".$posttypeobj->name);
163
  if (count($typeposts)) {
164
  $posttypes['posttype_'.$posttypeobj->name] = $posttypeobj->labels->singular_name;
165
+ $posts['posttype_'.$posttypeobj->name] = $typeposts_array = array_slice(suarr::simplify($typeposts, 'ID', 'post_title'), 0, 1000, true); //Let's not go too crazy with post dropdowns; cut it off at 1000
166
+ //$postoptions['posttype_'.$posttypeobj->name] = suhtml::option_tags(array(0 => '') + $typeposts_array, null); //Maintains numeric array keys, unlike array_unshift or array_merge
167
  }
168
  }
169
 
177
  foreach ($posts as $posttype => $typeposts) {
178
  $typeposts = array(0 => '') + $typeposts; //Maintains numeric array keys, unlike array_unshift or array_merge
179
  $postdropdowns[$posttype] = $this->get_input_element('dropdown', "link_{$i}_to_id_{$posttype}__$guid", $link['to_id'], $typeposts);
180
+
181
+ /*
182
+ //$typeposts = array(0 => '') + $typeposts;
183
+ $postdropdowns[$posttype] = $this->get_input_element('dropdown', "link_{$i}_to_id_{$posttype}__$guid", $link['to_id'],
184
+ str_replace("<option value='{$link['to_id']}'>", "<option value='{$link['to_id']}' selected='selected'>", $postoptions[$posttype])
185
+ );
186
+ */
187
  }
188
 
189
  $cells = array(
190
+ 'link-anchor' => $this->get_input_element('textbox', "link_{$i}_anchor", $link['anchor'])
 
191
  , 'link-to_type' => $this->get_input_element('dropdown', "link_{$i}_to_type__$guid", $link['to_type'], array(
192
  __('Custom', 'seo-ultimate') => array('url' => __('URL', 'seo-ultimate'))
193
  , __('Content Items', 'seo-ultimate') => $posttypes
198
  , 'link-title' => $this->get_input_element('textbox', "link_{$i}_title", $link['title'])
199
  , 'link-options' =>
200
  $this->get_input_element('checkbox', "link_{$i}_nofollow", $link['nofollow'], __('Nofollow', 'seo-ultimate'))
201
+ .$this->get_input_element('checkbox', "link_{$i}_target", $link['target'] == 'blank', __('New window', 'seo-ultimate'))
202
  );
203
  if ($delete_option)
204
  $cells['link-delete'] = $this->get_input_element('checkbox', "link_{$i}_delete");
209
  }
210
 
211
  $this->admin_wftable_end();
212
+ echo $this->get_input_element('hidden', '_link_guid', $guid);
213
  }
214
 
215
  function get_post_autolinks($value, $key, $post) {
modules/class.su-module.php CHANGED
@@ -400,11 +400,15 @@ class SU_Module {
400
  */
401
  function load_default_settings() {
402
 
 
403
  $defaults = $this->get_default_settings();
404
  foreach ($defaults as $setting => $default) {
405
- if ($this->get_setting($setting, "{reset}") === "{reset}")
406
- $this->update_setting($setting, $default);
 
 
407
  }
 
408
  }
409
 
410
 
@@ -676,7 +680,7 @@ class SU_Module {
676
  * @param string $value The new value to assign to the setting.
677
  * @param string|null $module The module to which the setting belongs. Defaults to the current module's settings key. Optional.
678
  */
679
- function update_setting($key, $value, $module=null, $array_key=null) {
680
  if (!$module) $module = $this->get_settings_key();
681
 
682
  $use_custom = apply_filters("su_custom_update_setting-$module-$key", false, $value, $key) ||
@@ -688,6 +692,8 @@ class SU_Module {
688
  else
689
  $this->plugin->dbdata['settings'][$module][$key] = $value;
690
  }
 
 
691
  }
692
 
693
  /**
@@ -753,6 +759,8 @@ class SU_Module {
753
  unset($this->plugin->dbdata['settings'][$module][$key][$array_key]);
754
  else
755
  unset($this->plugin->dbdata['settings'][$module][$key]);
 
 
756
  }
757
  }
758
 
@@ -766,7 +774,8 @@ class SU_Module {
766
  */
767
  function update_settings($settings) {
768
  foreach ($settings as $key => $value)
769
- update_setting($key, $value);
 
770
  }
771
 
772
  /**
@@ -784,6 +793,40 @@ class SU_Module {
784
  }
785
 
786
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
787
  /********** ADMIN PAGE FUNCTIONS **********/
788
 
789
  /**
@@ -931,7 +974,7 @@ class SU_Module {
931
  * @since 0.8
932
  */
933
  function admin_page_tabs_init() {
934
- add_action('admin_print_scripts', array(&$this, 'admin_page_tabs_js'));
935
  }
936
 
937
  /**
@@ -1084,7 +1127,7 @@ class SU_Module {
1084
  $search = $_REQUEST[$type . '_s'];
1085
 
1086
  //Save meta if applicable
1087
- if ($is_update = ($this->is_action('update') && !strlen(trim($search))))
1088
  foreach ($_POST as $key => $value)
1089
  if (sustr::startswith($key, $genus.'_'))
1090
  foreach ($fields as $field)
@@ -1092,10 +1135,12 @@ class SU_Module {
1092
  $id = (int)$matches[1];
1093
  switch ($genus) {
1094
  case 'post': update_post_meta($id, "_su_{$field['name']}", $_POST[$key]); break;
1095
- case 'term': $this->update_setting($field['term_settings_key'], $_POST[$key], null, $id); break;
1096
  }
1097
  continue 2; //Go to next $_POST item
1098
  }
 
 
1099
 
1100
  $pagenum = isset( $_GET[$type . '_paged'] ) ? absint( $_GET[$type . '_paged'] ) : 0;
1101
  if ( empty($pagenum) ) $pagenum = 1;
@@ -1270,8 +1315,10 @@ class SU_Module {
1270
  return $html;
1271
  break;
1272
  case 'dropdown':
1273
- if (is_array($extra))
1274
- return "<select name='$name'$inputid onchange='javascript:su_toggle_select_children(this)' class='dropdown'>".suhtml::option_tags($extra, $value)."</select>";
 
 
1275
  break;
1276
  case 'hidden':
1277
  return "<input name='$name'$inputid value='$value' type='hidden' />";
@@ -1367,6 +1414,10 @@ class SU_Module {
1367
  * @param boolean $table Whether or not a form table should be ended.
1368
  */
1369
  function admin_form_end($button = null, $table = true) {
 
 
 
 
1370
  if ($button === null) $button = __('Save Changes'); //This string is used in normal WP, so we don't need a textdomain
1371
  if ($table) echo "</table>\n";
1372
 
@@ -2343,6 +2394,7 @@ class SU_Module {
2343
 
2344
  //Make a record of it
2345
  $this->plugin->dbdata['cron'][$mk][$function] = array($hook, $start, $recurrance);
 
2346
 
2347
  //Run the event now
2348
  call_user_func(array($this, $function));
400
  */
401
  function load_default_settings() {
402
 
403
+ $save = false;
404
  $defaults = $this->get_default_settings();
405
  foreach ($defaults as $setting => $default) {
406
+ if ($this->get_setting($setting, "{reset}") === "{reset}") {
407
+ $this->update_setting($setting, $default, null, null, false);
408
+ $save = true;
409
+ }
410
  }
411
+ if ($save) $this->plugin->save_dbdata();
412
  }
413
 
414
 
680
  * @param string $value The new value to assign to the setting.
681
  * @param string|null $module The module to which the setting belongs. Defaults to the current module's settings key. Optional.
682
  */
683
+ function update_setting($key, $value, $module=null, $array_key=null, $save=true) {
684
  if (!$module) $module = $this->get_settings_key();
685
 
686
  $use_custom = apply_filters("su_custom_update_setting-$module-$key", false, $value, $key) ||
692
  else
693
  $this->plugin->dbdata['settings'][$module][$key] = $value;
694
  }
695
+
696
+ if ($save && !$this->is_action('update')) $this->plugin->save_dbdata();
697
  }
698
 
699
  /**
759
  unset($this->plugin->dbdata['settings'][$module][$key][$array_key]);
760
  else
761
  unset($this->plugin->dbdata['settings'][$module][$key]);
762
+
763
+ $this->plugin->save_dbdata();
764
  }
765
  }
766
 
774
  */
775
  function update_settings($settings) {
776
  foreach ($settings as $key => $value)
777
+ update_setting($key, $value, null, null, false);
778
+ $this->plugin->save_dbdata();
779
  }
780
 
781
  /**
793
  }
794
 
795
 
796
+ /********** LOG FUNCTIONS **********/
797
+
798
+ /**
799
+ * Retrieves the module's log.
800
+ *
801
+ * @since 4.5
802
+ * @uses get_settings_key()
803
+ *
804
+ * @return array
805
+ */
806
+ function get_log() {
807
+ $module = $this->get_settings_key();
808
+
809
+ if (isset($this->plugin->dbdata['logs']
810
+ , $this->plugin->dbdata['logs'][$module]))
811
+ return $this->plugin->dbdata['settings'][$module][$key];
812
+
813
+ return array();
814
+ }
815
+
816
+ /**
817
+ * Updates the module's log array.
818
+ *
819
+ * @since 4.5
820
+ * @uses get_settings_key()
821
+ *
822
+ * @param string $value The entirety of the log to be updated.
823
+ */
824
+ function update_log($value) {
825
+ $module = $this->get_settings_key();
826
+ $this->plugin->dbdata['logs'][$module] = $value;
827
+ }
828
+
829
+
830
  /********** ADMIN PAGE FUNCTIONS **********/
831
 
832
  /**
974
  * @since 0.8
975
  */
976
  function admin_page_tabs_init() {
977
+ add_action('admin_enqueue_scripts', array(&$this, 'admin_page_tabs_js'));
978
  }
979
 
980
  /**
1127
  $search = $_REQUEST[$type . '_s'];
1128
 
1129
  //Save meta if applicable
1130
+ if ($is_update = ($this->is_action('update') && !strlen(trim($search)))) {
1131
  foreach ($_POST as $key => $value)
1132
  if (sustr::startswith($key, $genus.'_'))
1133
  foreach ($fields as $field)
1135
  $id = (int)$matches[1];
1136
  switch ($genus) {
1137
  case 'post': update_post_meta($id, "_su_{$field['name']}", $_POST[$key]); break;
1138
+ case 'term': $this->update_setting($field['term_settings_key'], $_POST[$key], null, $id, false); break;
1139
  }
1140
  continue 2; //Go to next $_POST item
1141
  }
1142
+ if ($genus == 'term') $this->plugin->save_dbdata();
1143
+ }
1144
 
1145
  $pagenum = isset( $_GET[$type . '_paged'] ) ? absint( $_GET[$type . '_paged'] ) : 0;
1146
  if ( empty($pagenum) ) $pagenum = 1;
1315
  return $html;
1316
  break;
1317
  case 'dropdown':
1318
+ $html = "<select name='$name'$inputid onchange='javascript:su_toggle_select_children(this)' class='dropdown'>";
1319
+ if (is_array($extra)) $html .= suhtml::option_tags($extra, $value); else $html .= $extra;
1320
+ $html .= "</select>";
1321
+ return $html;
1322
  break;
1323
  case 'hidden':
1324
  return "<input name='$name'$inputid value='$value' type='hidden' />";
1414
  * @param boolean $table Whether or not a form table should be ended.
1415
  */
1416
  function admin_form_end($button = null, $table = true) {
1417
+
1418
+ if ($this->is_action('update'))
1419
+ $this->plugin->save_dbdata();
1420
+
1421
  if ($button === null) $button = __('Save Changes'); //This string is used in normal WP, so we don't need a textdomain
1422
  if ($table) echo "</table>\n";
1423
 
2394
 
2395
  //Make a record of it
2396
  $this->plugin->dbdata['cron'][$mk][$function] = array($hook, $start, $recurrance);
2397
+ $this->plugin->save_dbdata();
2398
 
2399
  //Run the event now
2400
  call_user_func(array($this, $function));
modules/files/files.php CHANGED
@@ -37,7 +37,7 @@ class SU_Files extends SU_Module {
37
 
38
  //Initialize variables
39
  $exists = $writable = false;
40
- $is_super_admin = !function_exists('is_super_admin') || !function_exists('is_multisite') || (is_multisite() && is_super_admin());
41
 
42
  //Does the server run Apache?
43
  if ($is_apache) {
37
 
38
  //Initialize variables
39
  $exists = $writable = false;
40
+ $is_super_admin = !function_exists('is_super_admin') || !function_exists('is_multisite') || !is_multisite() || is_super_admin();
41
 
42
  //Does the server run Apache?
43
  if ($is_apache) {
plugin/class.seo-ultimate.php CHANGED
@@ -144,7 +144,6 @@ class SEO_Ultimate {
144
 
145
  //Save
146
  add_action('shutdown', array(&$this, 'save_hit'));
147
- add_action('shutdown', array(&$this, 'save_dbdata'));
148
 
149
  /********** CLASS CONSTRUCTION **********/
150
 
@@ -175,7 +174,7 @@ class SEO_Ultimate {
175
 
176
  //Store the current version in the database.
177
  $this->dbdata['version'] = $version;
178
-
179
 
180
  /********** INITIALIZATION **********/
181
 
@@ -277,6 +276,7 @@ class SEO_Ultimate {
277
  if (!isset($this->dbdata['settings']) && is_readable($settingsfile = $this->plugin_dir_path.'settings.txt')) {
278
  $import = base64_decode(file_get_contents($settingsfile));
279
  if (is_serialized($import)) $this->dbdata['settings'] = unserialize($import);
 
280
  }
281
  }
282
 
@@ -306,6 +306,7 @@ class SEO_Ultimate {
306
  delete_option("su_$option");
307
  }
308
  }
 
309
  }
310
 
311
  /**
@@ -327,11 +328,15 @@ class SEO_Ultimate {
327
  * @param array $copy
328
  */
329
  function copy_module_states($copy) {
 
330
  foreach ($copy as $from => $tos)
331
  if (isset($this->dbdata['modules'][$from]))
332
  foreach ((array)$tos as $to)
333
- if (!isset($this->dbdata['modules'][$to]))
334
  $this->dbdata['modules'][$to] = $this->dbdata['modules'][$from];
 
 
 
335
  }
336
 
337
  /**
@@ -384,9 +389,6 @@ class SEO_Ultimate {
384
  //Delete all database data
385
  $this->dbdata = array();
386
  delete_option('seo_ultimate');
387
-
388
- //Stop the database data from being re-saved
389
- remove_action('shutdown', array(&$this, 'save_dbdata'));
390
  }
391
 
392
 
@@ -546,6 +548,7 @@ class SEO_Ultimate {
546
 
547
  //Save the new modules list
548
  $this->dbdata['modules'] = $newmodules;
 
549
 
550
  //Remove the cron jobs of deleted modules
551
  $this->remove_cron_jobs();
@@ -1535,6 +1538,8 @@ class SEO_Ultimate {
1535
  }
1536
 
1537
  $this->dbdata['cron'] = $newcrondata;
 
 
1538
  }
1539
  }
1540
 
144
 
145
  //Save
146
  add_action('shutdown', array(&$this, 'save_hit'));
 
147
 
148
  /********** CLASS CONSTRUCTION **********/
149
 
174
 
175
  //Store the current version in the database.
176
  $this->dbdata['version'] = $version;
177
+ if ($oldversion != $version) $this->save_dbdata();
178
 
179
  /********** INITIALIZATION **********/
180
 
276
  if (!isset($this->dbdata['settings']) && is_readable($settingsfile = $this->plugin_dir_path.'settings.txt')) {
277
  $import = base64_decode(file_get_contents($settingsfile));
278
  if (is_serialized($import)) $this->dbdata['settings'] = unserialize($import);
279
+ $this->save_dbdata();
280
  }
281
  }
282
 
306
  delete_option("su_$option");
307
  }
308
  }
309
+ $this->save_dbdata();
310
  }
311
 
312
  /**
328
  * @param array $copy
329
  */
330
  function copy_module_states($copy) {
331
+ $save = false;
332
  foreach ($copy as $from => $tos)
333
  if (isset($this->dbdata['modules'][$from]))
334
  foreach ((array)$tos as $to)
335
+ if (!isset($this->dbdata['modules'][$to])) {
336
  $this->dbdata['modules'][$to] = $this->dbdata['modules'][$from];
337
+ $save = true;
338
+ }
339
+ if ($save) $this->save_dbdata();
340
  }
341
 
342
  /**
389
  //Delete all database data
390
  $this->dbdata = array();
391
  delete_option('seo_ultimate');
 
 
 
392
  }
393
 
394
 
548
 
549
  //Save the new modules list
550
  $this->dbdata['modules'] = $newmodules;
551
+ if ($newmodules != $oldmodules) $this->save_dbdata();
552
 
553
  //Remove the cron jobs of deleted modules
554
  $this->remove_cron_jobs();
1538
  }
1539
 
1540
  $this->dbdata['cron'] = $newcrondata;
1541
+
1542
+ $this->save_dbdata();
1543
  }
1544
  }
1545
 
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: SEO Design Solutions
3
  Tags: seo, SEO Ultimate, suite, google, yahoo, bing, search engines, admin, post, page, custom post types, categories, tags, terms, custom taxonomies, title, meta, robots, noindex, nofollow, canonical, 404, robots.txt, htaccess, slugs, url, anchor, more, link, excerpt, permalink, links, autolinks, code, footer, modules, uninstallable, reinstallable, downgradable, import, export, CSV
4
  Requires at least: 2.8
5
  Tested up to: 3.0
6
- Stable tag: 4.4
7
 
8
  This all-in-one SEO plugin gives you control over title tags, noindex, meta tags, slugs, canonical, autolinks, 404 errors, rich snippets, and more.
9
 
@@ -11,11 +11,11 @@ This all-in-one SEO plugin gives you control over title tags, noindex, meta tags
11
 
12
  = Recent Releases =
13
 
 
14
  * Version 4.4 adds a new field for entering sitewide meta keywords
15
  * Version 4.3 adds the ability to use the post's excerpt as its default meta description
16
  * Version 4.2 adds the option to exclude specific posts/pages from being autolinked
17
  * Version 4.1 adds tag title capitalization for title tags
18
- * Version 4.0 adds meta description mass-editor for posts, pages, attachments, and custom post types
19
 
20
  = Features =
21
 
@@ -215,6 +215,13 @@ Frequently asked questions, settings help, and troubleshooting tips for SEO Ulti
215
 
216
  == Changelog ==
217
 
 
 
 
 
 
 
 
218
  = Version 4.4 (August 7, 2010) =
219
  * Feature: Added new "Global Keywords" textbox to Meta Keywords Editor, which allows sitewide keywords to be specified
220
  * Improvement: Meta Keywords Editor now removes duplicate keywords from the meta keywords tag
3
  Tags: seo, SEO Ultimate, suite, google, yahoo, bing, search engines, admin, post, page, custom post types, categories, tags, terms, custom taxonomies, title, meta, robots, noindex, nofollow, canonical, 404, robots.txt, htaccess, slugs, url, anchor, more, link, excerpt, permalink, links, autolinks, code, footer, modules, uninstallable, reinstallable, downgradable, import, export, CSV
4
  Requires at least: 2.8
5
  Tested up to: 3.0
6
+ Stable tag: 4.5
7
 
8
  This all-in-one SEO plugin gives you control over title tags, noindex, meta tags, slugs, canonical, autolinks, 404 errors, rich snippets, and more.
9
 
11
 
12
  = Recent Releases =
13
 
14
+ * Version 4.5 adds bugfixes
15
  * Version 4.4 adds a new field for entering sitewide meta keywords
16
  * Version 4.3 adds the ability to use the post's excerpt as its default meta description
17
  * Version 4.2 adds the option to exclude specific posts/pages from being autolinked
18
  * Version 4.1 adds tag title capitalization for title tags
 
19
 
20
  = Features =
21
 
215
 
216
  == Changelog ==
217
 
218
+ = Version 4.5 (August 13, 2010) =
219
+ * Improvement: SEO Ultimate now only saves database data when its settings are updated
220
+ * Bugfix: Fixed array_combine() error when importing CSV files
221
+ * Bugfix: Restored htaccess editing for non-multisite installations, fixing a feature regression introduced in version 3.9
222
+ * Bugfix: The "new window" option no longer checks itself by default in Deeplink Juggernaut
223
+ * Bugfix: Fixed conflict with the "Markdown for WordPress and bbPress" plugin
224
+
225
  = Version 4.4 (August 7, 2010) =
226
  * Feature: Added new "Global Keywords" textbox to Meta Keywords Editor, which allows sitewide keywords to be specified
227
  * Improvement: Meta Keywords Editor now removes duplicate keywords from the meta keywords tag
seo-ultimate.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: SEO Ultimate
4
  Plugin URI: http://www.seodesignsolutions.com/wordpress-seo/
5
  Description: This all-in-one SEO plugin gives you control over title tags, noindex/nofollow, meta tags, rich snippets, slugs, canonical tags, autolinks, 404 errors, rich snippets, and more.
6
- Version: 4.4
7
  Author: SEO Design Solutions
8
  Author URI: http://www.seodesignsolutions.com/
9
  Text Domain: seo-ultimate
@@ -12,7 +12,7 @@ Text Domain: seo-ultimate
12
  /**
13
  * The main SEO Ultimate plugin file.
14
  * @package SeoUltimate
15
- * @version 4.4
16
  * @link http://www.seodesignsolutions.com/wordpress-seo/ SEO Ultimate Homepage
17
  */
18
 
@@ -47,18 +47,22 @@ define('SU_MINIMUM_WP_VER', '2.8');
47
  //Reading plugin info from constants is faster than trying to parse it from the header above.
48
  define('SU_PLUGIN_NAME', 'SEO Ultimate');
49
  define('SU_PLUGIN_URI', 'http://www.seodesignsolutions.com/wordpress-seo/');
50
- define('SU_VERSION', '4.4');
51
  define('SU_AUTHOR', 'SEO Design Solutions');
52
  define('SU_AUTHOR_URI', 'http://www.seodesignsolutions.com/');
53
- define('SU_USER_AGENT', 'SeoUltimate/4.4');
54
 
55
  /********** INCLUDES **********/
56
 
57
  //Libraries
58
  include 'includes/jlfunctions/jlfunctions.php';
59
  include 'includes/jlwp/jlwp.php';
60
- if (!class_exists('Markdown'))
 
 
61
  include_once 'includes/markdown/markdown.php';
 
 
62
 
63
  //Plugin files
64
  include 'plugin/su-constants.php';
3
  Plugin Name: SEO Ultimate
4
  Plugin URI: http://www.seodesignsolutions.com/wordpress-seo/
5
  Description: This all-in-one SEO plugin gives you control over title tags, noindex/nofollow, meta tags, rich snippets, slugs, canonical tags, autolinks, 404 errors, rich snippets, and more.
6
+ Version: 4.5
7
  Author: SEO Design Solutions
8
  Author URI: http://www.seodesignsolutions.com/
9
  Text Domain: seo-ultimate
12
  /**
13
  * The main SEO Ultimate plugin file.
14
  * @package SeoUltimate
15
+ * @version 4.5
16
  * @link http://www.seodesignsolutions.com/wordpress-seo/ SEO Ultimate Homepage
17
  */
18
 
47
  //Reading plugin info from constants is faster than trying to parse it from the header above.
48
  define('SU_PLUGIN_NAME', 'SEO Ultimate');
49
  define('SU_PLUGIN_URI', 'http://www.seodesignsolutions.com/wordpress-seo/');
50
+ define('SU_VERSION', '4.5');
51
  define('SU_AUTHOR', 'SEO Design Solutions');
52
  define('SU_AUTHOR_URI', 'http://www.seodesignsolutions.com/');
53
+ define('SU_USER_AGENT', 'SeoUltimate/4.5');
54
 
55
  /********** INCLUDES **********/
56
 
57
  //Libraries
58
  include 'includes/jlfunctions/jlfunctions.php';
59
  include 'includes/jlwp/jlwp.php';
60
+
61
+ function su_load_markdown() {
62
+ if (!class_exists('Markdown') && !class_exists('Markdown_Parser'))
63
  include_once 'includes/markdown/markdown.php';
64
+ }
65
+ add_action('plugins_loaded', 'su_load_markdown');
66
 
67
  //Plugin files
68
  include 'plugin/su-constants.php';
seo-ultimate.pot CHANGED
@@ -1,4 +1,4 @@
1
- # Translation of the WordPress plugin SEO Ultimate 4.4 by SEO Design Solutions.
2
  # Copyright (C) 2010 SEO Design Solutions
3
  # This file is distributed under the same license as the SEO Ultimate package.
4
  # FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
@@ -6,9 +6,9 @@
6
  #, fuzzy
7
  msgid ""
8
  msgstr ""
9
- "Project-Id-Version: SEO Ultimate 4.4\n"
10
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/seo-ultimate\n"
11
- "POT-Creation-Date: 2010-08-07 15:38+0000\n"
12
  "PO-Revision-Date: 2010-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -67,7 +67,7 @@ msgstr ""
67
  msgid "Log"
68
  msgstr ""
69
 
70
- #: modules/404s/fofs-log.php:115 modules/class.su-module.php:1163
71
  msgid "Actions"
72
  msgstr ""
73
 
@@ -233,71 +233,71 @@ msgid ""
233
  "a certain word or phrase in your post/page content to a URL you specify."
234
  msgstr ""
235
 
236
- #: modules/autolinks/content-autolinks.php:129
237
  msgid "Edit Existing Links"
238
  msgstr ""
239
 
240
- #: modules/autolinks/content-autolinks.php:133
241
  msgid "Add a New Link"
242
  msgstr ""
243
 
244
- #: modules/autolinks/content-autolinks.php:141
245
  msgid "Anchor Text"
246
  msgstr ""
247
 
248
- #: modules/autolinks/content-autolinks.php:142
249
  msgid "Destination Type"
250
  msgstr ""
251
 
252
- #: modules/autolinks/content-autolinks.php:143
253
  msgid "Destination"
254
  msgstr ""
255
 
256
- #: modules/autolinks/content-autolinks.php:144
257
  msgid "Title Attribute"
258
  msgstr ""
259
 
260
- #: modules/autolinks/content-autolinks.php:145
261
  msgid "Options"
262
  msgstr ""
263
 
264
- #: modules/autolinks/content-autolinks.php:147
265
  msgid "Delete"
266
  msgstr ""
267
 
268
- #: modules/autolinks/content-autolinks.php:185
269
  msgid "Custom"
270
  msgstr ""
271
 
272
- #: modules/autolinks/content-autolinks.php:185
273
  msgid "URL"
274
  msgstr ""
275
 
276
- #: modules/autolinks/content-autolinks.php:186
277
  msgid "Content Items"
278
  msgstr ""
279
 
280
- #: modules/autolinks/content-autolinks.php:193
281
  msgid "Nofollow"
282
  msgstr ""
283
 
284
- #: modules/autolinks/content-autolinks.php:194
285
  msgid "New window"
286
  msgstr ""
287
 
288
- #: modules/autolinks/content-autolinks.php:257
289
  msgid "Incoming Autolink Anchors:<br /><em>(one per line)</em>"
290
  msgstr ""
291
 
292
- #: modules/autolinks/content-autolinks.php:258
293
  msgid "Don&#8217;t add autolinks to anchor texts found in this post."
294
  msgstr ""
295
 
296
- #: modules/autolinks/content-autolinks.php:258
297
  msgid "Autolink Exclusion:"
298
  msgstr ""
299
 
300
- #: modules/autolinks/content-autolinks.php:263
301
  msgid ""
302
  "<strong>Incoming Autolink Anchors</strong> &mdash; When you enter anchors "
303
  "into this box, Deeplink Juggernaut will search for that anchor in all your "
@@ -353,64 +353,64 @@ msgid ""
353
  "SEO Ultimate and may be outdated.)"
354
  msgstr ""
355
 
356
- #: modules/class.su-module.php:964
357
  #, php-format
358
  msgid "%s %s|Dropdown Title"
359
  msgstr ""
360
 
361
- #: modules/class.su-module.php:992
362
  #, php-format
363
  msgid "%1$s | %2$s %3$s by %4$s"
364
  msgstr ""
365
 
366
- #: modules/class.su-module.php:1049
367
  msgid "Name"
368
  msgstr ""
369
 
370
- #: modules/class.su-module.php:1060
371
  msgid "Your site currently doesn&#8217;t have any public items of this type."
372
  msgstr ""
373
 
374
- #: modules/class.su-module.php:1142
375
  msgid "&laquo;"
376
  msgstr ""
377
 
378
- #: modules/class.su-module.php:1143
379
  msgid "&raquo;"
380
  msgstr ""
381
 
382
- #: modules/class.su-module.php:1150
383
  #, php-format
384
  msgid "Displaying %s&#8211;%s of %s"
385
  msgstr ""
386
 
387
- #: modules/class.su-module.php:1164
388
  msgid "ID"
389
  msgstr ""
390
 
391
- #: modules/class.su-module.php:1197
392
  msgid "View"
393
  msgstr ""
394
 
395
- #: modules/class.su-module.php:1197
396
  msgid "Edit"
397
  msgstr ""
398
 
399
- #: modules/class.su-module.php:1350
400
  msgid "Settings updated."
401
  msgstr ""
402
 
403
- #: modules/class.su-module.php:1370
404
  msgid "Save Changes"
405
  msgstr ""
406
 
407
- #: modules/class.su-module.php:1858
408
  msgid ""
409
  "Are you sure you want to replace the textbox contents with this default "
410
  "value?"
411
  msgstr ""
412
 
413
- #: modules/class.su-module.php:1873 modules/settings/settings-data.php:23
414
  msgid "Reset"
415
  msgstr ""
416
 
@@ -1125,7 +1125,7 @@ msgstr ""
1125
  msgid "SEO Design Solutions Whitepapers"
1126
  msgstr ""
1127
 
1128
- #. #-#-#-#-# plugin.pot (SEO Ultimate 4.4) #-#-#-#-#
1129
  #. Author of the plugin/theme
1130
  #: modules/sds-blog/sds-blog.php:49
1131
  msgid "SEO Design Solutions"
@@ -1431,9 +1431,9 @@ msgstr ""
1431
  msgid "SEO Ultimate Plugin Settings"
1432
  msgstr ""
1433
 
1434
- #. #-#-#-#-# plugin.pot (SEO Ultimate 4.4) #-#-#-#-#
1435
  #. Plugin Name of the plugin/theme
1436
- #: modules/settings/settings.php:14 plugin/class.seo-ultimate.php:757
1437
  msgid "SEO Ultimate"
1438
  msgstr ""
1439
 
@@ -1441,7 +1441,7 @@ msgstr ""
1441
  msgid "Uninstaller"
1442
  msgstr ""
1443
 
1444
- #: modules/settings/uninstall.php:18 plugin/class.seo-ultimate.php:1244
1445
  msgid "Uninstall"
1446
  msgstr ""
1447
 
@@ -1694,80 +1694,80 @@ msgstr ""
1694
  msgid "Code Inserter module"
1695
  msgstr ""
1696
 
1697
- #: plugin/class.seo-ultimate.php:757
1698
  msgid "SEO"
1699
  msgstr ""
1700
 
1701
- #: plugin/class.seo-ultimate.php:1035
1702
  msgid "SEO Settings Help"
1703
  msgstr ""
1704
 
1705
- #: plugin/class.seo-ultimate.php:1037
1706
  msgid "The SEO Settings box lets you customize these settings:"
1707
  msgstr ""
1708
 
1709
- #: plugin/class.seo-ultimate.php:1039
1710
  msgid "(The SEO Settings box is part of the SEO Ultimate plugin.)"
1711
  msgstr ""
1712
 
1713
- #: plugin/class.seo-ultimate.php:1094
1714
  #, php-format
1715
  msgid ""
1716
  "SEO Ultimate includes the functionality of %1$s. You may want to deactivate %"
1717
  "1$s to avoid plugin conflicts."
1718
  msgstr ""
1719
 
1720
- #: plugin/class.seo-ultimate.php:1135
1721
  msgid "new feature"
1722
  msgstr ""
1723
 
1724
- #: plugin/class.seo-ultimate.php:1135
1725
  msgid "new features"
1726
  msgstr ""
1727
 
1728
- #: plugin/class.seo-ultimate.php:1136
1729
  msgid "bugfix"
1730
  msgstr ""
1731
 
1732
- #: plugin/class.seo-ultimate.php:1136
1733
  msgid "bugfixes"
1734
  msgstr ""
1735
 
1736
- #: plugin/class.seo-ultimate.php:1137
1737
  msgid "improvement"
1738
  msgstr ""
1739
 
1740
- #: plugin/class.seo-ultimate.php:1137
1741
  msgid "improvements"
1742
  msgstr ""
1743
 
1744
- #: plugin/class.seo-ultimate.php:1138
1745
  msgid "security fix"
1746
  msgstr ""
1747
 
1748
- #: plugin/class.seo-ultimate.php:1138
1749
  msgid "security fixes"
1750
  msgstr ""
1751
 
1752
- #: plugin/class.seo-ultimate.php:1169
1753
  #, php-format
1754
  msgid "%d %s"
1755
  msgstr ""
1756
 
1757
- #: plugin/class.seo-ultimate.php:1175
1758
  #, php-format
1759
  msgid "Upgrade now to get %s. %s."
1760
  msgstr ""
1761
 
1762
- #: plugin/class.seo-ultimate.php:1177
1763
  msgid "View changelog"
1764
  msgstr ""
1765
 
1766
- #: plugin/class.seo-ultimate.php:1264
1767
  msgid "Active Modules: "
1768
  msgstr ""
1769
 
1770
- #: plugin/class.seo-ultimate.php:1325
1771
  msgid ""
1772
  "<strong>SEO Ultimate Notice:</strong> Your blog is configured to block "
1773
  "search engine spiders. To resolve this, <a href=\"options-privacy.php\" "
@@ -1775,7 +1775,7 @@ msgid ""
1775
  "to everyone."
1776
  msgstr ""
1777
 
1778
- #: plugin/class.seo-ultimate.php:1435
1779
  msgid "SEO Settings"
1780
  msgstr ""
1781
 
@@ -1854,7 +1854,7 @@ msgstr ""
1854
  msgid "Plugin upgraded successfully."
1855
  msgstr ""
1856
 
1857
- #: seo-ultimate.php:85
1858
  #, php-format
1859
  msgid ""
1860
  "SEO Ultimate requires WordPress %s or above. Please upgrade to the latest "
1
+ # Translation of the WordPress plugin SEO Ultimate 4.5 by SEO Design Solutions.
2
  # Copyright (C) 2010 SEO Design Solutions
3
  # This file is distributed under the same license as the SEO Ultimate package.
4
  # FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
6
  #, fuzzy
7
  msgid ""
8
  msgstr ""
9
+ "Project-Id-Version: SEO Ultimate 4.5\n"
10
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/seo-ultimate\n"
11
+ "POT-Creation-Date: 2010-08-13 16:31+0000\n"
12
  "PO-Revision-Date: 2010-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
67
  msgid "Log"
68
  msgstr ""
69
 
70
+ #: modules/404s/fofs-log.php:115 modules/class.su-module.php:1208
71
  msgid "Actions"
72
  msgstr ""
73
 
233
  "a certain word or phrase in your post/page content to a URL you specify."
234
  msgstr ""
235
 
236
+ #: modules/autolinks/content-autolinks.php:130
237
  msgid "Edit Existing Links"
238
  msgstr ""
239
 
240
+ #: modules/autolinks/content-autolinks.php:134
241
  msgid "Add a New Link"
242
  msgstr ""
243
 
244
+ #: modules/autolinks/content-autolinks.php:142
245
  msgid "Anchor Text"
246
  msgstr ""
247
 
248
+ #: modules/autolinks/content-autolinks.php:143
249
  msgid "Destination Type"
250
  msgstr ""
251
 
252
+ #: modules/autolinks/content-autolinks.php:144
253
  msgid "Destination"
254
  msgstr ""
255
 
256
+ #: modules/autolinks/content-autolinks.php:145
257
  msgid "Title Attribute"
258
  msgstr ""
259
 
260
+ #: modules/autolinks/content-autolinks.php:146
261
  msgid "Options"
262
  msgstr ""
263
 
264
+ #: modules/autolinks/content-autolinks.php:148
265
  msgid "Delete"
266
  msgstr ""
267
 
268
+ #: modules/autolinks/content-autolinks.php:192
269
  msgid "Custom"
270
  msgstr ""
271
 
272
+ #: modules/autolinks/content-autolinks.php:192
273
  msgid "URL"
274
  msgstr ""
275
 
276
+ #: modules/autolinks/content-autolinks.php:193
277
  msgid "Content Items"
278
  msgstr ""
279
 
280
+ #: modules/autolinks/content-autolinks.php:200
281
  msgid "Nofollow"
282
  msgstr ""
283
 
284
+ #: modules/autolinks/content-autolinks.php:201
285
  msgid "New window"
286
  msgstr ""
287
 
288
+ #: modules/autolinks/content-autolinks.php:265
289
  msgid "Incoming Autolink Anchors:<br /><em>(one per line)</em>"
290
  msgstr ""
291
 
292
+ #: modules/autolinks/content-autolinks.php:266
293
  msgid "Don&#8217;t add autolinks to anchor texts found in this post."
294
  msgstr ""
295
 
296
+ #: modules/autolinks/content-autolinks.php:266
297
  msgid "Autolink Exclusion:"
298
  msgstr ""
299
 
300
+ #: modules/autolinks/content-autolinks.php:271
301
  msgid ""
302
  "<strong>Incoming Autolink Anchors</strong> &mdash; When you enter anchors "
303
  "into this box, Deeplink Juggernaut will search for that anchor in all your "
353
  "SEO Ultimate and may be outdated.)"
354
  msgstr ""
355
 
356
+ #: modules/class.su-module.php:1007
357
  #, php-format
358
  msgid "%s %s|Dropdown Title"
359
  msgstr ""
360
 
361
+ #: modules/class.su-module.php:1035
362
  #, php-format
363
  msgid "%1$s | %2$s %3$s by %4$s"
364
  msgstr ""
365
 
366
+ #: modules/class.su-module.php:1092
367
  msgid "Name"
368
  msgstr ""
369
 
370
+ #: modules/class.su-module.php:1103
371
  msgid "Your site currently doesn&#8217;t have any public items of this type."
372
  msgstr ""
373
 
374
+ #: modules/class.su-module.php:1187
375
  msgid "&laquo;"
376
  msgstr ""
377
 
378
+ #: modules/class.su-module.php:1188
379
  msgid "&raquo;"
380
  msgstr ""
381
 
382
+ #: modules/class.su-module.php:1195
383
  #, php-format
384
  msgid "Displaying %s&#8211;%s of %s"
385
  msgstr ""
386
 
387
+ #: modules/class.su-module.php:1209
388
  msgid "ID"
389
  msgstr ""
390
 
391
+ #: modules/class.su-module.php:1242
392
  msgid "View"
393
  msgstr ""
394
 
395
+ #: modules/class.su-module.php:1242
396
  msgid "Edit"
397
  msgstr ""
398
 
399
+ #: modules/class.su-module.php:1397
400
  msgid "Settings updated."
401
  msgstr ""
402
 
403
+ #: modules/class.su-module.php:1421
404
  msgid "Save Changes"
405
  msgstr ""
406
 
407
+ #: modules/class.su-module.php:1909
408
  msgid ""
409
  "Are you sure you want to replace the textbox contents with this default "
410
  "value?"
411
  msgstr ""
412
 
413
+ #: modules/class.su-module.php:1924 modules/settings/settings-data.php:23
414
  msgid "Reset"
415
  msgstr ""
416
 
1125
  msgid "SEO Design Solutions Whitepapers"
1126
  msgstr ""
1127
 
1128
+ #. #-#-#-#-# plugin.pot (SEO Ultimate 4.5) #-#-#-#-#
1129
  #. Author of the plugin/theme
1130
  #: modules/sds-blog/sds-blog.php:49
1131
  msgid "SEO Design Solutions"
1431
  msgid "SEO Ultimate Plugin Settings"
1432
  msgstr ""
1433
 
1434
+ #. #-#-#-#-# plugin.pot (SEO Ultimate 4.5) #-#-#-#-#
1435
  #. Plugin Name of the plugin/theme
1436
+ #: modules/settings/settings.php:14 plugin/class.seo-ultimate.php:760
1437
  msgid "SEO Ultimate"
1438
  msgstr ""
1439
 
1441
  msgid "Uninstaller"
1442
  msgstr ""
1443
 
1444
+ #: modules/settings/uninstall.php:18 plugin/class.seo-ultimate.php:1247
1445
  msgid "Uninstall"
1446
  msgstr ""
1447
 
1694
  msgid "Code Inserter module"
1695
  msgstr ""
1696
 
1697
+ #: plugin/class.seo-ultimate.php:760
1698
  msgid "SEO"
1699
  msgstr ""
1700
 
1701
+ #: plugin/class.seo-ultimate.php:1038
1702
  msgid "SEO Settings Help"
1703
  msgstr ""
1704
 
1705
+ #: plugin/class.seo-ultimate.php:1040
1706
  msgid "The SEO Settings box lets you customize these settings:"
1707
  msgstr ""
1708
 
1709
+ #: plugin/class.seo-ultimate.php:1042
1710
  msgid "(The SEO Settings box is part of the SEO Ultimate plugin.)"
1711
  msgstr ""
1712
 
1713
+ #: plugin/class.seo-ultimate.php:1097
1714
  #, php-format
1715
  msgid ""
1716
  "SEO Ultimate includes the functionality of %1$s. You may want to deactivate %"
1717
  "1$s to avoid plugin conflicts."
1718
  msgstr ""
1719
 
1720
+ #: plugin/class.seo-ultimate.php:1138
1721
  msgid "new feature"
1722
  msgstr ""
1723
 
1724
+ #: plugin/class.seo-ultimate.php:1138
1725
  msgid "new features"
1726
  msgstr ""
1727
 
1728
+ #: plugin/class.seo-ultimate.php:1139
1729
  msgid "bugfix"
1730
  msgstr ""
1731
 
1732
+ #: plugin/class.seo-ultimate.php:1139
1733
  msgid "bugfixes"
1734
  msgstr ""
1735
 
1736
+ #: plugin/class.seo-ultimate.php:1140
1737
  msgid "improvement"
1738
  msgstr ""
1739
 
1740
+ #: plugin/class.seo-ultimate.php:1140
1741
  msgid "improvements"
1742
  msgstr ""
1743
 
1744
+ #: plugin/class.seo-ultimate.php:1141
1745
  msgid "security fix"
1746
  msgstr ""
1747
 
1748
+ #: plugin/class.seo-ultimate.php:1141
1749
  msgid "security fixes"
1750
  msgstr ""
1751
 
1752
+ #: plugin/class.seo-ultimate.php:1172
1753
  #, php-format
1754
  msgid "%d %s"
1755
  msgstr ""
1756
 
1757
+ #: plugin/class.seo-ultimate.php:1178
1758
  #, php-format
1759
  msgid "Upgrade now to get %s. %s."
1760
  msgstr ""
1761
 
1762
+ #: plugin/class.seo-ultimate.php:1180
1763
  msgid "View changelog"
1764
  msgstr ""
1765
 
1766
+ #: plugin/class.seo-ultimate.php:1267
1767
  msgid "Active Modules: "
1768
  msgstr ""
1769
 
1770
+ #: plugin/class.seo-ultimate.php:1328
1771
  msgid ""
1772
  "<strong>SEO Ultimate Notice:</strong> Your blog is configured to block "
1773
  "search engine spiders. To resolve this, <a href=\"options-privacy.php\" "
1775
  "to everyone."
1776
  msgstr ""
1777
 
1778
+ #: plugin/class.seo-ultimate.php:1438
1779
  msgid "SEO Settings"
1780
  msgstr ""
1781
 
1854
  msgid "Plugin upgraded successfully."
1855
  msgstr ""
1856
 
1857
+ #: seo-ultimate.php:89
1858
  #, php-format
1859
  msgid ""
1860
  "SEO Ultimate requires WordPress %s or above. Please upgrade to the latest "