SEO Ultimate - Version 3.9

Version Description

Download this release

Release Info

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

Code changes from version 3.8 to 3.9

includes/jlfunctions/arr.php CHANGED
@@ -94,8 +94,8 @@ class suarr {
94
  }
95
 
96
  function vklrsort(&$arr, $valuekey) {
97
- $valuekey = sustr::preg_filter('A-Za-z0-9', $valuekey);
98
- uksort($arr, create_function('$a,$b', 'return strlen($b["'.$valuekey.'"]) - strlen($a["'.$valuekey.'"]);'));
99
  }
100
 
101
  function flatten_values($arr, $value_keys) {
94
  }
95
 
96
  function vklrsort(&$arr, $valuekey) {
97
+ $valuekey = sustr::preg_filter('A-Za-z0-9 ', $valuekey);
98
+ uasort($arr, create_function('$a,$b', 'return strlen($b["'.$valuekey.'"]) - strlen($a["'.$valuekey.'"]);'));
99
  }
100
 
101
  function flatten_values($arr, $value_keys) {
includes/jlwp/screen-meta.php CHANGED
@@ -49,12 +49,22 @@ $screen_meta = array(
49
  <style type="text/css">
50
  .screen-meta-toggle {
51
  float: right;
 
52
  background: transparent url( <?php bloginfo('wpurl'); ?>/wp-admin/images/screen-options-left.gif ) no-repeat 0 0;
 
 
 
53
  font-family: "Lucida Grande", Verdana, Arial, "Bitstream Vera Sans", sans-serif;
54
  height: 22px;
55
  padding: 0;
56
  margin: 0 6px 0 0;
 
 
 
 
 
57
  }
 
58
  .screen-meta-wrap h5 {
59
  margin: 8px 0;
60
  font-size: 13px;
49
  <style type="text/css">
50
  .screen-meta-toggle {
51
  float: right;
52
+ <?php global $wp_version; if (version_compare($wp_version, '3.0', '<')) { ?>
53
  background: transparent url( <?php bloginfo('wpurl'); ?>/wp-admin/images/screen-options-left.gif ) no-repeat 0 0;
54
+ <?php } else { ?>
55
+ background: #e3e3e3;
56
+ <?php } ?>
57
  font-family: "Lucida Grande", Verdana, Arial, "Bitstream Vera Sans", sans-serif;
58
  height: 22px;
59
  padding: 0;
60
  margin: 0 6px 0 0;
61
+
62
+ -moz-border-radius-bottomleft: 3px;
63
+ -moz-border-radius-bottomright: 3px;
64
+ -webkit-border-bottom-left-radius: 3px;
65
+ -webkit-border-bottom-right-radius: 3px;
66
  }
67
+
68
  .screen-meta-wrap h5 {
69
  margin: 8px 0;
70
  font-size: 13px;
modules/autolinks/content-autolinks.php CHANGED
@@ -18,17 +18,22 @@ class SU_ContentAutolinks extends SU_Module {
18
 
19
  function get_default_settings() {
20
  return array(
21
- 'limit_lpp_value' => 5
 
22
  );
23
  }
24
 
25
  function init() {
26
  add_filter('the_content', array(&$this, 'autolink_content'));
 
 
 
 
27
  }
28
 
29
  function autolink_content($content) {
30
 
31
- $links = $this->get_setting('links');
32
  if (!count($links)) return $content;
33
 
34
  suarr::vklrsort($links, 'anchor');
@@ -53,16 +58,21 @@ class SU_ContentAutolinks extends SU_Module {
53
 
54
  if ($type == 'url')
55
  $url = $to_id;
56
- elseif (($posttype = sustr::ltrim_str($type, 'posttype_')) != $type)
57
- $url = get_permalink((int)$to_id);
58
- else
 
 
 
 
 
59
  continue;
60
 
61
  $rel = $data['nofollow'] ? ' rel="nofollow"' : '';
62
  $target = ($data['target'] == 'blank') ? ' target="_blank"' : '';
63
  $title = strlen($titletext = $data['title']) ? " title=\"$titletext\"" : '';
64
 
65
- $link = "<a title=\"$1\" href=\"$url\"$title$rel$target>$1</a>";
66
 
67
  $content = sustr::htmlsafe_str_replace($anchor, $link, $content, $limit_enabled ? 1 : -1, $count);
68
 
@@ -84,8 +94,7 @@ class SU_ContentAutolinks extends SU_Module {
84
  _e('The Content Links section of Deeplink Juggernaut lets you automatically link a certain word or phrase in your post/page content to a URL you specify.', 'seo-ultimate');
85
  echo "</p>\n";
86
 
87
- $links = $this->get_setting('links');
88
- if (!is_array($links)) $links = array();
89
  $num_links = count($links);
90
 
91
  if ($this->is_action('update')) {
@@ -94,9 +103,10 @@ class SU_ContentAutolinks extends SU_Module {
94
 
95
  for ($i=0; $i <= $num_links; $i++) {
96
 
 
97
  $anchor = stripslashes($_POST["link_{$i}_anchor"]);
98
- $to_type= stripslashes($_POST["link_{$i}_to_type"]);
99
- $to_id = stripslashes($_POST["link_{$i}_to_id_{$to_type}"]);
100
  $title = stripslashes($_POST["link_{$i}_title"]);
101
 
102
  $target = stripslashes($_POST["link_{$i}_target"]);
@@ -142,7 +152,12 @@ class SU_ContentAutolinks extends SU_Module {
142
  $posttypes = array();
143
  $posts = array();
144
  foreach ($posttypeobjs as $posttypeobj) {
145
- $typeposts = get_posts('numberposts=-1&post_type='.$posttypeobj->name);
 
 
 
 
 
146
  if (count($typeposts)) {
147
  $posttypes['posttype_'.$posttypeobj->name] = $posttypeobj->labels->singular_name;
148
  $posts['posttype_'.$posttypeobj->name] = suarr::simplify($typeposts, 'ID', 'post_title');
@@ -153,25 +168,28 @@ class SU_ContentAutolinks extends SU_Module {
153
  $i = $start_id;
154
  foreach ($links as $link) {
155
 
 
 
156
  $postdropdowns = array();
157
  foreach ($posts as $posttype => $typeposts) {
158
  $typeposts = array(0 => '') + $typeposts; //Maintains numeric array keys, unlike array_unshift or array_merge
159
- $postdropdowns[$posttype] = $this->get_input_element('dropdown', "link_{$i}_to_id_$posttype", $link['to_id'], $typeposts);
160
  }
161
 
162
  $cells = array(
163
- 'link-anchor' => $this->get_input_element('textbox', "link_{$i}_anchor", $link['anchor'])
164
- , 'link-to_type' => $this->get_input_element('dropdown', "link_{$i}_to_type", $link['to_type'], array(
 
165
  __('Custom', 'seo-ultimate') => array('url' => __('URL', 'seo-ultimate'))
166
  , __('Content Items', 'seo-ultimate') => $posttypes
167
  ))
168
- , 'link-to_id' => $this->get_admin_form_subsections("link_{$i}_to_type", $link['to_type'] ? $link['to_type'] : 'url', array_merge(array(
169
  'url' => $this->get_input_element('textbox', "link_{$i}_to_id_url", ($link['to_type'] == 'url') ? $link['to_id'] : '')
170
  ), $postdropdowns))
171
  , 'link-title' => $this->get_input_element('textbox', "link_{$i}_title", $link['title'])
172
  , 'link-options' =>
173
  $this->get_input_element('checkbox', "link_{$i}_nofollow", $link['nofollow'], __('Nofollow', 'seo-ultimate'))
174
- .$this->get_input_element('checkbox', "link_{$i}_target", $link['target'], __('New window', 'seo-ultimate'))
175
  );
176
  if ($delete_option)
177
  $cells['link-delete'] = $this->get_input_element('checkbox', "link_{$i}_delete");
@@ -183,6 +201,65 @@ class SU_ContentAutolinks extends SU_Module {
183
 
184
  $this->admin_wftable_end();
185
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
186
  }
187
 
188
  }
18
 
19
  function get_default_settings() {
20
  return array(
21
+ 'limit_lpp_value' => 5
22
+ //, 'enable_self_links' => false
23
  );
24
  }
25
 
26
  function init() {
27
  add_filter('the_content', array(&$this, 'autolink_content'));
28
+
29
+ add_filter('su_postmeta_help', array(&$this, 'postmeta_help'), 35);
30
+ add_filter('su_get_postmeta-autolinks', array(&$this, 'get_post_autolinks'), 10, 3);
31
+ add_filter('su_custom_update_postmeta-autolinks', array(&$this, 'save_post_autolinks'), 10, 4);
32
  }
33
 
34
  function autolink_content($content) {
35
 
36
+ $links = $this->get_setting('links', array());
37
  if (!count($links)) return $content;
38
 
39
  suarr::vklrsort($links, 'anchor');
58
 
59
  if ($type == 'url')
60
  $url = $to_id;
61
+ elseif (($posttype = sustr::ltrim_str($type, 'posttype_')) != $type) {
62
+ $to_id = (int)$to_id;
63
+ if (get_post_status($to_id) != 'publish') continue;
64
+ $url = get_permalink($to_id);
65
+ } else
66
+ continue;
67
+
68
+ if (!$this->get_setting('enable_self_links', false) && $url == suurl::current())
69
  continue;
70
 
71
  $rel = $data['nofollow'] ? ' rel="nofollow"' : '';
72
  $target = ($data['target'] == 'blank') ? ' target="_blank"' : '';
73
  $title = strlen($titletext = $data['title']) ? " title=\"$titletext\"" : '';
74
 
75
+ $link = "<a href=\"$url\"$title$rel$target>$1</a>";
76
 
77
  $content = sustr::htmlsafe_str_replace($anchor, $link, $content, $limit_enabled ? 1 : -1, $count);
78
 
94
  _e('The Content Links section of Deeplink Juggernaut lets you automatically link a certain word or phrase in your post/page content to a URL you specify.', 'seo-ultimate');
95
  echo "</p>\n";
96
 
97
+ $links = $this->get_setting('links', array());
 
98
  $num_links = count($links);
99
 
100
  if ($this->is_action('update')) {
103
 
104
  for ($i=0; $i <= $num_links; $i++) {
105
 
106
+ $guid = stripslashes($_POST['_link_guid']);
107
  $anchor = stripslashes($_POST["link_{$i}_anchor"]);
108
+ $to_type= stripslashes($_POST["link_{$i}_to_type__{$guid}"]);
109
+ $to_id = stripslashes($_POST["link_{$i}_to_id_{$to_type}__{$guid}"]);
110
  $title = stripslashes($_POST["link_{$i}_title"]);
111
 
112
  $target = stripslashes($_POST["link_{$i}_target"]);
152
  $posttypes = array();
153
  $posts = array();
154
  foreach ($posttypeobjs as $posttypeobj) {
155
+
156
+ $stati = get_available_post_statuses($posttypeobj->name);
157
+ suarr::remove_value($stati, 'auto-draft');
158
+ $stati = implode(',', $stati);
159
+
160
+ $typeposts = get_posts("post_status=$stati&numberposts=-1&post_type=".$posttypeobj->name);
161
  if (count($typeposts)) {
162
  $posttypes['posttype_'.$posttypeobj->name] = $posttypeobj->labels->singular_name;
163
  $posts['posttype_'.$posttypeobj->name] = suarr::simplify($typeposts, 'ID', 'post_title');
168
  $i = $start_id;
169
  foreach ($links as $link) {
170
 
171
+ $guid = substr(md5(time()), 0, 10);
172
+
173
  $postdropdowns = array();
174
  foreach ($posts as $posttype => $typeposts) {
175
  $typeposts = array(0 => '') + $typeposts; //Maintains numeric array keys, unlike array_unshift or array_merge
176
+ $postdropdowns[$posttype] = $this->get_input_element('dropdown', "link_{$i}_to_id_{$posttype}__$guid", $link['to_id'], $typeposts);
177
  }
178
 
179
  $cells = array(
180
+ 'link-anchor' => $this->get_input_element('hidden', '_link_guid', $guid)
181
+ . $this->get_input_element('textbox', "link_{$i}_anchor", $link['anchor'])
182
+ , 'link-to_type' => $this->get_input_element('dropdown', "link_{$i}_to_type__$guid", $link['to_type'], array(
183
  __('Custom', 'seo-ultimate') => array('url' => __('URL', 'seo-ultimate'))
184
  , __('Content Items', 'seo-ultimate') => $posttypes
185
  ))
186
+ , 'link-to_id' => $this->get_admin_form_subsections("link_{$i}_to_type__$guid", $link['to_type'] ? $link['to_type'] : 'url', array_merge(array(
187
  'url' => $this->get_input_element('textbox', "link_{$i}_to_id_url", ($link['to_type'] == 'url') ? $link['to_id'] : '')
188
  ), $postdropdowns))
189
  , 'link-title' => $this->get_input_element('textbox', "link_{$i}_title", $link['title'])
190
  , 'link-options' =>
191
  $this->get_input_element('checkbox', "link_{$i}_nofollow", $link['nofollow'], __('Nofollow', 'seo-ultimate'))
192
+ .$this->get_input_element('checkbox', "link_{$i}_target", $link['target'] != 'self', __('New window', 'seo-ultimate'))
193
  );
194
  if ($delete_option)
195
  $cells['link-delete'] = $this->get_input_element('checkbox', "link_{$i}_delete");
201
 
202
  $this->admin_wftable_end();
203
  }
204
+
205
+ function get_post_autolinks($value, $key, $post) {
206
+ $links = $this->get_setting('links', array());
207
+ $postlinks = '';
208
+ foreach ($links as $link_data) {
209
+ if ($link_data['to_type'] == 'posttype_'.$post->post_type && $link_data['to_id'] == $post->ID)
210
+ $postlinks .= $link_data['anchor']."\r\n";
211
+ }
212
+ return trim($postlinks);
213
+ }
214
+
215
+ function save_post_autolinks($false, $value, $metakey, $post) {
216
+ if ($post->post_type == 'revision') return true;
217
+
218
+ $links = $this->get_setting('links', array());
219
+ $new_links = array();
220
+
221
+ $keep_anchors = array();
222
+ $others_anchors = array();
223
+ $new_anchors = suarr::explode_lines($value);
224
+
225
+ foreach ($links as $link_data) {
226
+ if ($link_data['to_type'] == 'posttype_'.$post->post_type && $link_data['to_id'] == $post->ID) {
227
+ if (in_array($link_data['anchor'], $new_anchors)) {
228
+ $keep_anchors[] = $link_data['anchor'];
229
+ $new_links[] = $link_data;
230
+ }
231
+ } else {
232
+ $others_anchors[] = $link_data['anchor'];
233
+ $new_links[] = $link_data;
234
+ }
235
+ }
236
+
237
+ $anchors_to_add = array_diff($new_anchors, $keep_anchors, $others_anchors);
238
+
239
+ foreach ($anchors_to_add as $anchor_to_add)
240
+ $new_links[] = array(
241
+ 'anchor' => $anchor_to_add
242
+ , 'to_type' => 'posttype_'.$post->post_type
243
+ , 'to_id' => $post->ID
244
+ , 'title' => ''
245
+ , 'nofollow' => false
246
+ , 'target' => 'self'
247
+ );
248
+
249
+ $this->update_setting('links', $new_links);
250
+
251
+ return true;
252
+ }
253
+
254
+ function postmeta_fields($fields) {
255
+ $fields['35|autolinks'] = $this->get_postmeta_textarea('autolinks', __('Incoming Autolink Anchors:<br /><em>(one per line)</em>', 'seo-ultimate'));
256
+ return $fields;
257
+ }
258
+
259
+ function postmeta_help($help) {
260
+ $help[] = __('<strong>Incoming Autolink Anchors</strong> &mdash; When you enter anchors into this box, Deeplink Juggernaut will search for that anchor in all your other posts and link it to this post. For example, if the post you&#8217;re editing is about &#8220;blue widgets,&#8221; you could type &#8220;blue widgets&#8221; into the &#8220;Incoming Autolink Anchors&#8221; box and Deeplink Juggernaut will automatically build internal links to this post with that anchor text (assuming other posts contain that text).', 'seo-ultimate');
261
+ return $help;
262
+ }
263
  }
264
 
265
  }
modules/class.su-module.php CHANGED
@@ -282,6 +282,13 @@ class SU_Module {
282
  */
283
  function is_menu_default() { return false; }
284
 
 
 
 
 
 
 
 
285
  /**
286
  * Called at WordPress's init hook.
287
  *
@@ -1266,6 +1273,9 @@ class SU_Module {
1266
  if (is_array($extra))
1267
  return "<select name='$name'$inputid onchange='javascript:su_toggle_select_children(this)' class='dropdown'>".suhtml::option_tags($extra, $value)."</select>";
1268
  break;
 
 
 
1269
  }
1270
 
1271
  return '';
@@ -1954,7 +1964,7 @@ class SU_Module {
1954
  * @return bool Whether or not the action is being executed.
1955
  */
1956
  function is_action($action) {
1957
- if (!($object = $_GET['object'])) $object = false;
1958
  return (
1959
  (
1960
  ( strcasecmp($_GET['page'], $this->plugin->key_to_hook($this->get_module_key())) == 0 ) //Is $this module being shown?
@@ -2170,6 +2180,46 @@ class SU_Module {
2170
  return $this->get_postmeta_textboxes(array($id => $title));
2171
  }
2172
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2173
  /**
2174
  * Generates the HTML for a group of post meta checkboxes.
2175
  *
282
  */
283
  function is_menu_default() { return false; }
284
 
285
+ /**
286
+ * Called after the module has been constructed and its variables have been filled.
287
+ *
288
+ * @since 3.9
289
+ */
290
+ function load() {}
291
+
292
  /**
293
  * Called at WordPress's init hook.
294
  *
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' />";
1278
+ break;
1279
  }
1280
 
1281
  return '';
1964
  * @return bool Whether or not the action is being executed.
1965
  */
1966
  function is_action($action) {
1967
+ if (!isset($_GET['object']) || !($object = $_GET['object'])) $object = false;
1968
  return (
1969
  (
1970
  ( strcasecmp($_GET['page'], $this->plugin->key_to_hook($this->get_module_key())) == 0 ) //Is $this module being shown?
2180
  return $this->get_postmeta_textboxes(array($id => $title));
2181
  }
2182
 
2183
+ /**
2184
+ * Generates the HTML for multiple post meta textareas.
2185
+ *
2186
+ * @since 3.9
2187
+ * @uses get_postmeta()
2188
+ *
2189
+ * @param array $textareas An array of textareas. (Field/setting IDs are the keys, and descriptions are the values.)
2190
+ * @return string The HTML that would render the textareas.
2191
+ */
2192
+ function get_postmeta_textareas($textareas) {
2193
+
2194
+ $html = '';
2195
+
2196
+ foreach ($textareas as $id => $title) {
2197
+
2198
+ register_setting('seo-ultimate', $id);
2199
+ $value = su_esc_editable_html($this->get_postmeta($id));
2200
+ $id = "_su_".su_esc_attr($id);
2201
+
2202
+ $html .= "<tr class='textarea' valign='top'>\n<th scope='row'><label for='$id'>$title</label></th>\n"
2203
+ ."<td><textarea name='$id' id='$id' class='regular-text' tabindex='2' cols='60' rows='3'>$value</textarea></td>\n</tr>\n";
2204
+ }
2205
+
2206
+ return $html;
2207
+ }
2208
+
2209
+ /**
2210
+ * Generates the HTML for a single post meta textarea.
2211
+ *
2212
+ * @since 3.9
2213
+ * @uses get_postmeta_textareas()
2214
+ *
2215
+ * @param string $id The ID of the HTML element.
2216
+ * @param string $title The label of the HTML element.
2217
+ * @return string The HTML that would render the textarea.
2218
+ */
2219
+ function get_postmeta_textarea($id, $title) {
2220
+ return $this->get_postmeta_textareas(array($id => $title));
2221
+ }
2222
+
2223
  /**
2224
  * Generates the HTML for a group of post meta checkboxes.
2225
  *
modules/files/files.php CHANGED
@@ -37,6 +37,7 @@ class SU_Files extends SU_Module {
37
 
38
  //Initialize variables
39
  $exists = $writable = false;
 
40
 
41
  //Does the server run Apache?
42
  if ($is_apache) {
@@ -48,7 +49,7 @@ class SU_Files extends SU_Module {
48
  $exists = file_exists($htaccess);
49
  $writable = is_writable($htaccess);
50
 
51
- if ($exists && !$writable) $this->queue_message('warning',
52
  __('A .htaccess file exists, but it&#8217;s not writable. You can edit it here once the file permissions are corrected.', 'seo-ultimate'));
53
  }
54
 
@@ -74,7 +75,7 @@ class SU_Files extends SU_Module {
74
  __('Please realize that incorrectly editing your robots.txt file could block search engines from your site.', 'seo-ultimate'));
75
 
76
  //Of course, only bother with htaccess if we're running Apache.
77
- if ($is_apache && ($writable || !$exists)) {
78
  $this->textarea('htaccess', __('.htaccess', 'seo-ultimate'));
79
 
80
  $this->queue_message('warning',
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) {
49
  $exists = file_exists($htaccess);
50
  $writable = is_writable($htaccess);
51
 
52
+ if ($is_super_admin && $exists && !$writable) $this->queue_message('warning',
53
  __('A .htaccess file exists, but it&#8217;s not writable. You can edit it here once the file permissions are corrected.', 'seo-ultimate'));
54
  }
55
 
75
  __('Please realize that incorrectly editing your robots.txt file could block search engines from your site.', 'seo-ultimate'));
76
 
77
  //Of course, only bother with htaccess if we're running Apache.
78
+ if ($is_super_admin && $is_apache && ($writable || !$exists)) {
79
  $this->textarea('htaccess', __('.htaccess', 'seo-ultimate'));
80
 
81
  $this->queue_message('warning',
modules/meta/meta.php CHANGED
@@ -80,7 +80,7 @@ class SU_Meta extends SU_Module {
80
 
81
  $fields['20|description|keywords'] =
82
  "<tr class='textarea' valign='top'>\n<th scope='row'><label for='$id'>".__('Meta Description:', 'seo-ultimate')."</label></th>\n"
83
- . "<td><textarea name='$id' id='$id' type='text' class='regular-text' cols='60' rows='3' tabindex='2'"
84
  . " onkeyup=\"javascript:document.getElementById('su_meta_description_charcount').innerHTML = document.getElementById('_su_description').value.length\">$value</textarea>"
85
  . "<br />".sprintf(__('You&#8217;ve entered %s characters. Most search engines use up to 160.', 'seo-ultimate'), "<strong id='su_meta_description_charcount'>".strlen($value)."</strong>")
86
  . "</td>\n</tr>\n"
@@ -91,8 +91,8 @@ class SU_Meta extends SU_Module {
91
  }
92
 
93
  function postmeta_help($help) {
94
- $help[] = __('<strong>Description:</strong> &mdash; The value of the meta description tag. The description will often appear underneath the title in search engine results. Writing an accurate, attention-grabbing description for every post is important to ensuring a good search results clickthrough rate.', 'seo-ultimate');
95
- $help[] = __('<strong>Keywords:</strong> &mdash; The value of the meta keywords tag. The keywords list gives search engines a hint as to what this post/page is about. Be sure to separate keywords with commas, like so: <samp>one,two,three</samp>.', 'seo-ultimate');
96
  return $help;
97
  }
98
 
80
 
81
  $fields['20|description|keywords'] =
82
  "<tr class='textarea' valign='top'>\n<th scope='row'><label for='$id'>".__('Meta Description:', 'seo-ultimate')."</label></th>\n"
83
+ . "<td><textarea name='$id' id='$id' class='regular-text' cols='60' rows='3' tabindex='2'"
84
  . " onkeyup=\"javascript:document.getElementById('su_meta_description_charcount').innerHTML = document.getElementById('_su_description').value.length\">$value</textarea>"
85
  . "<br />".sprintf(__('You&#8217;ve entered %s characters. Most search engines use up to 160.', 'seo-ultimate'), "<strong id='su_meta_description_charcount'>".strlen($value)."</strong>")
86
  . "</td>\n</tr>\n"
91
  }
92
 
93
  function postmeta_help($help) {
94
+ $help[] = __('<strong>Description</strong> &mdash; The value of the meta description tag. The description will often appear underneath the title in search engine results. Writing an accurate, attention-grabbing description for every post is important to ensuring a good search results clickthrough rate.', 'seo-ultimate');
95
+ $help[] = __('<strong>Keywords</strong> &mdash; The value of the meta keywords tag. The keywords list gives search engines a hint as to what this post/page is about. Be sure to separate keywords with commas, like so: <samp>one,two,three</samp>.', 'seo-ultimate');
96
  return $help;
97
  }
98
 
modules/slugs/slugs.php CHANGED
@@ -22,7 +22,7 @@ class SU_Slugs extends SU_Module {
22
  add_filter('name_save_pre', array(&$this, 'optimize_slug'), 0);
23
 
24
  //Only sanitize if a permalink is being requested via AJAX
25
- if ($_POST['action'] == 'sample-permalink')
26
  //The filter priority is very important to ensure our function runs before WordPress's sanitize_title_with_dashes() function
27
  add_filter('sanitize_title', array(&$this, 'optimize_slug_ajax'), 9);
28
  }
22
  add_filter('name_save_pre', array(&$this, 'optimize_slug'), 0);
23
 
24
  //Only sanitize if a permalink is being requested via AJAX
25
+ if (isset($_POST['action']) && $_POST['action'] == 'sample-permalink')
26
  //The filter priority is very important to ensure our function runs before WordPress's sanitize_title_with_dashes() function
27
  add_filter('sanitize_title', array(&$this, 'optimize_slug_ajax'), 9);
28
  }
plugin/class.seo-ultimate.php CHANGED
@@ -479,6 +479,9 @@ class SEO_Ultimate {
479
 
480
  //Give the module this plugin's object by reference
481
  $this->modules[$module]->plugin =& $this;
 
 
 
482
  }
483
  } //If this isn't a module, then the file will simply be included as-is
484
  }
@@ -502,8 +505,10 @@ class SEO_Ultimate {
502
  $this->modules[$key]->activate();
503
  $newmodules[$key] = $this->modules[$key]->get_default_status();
504
  }
505
-
506
- if ($module_parent = $this->modules[$key]->get_parent_module() && !$this->modules[$key]->is_independent_module())
 
 
507
  $newmodules[$key] = $newmodules[$module_parent];
508
  }
509
 
@@ -791,7 +796,7 @@ class SEO_Ultimate {
791
 
792
  //If we have alerts that need a bubble, then return the bubble HTML.
793
  if ($count > 0)
794
- return "&nbsp;<span class='update-plugins count-$count'><span class='plugin-count'>".number_format_i18n($count)."</span></span>";
795
  else
796
  return '';
797
  }
@@ -1467,13 +1472,15 @@ class SEO_Ultimate {
1467
 
1468
  $metakey = "_su_$field";
1469
 
1470
- $value = $_POST[$metakey];
1471
- if (empty($value))
1472
- //Delete the old value
1473
- delete_post_meta($post_id, $metakey);
1474
- else
1475
- //Add the new value
1476
- update_post_meta($post_id, $metakey, $value);
 
 
1477
  }
1478
  }
1479
 
479
 
480
  //Give the module this plugin's object by reference
481
  $this->modules[$module]->plugin =& $this;
482
+
483
+ //Call post-construction function
484
+ $this->modules[$module]->load();
485
  }
486
  } //If this isn't a module, then the file will simply be included as-is
487
  }
505
  $this->modules[$key]->activate();
506
  $newmodules[$key] = $this->modules[$key]->get_default_status();
507
  }
508
+ }
509
+
510
+ foreach ($this->modules as $key => $module) {
511
+ if (($module_parent = $this->modules[$key]->get_parent_module()) && !$this->modules[$key]->is_independent_module())
512
  $newmodules[$key] = $newmodules[$module_parent];
513
  }
514
 
796
 
797
  //If we have alerts that need a bubble, then return the bubble HTML.
798
  if ($count > 0)
799
+ return "<span class='update-plugins count-$count'><span class='plugin-count'>".number_format_i18n($count)."</span></span>";
800
  else
801
  return '';
802
  }
1472
 
1473
  $metakey = "_su_$field";
1474
 
1475
+ $value = stripslashes($_POST[$metakey]);
1476
+ if (!apply_filters("su_custom_update_postmeta-$field", false, $value, $metakey, $post)) {
1477
+ if (empty($value))
1478
+ //Delete the old value
1479
+ delete_post_meta($post_id, $metakey);
1480
+ else
1481
+ //Add the new value
1482
+ update_post_meta($post_id, $metakey, $value);
1483
+ }
1484
  }
1485
  }
1486
 
readme.txt CHANGED
@@ -3,19 +3,19 @@ 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: 3.8
7
 
8
- This all-in-one SEO plugin gives you control over titles, noindex/nofollow, meta tags, slugs, canonical tags, "more" links, 404 errors, rich snippets, and more.
9
 
10
  == Description ==
11
 
12
  = Recent Releases =
13
 
 
14
  * Version 3.8 adds direct post/page link support to Deeplink Juggernaut
15
  * Version 3.7 adds the "SEO Settings" box to custom post type editors
16
  * Version 3.6 adds a maximum log size option to 404 Monitor
17
  * Version 3.5 adds the Sharing Facilitator module
18
- * Version 3.4 adds the option to ignore 404s from specific URLs or wildcard URL patterns
19
 
20
  = Features =
21
 
@@ -76,12 +76,15 @@ SEO Ultimate is an all-in-one [SEO](http://www.seodesignsolutions.com/) plugin w
76
  * Determine which of your webpages Google most strongly associates with the keywords you specify.
77
  * Use the information to determine ideal targets for incoming links or ideal sources of outgoing links.
78
 
79
- * **Deeplink Juggernaut** -- UPDATED in Version 3.8
80
  * Automatically link phrases in your posts/pages to other posts/pages or to custom URLs.
81
  * Use the power of anchor text to boost your internal ranking SEO paradigm.
82
  * Control the maximum number of autolinks added to each post/page.
83
  * Apply the nofollow attribute on a per-link basis. (Perfect for automatic affiliate links.)
84
  * Import/export your links as CSV files.
 
 
 
85
 
86
  * **Code Inserter**
87
  * Easily insert custom HTML into your site's `<head>` tag, footer, or item content.
@@ -204,6 +207,20 @@ Frequently asked questions, settings help, and troubleshooting tips for SEO Ulti
204
 
205
  == Changelog ==
206
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
207
  = Version 3.8 (July 30, 2010) =
208
  * Feature: Deeplink Juggernaut can now link directly to posts/pages (and custom post types) in addition to arbitrary URLs
209
  * Bugfix: Readded SEO Ultimate upgrade info to the `Dashboard > Updates` (or `Tools > Upgrade`) page, fixing a feature regression introduced in version 3.1
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: 3.9
7
 
8
+ This all-in-one SEO plugin gives you control over titles, noindex/nofollow, meta tags, slugs, canonical tags, autolinks, 404 errors, rich snippets, and more.
9
 
10
  == Description ==
11
 
12
  = Recent Releases =
13
 
14
+ * Version 3.9 adds the ability to build internal links to posts from within the WordPress post editor (as well as other Deeplink Juggernaut improvements)
15
  * Version 3.8 adds direct post/page link support to Deeplink Juggernaut
16
  * Version 3.7 adds the "SEO Settings" box to custom post type editors
17
  * Version 3.6 adds a maximum log size option to 404 Monitor
18
  * Version 3.5 adds the Sharing Facilitator module
 
19
 
20
  = Features =
21
 
76
  * Determine which of your webpages Google most strongly associates with the keywords you specify.
77
  * Use the information to determine ideal targets for incoming links or ideal sources of outgoing links.
78
 
79
+ * **Deeplink Juggernaut** -- UPDATED in Version 3.9
80
  * Automatically link phrases in your posts/pages to other posts/pages or to custom URLs.
81
  * Use the power of anchor text to boost your internal ranking SEO paradigm.
82
  * Control the maximum number of autolinks added to each post/page.
83
  * Apply the nofollow attribute on a per-link basis. (Perfect for automatic affiliate links.)
84
  * Import/export your links as CSV files.
85
+ * Create links pointing to draft posts that will auto-enable when the post is published!
86
+ * Build internal links to your posts from within the WordPress post editor!
87
+ * Use "Instant Post Propulsion" technology to automatically link your old posts to new ones.
88
 
89
  * **Code Inserter**
90
  * Easily insert custom HTML into your site's `<head>` tag, footer, or item content.
207
 
208
  == Changelog ==
209
 
210
+ = Version 3.9 (August 2, 2010) =
211
+ * Feature: Added "Instant Post Propulsion" feature to Deeplink Juggernaut (new "Incoming Autolink Anchors" postmeta field)
212
+ * Improvement: File Editor now limits .htaccess editing to super admins on multisite installations
213
+ * Improvement: Deeplink Juggernaut no longer links webpages to themselves
214
+ * Improvement: Deeplink Juggernaut's post/page dropdowns now include drafts; now you can build links to in-progress posts that automatically enable when the post is published!
215
+ * Improvement: When a post/page is sent to the trash, autolinks pointing to it no longer disappear from the Deeplink Juggernaut interface
216
+ * Improvement: Added a workaround for Firefox so that "Destination Type" dropdowns in Deeplink Juggernaut no longer get "stuck" on the incorrect value
217
+ * Improvement: Miscellaneous aesthetic changes
218
+ * Bugfix: Removed duplicate "title" attribute from "Deeplink Juggernaut" links
219
+ * Bugfix: Fixed bug that caused "New window" option to enable itself on Deeplink Juggernaut autolinks
220
+ * Bugfix: Contextual help dropdowns are now styled correctly in WordPress 3.0+
221
+ * Bugfix: Contextual help dropdowns no longer generate 404 errors in WordPress 3.0+
222
+ * Bugfix: Fixed invalid HTML in admin interface
223
+
224
  = Version 3.8 (July 30, 2010) =
225
  * Feature: Deeplink Juggernaut can now link directly to posts/pages (and custom post types) in addition to arbitrary URLs
226
  * Bugfix: Readded SEO Ultimate upgrade info to the `Dashboard > Updates` (or `Tools > Upgrade`) page, fixing a feature regression introduced in version 3.1
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, "more" links, 404 errors, rich snippets, and more.
6
- Version: 3.8
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 3.8
16
  * @link http://www.seodesignsolutions.com/wordpress-seo/ SEO Ultimate Homepage
17
  */
18
 
@@ -47,10 +47,10 @@ 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', '3.8');
51
  define('SU_AUTHOR', 'SEO Design Solutions');
52
  define('SU_AUTHOR_URI', 'http://www.seodesignsolutions.com/');
53
- define('SU_USER_AGENT', 'SeoUltimate/3.8');
54
 
55
  /********** INCLUDES **********/
56
 
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, "more" links, 404 errors, rich snippets, and more.
6
+ Version: 3.9
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 3.9
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', '3.9');
51
  define('SU_AUTHOR', 'SEO Design Solutions');
52
  define('SU_AUTHOR_URI', 'http://www.seodesignsolutions.com/');
53
+ define('SU_USER_AGENT', 'SeoUltimate/3.9');
54
 
55
  /********** INCLUDES **********/
56
 
seo-ultimate.pot CHANGED
@@ -1,4 +1,4 @@
1
- # Translation of the WordPress plugin SEO Ultimate 3.8 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 3.8\n"
10
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/seo-ultimate\n"
11
- "POT-Creation-Date: 2010-07-30 15:44+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:1156
71
  msgid "Actions"
72
  msgstr ""
73
 
@@ -227,64 +227,79 @@ msgstr ""
227
  msgid "Content Links"
228
  msgstr ""
229
 
230
- #: modules/autolinks/content-autolinks.php:84
231
  msgid ""
232
  "The Content Links section of Deeplink Juggernaut lets you automatically link "
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:117
237
  msgid "Edit Existing Links"
238
  msgstr ""
239
 
240
- #: modules/autolinks/content-autolinks.php:121
241
  msgid "Add a New Link"
242
  msgstr ""
243
 
244
- #: modules/autolinks/content-autolinks.php:129
245
  msgid "Anchor Text"
246
  msgstr ""
247
 
248
- #: modules/autolinks/content-autolinks.php:130
249
  msgid "Destination Type"
250
  msgstr ""
251
 
252
- #: modules/autolinks/content-autolinks.php:131
253
  msgid "Destination"
254
  msgstr ""
255
 
256
- #: modules/autolinks/content-autolinks.php:132
257
  msgid "Title Attribute"
258
  msgstr ""
259
 
260
- #: modules/autolinks/content-autolinks.php:133
261
  msgid "Options"
262
  msgstr ""
263
 
264
- #: modules/autolinks/content-autolinks.php:135
265
  msgid "Delete"
266
  msgstr ""
267
 
268
- #: modules/autolinks/content-autolinks.php:165
269
  msgid "Custom"
270
  msgstr ""
271
 
272
- #: modules/autolinks/content-autolinks.php:165
273
  msgid "URL"
274
  msgstr ""
275
 
276
- #: modules/autolinks/content-autolinks.php:166
277
  msgid "Content Items"
278
  msgstr ""
279
 
280
- #: modules/autolinks/content-autolinks.php:173
281
  msgid "Nofollow"
282
  msgstr ""
283
 
284
- #: modules/autolinks/content-autolinks.php:174
285
  msgid "New window"
286
  msgstr ""
287
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
288
  #: modules/canonical/canonical.php:12
289
  msgid "Canonicalizer"
290
  msgstr ""
@@ -324,70 +339,70 @@ msgstr ""
324
  msgid "Return to SEO page"
325
  msgstr ""
326
 
327
- #: modules/class.su-module.php:361
328
  msgid ""
329
  "(Note: This translated documentation was designed for an older version of "
330
  "SEO Ultimate and may be outdated.)"
331
  msgstr ""
332
 
333
- #: modules/class.su-module.php:957
334
  #, php-format
335
  msgid "%s %s|Dropdown Title"
336
  msgstr ""
337
 
338
- #: modules/class.su-module.php:985
339
  #, php-format
340
  msgid "%1$s | %2$s %3$s by %4$s"
341
  msgstr ""
342
 
343
- #: modules/class.su-module.php:1042
344
  msgid "Name"
345
  msgstr ""
346
 
347
- #: modules/class.su-module.php:1053
348
  msgid "Your site currently doesn&#8217;t have any public items of this type."
349
  msgstr ""
350
 
351
- #: modules/class.su-module.php:1135
352
  msgid "&laquo;"
353
  msgstr ""
354
 
355
- #: modules/class.su-module.php:1136
356
  msgid "&raquo;"
357
  msgstr ""
358
 
359
- #: modules/class.su-module.php:1143
360
  #, php-format
361
  msgid "Displaying %s&#8211;%s of %s"
362
  msgstr ""
363
 
364
- #: modules/class.su-module.php:1157
365
  msgid "ID"
366
  msgstr ""
367
 
368
- #: modules/class.su-module.php:1190
369
  msgid "View"
370
  msgstr ""
371
 
372
- #: modules/class.su-module.php:1190
373
  msgid "Edit"
374
  msgstr ""
375
 
376
- #: modules/class.su-module.php:1340
377
  msgid "Settings updated."
378
  msgstr ""
379
 
380
- #: modules/class.su-module.php:1360
381
  msgid "Save Changes"
382
  msgstr ""
383
 
384
- #: modules/class.su-module.php:1848
385
  msgid ""
386
  "Are you sure you want to replace the textbox contents with this default "
387
  "value?"
388
  msgstr ""
389
 
390
- #: modules/class.su-module.php:1863 modules/settings/settings-data.php:23
391
  msgid "Reset"
392
  msgstr ""
393
 
@@ -526,53 +541,53 @@ msgstr ""
526
  msgid "File Editor"
527
  msgstr ""
528
 
529
- #: modules/files/files.php:52
530
  msgid ""
531
  "A .htaccess file exists, but it&#8217;s not writable. You can edit it here "
532
  "once the file permissions are corrected."
533
  msgstr ""
534
 
535
- #: modules/files/files.php:58
536
  msgid ""
537
  "WordPress won&#8217;t be able to display your robots.txt file because the "
538
  "default <a href=\"options-permalink.php\" target=\"_blank\">permalink "
539
  "structure</a> is in use."
540
  msgstr ""
541
 
542
- #: modules/files/files.php:65
543
  #, php-format
544
  msgid "robots.txt [<a href=\"%s\" target=\"_blank\">Open</a>]"
545
  msgstr ""
546
 
547
- #: modules/files/files.php:69
548
  msgid "Enable this custom robots.txt file and disable the default file"
549
  msgstr ""
550
 
551
- #: modules/files/files.php:70
552
  msgid "Let other plugins add rules to my custom robots.txt file"
553
  msgstr ""
554
 
555
- #: modules/files/files.php:71
556
  msgid "robots.txt Settings"
557
  msgstr ""
558
 
559
- #: modules/files/files.php:74
560
  msgid ""
561
  "Please realize that incorrectly editing your robots.txt file could block "
562
  "search engines from your site."
563
  msgstr ""
564
 
565
- #: modules/files/files.php:78
566
  msgid ".htaccess"
567
  msgstr ""
568
 
569
- #: modules/files/files.php:81
570
  msgid ""
571
  "Also, incorrectly editing your .htaccess file could disable your entire "
572
  "website. Edit with caution!"
573
  msgstr ""
574
 
575
- #: modules/files/files.php:131
576
  #, php-format
577
  msgid ""
578
  "Please note that your privacy settings won&#8217;t have any effect on your "
@@ -803,7 +818,7 @@ msgstr ""
803
 
804
  #: modules/meta/meta.php:94
805
  msgid ""
806
- "<strong>Description:</strong> &mdash; The value of the meta description tag. "
807
  "The description will often appear underneath the title in search engine "
808
  "results. Writing an accurate, attention-grabbing description for every post "
809
  "is important to ensuring a good search results clickthrough rate."
@@ -811,7 +826,7 @@ msgstr ""
811
 
812
  #: modules/meta/meta.php:95
813
  msgid ""
814
- "<strong>Keywords:</strong> &mdash; The value of the meta keywords tag. The "
815
  "keywords list gives search engines a hint as to what this post/page is "
816
  "about. Be sure to separate keywords with commas, like so: <samp>one,two,"
817
  "three</samp>."
@@ -1050,7 +1065,7 @@ msgstr ""
1050
  msgid "SEO Design Solutions Whitepapers"
1051
  msgstr ""
1052
 
1053
- #. #-#-#-#-# plugin.pot (SEO Ultimate 3.8) #-#-#-#-#
1054
  #. Author of the plugin/theme
1055
  #: modules/sds-blog/sds-blog.php:49
1056
  msgid "SEO Design Solutions"
@@ -1356,9 +1371,9 @@ msgstr ""
1356
  msgid "SEO Ultimate Plugin Settings"
1357
  msgstr ""
1358
 
1359
- #. #-#-#-#-# plugin.pot (SEO Ultimate 3.8) #-#-#-#-#
1360
  #. Plugin Name of the plugin/theme
1361
- #: modules/settings/settings.php:14 plugin/class.seo-ultimate.php:724
1362
  msgid "SEO Ultimate"
1363
  msgstr ""
1364
 
@@ -1366,7 +1381,7 @@ msgstr ""
1366
  msgid "Uninstaller"
1367
  msgstr ""
1368
 
1369
- #: modules/settings/uninstall.php:18 plugin/class.seo-ultimate.php:1211
1370
  msgid "Uninstall"
1371
  msgstr ""
1372
 
@@ -1614,80 +1629,80 @@ msgstr ""
1614
  msgid "Code Inserter module"
1615
  msgstr ""
1616
 
1617
- #: plugin/class.seo-ultimate.php:724
1618
  msgid "SEO"
1619
  msgstr ""
1620
 
1621
- #: plugin/class.seo-ultimate.php:1002
1622
  msgid "SEO Settings Help"
1623
  msgstr ""
1624
 
1625
- #: plugin/class.seo-ultimate.php:1004
1626
  msgid "The SEO Settings box lets you customize these settings:"
1627
  msgstr ""
1628
 
1629
- #: plugin/class.seo-ultimate.php:1006
1630
  msgid "(The SEO Settings box is part of the SEO Ultimate plugin.)"
1631
  msgstr ""
1632
 
1633
- #: plugin/class.seo-ultimate.php:1061
1634
  #, php-format
1635
  msgid ""
1636
  "SEO Ultimate includes the functionality of %1$s. You may want to deactivate %"
1637
  "1$s to avoid plugin conflicts."
1638
  msgstr ""
1639
 
1640
- #: plugin/class.seo-ultimate.php:1102
1641
  msgid "new feature"
1642
  msgstr ""
1643
 
1644
- #: plugin/class.seo-ultimate.php:1102
1645
  msgid "new features"
1646
  msgstr ""
1647
 
1648
- #: plugin/class.seo-ultimate.php:1103
1649
  msgid "bugfix"
1650
  msgstr ""
1651
 
1652
- #: plugin/class.seo-ultimate.php:1103
1653
  msgid "bugfixes"
1654
  msgstr ""
1655
 
1656
- #: plugin/class.seo-ultimate.php:1104
1657
  msgid "improvement"
1658
  msgstr ""
1659
 
1660
- #: plugin/class.seo-ultimate.php:1104
1661
  msgid "improvements"
1662
  msgstr ""
1663
 
1664
- #: plugin/class.seo-ultimate.php:1105
1665
  msgid "security fix"
1666
  msgstr ""
1667
 
1668
- #: plugin/class.seo-ultimate.php:1105
1669
  msgid "security fixes"
1670
  msgstr ""
1671
 
1672
- #: plugin/class.seo-ultimate.php:1136
1673
  #, php-format
1674
  msgid "%d %s"
1675
  msgstr ""
1676
 
1677
- #: plugin/class.seo-ultimate.php:1142
1678
  #, php-format
1679
  msgid "Upgrade now to get %s. %s."
1680
  msgstr ""
1681
 
1682
- #: plugin/class.seo-ultimate.php:1144
1683
  msgid "View changelog"
1684
  msgstr ""
1685
 
1686
- #: plugin/class.seo-ultimate.php:1231
1687
  msgid "Active Modules: "
1688
  msgstr ""
1689
 
1690
- #: plugin/class.seo-ultimate.php:1292
1691
  msgid ""
1692
  "<strong>SEO Ultimate Notice:</strong> Your blog is configured to block "
1693
  "search engine spiders. To resolve this, <a href=\"options-privacy.php\" "
@@ -1695,7 +1710,7 @@ msgid ""
1695
  "to everyone."
1696
  msgstr ""
1697
 
1698
- #: plugin/class.seo-ultimate.php:1402
1699
  msgid "SEO Settings"
1700
  msgstr ""
1701
 
1
+ # Translation of the WordPress plugin SEO Ultimate 3.9 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 3.9\n"
10
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/seo-ultimate\n"
11
+ "POT-Creation-Date: 2010-08-03 01:40+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:1163
71
  msgid "Actions"
72
  msgstr ""
73
 
227
  msgid "Content Links"
228
  msgstr ""
229
 
230
+ #: modules/autolinks/content-autolinks.php:94
231
  msgid ""
232
  "The Content Links section of Deeplink Juggernaut lets you automatically link "
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:127
237
  msgid "Edit Existing Links"
238
  msgstr ""
239
 
240
+ #: modules/autolinks/content-autolinks.php:131
241
  msgid "Add a New Link"
242
  msgstr ""
243
 
244
+ #: modules/autolinks/content-autolinks.php:139
245
  msgid "Anchor Text"
246
  msgstr ""
247
 
248
+ #: modules/autolinks/content-autolinks.php:140
249
  msgid "Destination Type"
250
  msgstr ""
251
 
252
+ #: modules/autolinks/content-autolinks.php:141
253
  msgid "Destination"
254
  msgstr ""
255
 
256
+ #: modules/autolinks/content-autolinks.php:142
257
  msgid "Title Attribute"
258
  msgstr ""
259
 
260
+ #: modules/autolinks/content-autolinks.php:143
261
  msgid "Options"
262
  msgstr ""
263
 
264
+ #: modules/autolinks/content-autolinks.php:145
265
  msgid "Delete"
266
  msgstr ""
267
 
268
+ #: modules/autolinks/content-autolinks.php:183
269
  msgid "Custom"
270
  msgstr ""
271
 
272
+ #: modules/autolinks/content-autolinks.php:183
273
  msgid "URL"
274
  msgstr ""
275
 
276
+ #: modules/autolinks/content-autolinks.php:184
277
  msgid "Content Items"
278
  msgstr ""
279
 
280
+ #: modules/autolinks/content-autolinks.php:191
281
  msgid "Nofollow"
282
  msgstr ""
283
 
284
+ #: modules/autolinks/content-autolinks.php:192
285
  msgid "New window"
286
  msgstr ""
287
 
288
+ #: modules/autolinks/content-autolinks.php:255
289
+ msgid "Incoming Autolink Anchors:<br /><em>(one per line)</em>"
290
+ msgstr ""
291
+
292
+ #: modules/autolinks/content-autolinks.php:260
293
+ msgid ""
294
+ "<strong>Incoming Autolink Anchors</strong> &mdash; When you enter anchors "
295
+ "into this box, Deeplink Juggernaut will search for that anchor in all your "
296
+ "other posts and link it to this post. For example, if the post you&#8217;re "
297
+ "editing is about &#8220;blue widgets,&#8221; you could type &#8220;blue "
298
+ "widgets&#8221; into the &#8220;Incoming Autolink Anchors&#8221; box and "
299
+ "Deeplink Juggernaut will automatically build internal links to this post "
300
+ "with that anchor text (assuming other posts contain that text)."
301
+ msgstr ""
302
+
303
  #: modules/canonical/canonical.php:12
304
  msgid "Canonicalizer"
305
  msgstr ""
339
  msgid "Return to SEO page"
340
  msgstr ""
341
 
342
+ #: modules/class.su-module.php:368
343
  msgid ""
344
  "(Note: This translated documentation was designed for an older version of "
345
  "SEO Ultimate and may be outdated.)"
346
  msgstr ""
347
 
348
+ #: modules/class.su-module.php:964
349
  #, php-format
350
  msgid "%s %s|Dropdown Title"
351
  msgstr ""
352
 
353
+ #: modules/class.su-module.php:992
354
  #, php-format
355
  msgid "%1$s | %2$s %3$s by %4$s"
356
  msgstr ""
357
 
358
+ #: modules/class.su-module.php:1049
359
  msgid "Name"
360
  msgstr ""
361
 
362
+ #: modules/class.su-module.php:1060
363
  msgid "Your site currently doesn&#8217;t have any public items of this type."
364
  msgstr ""
365
 
366
+ #: modules/class.su-module.php:1142
367
  msgid "&laquo;"
368
  msgstr ""
369
 
370
+ #: modules/class.su-module.php:1143
371
  msgid "&raquo;"
372
  msgstr ""
373
 
374
+ #: modules/class.su-module.php:1150
375
  #, php-format
376
  msgid "Displaying %s&#8211;%s of %s"
377
  msgstr ""
378
 
379
+ #: modules/class.su-module.php:1164
380
  msgid "ID"
381
  msgstr ""
382
 
383
+ #: modules/class.su-module.php:1197
384
  msgid "View"
385
  msgstr ""
386
 
387
+ #: modules/class.su-module.php:1197
388
  msgid "Edit"
389
  msgstr ""
390
 
391
+ #: modules/class.su-module.php:1350
392
  msgid "Settings updated."
393
  msgstr ""
394
 
395
+ #: modules/class.su-module.php:1370
396
  msgid "Save Changes"
397
  msgstr ""
398
 
399
+ #: modules/class.su-module.php:1858
400
  msgid ""
401
  "Are you sure you want to replace the textbox contents with this default "
402
  "value?"
403
  msgstr ""
404
 
405
+ #: modules/class.su-module.php:1873 modules/settings/settings-data.php:23
406
  msgid "Reset"
407
  msgstr ""
408
 
541
  msgid "File Editor"
542
  msgstr ""
543
 
544
+ #: modules/files/files.php:53
545
  msgid ""
546
  "A .htaccess file exists, but it&#8217;s not writable. You can edit it here "
547
  "once the file permissions are corrected."
548
  msgstr ""
549
 
550
+ #: modules/files/files.php:59
551
  msgid ""
552
  "WordPress won&#8217;t be able to display your robots.txt file because the "
553
  "default <a href=\"options-permalink.php\" target=\"_blank\">permalink "
554
  "structure</a> is in use."
555
  msgstr ""
556
 
557
+ #: modules/files/files.php:66
558
  #, php-format
559
  msgid "robots.txt [<a href=\"%s\" target=\"_blank\">Open</a>]"
560
  msgstr ""
561
 
562
+ #: modules/files/files.php:70
563
  msgid "Enable this custom robots.txt file and disable the default file"
564
  msgstr ""
565
 
566
+ #: modules/files/files.php:71
567
  msgid "Let other plugins add rules to my custom robots.txt file"
568
  msgstr ""
569
 
570
+ #: modules/files/files.php:72
571
  msgid "robots.txt Settings"
572
  msgstr ""
573
 
574
+ #: modules/files/files.php:75
575
  msgid ""
576
  "Please realize that incorrectly editing your robots.txt file could block "
577
  "search engines from your site."
578
  msgstr ""
579
 
580
+ #: modules/files/files.php:79
581
  msgid ".htaccess"
582
  msgstr ""
583
 
584
+ #: modules/files/files.php:82
585
  msgid ""
586
  "Also, incorrectly editing your .htaccess file could disable your entire "
587
  "website. Edit with caution!"
588
  msgstr ""
589
 
590
+ #: modules/files/files.php:132
591
  #, php-format
592
  msgid ""
593
  "Please note that your privacy settings won&#8217;t have any effect on your "
818
 
819
  #: modules/meta/meta.php:94
820
  msgid ""
821
+ "<strong>Description</strong> &mdash; The value of the meta description tag. "
822
  "The description will often appear underneath the title in search engine "
823
  "results. Writing an accurate, attention-grabbing description for every post "
824
  "is important to ensuring a good search results clickthrough rate."
826
 
827
  #: modules/meta/meta.php:95
828
  msgid ""
829
+ "<strong>Keywords</strong> &mdash; The value of the meta keywords tag. The "
830
  "keywords list gives search engines a hint as to what this post/page is "
831
  "about. Be sure to separate keywords with commas, like so: <samp>one,two,"
832
  "three</samp>."
1065
  msgid "SEO Design Solutions Whitepapers"
1066
  msgstr ""
1067
 
1068
+ #. #-#-#-#-# plugin.pot (SEO Ultimate 3.9) #-#-#-#-#
1069
  #. Author of the plugin/theme
1070
  #: modules/sds-blog/sds-blog.php:49
1071
  msgid "SEO Design Solutions"
1371
  msgid "SEO Ultimate Plugin Settings"
1372
  msgstr ""
1373
 
1374
+ #. #-#-#-#-# plugin.pot (SEO Ultimate 3.9) #-#-#-#-#
1375
  #. Plugin Name of the plugin/theme
1376
+ #: modules/settings/settings.php:14 plugin/class.seo-ultimate.php:729
1377
  msgid "SEO Ultimate"
1378
  msgstr ""
1379
 
1381
  msgid "Uninstaller"
1382
  msgstr ""
1383
 
1384
+ #: modules/settings/uninstall.php:18 plugin/class.seo-ultimate.php:1216
1385
  msgid "Uninstall"
1386
  msgstr ""
1387
 
1629
  msgid "Code Inserter module"
1630
  msgstr ""
1631
 
1632
+ #: plugin/class.seo-ultimate.php:729
1633
  msgid "SEO"
1634
  msgstr ""
1635
 
1636
+ #: plugin/class.seo-ultimate.php:1007
1637
  msgid "SEO Settings Help"
1638
  msgstr ""
1639
 
1640
+ #: plugin/class.seo-ultimate.php:1009
1641
  msgid "The SEO Settings box lets you customize these settings:"
1642
  msgstr ""
1643
 
1644
+ #: plugin/class.seo-ultimate.php:1011
1645
  msgid "(The SEO Settings box is part of the SEO Ultimate plugin.)"
1646
  msgstr ""
1647
 
1648
+ #: plugin/class.seo-ultimate.php:1066
1649
  #, php-format
1650
  msgid ""
1651
  "SEO Ultimate includes the functionality of %1$s. You may want to deactivate %"
1652
  "1$s to avoid plugin conflicts."
1653
  msgstr ""
1654
 
1655
+ #: plugin/class.seo-ultimate.php:1107
1656
  msgid "new feature"
1657
  msgstr ""
1658
 
1659
+ #: plugin/class.seo-ultimate.php:1107
1660
  msgid "new features"
1661
  msgstr ""
1662
 
1663
+ #: plugin/class.seo-ultimate.php:1108
1664
  msgid "bugfix"
1665
  msgstr ""
1666
 
1667
+ #: plugin/class.seo-ultimate.php:1108
1668
  msgid "bugfixes"
1669
  msgstr ""
1670
 
1671
+ #: plugin/class.seo-ultimate.php:1109
1672
  msgid "improvement"
1673
  msgstr ""
1674
 
1675
+ #: plugin/class.seo-ultimate.php:1109
1676
  msgid "improvements"
1677
  msgstr ""
1678
 
1679
+ #: plugin/class.seo-ultimate.php:1110
1680
  msgid "security fix"
1681
  msgstr ""
1682
 
1683
+ #: plugin/class.seo-ultimate.php:1110
1684
  msgid "security fixes"
1685
  msgstr ""
1686
 
1687
+ #: plugin/class.seo-ultimate.php:1141
1688
  #, php-format
1689
  msgid "%d %s"
1690
  msgstr ""
1691
 
1692
+ #: plugin/class.seo-ultimate.php:1147
1693
  #, php-format
1694
  msgid "Upgrade now to get %s. %s."
1695
  msgstr ""
1696
 
1697
+ #: plugin/class.seo-ultimate.php:1149
1698
  msgid "View changelog"
1699
  msgstr ""
1700
 
1701
+ #: plugin/class.seo-ultimate.php:1236
1702
  msgid "Active Modules: "
1703
  msgstr ""
1704
 
1705
+ #: plugin/class.seo-ultimate.php:1297
1706
  msgid ""
1707
  "<strong>SEO Ultimate Notice:</strong> Your blog is configured to block "
1708
  "search engine spiders. To resolve this, <a href=\"options-privacy.php\" "
1710
  "to everyone."
1711
  msgstr ""
1712
 
1713
+ #: plugin/class.seo-ultimate.php:1407
1714
  msgid "SEO Settings"
1715
  msgstr ""
1716