SEO Ultimate - Version 7.6

Version Description

Download this release

Release Info

Developer JohnLamansky
Plugin Icon 128x128 SEO Ultimate
Version 7.6
Comparing to
See all releases

Code changes from version 7.5.7 to 7.6

Files changed (47) hide show
  1. includes/backcompat.php +0 -19
  2. includes/jlfunctions/arr.php +69 -74
  3. includes/jlfunctions/date.php +0 -15
  4. includes/jlfunctions/html.php +7 -2
  5. includes/jlfunctions/io.php +56 -2
  6. includes/jlfunctions/jlfunctions.php +2 -2
  7. includes/jlfunctions/num.php +9 -2
  8. includes/jlfunctions/str.php +65 -37
  9. includes/jlfunctions/url.php +14 -5
  10. includes/jlfunctions/web.php +1 -1
  11. includes/jlsuggest/jlsuggest.js +17 -40
  12. includes/jlwp/functions.php +1 -133
  13. includes/tabs.js +7 -5
  14. modules/404s/fofs-log.php +5 -0
  15. modules/404s/fofs.php +7 -3
  16. modules/autolinks/autolinks.css +8 -0
  17. modules/autolinks/autolinks.php +159 -0
  18. modules/autolinks/content-autolinks-settings.php +17 -7
  19. modules/autolinks/content-autolinks.php +73 -95
  20. modules/autolinks/footer-autolinks.php +2 -2
  21. modules/canonical/canonical.php +21 -12
  22. modules/class.su-module.php +54 -151
  23. modules/files/files.php +2 -2
  24. modules/internal-link-aliases/internal-link-aliases.php +70 -8
  25. modules/meta/meta-descriptions.php +5 -5
  26. modules/meta/meta-keywords.php +20 -10
  27. modules/meta/meta-robots.php +36 -37
  28. modules/meta/webmaster-verify.php +18 -5
  29. modules/modules.css +4 -0
  30. modules/modules/modules.css +16 -1
  31. modules/modules/modules.php +16 -3
  32. modules/noindex/noindex.php +1 -1
  33. modules/opengraph/opengraph.php +104 -21
  34. modules/permalinks/permalinks.php +3 -0
  35. modules/rich-snippets/rich-snippets.php +38 -29
  36. modules/sds-blog/sds-blog.php +1 -1
  37. modules/settings/global-settings.php +10 -3
  38. modules/settings/install.php +8 -6
  39. modules/sharing-buttons/sharing-buttons.php +18 -5
  40. modules/titles/titles.php +2 -1
  41. modules/wp-settings/wp-settings.php +3 -4
  42. plugin/class.seo-ultimate.php +32 -10
  43. plugin/global.css +3 -3
  44. plugin/images/wp-ultimate.gif +0 -0
  45. readme.txt +70 -87
  46. seo-ultimate.php +7 -7
  47. translations/seo-ultimate.pot +1029 -529
includes/backcompat.php DELETED
@@ -1,19 +0,0 @@
1
- <?php
2
- if (!function_exists('array_combine')) :
3
-
4
- //PHP4 function from:
5
- //http://www.php.net/manual/en/function.array-combine.php#82244
6
- function array_combine($arr1, $arr2) {
7
- $out = array();
8
-
9
- $arr1 = array_values($arr1);
10
- $arr2 = array_values($arr2);
11
-
12
- foreach($arr1 as $key1 => $value1) {
13
- $out[(string)$value1] = $arr2[$key1];
14
- }
15
-
16
- return $out;
17
- }
18
-
19
- endif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/jlfunctions/arr.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
  JLFunctions Array Class
4
- Copyright (c)2009-2011 John Lamansky
5
  */
6
 
7
  class suarr {
@@ -27,17 +27,11 @@ class suarr {
27
  return $newarray;
28
  }
29
 
30
- /**
31
- * Removes elements that are blank (after trimming) from the beginning of the given array.
32
- */
33
- function ltrim($array) {
34
- while (count($array) && !strlen(trim($array[0])))
35
- array_shift($array);
36
- return $array;
37
- }
38
-
39
  /**
40
  * Removes a value from the array if found.
 
 
 
41
  */
42
  function remove_value(&$array, $value) {
43
  $index = array_search($value, $array);
@@ -46,63 +40,59 @@ class suarr {
46
  }
47
 
48
  /**
49
- * Returns whether or not any of the specified $needles are in the $haystack.
50
  *
51
- * @param array $needles
52
- * @param array $haystack
53
- * @param bool $case Whether or not the search should be case-sensitive.
54
  *
55
- * @return bool
56
  */
57
- function any_in_array($needles, $haystack, $case = true) {
58
- if (!$case) {
59
- $needles = array_map('strtolower', $needles);
60
- $haystack = array_map('strtolower', $haystack);
61
- }
62
-
63
- return count(array_intersect($needles, $haystack)) > 0;
64
- }
65
-
66
  function explode_lines($lines) {
67
  $lines = explode("\n", $lines);
68
  $lines = array_map('trim', $lines); //Remove any \r's
69
  return $lines;
70
  }
71
 
72
- //Based on recursive array search function from:
73
- //http://www.php.net/manual/en/function.array-search.php#91365
74
- function search_recursive($needle, $haystack) {
75
- foreach ($haystack as $key => $value) {
76
- if ($needle === $value || (is_array($value) && suarr::search_recursive($needle, $value) !== false))
77
- return $key;
78
- }
79
- return false;
80
- }
81
-
82
- function recursive_get($array, $key) {
83
- if (is_array($array)) {
84
- if (isset($array[$key]))
85
- return $array[$key];
86
-
87
- foreach ($array as $subarray) {
88
- if ($value = suarr::recursive_get($subarray, $key))
89
- return $value;
90
- }
91
- }
92
-
93
- return false;
94
- }
95
-
96
  function vksort(&$arr, $valuekey) {
97
  $valuekey = sustr::preg_filter('A-Za-z0-9 ', $valuekey);
98
  uasort($arr, create_function('$a,$b', 'return strcasecmp($a["'.$valuekey.'"], $b["'.$valuekey.'"]);'));
99
  }
100
 
 
 
 
 
 
 
 
101
  function vklrsort(&$arr, $valuekey) {
102
  $valuekey = sustr::preg_filter('A-Za-z0-9 ', $valuekey);
103
  uasort($arr, create_function('$a,$b', 'return strlen($b["'.$valuekey.'"]) - strlen($a["'.$valuekey.'"]);'));
104
  }
105
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
  function flatten_values($arr, $value_keys, $use_default_if_empty=false, $default='') {
107
  foreach ((array)$value_keys as $key)
108
  $arr = suarr::_flatten_values($arr, $key, $use_default_if_empty, $default);
@@ -133,6 +123,16 @@ class suarr {
133
  return $newarr;
134
  }
135
 
 
 
 
 
 
 
 
 
 
 
136
  function key_replace($array, $key_changes, $recursive = true, $return_replaced_only = false) {
137
  $newarray = array();
138
  foreach ($array as $key => $value) {
@@ -154,6 +154,16 @@ class suarr {
154
  return $newarray;
155
  }
156
 
 
 
 
 
 
 
 
 
 
 
157
  function value_replace($array, $value_changes, $recursive = true, $return_replaced_only = false) {
158
  $newarray = array();
159
 
@@ -173,27 +183,23 @@ class suarr {
173
  return $newarray;
174
  }
175
 
 
 
 
 
 
 
 
 
 
 
 
176
  function simplify($arr, $keyloc, $valloc, $use_default_if_empty=false, $default='') {
177
  $keys = suarr::flatten_values($arr, $keyloc, $use_default_if_empty, $default);
178
  $values = suarr::flatten_values($arr, $valloc, $use_default_if_empty, $default);
179
  return array_combine($keys, $values);
180
  }
181
 
182
- function has_keys($array, $keys) {
183
- if (is_array($array) && is_array($keys)) {
184
- if (count($keys))
185
- return count(array_diff($keys, array_keys($array))) == 0;
186
-
187
- return true;
188
- }
189
-
190
- return false;
191
- }
192
-
193
- function key_check($array, $function) {
194
- return (count($array) == count(array_filter(array_keys($array), $function)));
195
- }
196
-
197
  //Function based on http://php.net/manual/en/function.array-unique.php#82508
198
  function in_array_i($str, $a) {
199
  foreach($a as $v){
@@ -212,17 +218,6 @@ class suarr {
212
  }
213
  return $n;
214
  }
215
-
216
- function replace_empty_values_with_keys($array) {
217
- $newarray = array();
218
- foreach ($array as $key => $value) {
219
- if (empty($value))
220
- $newarray[$key] = $key;
221
- else
222
- $newarray[$key] = $value;
223
- }
224
- return $newarray;
225
- }
226
  }
227
 
228
  ?>
1
  <?php
2
  /*
3
  JLFunctions Array Class
4
+ Copyright (c)2009-2012 John Lamansky
5
  */
6
 
7
  class suarr {
27
  return $newarray;
28
  }
29
 
 
 
 
 
 
 
 
 
 
30
  /**
31
  * Removes a value from the array if found.
32
+ *
33
+ * @param array $array Passed by reference.
34
+ * @param mixed $value The value to remove.
35
  */
36
  function remove_value(&$array, $value) {
37
  $index = array_search($value, $array);
40
  }
41
 
42
  /**
43
+ * Turns a string into an array, with one line per array element.
44
  *
45
+ * @param string $lines
 
 
46
  *
47
+ * @return array
48
  */
 
 
 
 
 
 
 
 
 
49
  function explode_lines($lines) {
50
  $lines = explode("\n", $lines);
51
  $lines = array_map('trim', $lines); //Remove any \r's
52
  return $lines;
53
  }
54
 
55
+ /**
56
+ * Sorts an array of arrays by using a given array key to locate string values in the second-level arrays and sorting the first-level array accordingly.
57
+ * Alphabetical sorting is used.
58
+ *
59
+ * @param array $arr Passed by reference
60
+ * @param string $valuekey The array key used to access the string values by which the arrays in $arr are to be sorted
61
+ */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  function vksort(&$arr, $valuekey) {
63
  $valuekey = sustr::preg_filter('A-Za-z0-9 ', $valuekey);
64
  uasort($arr, create_function('$a,$b', 'return strcasecmp($a["'.$valuekey.'"], $b["'.$valuekey.'"]);'));
65
  }
66
 
67
+ /**
68
+ * Sorts an array of arrays by using a given array key to locate string values in the second-level arrays and sorting the first-level array accordingly.
69
+ * Reverse length sorting is used. (Longest strings are first, shortest strings last.)
70
+ *
71
+ * @param array $arr Passed by reference
72
+ * @param string $valuekey The array key used to access the string values by which the arrays in $arr are to be sorted
73
+ */
74
  function vklrsort(&$arr, $valuekey) {
75
  $valuekey = sustr::preg_filter('A-Za-z0-9 ', $valuekey);
76
  uasort($arr, create_function('$a,$b', 'return strlen($b["'.$valuekey.'"]) - strlen($a["'.$valuekey.'"]);'));
77
  }
78
 
79
+ /**
80
+ * Flattens a multidimensional array (or an array of objects) into a single-dimensional array by discarding all but one element of the higher-level array(s).
81
+ * Works like WordPress's wp_list_pluck(), except this function is recursive and supports inserting a default value if a subarray doesn't have the specified key.
82
+ *
83
+ * Usage example:
84
+ * ---
85
+ * $post_types = get_post_types(array('public' => true), 'objects');
86
+ * $singular_names = suarr::flatten_values($post_types, array('labels', 'singular_name'));
87
+ * ---
88
+ *
89
+ * @param array $arr The multidimensional array (or array of objects) to flatten
90
+ * @param array|string|int $value_keys Each array/object in $arr will be replaced with its element/property named $value_keys. If $value_keys is an array, this will be done recursively.
91
+ * @param bool $use_default_if_empty If a given array/object in $arr does not have an element/property named $value_keys, should a default value be inserted?
92
+ * @param mixed $default
93
+ *
94
+ * @return array The flattened array
95
+ */
96
  function flatten_values($arr, $value_keys, $use_default_if_empty=false, $default='') {
97
  foreach ((array)$value_keys as $key)
98
  $arr = suarr::_flatten_values($arr, $key, $use_default_if_empty, $default);
123
  return $newarr;
124
  }
125
 
126
+ /**
127
+ * Renames keys in an array. Supports recursion.
128
+ *
129
+ * @param array $array The array whose keys should be renamed
130
+ * @param array $key_changes An array of (old_key => new_key)
131
+ * @param bool $recursive Whether or not to do the same for subarrays of $array
132
+ * @param bool $return_replaced_only If true, then elements whose keys were *not* renamed will be discarded
133
+ *
134
+ * @return array
135
+ */
136
  function key_replace($array, $key_changes, $recursive = true, $return_replaced_only = false) {
137
  $newarray = array();
138
  foreach ($array as $key => $value) {
154
  return $newarray;
155
  }
156
 
157
+ /**
158
+ * Runs a find/replace operation on values in an array.
159
+ *
160
+ * @param array $array The array whose values should be replaced
161
+ * @param array $value_changes An array of (old_value => new_value)
162
+ * @param bool $recursive Whether or not to do the same for subarrays of $array
163
+ * @param bool $return_replaced_only If true, then elements *not* replaced will be discarded
164
+ *
165
+ * @return array
166
+ */
167
  function value_replace($array, $value_changes, $recursive = true, $return_replaced_only = false) {
168
  $newarray = array();
169
 
183
  return $newarray;
184
  }
185
 
186
+ /**
187
+ * Goes through an array of arrays/objects, plucks two elements/properties from each array/object, and constructs a new array, with one element/property as the key, and the other as the value.
188
+ *
189
+ * @param array $arr The array to run this process on.
190
+ * @param array|string|int $keyloc The location (either a string/integer key, or an array of nested keys) of the elements' values to be used as keys in the new array
191
+ * @param array|string|int $valloc The location (either a string/integer key, or an array of nested keys) of the elements' values to be used as values in the new array
192
+ * @param bool $use_default_if_empty Whether or not to use a default value in the event that nothing is located at $keyloc or $valloc for a given array/object in $arr
193
+ * @param mixed $default
194
+ *
195
+ * @return array
196
+ */
197
  function simplify($arr, $keyloc, $valloc, $use_default_if_empty=false, $default='') {
198
  $keys = suarr::flatten_values($arr, $keyloc, $use_default_if_empty, $default);
199
  $values = suarr::flatten_values($arr, $valloc, $use_default_if_empty, $default);
200
  return array_combine($keys, $values);
201
  }
202
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
203
  //Function based on http://php.net/manual/en/function.array-unique.php#82508
204
  function in_array_i($str, $a) {
205
  foreach($a as $v){
218
  }
219
  return $n;
220
  }
 
 
 
 
 
 
 
 
 
 
 
221
  }
222
 
223
  ?>
includes/jlfunctions/date.php DELETED
@@ -1,15 +0,0 @@
1
- <?php
2
- /*
3
- JLFunctions Date Class
4
- Copyright (c)2011 John Lamansky
5
- */
6
-
7
- class sudate {
8
- function gmt_to_unix($gmt) {
9
- if (preg_match('#([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})#', $gmt, $matches))
10
- return gmmktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
11
- else
12
- return 0;
13
- }
14
- }
15
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/jlfunctions/html.php CHANGED
@@ -1,15 +1,20 @@
1
  <?php
2
  /*
3
  JLFunctions HTML Class
4
- Copyright (c)2010 John Lamansky
5
  */
6
 
7
  class suhtml {
8
 
9
  /**
10
  * Returns <option> tags.
 
 
 
 
 
11
  */
12
- function option_tags($options, $current = true) {
13
  $html = '';
14
  foreach ($options as $value => $label) {
15
  if (is_array($label)) {
1
  <?php
2
  /*
3
  JLFunctions HTML Class
4
+ Copyright (c)2010-2012 John Lamansky
5
  */
6
 
7
  class suhtml {
8
 
9
  /**
10
  * Returns <option> tags.
11
+ *
12
+ * @param array $options An array of (value => label)
13
+ * @param string $current The value of the option that should be initially selected on the dropdown
14
+ *
15
+ * @return string
16
  */
17
+ function option_tags($options, $current) {
18
  $html = '';
19
  foreach ($options as $value => $label) {
20
  if (is_array($label)) {
includes/jlfunctions/io.php CHANGED
@@ -1,28 +1,68 @@
1
  <?php
2
  /*
3
  JLFunctions IO Class
4
- Copyright (c)2009-2010 John Lamansky
5
  */
6
 
7
  class suio {
8
-
 
 
 
 
 
 
 
 
 
9
  function is_file($filename, $path, $ext=false) {
10
  $is_ext = strlen($ext) ? sustr::endswith($filename, '.'.ltrim($ext, '*.')) : true;
11
  return is_file(suio::tslash($path).$filename) && $is_ext;
12
  }
13
 
 
 
 
 
 
 
 
 
 
14
  function is_dir($name, $path) {
15
  return $name != '.' && $name != '..' && is_dir(suio::tslash($path).$name);
16
  }
17
 
 
 
 
 
 
 
 
18
  function tslash($path) {
19
  return suio::untslash($path).'/';
20
  }
21
 
 
 
 
 
 
 
 
22
  function untslash($path) {
23
  return rtrim($path, '/');
24
  }
25
 
 
 
 
 
 
 
 
 
26
  function import_csv($path) {
27
  if (!is_readable($path)) return false;
28
 
@@ -60,12 +100,26 @@ class suio {
60
  return $result;
61
  }
62
 
 
 
 
 
 
 
 
63
  function export_csv($csv) {
64
  header("Content-Type: text/csv");
65
  $result = suio::print_csv($csv);
66
  if ($result) die(); else return false;
67
  }
68
 
 
 
 
 
 
 
 
69
  function print_csv($csv) {
70
  if (!is_array($csv) || !count($csv) || !is_array($csv[0])) return false;
71
 
1
  <?php
2
  /*
3
  JLFunctions IO Class
4
+ Copyright (c)2009-2012 John Lamansky
5
  */
6
 
7
  class suio {
8
+
9
+ /**
10
+ * Checks whether a given $filename in $path is actually a file, and optionally whether $filename ends in extension .$ext
11
+ *
12
+ * @param string $filename The name of the purported file (e.g. "index.php")
13
+ * @param string $path The path in which this file is purportedly located
14
+ * @param string $ext The extension that the file should have (e.g. "php") (optional)
15
+ *
16
+ * @return bool
17
+ */
18
  function is_file($filename, $path, $ext=false) {
19
  $is_ext = strlen($ext) ? sustr::endswith($filename, '.'.ltrim($ext, '*.')) : true;
20
  return is_file(suio::tslash($path).$filename) && $is_ext;
21
  }
22
 
23
+ /**
24
+ * Checks whether a given path name points to a real directory.
25
+ * Ensures that the path name is not "." or ".."
26
+ *
27
+ * @param string $name The name of the purported directory
28
+ * @param string $path The path in which this directory is purportedly located
29
+ *
30
+ * @return bool
31
+ */
32
  function is_dir($name, $path) {
33
  return $name != '.' && $name != '..' && is_dir(suio::tslash($path).$name);
34
  }
35
 
36
+ /**
37
+ * Makes sure a directory path or URL ends in a trailing slash.
38
+ *
39
+ * @param string $path
40
+ *
41
+ * @return string
42
+ */
43
  function tslash($path) {
44
  return suio::untslash($path).'/';
45
  }
46
 
47
+ /**
48
+ * Removes any trailing slash at the end of a directory path or URL.
49
+ *
50
+ * @param string $path
51
+ *
52
+ * @return string
53
+ */
54
  function untslash($path) {
55
  return rtrim($path, '/');
56
  }
57
 
58
+ /**
59
+ * Converts the contents of a CSV file into an array.
60
+ * The first row of the CSV file must contain the column headers.
61
+ *
62
+ * @param $path The location of the CSV file on the server.
63
+ *
64
+ * @return array An array of arrays which represent rows of the file.
65
+ */
66
  function import_csv($path) {
67
  if (!is_readable($path)) return false;
68
 
100
  return $result;
101
  }
102
 
103
+ /**
104
+ * Converts an array into a CSV file, outputs it with the appropriate HTTP header, and terminates program execution.
105
+ *
106
+ * @param array $csv The array to convert and output
107
+ *
108
+ * @return false Returns a value only if conversion failed
109
+ */
110
  function export_csv($csv) {
111
  header("Content-Type: text/csv");
112
  $result = suio::print_csv($csv);
113
  if ($result) die(); else return false;
114
  }
115
 
116
+ /**
117
+ * Converts an array into a CSV file and outputs it.
118
+ *
119
+ * @param array $csv The array to convert and output
120
+ *
121
+ * @return bool Whether or not the conversion was successful
122
+ */
123
  function print_csv($csv) {
124
  if (!is_array($csv) || !count($csv) || !is_array($csv[0])) return false;
125
 
includes/jlfunctions/jlfunctions.php CHANGED
@@ -1,10 +1,10 @@
1
  <?php
2
  /*
3
  JLFunctions Library
4
- Copyright (c)2009-2011 John Lamansky
5
  */
6
 
7
- foreach (array('arr', 'date', 'html', 'io', 'num', 'str', 'url', 'web') as $jlfuncfile) {
8
  include dirname(__FILE__)."/$jlfuncfile.php";
9
  }
10
 
1
  <?php
2
  /*
3
  JLFunctions Library
4
+ Copyright (c)2009-2012 John Lamansky
5
  */
6
 
7
+ foreach (array('arr', 'html', 'io', 'num', 'str', 'url', 'web') as $jlfuncfile) {
8
  include dirname(__FILE__)."/$jlfuncfile.php";
9
  }
10
 
includes/jlfunctions/num.php CHANGED
@@ -1,11 +1,18 @@
1
  <?php
2
  /*
3
  JLFunctions Number Class
4
- Copyright (c)2011 John Lamansky
5
  */
6
 
7
  class sunum {
8
-
 
 
 
 
 
 
 
9
  function lowest() {
10
  $numbers = func_get_args();
11
  $numbers = array_values($numbers);
1
  <?php
2
  /*
3
  JLFunctions Number Class
4
+ Copyright (c)2011-2012 John Lamansky
5
  */
6
 
7
  class sunum {
8
+
9
+ /**
10
+ * Returns the lowest of a set of numbers.
11
+ *
12
+ * @param array|int $number,... The numbers may be passed as function arguments or as an array.
13
+ *
14
+ * @return int The lowest of the numbers.
15
+ */
16
  function lowest() {
17
  $numbers = func_get_args();
18
  $numbers = array_values($numbers);
includes/jlfunctions/str.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
  JLFunctions String Class
4
- Copyright (c)2009-2011 John Lamansky
5
  */
6
 
7
  class sustr {
@@ -16,7 +16,7 @@ class sustr {
16
  function startswith( $str, $sub ) {
17
  return ( substr( $str, 0, strlen( $sub ) ) === $sub );
18
  }
19
-
20
  /**
21
  * Returns whether or not a given string ends with a given substring.
22
  *
@@ -28,6 +28,14 @@ class sustr {
28
  return ( substr( $str, strlen( $str ) - strlen( $sub ) ) === $sub );
29
  }
30
 
 
 
 
 
 
 
 
 
31
  function startwith( $str, $start ) {
32
  if (!sustr::startswith($str, $start))
33
  return $start.$str;
@@ -35,6 +43,14 @@ class sustr {
35
  return $str;
36
  }
37
 
 
 
 
 
 
 
 
 
38
  function endwith( $str, $end ) {
39
  if (!sustr::endswith($str, $end))
40
  return $str.$end;
@@ -42,22 +58,37 @@ class sustr {
42
  return $str;
43
  }
44
 
 
 
 
 
 
 
 
45
  function has($str, $sub) {
46
  return (strpos($str, $sub) !== false);
47
  }
48
 
 
 
 
 
 
 
 
49
  function ihas($str, $sub) {
50
  $str = strtolower($str);
51
  $sub = strtolower($sub);
52
  return (strpos($str, $sub) !== false);
53
  }
54
-
55
  /**
56
  * Truncates a string if it is longer than a given length.
57
  *
58
  * @param string $str The string to possibly truncate.
59
  * @param int $maxlen The desired maximum length of the string.
60
- * @param str $truncate The string that should be added to the end of a truncated string.
 
61
  */
62
  function truncate( $str, $maxlen, $truncate = '...', $maintain_words=false ) {
63
 
@@ -70,15 +101,23 @@ class sustr {
70
  return $str;
71
  }
72
 
73
- function truncate_at( $str, $end ) {
74
- if ($endpos = strpos($str, $end))
75
- return substr($str, 0, $endpos);
76
- else
 
 
 
 
 
 
77
  return $str;
 
 
78
  }
79
 
80
  /**
81
- * Joins strings into a natural-language list.
82
  * Can be internationalized with gettext or the su_lang_implode filter.
83
  *
84
  * @param array $items The strings (or objects with $var child strings) to join.
@@ -119,7 +158,7 @@ class sustr {
119
  /**
120
  * If the given string ends with the given suffix, the suffix is removed.
121
  *
122
- * @param string $str The string of which the provided suffix should be trimmed if located.
123
  * @param string $totrim The suffix that should be trimmed if found.
124
  * @return string The possibly-trimmed string.
125
  */
@@ -130,6 +169,13 @@ class sustr {
130
  return $str;
131
  }
132
 
 
 
 
 
 
 
 
133
  function rtrim_substr($str, $totrim) {
134
  for ($i = strlen($totrim); $i > 0; $i--) {
135
  $totrimsub = substr($totrim, 0, $i);
@@ -140,6 +186,13 @@ class sustr {
140
  return $str;
141
  }
142
 
 
 
 
 
 
 
 
143
  function ltrim_str($str, $totrim) {
144
  if (strlen($str) > strlen($totrim) && sustr::startswith($str, $totrim))
145
  return substr($str, strlen($totrim));
@@ -156,17 +209,8 @@ class sustr {
156
  return $results;
157
  }
158
 
159
- function unique_words($str) {
160
- $str = explode(' ', $str);
161
- $str = array_unique($str);
162
- $str = implode(' ', $str);
163
- return $str;
164
- }
165
-
166
- function remove_double_words($str) {
167
- $words = explode(' ', $str);
168
- foreach ($words as $word) $str = str_replace("$word $word", $word, $str);
169
- return $str;
170
  }
171
 
172
  function preg_filter($filter, $str) {
@@ -174,10 +218,6 @@ class sustr {
174
  return preg_replace("/[^{$filter}]/", '', $str);
175
  }
176
 
177
- function to_int($str) {
178
- return intval(sustr::preg_filter('0-9', strval($str)));
179
- }
180
-
181
  function preg_escape($str, $delim='%') {
182
  $chars = "\ ^ . $ | ( ) [ ] * + ? { } , ".$delim;
183
  $chars = explode(' ', $chars);
@@ -208,18 +248,6 @@ class sustr {
208
  return preg_replace($search_regex, $replace, $subject, $limit, $count);
209
  }
210
 
211
- function upto($str, $sub) {
212
- $end = strpos($str, $sub);
213
- if ($end === false)
214
- return $str;
215
- else
216
- return substr($str, 0, $end);
217
- }
218
-
219
- function str2func($varval) {
220
- return create_function('', 'return "'.addcslashes((string)$varval, '"').'";');
221
- }
222
-
223
  function tclcwords($str) {
224
  $words = explode(' ', $str);
225
  $new_words = array();
1
  <?php
2
  /*
3
  JLFunctions String Class
4
+ Copyright (c)2009-2012 John Lamansky
5
  */
6
 
7
  class sustr {
16
  function startswith( $str, $sub ) {
17
  return ( substr( $str, 0, strlen( $sub ) ) === $sub );
18
  }
19
+
20
  /**
21
  * Returns whether or not a given string ends with a given substring.
22
  *
28
  return ( substr( $str, strlen( $str ) - strlen( $sub ) ) === $sub );
29
  }
30
 
31
+ /**
32
+ * Makes a string start with a given string if it doesn't already.
33
+ *
34
+ * @param string $str The string that should start with $start
35
+ * @param string $start
36
+ *
37
+ * @return string The string with $start at the beginning
38
+ */
39
  function startwith( $str, $start ) {
40
  if (!sustr::startswith($str, $start))
41
  return $start.$str;
43
  return $str;
44
  }
45
 
46
+ /**
47
+ * Makes a string end with a given string if it doesn't already.
48
+ *
49
+ * @param string $str The string that should end with $end
50
+ * @param string $end
51
+ *
52
+ * @return string The string with $end at the end
53
+ */
54
  function endwith( $str, $end ) {
55
  if (!sustr::endswith($str, $end))
56
  return $str.$end;
58
  return $str;
59
  }
60
 
61
+ /**
62
+ * Checks whether or not $str has $sub in it somewhere.
63
+ *
64
+ * @param string $str
65
+ * @param string $sub
66
+ * @return bool
67
+ */
68
  function has($str, $sub) {
69
  return (strpos($str, $sub) !== false);
70
  }
71
 
72
+ /**
73
+ * Case-insensitively checks whether or not $str has $sub in it somewhere.
74
+ *
75
+ * @param string $str
76
+ * @param string $sub
77
+ * @return bool
78
+ */
79
  function ihas($str, $sub) {
80
  $str = strtolower($str);
81
  $sub = strtolower($sub);
82
  return (strpos($str, $sub) !== false);
83
  }
84
+
85
  /**
86
  * Truncates a string if it is longer than a given length.
87
  *
88
  * @param string $str The string to possibly truncate.
89
  * @param int $maxlen The desired maximum length of the string.
90
+ * @param string $truncate The string that should be added to the end of a truncated string.
91
+ * @return string
92
  */
93
  function truncate( $str, $maxlen, $truncate = '...', $maintain_words=false ) {
94
 
101
  return $str;
102
  }
103
 
104
+ /**
105
+ * Returns the contents of $str up to, but not including, the first instance of $sub.
106
+ *
107
+ * @param string $str
108
+ * @param string $sub
109
+ * @return string
110
+ */
111
+ function upto($str, $sub) {
112
+ $end = strpos($str, $sub);
113
+ if ($end === false)
114
  return $str;
115
+ else
116
+ return substr($str, 0, $end);
117
  }
118
 
119
  /**
120
+ * Joins strings into a natural-language list (e.g. "A and B" or "A, B, and C")
121
  * Can be internationalized with gettext or the su_lang_implode filter.
122
  *
123
  * @param array $items The strings (or objects with $var child strings) to join.
158
  /**
159
  * If the given string ends with the given suffix, the suffix is removed.
160
  *
161
+ * @param string $str The string from which the provided suffix should be trimmed if located.
162
  * @param string $totrim The suffix that should be trimmed if found.
163
  * @return string The possibly-trimmed string.
164
  */
169
  return $str;
170
  }
171
 
172
+ /**
173
+ * If the given string ends with the given suffix or any portion thereof, the suffix or suffix portion is removed.
174
+ *
175
+ * @param string $str The string from which the provided suffix should be trimmed if located.
176
+ * @param string $totrim The suffix that should be trimmed if it or a portion of it is found.
177
+ * @return string The possibly-trimmed string.
178
+ */
179
  function rtrim_substr($str, $totrim) {
180
  for ($i = strlen($totrim); $i > 0; $i--) {
181
  $totrimsub = substr($totrim, 0, $i);
186
  return $str;
187
  }
188
 
189
+ /**
190
+ * If the given string begins with the given prefix, the prefix is removed.
191
+ *
192
+ * @param string $str The string of which the provided prefix should be trimmed if located.
193
+ * @param string $totrim The prefix that should be trimmed if found.
194
+ * @return string The possibly-trimmed string.
195
+ */
196
  function ltrim_str($str, $totrim) {
197
  if (strlen($str) > strlen($totrim) && sustr::startswith($str, $totrim))
198
  return substr($str, strlen($totrim));
209
  return $results;
210
  }
211
 
212
+ function to_int($str) {
213
+ return intval(sustr::preg_filter('0-9', strval($str)));
 
 
 
 
 
 
 
 
 
214
  }
215
 
216
  function preg_filter($filter, $str) {
218
  return preg_replace("/[^{$filter}]/", '', $str);
219
  }
220
 
 
 
 
 
221
  function preg_escape($str, $delim='%') {
222
  $chars = "\ ^ . $ | ( ) [ ] * + ? { } , ".$delim;
223
  $chars = explode(' ', $chars);
248
  return preg_replace($search_regex, $replace, $subject, $limit, $count);
249
  }
250
 
 
 
 
 
 
 
 
 
 
 
 
 
251
  function tclcwords($str) {
252
  $words = explode(' ', $str);
253
  $new_words = array();
includes/jlfunctions/url.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
  JLFunctions URL Class
4
- Copyright (c)2009-2011 John Lamansky
5
  */
6
 
7
  class suurl {
@@ -22,10 +22,13 @@ class suurl {
22
  return $url.$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
23
  }
24
 
25
- function build_query($array) {
26
- return html_entity_decode(http_build_query($array));
27
- }
28
-
 
 
 
29
  function equal($url1, $url2) {
30
 
31
  if (($url1parts = parse_url($url1)) && isset($url1parts['host'])) {
@@ -41,6 +44,12 @@ class suurl {
41
  return $url1 == $url2;
42
  }
43
 
 
 
 
 
 
 
44
  function build($parts) {
45
 
46
  $url = '';
1
  <?php
2
  /*
3
  JLFunctions URL Class
4
+ Copyright (c)2009-2012 John Lamansky
5
  */
6
 
7
  class suurl {
22
  return $url.$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
23
  }
24
 
25
+ /**
26
+ * Checks whether or not two URLs are equivalent.
27
+ *
28
+ * @param string $url1
29
+ * @param string $url2
30
+ * @return bool
31
+ */
32
  function equal($url1, $url2) {
33
 
34
  if (($url1parts = parse_url($url1)) && isset($url1parts['host'])) {
44
  return $url1 == $url2;
45
  }
46
 
47
+ /**
48
+ * Turns an array of URL parts (host, scheme, path, query, fragment) into a URL.
49
+ *
50
+ * @param array $parts
51
+ * @return string
52
+ */
53
  function build($parts) {
54
 
55
  $url = '';
includes/jlfunctions/web.php CHANGED
@@ -5,7 +5,7 @@ Copyright (c)2010 John Lamansky
5
  */
6
 
7
  class suweb {
8
-
9
  function is_search_engine_ua($user_agent) {
10
  $ua_keywords = array(
11
  'Googlebot' //Google
5
  */
6
 
7
  class suweb {
8
+
9
  function is_search_engine_ua($user_agent) {
10
  $ua_keywords = array(
11
  'Googlebot' //Google
includes/jlsuggest/jlsuggest.js CHANGED
@@ -108,9 +108,11 @@ jQuery(document).ready( function($) {
108
  if (timeout)
109
  clearTimeout(timeout);
110
 
 
111
  if ($input.val().length >= options.minchars && (!options.noUrls || ($input.val().substring(0, 7) != 'http://' && $input.val().substring(0, 8) != 'https://' && $input.val().indexOf('/') == '-1'))) {
112
  $input.addClass(options.timeoutClass);
113
 
 
114
  timeout = setTimeout(suggest, options.delay);
115
  } else {
116
  $results.hide();
@@ -127,22 +129,8 @@ jQuery(document).ready( function($) {
127
 
128
  function suggest() {
129
 
130
- var q = $.trim($input.val()), multipleSepPos, items;
131
 
132
- /*
133
- if (options.noUrls && (q.substring(0, 7) == 'http://' || q.substring(0, 8) == 'https://')) {
134
- $results.hide();
135
- $input.removeClass(options.timeoutClass);
136
- return;
137
- }
138
- */
139
-
140
- if ( options.multiple ) {
141
- multipleSepPos = q.lastIndexOf(options.multipleSep);
142
- if ( multipleSepPos != -1 ) {
143
- q = $.trim(q.substr(multipleSepPos + options.multipleSep.length));
144
- }
145
- }
146
  if (q.length >= options.minchars) {
147
 
148
  cached = checkCache(q);
@@ -284,30 +272,21 @@ jQuery(document).ready( function($) {
284
  $currentResult = getCurrentResult();
285
 
286
  if ($currentResult) {
287
- if ( options.multiple ) {
288
- if ( $input.val().indexOf(options.multipleSep) != -1 ) {
289
- $currentVal = $input.val().substr( 0, ( $input.val().lastIndexOf(options.multipleSep) + options.multipleSep.length ) );
290
- } else {
291
- $currentVal = "";
292
- }
293
- $input.val( $currentVal + $currentResult.text() + options.multipleSep);
294
- $input.focus();
 
 
 
 
 
295
  } else {
296
- if (options.textDest) {
297
- $input
298
- .hide()
299
- .siblings('.' + options.textDestClass + ':first')
300
- .show()
301
- .children('.' + options.textDestTextClass)
302
- .html($currentResult.attr('su:selectedtext') || $currentResult.text())
303
- .parentsUntil('tr')
304
- .next('td')
305
- .children('input')
306
- .focus();
307
-
308
- $input.val($currentResult.attr('su:value'));
309
- } else
310
- $input.val($currentResult.text());
311
  }
312
  $results.hide();
313
 
@@ -352,8 +331,6 @@ jQuery(document).ready( function($) {
352
  return;
353
 
354
  options = options || {};
355
- options.multiple = options.multiple || false;
356
- options.multipleSep = options.multipleSep || ", ";
357
  options.source = source;
358
  options.delay = options.delay || 100;
359
  options.resultsClass = options.resultsClass || 'jls_results';
108
  if (timeout)
109
  clearTimeout(timeout);
110
 
111
+ //Only trigger suggestions if the minimum length is met and if this isn't a URL (assuming the noUrls option is set)
112
  if ($input.val().length >= options.minchars && (!options.noUrls || ($input.val().substring(0, 7) != 'http://' && $input.val().substring(0, 8) != 'https://' && $input.val().indexOf('/') == '-1'))) {
113
  $input.addClass(options.timeoutClass);
114
 
115
+ //Wait a bit before giving autocomplete suggestions
116
  timeout = setTimeout(suggest, options.delay);
117
  } else {
118
  $results.hide();
129
 
130
  function suggest() {
131
 
132
+ var q = $.trim($input.val()), items;
133
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
134
  if (q.length >= options.minchars) {
135
 
136
  cached = checkCache(q);
272
  $currentResult = getCurrentResult();
273
 
274
  if ($currentResult) {
275
+ if (options.textDest) {
276
+ $input
277
+ .hide() //Hide the input box
278
+ .siblings('.' + options.textDestClass + ':first')
279
+ .show() //Show the selection box
280
+ .children('.' + options.textDestTextClass)
281
+ .html($currentResult.attr('su:selectedtext') || $currentResult.text()) //Put the selected item into the selection box
282
+ .parentsUntil('tr') //If we're in a table...
283
+ .next('td')
284
+ .children('input')
285
+ .focus(); //...then focus the next textbox in the table
286
+
287
+ $input.val($currentResult.attr('su:value'));
288
  } else {
289
+ $input.val($currentResult.text());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
290
  }
291
  $results.hide();
292
 
331
  return;
332
 
333
  options = options || {};
 
 
334
  options.source = source;
335
  options.delay = options.delay || 100;
336
  options.resultsClass = options.resultsClass || 'jls_results';
includes/jlwp/functions.php CHANGED
@@ -30,55 +30,6 @@ class suwp {
30
  return false;
31
  }
32
 
33
- function get_any_posts($args = array()) {
34
- if (!is_array($args)) $args = array();
35
- $args['post_type'] = suwp::get_post_type_names(); //...as opposed to "any" because then get_posts() will remove search-excluded post types
36
- $args['numberposts'] = -1;
37
- return get_posts($args);
38
- }
39
-
40
- function get_post_type_names() {
41
- //If WP 2.9+ && WP 3.0+...
42
- if (function_exists('get_post_types') && $types = get_post_types(array('public' => true), 'names'))
43
- return $types;
44
-
45
- //WP 2.9 or less
46
- return array('post', 'page', 'attachment');
47
- }
48
-
49
- function get_post_type_objects() {
50
- $types = array();
51
-
52
- //Custom post type support - requires WordPress 3.0 or above (won't work with 2.9 custom post types)
53
- if (function_exists('get_post_types'))
54
- $types = get_post_types(array('public' => true), 'objects');
55
-
56
- /*
57
- if (function_exists('get_post_types'))
58
- $types = suarr::flatten_values(get_post_types(array('public' => true), 'objects'), array('labels', 'name'));
59
- */
60
-
61
- //Legacy support for WordPress 2.9 and below
62
- if (!count($types)) {
63
-
64
- $_types = array(
65
- array('post', __('Posts'), __('Post'))
66
- , array('page', __('Pages'), __('Page'))
67
- , array('attachment', __('Attachments'), __('Attachment'))
68
- );
69
- $types = array();
70
- foreach ($_types as $_type) {
71
- $type = new stdClass();
72
- $type->name = $_type[0];
73
- $type->labels->name = $_type[1];
74
- $type->labels->singular_name = $_type[2];
75
- $types[] = $type;
76
- }
77
- }
78
-
79
- return $types;
80
- }
81
-
82
  function is_tax($taxonomy='', $term='') {
83
  if ($taxonomy) {
84
  switch ($taxonomy) {
@@ -114,33 +65,6 @@ class suwp {
114
  return $taxonomies;
115
  }
116
 
117
- function get_any_terms($args = array()) {
118
- $taxonomies = get_taxonomies(array('public' => true));
119
- return get_terms($taxonomies, $args);
120
- }
121
-
122
- /**
123
- * Loads a webpage and returns its HTML as a string.
124
- *
125
- * @param string $url The URL of the webpage to load.
126
- * @param string $ua The user agent to use.
127
- * @return string The HTML of the URL.
128
- */
129
- function load_webpage($url, $ua) {
130
-
131
- $options = array();
132
- $options['headers'] = array(
133
- 'User-Agent' => $ua
134
- );
135
-
136
- $response = wp_remote_request($url, $options);
137
-
138
- if ( is_wp_error( $response ) ) return false;
139
- if ( 200 != $response['response']['code'] ) return false;
140
-
141
- return trim( $response['body'] );
142
- }
143
-
144
  /**
145
  * Loads an RSS feed and returns it as an object.
146
  *
@@ -179,29 +103,11 @@ class suwp {
179
  function get_edit_term_link($id, $taxonomy) {
180
  $tax_obj = get_taxonomy($taxonomy);
181
  if ($tax_obj->show_ui)
182
- return get_edit_tag_link($id, $taxonomy);
183
  else
184
  return false;
185
  }
186
 
187
- function get_all_the_terms($id = 0) {
188
-
189
- $id = (int)$id;
190
- if (!$id) $id = suwp::get_post_id();
191
- $post = get_post($id);
192
- if (!$post) return false;
193
-
194
- $taxonomies = get_object_taxonomies($post);
195
- $terms = array();
196
-
197
- foreach ($taxonomies as $taxonomy) {
198
- $newterms = get_the_terms($id, $taxonomy);
199
- if ($newterms) $terms = array_merge($terms, $newterms);
200
- }
201
-
202
- return $terms;
203
- }
204
-
205
  function get_term_slug($term_obj) {
206
  $tax_name = $term_obj->taxonomy;
207
  $tax_obj = get_taxonomy($tax_name);
@@ -225,26 +131,6 @@ class suwp {
225
  return $term_slug;
226
  }
227
 
228
- function remove_instance_action($tag, $class, $function, $priority=10) {
229
- return suwp::remove_instance_filter($tag, $class, $function, $priority);
230
- }
231
-
232
- function remove_instance_filter($tag, $class, $function, $priority=10) {
233
- if (isset($GLOBALS['wp_filter'][$tag][$priority]) && count($GLOBALS['wp_filter'][$tag][$priority])) {
234
- foreach ($GLOBALS['wp_filter'][$tag][$priority] as $key => $x) {
235
- if (sustr::startswith($key, $class.$function)) {
236
- unset($GLOBALS['wp_filter'][$tag][$priority][$key]);
237
- if ( empty($GLOBALS['wp_filter'][$tag][$priority]) )
238
- unset($GLOBALS['wp_filter'][$tag][$priority]);
239
- unset($GLOBALS['merged_filters'][$tag]);
240
- return true;
241
- }
242
- }
243
- }
244
-
245
- return false;
246
- }
247
-
248
  function permalink_mode() {
249
  if (strlen($struct = get_option('permalink_structure'))) {
250
  if (sustr::startswith($struct, '/index.php/'))
@@ -262,24 +148,6 @@ class suwp {
262
  return home_url('/');
263
  }
264
 
265
- function get_user_edit_url($user_id) {
266
- if (is_object($user_id)) $user_id = intval($user_id->ID);
267
-
268
- if ( get_current_user_id() == $user_id )
269
- return 'profile.php';
270
- else
271
- return esc_url( add_query_arg( 'wp_http_referer', urlencode( stripslashes( $_SERVER['REQUEST_URI'] ) ), "user-edit.php?user_id=$user_id" ) );
272
- }
273
-
274
- function is_comment_subpage() {
275
- if (is_singular()) {
276
- global $cpage;
277
- return $cpage > 1;
278
- }
279
-
280
- return false;
281
- }
282
-
283
  function get_admin_scope() {
284
  if (is_blog_admin())
285
  return 'blog';
30
  return false;
31
  }
32
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  function is_tax($taxonomy='', $term='') {
34
  if ($taxonomy) {
35
  switch ($taxonomy) {
65
  return $taxonomies;
66
  }
67
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  /**
69
  * Loads an RSS feed and returns it as an object.
70
  *
103
  function get_edit_term_link($id, $taxonomy) {
104
  $tax_obj = get_taxonomy($taxonomy);
105
  if ($tax_obj->show_ui)
106
+ return get_edit_term_link($id, $taxonomy);
107
  else
108
  return false;
109
  }
110
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
111
  function get_term_slug($term_obj) {
112
  $tax_name = $term_obj->taxonomy;
113
  $tax_obj = get_taxonomy($tax_name);
131
  return $term_slug;
132
  }
133
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
134
  function permalink_mode() {
135
  if (strlen($struct = get_option('permalink_structure'))) {
136
  if (sustr::startswith($struct, '/index.php/'))
148
  return home_url('/');
149
  }
150
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
151
  function get_admin_scope() {
152
  if (is_blog_admin())
153
  return 'blog';
includes/tabs.js CHANGED
@@ -44,9 +44,11 @@ jQuery(document).ready(function() {
44
 
45
  function su_hash_form(hash) {
46
  var form = jQuery('#su-admin-form');
47
- var action = form.attr("action").split('#', 1) + hash;
48
- // an older bug pops up with some jQuery version(s), which makes it
49
- // necessary to set the form's action attribute by standard javascript
50
- // node access:
51
- form.get(0).setAttribute("action", action);
 
 
52
  }
44
 
45
  function su_hash_form(hash) {
46
  var form = jQuery('#su-admin-form');
47
+ if (form) {
48
+ var action = form.attr("action").split('#', 1) + hash;
49
+ // an older bug pops up with some jQuery version(s), which makes it
50
+ // necessary to set the form's action attribute by standard javascript
51
+ // node access:
52
+ form.get(0).setAttribute("action", action);
53
+ }
54
  }
modules/404s/fofs-log.php CHANGED
@@ -44,6 +44,9 @@ class SU_FofsLog extends SU_Module {
44
  //Upgrade to new wp_options-only system if needed
45
  function upgrade() {
46
  global $wpdb;
 
 
 
47
  //Get old storage system if it exists
48
  if ($result = @$wpdb->get_results("SELECT * FROM {$wpdb->prefix}sds_hits WHERE status_code=404 AND redirect_url='' AND url NOT LIKE '%/favicon.ico' ORDER BY id DESC", ARRAY_A)) {
49
 
@@ -56,6 +59,8 @@ class SU_FofsLog extends SU_Module {
56
  //Out with the old
57
  mysql_query("DROP TABLE IF EXISTS {$wpdb->prefix}sds_hits");
58
  }
 
 
59
  }
60
 
61
  function queue_admin_scripts() {
44
  //Upgrade to new wp_options-only system if needed
45
  function upgrade() {
46
  global $wpdb;
47
+
48
+ $suppress = $wpdb->suppress_errors(true);
49
+
50
  //Get old storage system if it exists
51
  if ($result = @$wpdb->get_results("SELECT * FROM {$wpdb->prefix}sds_hits WHERE status_code=404 AND redirect_url='' AND url NOT LIKE '%/favicon.ico' ORDER BY id DESC", ARRAY_A)) {
52
 
59
  //Out with the old
60
  mysql_query("DROP TABLE IF EXISTS {$wpdb->prefix}sds_hits");
61
  }
62
+
63
+ $wpdb->suppress_errors($suppress);
64
  }
65
 
66
  function queue_admin_scripts() {
modules/404s/fofs.php CHANGED
@@ -34,10 +34,14 @@ class SU_Fofs extends SU_Module {
34
  <p>You can perform the following actions on each entry in the log:</p>
35
 
36
  <ul>
37
- <li>The &#8220;View&#8221; button will open the URL in a new window. This is useful for testing whether or not a redirect is working.</li>
38
- <li>The &#8220;Google Cache&#8221; button will open Google's archived version of the URL in a new window. This is useful for determining what content, if any, used to be located at that URL.</li>
39
- <li>Once you've taken care of a 404 error, you can click the &#8220;Remove&#8221; button to remove it from the list. The URL will reappear on the list if it triggers a 404 error in the future.</li>
 
 
40
  </ul>
 
 
41
  ", 'seo-ultimate')));
42
 
43
  $screen->add_help_tab(array(
34
  <p>You can perform the following actions on each entry in the log:</p>
35
 
36
  <ul>
37
+ <li>Clicking the first icon will open the URL in a new window. This is useful for testing whether or not a redirect is working.</li>
38
+ <li>Clicking the second icon will open Google's archived version of the URL in a new window. This is useful for determining what content, if any, used to be located at that URL.</li>
39
+ <li>Once you've taken care of a 404 error, you can click the third icon to remove it from the list. The URL will reappear on the list if it triggers a 404 error in the future.</li>
40
+ <li>To view the list of the URLs by which visitors and/or search engines reached this non-existent URL, click the scroll icon in the &#8220;Referers&#8221; column.</li>
41
+ <li>To view the list of visitor browsers and search engine bots which tried to access this non-existent URL, click the scroll icon in the &#8220;User Agents&#8221; column.</li>
42
  </ul>
43
+
44
+ <p>The &#8220;Clear Log&#8221; button will erase all of entries in the log. The log will remain empty until more 404 errors are logged.</p>
45
  ", 'seo-ultimate')));
46
 
47
  $screen->add_help_tab(array(
modules/autolinks/autolinks.css CHANGED
@@ -25,6 +25,14 @@
25
  width: 15em;
26
  }
27
 
 
 
 
 
 
 
 
 
28
  #su-autolinks table.widefat td.su-link-sitewide-lpa {
29
  width: 5em;
30
  }
25
  width: 15em;
26
  }
27
 
28
+ #su-autolinks table.widefat td.su-link-dampen-sitewide-lpa {
29
+ width: 5em;
30
+ }
31
+
32
+ #su-autolinks table.widefat td.su-link-dampen-sitewide-lpa input.textbox {
33
+ width: 4em;
34
+ }
35
+
36
  #su-autolinks table.widefat td.su-link-sitewide-lpa {
37
  width: 5em;
38
  }
modules/autolinks/autolinks.php CHANGED
@@ -9,6 +9,165 @@ if (class_exists('SU_Module')) {
9
 
10
  class SU_Autolinks extends SU_Module {
11
  function get_module_title() { return __('Deeplink Juggernaut', 'seo-ultimate'); }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  }
13
 
14
  }
9
 
10
  class SU_Autolinks extends SU_Module {
11
  function get_module_title() { return __('Deeplink Juggernaut', 'seo-ultimate'); }
12
+
13
+ function add_help_tabs($screen) {
14
+
15
+ $screen->add_help_tab(array(
16
+ 'id' => 'su-autolinks-overview'
17
+ , 'title' => __('Overview', 'seo-ultimate')
18
+ , 'content' => __("
19
+ <ul>
20
+ <li><strong>What it does:</strong> Deeplink Juggernaut lets you automatically generate hyperlinks in your site&#8217;s content and footer.</li>
21
+ <li><strong>Why it helps:</strong> Search engines use the anchor text of hyperlinks to determine the topicality of the webpage to which the link points. Deeplink Juggernaut lets you automatically generate hyperlinks to various pages on your site, which can help increase the linked page&#8217;s ranking for the term used in the anchor text.</li>
22
+ <li><strong>How to use it:</strong> The Content Links section lets you automatically link words or phrases in your site&#8217;s content to a target page of your choosing. The Footer Links section lets you add links in the footer of your entire site or just a particular set of webpages.</li>
23
+ </ul>
24
+ ", 'seo-ultimate')));
25
+
26
+ $screen->add_help_tab(array(
27
+ 'id' => 'su-autolinks-content-links'
28
+ , 'title' => __('Content Links Tab', 'seo-ultimate')
29
+ , 'content' => __("
30
+ <p>To add an autolink, fill in the fields and then click &#8220;Save Changes.&#8221; Once you do so, you can edit your new autolink or add another one.</p>
31
+
32
+ <ul>
33
+ <li><strong>Anchor Text</strong> &mdash; Deeplink Juggernaut will scan your site&#8217;s content for the word or phrase you put in this box, and then hyperlink instances of that word or phrase to the webpage or item you specify in the Destination box. The Anchor Text should be a keyword that you want the Destination page to rank for.</li>
34
+ <li><p><strong>Destination</strong> &mdash; This is the box where you specify the webpage where you want the auto-generated hyperlinks to point.</p>
35
+ <ul>
36
+ <li>To link to a post, page, attachment, category, tag, term, or author on your site, just type in its name and then select it from the dropdown.</li>
37
+ <li>To link to your blog homepage, just type in &#8220;home&#8221; and select &#8220;Blog Homepage&#8221; from the dropdown.</li>
38
+ <li>To link to one of the aliased URLs you created with the Link Mask Generator, just type in part of the original URL or alias URL and then select the link mask from the dropdown.</li>
39
+ <li>To link to some other webpage, just type or paste in its URL in the box.</li>
40
+ </ul>
41
+ </li>
42
+ <li><strong>Title Attribute</strong> &mdash; The link&#8217;s title attribute is the text that will appear when the visitor&#8217;s mouse pointer hovers over the link. Totally optional.</li>
43
+ <li><p><strong>Dampener:</strong> If the anchor text you specify occurs many times throughout your site&#8217;s content, you may wish to reduce the overall frequency with which the anchor text is hyperlinked. You can reduce the autolinking frequency by a percentage with the Dampener field. For example:</p>
44
+ <ul>
45
+ <li>0% dampening will have no effect.</li>
46
+ <li>50% dampening means the anchor text will be autolinked approximately half as often as it otherwise would be.</li>
47
+ <li>90% dampening means the anchor text will be autolinked only 10% as often as it otherwise would be.</li>
48
+ <li>100% dampening means the anchor text won&#8217;t be linked at all.</li>
49
+ </ul>
50
+ <p>The &#8220;Dampener&#8221; column will only appear if you&#8217;ve enabled it under the &#8220;Content Link Settings&#8221; tab.</p>
51
+ </li>
52
+ <li><strong>Nofollow</strong> &mdash; Checking this will add the <code>rel=&quot;nofollow&quot;</code> attribute to all autolinks generated for that anchor text. You should enable this only if you&#8217;re creating an automatic affiliate link.</li>
53
+ <li><strong>New window</strong> &mdash; Checking this will make the link destination open up in a new window when the autolink is clicked.</li>
54
+ <li><strong>Delete</strong> &mdash; To delete an autolink, tick its &#8220;Delete&#8221; checkbox and then click &#8220;Save Changes.&#8221;</li>
55
+ </ul>
56
+ ", 'seo-ultimate')));
57
+
58
+ $screen->add_help_tab(array(
59
+ 'id' => 'su-autolinks-content-link-settings'
60
+ , 'title' => __('Content Link Settings Tab', 'seo-ultimate')
61
+ , 'content' => __("
62
+ <p>The following options are available on the Content Link Settings tab:</p>
63
+
64
+ <ul>
65
+ <li><strong>Add Autolinks to...</strong> &mdash; You can stop Deeplink Juggernaut from adding hyperlinks to the content of items of a given post type by unchecking the post type&#8217;s checkbox.</li>
66
+ <li>
67
+ <p><strong>Self-Linking</strong></p>
68
+ <ul>
69
+ <li><strong>Allow posts to link to themselves</strong> &mdash; This permits Deeplink Juggernaut to add a link to the content of a given post/page even if the link is pointing to the URL of that post/page.</li>
70
+ <li><strong>Allow posts to link to the URL by which the visitor is accessing the post</strong> &mdash; There are lots of URLs by which you can access any given post/page on your site. You can access posts/pages via the homepage URL, your site&#8217;s many archive URLs, or the URLs of the posts/pages themselves. If you have an autolink that points to the homepage, and if Deeplink Juggernaut were to add that link to the content of posts when those posts are accessed from the homepage, then the homepage would be linking to itself. By default, Deeplink Juggernaut won&#8217;t let this happen. But if you&#8217;re okay with that sort of behavior, you can enable it by checking this box.</li>
71
+ </ul>
72
+ </li>
73
+ <li>
74
+ <p><strong>Quantity Restrictions</strong></p>
75
+ <ul>
76
+ <li><strong>Don&#8217;t add any more than ___ autolinks per post/page/etc.</strong> &mdash; Use this option to cap the total number of autolinks (for all anchor texts combined) that can be added to the content of any one item.</li>
77
+ <li><strong>Don&#8217;t link the same anchor text any more than ___ times per post/page/etc.</strong> &mdash; Use this option to cap the number of times that each anchor text can be autolinked in the content of any one item.</li>
78
+ <li><strong>Don&#8217;t link to the same destination any more than ___ times per post/page/etc.</strong> &mdash; Use this option to cap the number of autolinks that any one URL can get within the content of any one item. (This is different from the previous option because you can have multiple anchor texts pointing to the same place.)</li>
79
+ </ul>
80
+ </li>
81
+ <li>
82
+ <p><strong>Additional Dampening Effect</strong></p>
83
+ <ul>
84
+ <li><strong>Globally decrease autolinking frequency by ___%</strong> &mdash; If you have massive amounts of content on your site (e.g. thousands of posts), the &#8220;Quantity Restrictions&#8221; settings may not be sufficient to reign in the number of autolinks being generated. If that is the case, you can use this option to reduce overall autolinking frequency by a given percentage. For example, if you were to set global dampening to 10%, then autolinks would be added only 90% as often as before.</li>
85
+ <li><strong>Add a &#8220;Dampener&#8221; column to the Content Links editor</strong> &mdash; Check this box and click &#8220;Save Changes&#8221; to add a new column to the &#8220;Content Links&#8221; editor table that will let you apply the dampening effect to individual autolinks. If you&#8217;ve also enabled the global dampening option, this will let you override the global value for individual links. (For example, you can disable dampening for just one of your links by setting the Dampener field to 0%.)</li>
86
+ </ul>
87
+ </li>
88
+ <li><strong>Tag Restrictions</strong> &mdash; By default, Deeplink Juggernaut will not autolink a particular anchor text if that anchor text is found in a header or in a code block. You can further customize these exceptions by adding HTML tags to the list.</li>
89
+ <li><strong>Siloing</strong> &mdash; If you enable the siloing feature for a given post type (such as posts or pages), then items of that post type will only be able to autolink to a webpage on your site if it falls within a category, tag, or term shared by that item. For example, you can set it up so that posts in Category A can&#8217;t autolink to anything on your site with the exception of other posts in Category A and the Category A archive. Autolinks to external sites will not be affected, since the siloing setting will not affect autolinks that have a URL in the Destination box.</li>
90
+ <li><strong>CSS Class for Autolinks</strong> &mdash; If you want to apply CSS styling to Content Links generated by Deeplink Juggernaut, type in a class name here (e.g. &#8220;autolink&#8221;).</li>
91
+ </ul>
92
+ ", 'seo-ultimate')));
93
+
94
+ $screen->add_help_tab(array(
95
+ 'id' => 'su-autolinks-footer-links'
96
+ , 'title' => __('Footer Links Tab', 'seo-ultimate')
97
+ , 'content' => __("
98
+ <p>To add a footer link, fill in the fields and then click &#8220;Save Changes.&#8221; Once you do so, you can edit your new footer link or add another one.</p>
99
+
100
+ <ul>
101
+ <li><p><strong>Link Location</strong> &mdash; If you want to add a footer link across your entire site, leave this box blank. Otherwise, type in the location on your site where you want the footer link to appear.</p>
102
+ <p>If you only want the footer link to appear on&hellip;</p>
103
+ <ul>
104
+ <li>&hellip;A particular post, page, attachment, or category/tag/term/author archive, just type in the item&#8217;s name and then select it from the dropdown.</li>
105
+ <li>&hellip;Your blog homepage, just type in &#8220;home&#8221; and select &#8220;Blog Homepage&#8221; from the dropdown.</li>
106
+ <li>&hellip;A particular URL on your site, just type or paste it into the box.</li>
107
+ </ul>
108
+ </li>
109
+ <li><p><strong>Match child content</strong> &mdash; What this does depends on what type of Link Location you specified.</p>
110
+ <ul>
111
+ <li>If the Link Location is a category/tag/term archive, then the footer link will also be added to posts within that term.</li>
112
+ <li>If the Link Location is an author archive, then the footer link will also be added to posts written by that author.</li>
113
+ <li>If the Link Location is a URL, then the footer link will also be added to URLs that begin with whatever URL you entered.</li>
114
+ </ul>
115
+ </li>
116
+ <li><strong>Negative match</strong> &mdash; This will cause the footer link to be inserted on webpages <em>other than</em> the Link Location and (if the appropriate box is checked) its child content.</li>
117
+ <li><strong>Anchor Text</strong> &mdash; Deeplink Juggernaut insert this text into your site&#8217;s footer and will link that text to the webpage or item you specify in the Destination box. The Anchor Text should be a keyword that you want the Destination page to rank for.</li>
118
+ <li><p><strong>Destination</strong> &mdash; This is the box where you specify the webpage where you want the auto-generated hyperlinks to point.</p>
119
+ <ul>
120
+ <li>To link to a post, page, attachment, category, tag, term, or author on your site, just type in its name and then select it from the dropdown.</li>
121
+ <li>To link to your blog homepage, just type in &#8220;home&#8221; and select &#8220;Blog Homepage&#8221; from the dropdown.</li>
122
+ <li>To link to one of the aliased URLs you created with the Link Mask Generator, just type in part of the original URL or alias URL and then select the link mask from the dropdown.</li>
123
+ <li>To link to some other webpage, just type or paste in its URL in the box.</li>
124
+ </ul>
125
+ </li>
126
+ <li><strong>Title Attribute</strong> &mdash; The link&#8217;s title attribute is the text that will appear when the visitor&#8217;s mouse pointer hovers over the link. Totally optional.</li>
127
+ <li><strong>Nofollow</strong> &mdash; Checking this will add the <code>rel=&quot;nofollow&quot;</code> attribute to all instances of this footer link. You should enable this only if you&#8217;re creating an automatic affiliate link.</li>
128
+ <li><strong>New window</strong> &mdash; Checking this will make the link destination open up in a new window when the footer link is clicked.</li>
129
+ <li><strong>Delete</strong> &mdash; To delete an autolink, tick its &#8220;Delete&#8221; checkbox and then click &#8220;Save Changes.&#8221;</li>
130
+ </ul>
131
+ ", 'seo-ultimate')));
132
+
133
+ $screen->add_help_tab(array(
134
+ 'id' => 'su-autolinks-footer-link-settings'
135
+ , 'title' => __('Footer Link Settings Tab', 'seo-ultimate')
136
+ , 'content' => __("
137
+ <p>The following options are available on the Footer Link Settings tab:</p>
138
+
139
+ <ul>
140
+ <li><strong>Link Section Format</strong> &mdash; Lets you customize the text/HTML that will surround the list of links outputted in your site&#8217;s footer (represented by the <code>{links}</code> variable).</li>
141
+ <li><strong>Link Format</strong> &mdash; Lets you specify text or HTML that will surround each individual link (represented by the <code>{link}</code> variable).</li>
142
+ <li><strong>Link Separator</strong> &mdash; Lets you specify text or HTML that will separate each individual link.</li>
143
+ </ul>
144
+ ", 'seo-ultimate')));
145
+
146
+ $screen->add_help_tab(array(
147
+ 'id' => 'su-autolinks-faq'
148
+ , 'title' => __('FAQ', 'seo-ultimate')
149
+ , 'content' => __("
150
+ <ul>
151
+ <li><strong>What happens if I autolink to a post and then delete the post later?</strong><br />Deeplink Juggernaut will disable all autolinks that point to the deleted post. Deeplink Juggernaut will keep the autolink in the list though, so that you can point it somewhere else.</li>
152
+ <li><strong>What happens if I autolink to a draft post?</strong><br />Don&#8217;t worry: Deeplink Juggernaut won&#8217;t actually autolink to it until the post is published.</li>
153
+ <li><strong>Does Deeplink Juggernaut edit my posts&#8217; content as it is stored in the database?</strong><br />No. Autolinks are added dynamically. This means all the autolinks will go away if you disable Deeplink Juggernaut or deactivate SEO Ultimate.</li>
154
+ <li><strong>How does the Dampener work?</strong><br />When the Dampener is in effect, Deeplink Juggernaut creates a hash for each autolink and creates a hash for each post/page/etc. on your site. In order for the autolink to be added to the content of a post/page, the two hashes have to be compatible with each other. If the Dampener is set to 70%, then the hashes will match and the autolink will be applied approximately 30% of the time. This hash system results in a pseudo-random dampening effect that will always have a consistent outcome for any given anchor/post combination.</li>
155
+ <li><strong>Can I still use the Footer Links feature if my theme has a widgetized footer?</strong><br />Yes. Make sure the &#8220;SEO Ultimate Widgets&#8221; module is enabled in the SEO Ultimate <a href='admin.php?page=seo' target='_blank'>Module Manager</a>, then go to your <a href='widgets.php' target='_blank'>Widgets</a> page and add the &#8220;Footer Links&#8221; widget.
156
+ </ul>
157
+ ", 'seo-ultimate')));
158
+
159
+ $screen->add_help_tab(array(
160
+ 'id' => 'su-autolinks-troubleshooting'
161
+ , 'title' => __('Troubleshooting', 'seo-ultimate')
162
+ , 'content' => __("
163
+ <ul>
164
+ <li><strong>I configured a Content Link, but the anchor text isn&#8217;t being linked on my site.</strong><br />You likely enabled a setting on the &#8220;Content Link Settings&#8221; tab that is preventing the autolink from being applied.</li>
165
+ <li><strong>I have Content Links configured for &#8220;widgets&#8221; and &#8220;blue widgets,&#8221; but when the phrase &#8220;blue widgets&#8221; appears on my site, only the word &#8220;widgets&#8221; is being linked. Why is that?</strong><br />Deeplink Juggernaut always links longer anchor texts first, so if this is happening, then the &#8220;blue widgets&#8221; autolink must have been disabled in that particular instance due to a Quantity Restriction or the Dampener effect being applied.</li>
166
+ <li><strong>Why aren&#8217;t my footer links appearing?</strong><br />Check to make sure your theme is <a href='http://johnlamansky.com/wordpress/theme-plugin-hooks/' target='_blank'>plugin-friendly</a>. Also, check the &#8220;Footer Link Settings&#8221; tab and make sure that the &#8220;Link Section Format&#8221; field includes the <code>{links}</code> variable and that the &#8220;Link Format&#8221; field includes the <code>{link}</code> variable.</li>
167
+ </ul>
168
+ ", 'seo-ultimate')));
169
+
170
+ }
171
  }
172
 
173
  }
modules/autolinks/content-autolinks-settings.php CHANGED
@@ -17,13 +17,15 @@ class SU_ContentAutolinksSettings extends SU_Module {
17
  function get_module_subtitle() { return __('Content Link Settings', 'seo-ultimate'); }
18
 
19
  function get_default_settings() {
 
20
  $defaults = array(
21
- 'enable_self_links' => false
 
 
22
  , 'enable_current_url_links' => $this->get_setting('enable_self_links', false)
23
  , 'limit_lpp_value' => 5
24
  , 'limit_lpa_value' => 2
25
  , 'limit_lpu_value' => 1
26
- , 'limit_sitewide_lpa_value' => 50
27
  , 'linkfree_tags' => 'code,pre,kbd,h1,h2,h3,h4,h5,h6'
28
  );
29
 
@@ -40,18 +42,26 @@ class SU_ContentAutolinksSettings extends SU_Module {
40
  , __('Add Autolinks to...', 'seo-ultimate'));
41
 
42
  $this->checkboxes(array(
43
- 'enable_self_links' => __('Allow posts to link to themselves.', 'seo-ultimate')
44
- , 'enable_current_url_links' => __('Allow posts to link to the URL by which the visitor is accessing the post.', 'seo-ultimate')
45
  ), __('Self-Linking', 'seo-ultimate'));
46
 
47
  $this->checkboxes(array(
48
- 'enable_link_limits' => __('Enable per-link customization of quantity limits.', 'seo-ultimate')
49
- , 'limit_lpp' => __('Don&#8217;t add any more than %d autolinks per post/page/etc.', 'seo-ultimate')
50
  , 'limit_lpa' => __('Don&#8217;t link the same anchor text any more than %d times per post/page/etc.', 'seo-ultimate')
51
- , 'limit_sitewide_lpa' => __('Don&#8217;t link the same anchor text any more than %d times across my entire site.', 'seo-ultimate')
52
  , 'limit_lpu' => __('Don&#8217;t link to the same destination any more than %d times per post/page/etc.', 'seo-ultimate')
53
  ), __('Quantity Restrictions', 'seo-ultimate'));
54
 
 
 
 
 
 
 
 
 
 
 
55
  $this->textbox('linkfree_tags', __('Don&#8217;t add autolinks to text within these HTML tags <em>(separate with commas)</em>:', 'seo-ultimate'), $this->get_default_setting('linkfree_tags'), __('Tag Restrictions', 'seo-ultimate'));
56
 
57
  $siloing_checkboxes = array();
17
  function get_module_subtitle() { return __('Content Link Settings', 'seo-ultimate'); }
18
 
19
  function get_default_settings() {
20
+
21
  $defaults = array(
22
+ 'dampen_sitewide_lpa_value' => 50
23
+ , 'enable_perlink_dampen_sitewide_lpa' => ($this->get_setting('enable_link_limits') !== null)
24
+ , 'enable_self_links' => false
25
  , 'enable_current_url_links' => $this->get_setting('enable_self_links', false)
26
  , 'limit_lpp_value' => 5
27
  , 'limit_lpa_value' => 2
28
  , 'limit_lpu_value' => 1
 
29
  , 'linkfree_tags' => 'code,pre,kbd,h1,h2,h3,h4,h5,h6'
30
  );
31
 
42
  , __('Add Autolinks to...', 'seo-ultimate'));
43
 
44
  $this->checkboxes(array(
45
+ 'enable_self_links' => __('Allow posts to link to themselves', 'seo-ultimate')
46
+ , 'enable_current_url_links' => __('Allow posts to link to the URL by which the visitor is accessing the post', 'seo-ultimate')
47
  ), __('Self-Linking', 'seo-ultimate'));
48
 
49
  $this->checkboxes(array(
50
+ 'limit_lpp' => __('Don&#8217;t add any more than %d autolinks per post/page/etc.', 'seo-ultimate')
 
51
  , 'limit_lpa' => __('Don&#8217;t link the same anchor text any more than %d times per post/page/etc.', 'seo-ultimate')
 
52
  , 'limit_lpu' => __('Don&#8217;t link to the same destination any more than %d times per post/page/etc.', 'seo-ultimate')
53
  ), __('Quantity Restrictions', 'seo-ultimate'));
54
 
55
+ $legacy_sitewide_lpa_in_use = $this->plugin->get_module_var('content-autolinks', 'legacy_sitewide_lpa_in_use', false);
56
+ $this->checkboxes(array(
57
+ 'dampen_sitewide_lpa' => __('Globally decrease autolinking frequency by %d%', 'seo-ultimate')
58
+ , 'enable_perlink_dampen_sitewide_lpa' => array(
59
+ 'description' => __('Add a &#8220;Dampener&#8221; column to the Content Links editor to let me customize frequency dampening on a per-link basis', 'seo-ultimate')
60
+ , 'disabled' => $legacy_sitewide_lpa_in_use
61
+ , 'checked' => $legacy_sitewide_lpa_in_use ? true : null
62
+ )
63
+ ), __('Additional Dampening Effect', 'seo-ultimate'));
64
+
65
  $this->textbox('linkfree_tags', __('Don&#8217;t add autolinks to text within these HTML tags <em>(separate with commas)</em>:', 'seo-ultimate'), $this->get_default_setting('linkfree_tags'), __('Tag Restrictions', 'seo-ultimate'));
66
 
67
  $siloing_checkboxes = array();
modules/autolinks/content-autolinks.php CHANGED
@@ -9,6 +9,8 @@ if (class_exists('SU_Module')) {
9
 
10
  class SU_ContentAutolinks extends SU_Module {
11
 
 
 
12
  function get_parent_module() { return 'autolinks'; }
13
  function get_child_order() { return 10; }
14
  function is_independent_module() { return false; }
@@ -23,18 +25,20 @@ class SU_ContentAutolinks extends SU_Module {
23
  add_filter('su_get_postmeta-autolinks', array(&$this, 'get_post_autolinks'), 10, 3);
24
  add_filter('su_custom_update_postmeta-autolinks', array(&$this, 'save_post_autolinks'), 10, 4);
25
 
26
- if ($this->is_action('update'))
27
- add_action('admin_footer', array(&$this, 'outdate_max_post_dates'));
28
- add_action('save_post', array(&$this, 'outdate_max_post_dates'));
29
- $this->cron('update_max_post_dates', 'hourly');
30
-
31
  add_filter('su_get_setting-autolinks-linkfree_tags', array(&$this, 'filter_linkfree_tags'));
 
32
  }
33
 
34
  function filter_linkfree_tags($tags) {
35
  return sustr::preg_filter('a-z0-9,', strtolower($tags));
36
  }
37
 
 
 
 
 
 
 
38
  function autolink_content($content) {
39
 
40
  $links = $this->get_setting('links', array());
@@ -101,8 +105,40 @@ class SU_ContentAutolinks extends SU_Module {
101
 
102
  if (strlen(trim($anchor)) && $to_id !== 0 && $to_id != 'http://') {
103
 
104
- if ($context == 'the_content' && ($this->get_setting('limit_sitewide_lpa', false) || ($this->get_setting('enable_link_limits', false) && $data['sitewide_lpa'] !== false)) && isset($data['max_post_date']) && $data['max_post_date'] !== false && $post && sudate::gmt_to_unix($post->post_date_gmt) > sudate::gmt_to_unix($data['max_post_date']))
105
- continue;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
 
107
  $type = $data['to_type'];
108
 
@@ -201,79 +237,6 @@ class SU_ContentAutolinks extends SU_Module {
201
  return $linkfree_tags;
202
  }
203
 
204
- function outdate_max_post_dates() {
205
- $links = $this->get_setting('links', array());
206
- $new_links = array();
207
- foreach ($links as $link_data) {
208
- $link_data['max_post_date_outdated'] = true;
209
- $new_links[] = $link_data;
210
- }
211
- $this->update_setting('links', $new_links);
212
- }
213
-
214
- function update_max_post_dates() {
215
-
216
- $processing_limit = 1;
217
-
218
- $sitewide_lpa_enabled = $this->get_setting('limit_sitewide_lpa', false);
219
- $sitewide_lpa = intval($this->get_setting('limit_sitewide_lpa_value', false));
220
- $lpp = $this->get_setting('limit_lpp_value', 5); //No need to check limit_lpp, as _autolink_content already does this
221
-
222
- global $wpdb;
223
-
224
- $links = $this->get_setting('links', array());
225
- suarr::vklrsort($links, 'anchor');
226
- $links = array_values($links);
227
-
228
- $new_links = array();
229
-
230
- $i=0;
231
- foreach ($links as $link_data) {
232
-
233
- if ($link_data['max_post_date_outdated'] && $processing_limit > 0) {
234
- $link_data['max_post_date_outdated'] = false;
235
-
236
- if ($this->get_setting('enable_link_limits', false) && isset($link_data['sitewide_lpa']) && $link_data['sitewide_lpa'] !== false)
237
- $link_sitewide_lpa = intval($link_data['sitewide_lpa']);
238
- elseif ($sitewide_lpa_enabled)
239
- $link_sitewide_lpa = $sitewide_lpa;
240
- else
241
- $link_sitewide_lpa = false;
242
-
243
- if ($link_sitewide_lpa !== false) {
244
- $link_data['max_post_date'] = false;
245
-
246
- $posts_with_anchor = $wpdb->get_results( $wpdb->prepare(
247
- "SELECT ID, post_content, post_date_gmt FROM $wpdb->posts WHERE post_status = 'publish' AND LOWER(post_content) LIKE %s ORDER BY post_date_gmt ASC"
248
- , '%' . like_escape(strtolower($link_data['anchor'])) . '%'
249
- ));
250
-
251
- $count = 0;
252
- foreach ($posts_with_anchor as $post_with_anchor) {
253
-
254
- $total_count = 0; //Not used
255
- $link_count = array();
256
- $this->_autolink_content($post_with_anchor->ID, $post_with_anchor->post_content, $links, $lpp, $total_count, $link_count, 1, array(), 'update_max_post_dates');
257
-
258
- $count += $link_count[$i];
259
-
260
- if ($count >= $link_sitewide_lpa) {
261
- $link_data['max_post_date'] = $post_with_anchor->post_date_gmt;
262
- break;
263
- }
264
- }
265
-
266
- $processing_limit--;
267
- }
268
- }
269
-
270
- $new_links[] = $link_data;
271
- $i++;
272
- }
273
-
274
- $this->update_setting('links', $new_links);
275
- }
276
-
277
  function admin_page_init() {
278
  $this->jlsuggest_init();
279
  }
@@ -316,24 +279,37 @@ class SU_ContentAutolinks extends SU_Module {
316
 
317
  $title = stripslashes($_POST["link_{$i}_title"]);
318
 
 
 
 
319
  $sitewide_lpa = sustr::preg_filter('0-9', strval($_POST["link_{$i}_sitewide_lpa"]));
320
  $sitewide_lpa = ($sitewide_lpa === '') ? false : intval($sitewide_lpa);
321
 
322
- $max_post_date = sustr::preg_filter('0-9-: ', strval($_POST["link_{$i}_max_post_date"]));
323
-
324
  $target = empty($_POST["link_{$i}_target"]) ? 'self' : 'blank';
325
 
326
  $nofollow = isset($_POST["link_{$i}_nofollow"]) ? (intval($_POST["link_{$i}_nofollow"]) == 1) : false;
327
  $delete = isset($_POST["link_{$i}_delete"]) ? (intval($_POST["link_{$i}_delete"]) == 1) : false;
328
 
329
  if (!$delete && (strlen($anchor) || $to_id))
330
- $links[] = compact('anchor', 'to_type', 'to_id', 'title', 'sitewide_lpa', 'nofollow', 'target', 'max_post_date');
331
  }
332
  $this->update_setting('links', $links);
333
 
334
  $num_links = count($links);
335
  }
336
 
 
 
 
 
 
 
 
 
 
 
 
 
337
  $guid = substr(md5(time()), 0, 10);
338
 
339
  if ($num_links > 0) {
@@ -347,15 +323,19 @@ class SU_ContentAutolinks extends SU_Module {
347
 
348
  function content_links_form($guid, $start_id = 0, $links, $delete_option = true) {
349
 
350
- $link_limits_enabled = $this->get_setting('enable_link_limits', false, null, true);
351
- $global_sitewide_lpa = $this->get_setting('limit_sitewide_lpa', false, null, true) ? $this->get_setting('limit_sitewide_lpa_value', 50, null, true) : null;
 
 
352
 
353
  //Set headers
354
  $headers = array();
355
  $headers['link-anchor'] = __('Anchor Text', 'seo-ultimate');
356
  $headers['link-to'] = __('Destination', 'seo-ultimate');
357
- $headers['link-title'] = __('Title Attribute', 'seo-ultimate');
358
- if ($link_limits_enabled)
 
 
359
  $headers['link-sitewide-lpa'] = __('Site Cap', 'seo-ultimate');
360
  $headers['link-options'] = __('Options', 'seo-ultimate');
361
  if ($delete_option)
@@ -372,8 +352,8 @@ class SU_ContentAutolinks extends SU_Module {
372
  if (!isset($link['to_id'])) $link['to_id'] = '';
373
  if (!isset($link['to_type'])) $link['to_type'] = 'url';
374
  if (!isset($link['title'])) $link['title'] = '';
 
375
  if (!isset($link['sitewide_lpa'])) $link['sitewide_lpa'] = '';
376
- if (!isset($link['max_post_date'])) $link['max_post_date'] = '';
377
  if (!isset($link['nofollow'])) $link['nofollow'] = false;
378
  if (!isset($link['target'])) $link['target'] = '';
379
 
@@ -385,15 +365,13 @@ class SU_ContentAutolinks extends SU_Module {
385
  $cells['link-to'] = $this->get_jlsuggest_box("link_{$i}_to", $jlsuggest_box_params);
386
  $cells['link-title'] = $this->get_input_element('textbox', "link_{$i}_title", $link['title']);
387
 
388
- if ($link_limits_enabled) {
389
- $cells['link-sitewide-lpa'] = $this->get_input_element('textbox', "link_{$i}_sitewide_lpa", $link['sitewide_lpa'], $global_sitewide_lpa);
390
- $cells['link-options'] = '';
391
- } else
392
- $cells['link-options'] = $this->get_input_element('hidden', "link_{$i}_sitewide_lpa", $link['sitewide_lpa']);
393
 
394
- $cells['link-options'] .= $this->get_input_element('hidden', "link_{$i}_max_post_date", $link['max_post_date']);
 
395
 
396
- $cells['link-options'] .=
397
  $this->get_input_element('checkbox', "link_{$i}_nofollow", $link['nofollow'], str_replace(' ', '&nbsp;', __('Nofollow', 'seo-ultimate')))
398
  .'<br />'
399
  .$this->get_input_element('checkbox', "link_{$i}_target", $link['target'] == 'blank', str_replace(' ', '&nbsp;', __('New window', 'seo-ultimate')));
9
 
10
  class SU_ContentAutolinks extends SU_Module {
11
 
12
+ var $legacy_sitewide_lpa_in_use = false;
13
+
14
  function get_parent_module() { return 'autolinks'; }
15
  function get_child_order() { return 10; }
16
  function is_independent_module() { return false; }
25
  add_filter('su_get_postmeta-autolinks', array(&$this, 'get_post_autolinks'), 10, 3);
26
  add_filter('su_custom_update_postmeta-autolinks', array(&$this, 'save_post_autolinks'), 10, 4);
27
 
 
 
 
 
 
28
  add_filter('su_get_setting-autolinks-linkfree_tags', array(&$this, 'filter_linkfree_tags'));
29
+ add_filter('su_get_setting-autolinks-dampen_sitewide_lpa_value', array(&$this, 'filter_dampen_sitewide_lpa_value'));
30
  }
31
 
32
  function filter_linkfree_tags($tags) {
33
  return sustr::preg_filter('a-z0-9,', strtolower($tags));
34
  }
35
 
36
+ function filter_dampen_sitewide_lpa_value($value) {
37
+ $value = sustr::to_int($value);
38
+ if ($value > 100) $value = 100;
39
+ return $value;
40
+ }
41
+
42
  function autolink_content($content) {
43
 
44
  $links = $this->get_setting('links', array());
105
 
106
  if (strlen(trim($anchor)) && $to_id !== 0 && $to_id != 'http://') {
107
 
108
+ //*** Begin sitewide links-per-anchor dampening effect ***
109
+
110
+ //Get the dampening percentage for this link, but only if per-link values are enabled
111
+ if ($this->get_setting('enable_perlink_dampen_sitewide_lpa', false))
112
+ $link_dswlpa = $data['dampen_sitewide_lpa']; //Should be a number (0 to 100 inclusive) or bool(false)
113
+ else
114
+ $link_dswlpa = false;
115
+
116
+ if (false === $link_dswlpa) { //We need the === operator here so we don't match a zero
117
+
118
+ //There's no per-link value, so get the default, if a default value is specified and enabled
119
+ if ($this->get_setting('dampen_sitewide_lpa', false))
120
+ $link_dswlpa = $this->get_setting('dampen_sitewide_lpa_value', 0);
121
+ else
122
+ $link_dswlpa = false; //Indicates there's neither a per-link value or a default value available
123
+ }
124
+
125
+ if (false !== $link_dswlpa) {
126
+ $link_dswlpa = absint($link_dswlpa);
127
+ if ($link_dswlpa == 0) break;
128
+ if ($link_dswlpa > 100) $link_dswlpa = 100;
129
+
130
+ //Rather than generating a random number, we use the MD5s of the anchor and the post's ID.
131
+ //This gives us a quasi-random dampening effect that will turn out the same way for any given post each time the dampener is applied.
132
+ //We don't want a post's autolinks changing every time the post is viewed.
133
+ $md5starts = array_slice(array_unique(str_split(md5($anchor))), 0, intval(round(16*(1-($link_dswlpa / 100)))));
134
+
135
+ //Only apply this autolink if the MD5 of the post's ID starts with one of the allowed characters
136
+ if (!in_array(substr(md5($id), 0, 1), $md5starts))
137
+ continue; //Don't apply autolink; continue to next item in the $links foreach loop
138
+ }
139
+
140
+ //*** End sitewide LPA dampener ***
141
+
142
 
143
  $type = $data['to_type'];
144
 
237
  return $linkfree_tags;
238
  }
239
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
240
  function admin_page_init() {
241
  $this->jlsuggest_init();
242
  }
279
 
280
  $title = stripslashes($_POST["link_{$i}_title"]);
281
 
282
+ $dampen_sitewide_lpa = sustr::preg_filter('0-9', strval($_POST["link_{$i}_dampen_sitewide_lpa"]));
283
+ $dampen_sitewide_lpa = ($dampen_sitewide_lpa === '') ? false : intval($dampen_sitewide_lpa);
284
+
285
  $sitewide_lpa = sustr::preg_filter('0-9', strval($_POST["link_{$i}_sitewide_lpa"]));
286
  $sitewide_lpa = ($sitewide_lpa === '') ? false : intval($sitewide_lpa);
287
 
 
 
288
  $target = empty($_POST["link_{$i}_target"]) ? 'self' : 'blank';
289
 
290
  $nofollow = isset($_POST["link_{$i}_nofollow"]) ? (intval($_POST["link_{$i}_nofollow"]) == 1) : false;
291
  $delete = isset($_POST["link_{$i}_delete"]) ? (intval($_POST["link_{$i}_delete"]) == 1) : false;
292
 
293
  if (!$delete && (strlen($anchor) || $to_id))
294
+ $links[] = compact('anchor', 'to_type', 'to_id', 'title', 'dampen_sitewide_lpa', 'sitewide_lpa', 'nofollow', 'target');
295
  }
296
  $this->update_setting('links', $links);
297
 
298
  $num_links = count($links);
299
  }
300
 
301
+ $this->legacy_sitewide_lpa_in_use = false;
302
+ foreach ($links as $link) {
303
+ if (isset($link['sitewide_lpa']) && $link['sitewide_lpa']) {
304
+ $this->legacy_sitewide_lpa_in_use = true;
305
+ break;
306
+ }
307
+ }
308
+
309
+ if ($this->legacy_sitewide_lpa_in_use) {
310
+ $this->print_message('warning', __('<strong>Functionality Change Notice:</strong> The &#8220;Site Cap&#8221; feature (which allowed you set a per-link sitewide quantity limit) has been replaced with a more efficient &#8220;Dampener&#8221; feature that lets you reduce autolinking frequency by a percentage. Although the Site Cap feature has been replaced, we retained the &#8220;Site Cap&#8221; column for you in the table below, since it looks like you&#8217;ve used the Site Cap feature in the past. We retained the column to help you remember which links used the old feature, so that you know to which links to apply the new &#8220;Dampener&#8221; feature. Once you&#8217;re done migrating the Site Cap values to Dampener percentages, just clear the &#8220;Site Cap&#8221; boxes to make those boxes (and this message) go away.', 'seo-ultimate'));
311
+ }
312
+
313
  $guid = substr(md5(time()), 0, 10);
314
 
315
  if ($num_links > 0) {
323
 
324
  function content_links_form($guid, $start_id = 0, $links, $delete_option = true) {
325
 
326
+ //Get settings
327
+ $default_dampen_sitewide_lpa = $this->get_setting('dampen_sitewide_lpa', false, null, true)
328
+ ? $this->get_setting('dampen_sitewide_lpa_value', 0, null, true)
329
+ : false;
330
 
331
  //Set headers
332
  $headers = array();
333
  $headers['link-anchor'] = __('Anchor Text', 'seo-ultimate');
334
  $headers['link-to'] = __('Destination', 'seo-ultimate');
335
+ $headers['link-title'] = __('Title Attribute <em>(optional)</em>', 'seo-ultimate');
336
+ if ($this->get_setting('enable_perlink_sitewide_lpa_limit', false) || $this->legacy_sitewide_lpa_in_use)
337
+ $headers['link-dampen-sitewide-lpa'] = __('Dampener', 'seo-ultimate');
338
+ if ($this->legacy_sitewide_lpa_in_use)
339
  $headers['link-sitewide-lpa'] = __('Site Cap', 'seo-ultimate');
340
  $headers['link-options'] = __('Options', 'seo-ultimate');
341
  if ($delete_option)
352
  if (!isset($link['to_id'])) $link['to_id'] = '';
353
  if (!isset($link['to_type'])) $link['to_type'] = 'url';
354
  if (!isset($link['title'])) $link['title'] = '';
355
+ if (!isset($link['dampen_sitewide_lpa'])) $link['dampen_sitewide_lpa'] = '';
356
  if (!isset($link['sitewide_lpa'])) $link['sitewide_lpa'] = '';
 
357
  if (!isset($link['nofollow'])) $link['nofollow'] = false;
358
  if (!isset($link['target'])) $link['target'] = '';
359
 
365
  $cells['link-to'] = $this->get_jlsuggest_box("link_{$i}_to", $jlsuggest_box_params);
366
  $cells['link-title'] = $this->get_input_element('textbox', "link_{$i}_title", $link['title']);
367
 
368
+ if ($this->get_setting('enable_perlink_sitewide_lpa_limit', false) || $this->legacy_sitewide_lpa_in_use)
369
+ $cells['link-dampen-sitewide-lpa'] = $this->get_input_element('textbox', "link_{$i}_dampen_sitewide_lpa", $link['dampen_sitewide_lpa'], $default_dampen_sitewide_lpa) . '%';
 
 
 
370
 
371
+ if ($this->legacy_sitewide_lpa_in_use)
372
+ $cells['link-sitewide-lpa'] = $this->get_input_element('textbox', "link_{$i}_sitewide_lpa", $link['sitewide_lpa']);
373
 
374
+ $cells['link-options'] =
375
  $this->get_input_element('checkbox', "link_{$i}_nofollow", $link['nofollow'], str_replace(' ', '&nbsp;', __('Nofollow', 'seo-ultimate')))
376
  .'<br />'
377
  .$this->get_input_element('checkbox', "link_{$i}_target", $link['target'] == 'blank', str_replace(' ', '&nbsp;', __('New window', 'seo-ultimate')));
modules/autolinks/footer-autolinks.php CHANGED
@@ -166,11 +166,11 @@ class SU_FooterAutolinks extends SU_Module {
166
 
167
  //Set headers
168
  $headers = array(
169
- 'link-from' => __('Link Location (optional)', 'seo-ultimate')
170
  , 'link-from-match' => ''
171
  , 'link-anchor' => __('Anchor Text', 'seo-ultimate')
172
  , 'link-to' => __('Destination', 'seo-ultimate')
173
- , 'link-title' => __('Title Attribute', 'seo-ultimate')
174
  , 'link-options' => __('Options', 'seo-ultimate')
175
  );
176
  if ($delete_option) $headers['link-delete'] = __('Delete', 'seo-ultimate');
166
 
167
  //Set headers
168
  $headers = array(
169
+ 'link-from' => __('Link Location <em>(optional)</em>', 'seo-ultimate')
170
  , 'link-from-match' => ''
171
  , 'link-anchor' => __('Anchor Text', 'seo-ultimate')
172
  , 'link-to' => __('Destination', 'seo-ultimate')
173
+ , 'link-title' => __('Title Attribute <em>(optional)</em>', 'seo-ultimate')
174
  , 'link-options' => __('Options', 'seo-ultimate')
175
  );
176
  if ($delete_option) $headers['link-delete'] = __('Delete', 'seo-ultimate');
modules/canonical/canonical.php CHANGED
@@ -207,20 +207,29 @@ class SU_Canonical extends SU_Module {
207
 
208
  function add_help_tabs($screen) {
209
 
210
- $screen->add_help_tab(array(
211
- 'id' => 'su-canonical-overview'
212
- , 'title' => $this->has_enabled_parent() ? __('Canonicalizer', 'seo-ultimate') : __('Overview', 'seo-ultimate')
213
- , 'content' => __("
214
  <ul>
215
- <li>
216
- <p><strong>What it does:</strong> Canonicalizer improves on two WordPress features to minimize possible exact-content duplication penalties. The <code>&lt;link rel=&quot;canonical&quot; /&gt;</code> tags setting improves on the canonical tags feature of WordPress 2.9 and above by encompassing much more of your site than just your posts and Pages.</p>
217
- <p>The nonexistent pagination redirect feature fills a gap in WordPress's built-in canonicalization functionality: for example, if a URL request is made for page 6 of a category archive, and that category doesn't have a page 6, then by default, depending on the context, WordPress will display a blank page, or it will display the content of the closest page number available, without issuing a 404 error or a 301 redirect (thus creating two or more identical webpages). This duplicate-content situation can happen when you, for example, remove many posts from a category, thus reducing the amount of pagination needed in the category's archive. The Canonicalizer's feature fixes that behavior by issuing 301 redirects to page 1 of the paginated section in question.</p>
218
- </li>
219
- <li><strong>Why it helps:</strong> These features will point Google to the correct URL for your homepage and each of your posts, Pages, categories, tags, date archives, and author archives. That way, if Google comes across an alternate URL by which one of those items can be accessed, it will be able to find the correct URL and won't penalize you for having two identical pages on your site.</li>
220
- <li><strong>How to use it:</strong> Just check all three checkboxes and click Save Changes. SEO Ultimate will do the rest.</li>
221
  </ul>
222
- ", 'seo-ultimate')));
223
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
224
  }
225
  }
226
 
207
 
208
  function add_help_tabs($screen) {
209
 
210
+ $overview = __("
 
 
 
211
  <ul>
212
+ <li><strong>What it does:</strong> Canonicalizer will point Google to the correct URL for your homepage and each of your posts, Pages, categories, tags, date archives, and author archives.</li>
213
+ <li><strong>Why it helps:</strong> If Google comes across an alternate URL by which one of those items can be accessed, it will be able to find the correct URL and won&#8217;t penalize you for having two identical pages on your site.</li>
214
+ <li><strong>How to use it:</strong> Just check the three checkboxes. If your site is accessible using both <code>http://</code> and <code>https://</code>, be sure to set the preferred one under &#8220;Canonical URL Scheme.&#8221;</li>
 
 
 
215
  </ul>
216
+ ", 'seo-ultimate');
217
+
218
+ if ($this->has_enabled_parent()) {
219
+ $screen->add_help_tab(array(
220
+ 'id' => 'su-canonical-help'
221
+ , 'title' => __('Canonicalizer', 'seo-ultimate')
222
+ , 'content' =>
223
+ '<h3>' . __('Overview', 'seo-ultimate') . '</h3>' . $overview
224
+ ));
225
+ } else {
226
+
227
+ $screen->add_help_tab(array(
228
+ 'id' => 'su-canonical-overview'
229
+ , 'title' => __('Overview', 'seo-ultimate')
230
+ , 'content' => $overview));
231
+
232
+ }
233
  }
234
  }
235
 
modules/class.su-module.php CHANGED
@@ -16,7 +16,7 @@ class SU_Module {
16
  var $module_key;
17
 
18
  /**
19
- * Stores the parent module if applicable.
20
  *
21
  * @since 1.5
22
  * @var SU_Module
@@ -24,7 +24,7 @@ class SU_Module {
24
  var $parent_module = null;
25
 
26
  /**
27
- * Stores any child modules.
28
  *
29
  * @since 1.5
30
  * @var array
@@ -327,13 +327,14 @@ class SU_Module {
327
 
328
  /**
329
  * Called under 3 circumstances:
330
- * 1. When the SEO Ultimate plugin is activated
331
  * 2. When a module is newly registered in the database, which can happen for two reasons:
332
- * a. The plugin is activated for the first time
333
  * b. The module has been newly added via a plugin upgrade
334
  * 3. When the module is re-enabled in the Module Manager after being disabled.
335
  *
336
  * Note that this function will be called twice when the plugin is activated for the first time, since this will make #1 and #2 both true.
 
337
  *
338
  * WARNING: Do not use "$this" in the activate() function. It will not work under condition #3. Check for isset($this) and if false, use self:: instead.
339
  *
@@ -401,11 +402,12 @@ class SU_Module {
401
  }
402
 
403
  /**
 
 
404
  * @since 7.0
405
  */
406
  function load_hook() {
407
- if (method_exists('WP_Screen', 'add_help_tab'))
408
- $this->add_help_tabs(get_current_screen());
409
  }
410
 
411
  /**
@@ -458,7 +460,8 @@ class SU_Module {
458
  if ($this->module_key)
459
  return $this->module_key;
460
  else
461
- die(str_rot13('Zbqhyr ybnqrq sebz na rkgreany fbhepr!'));
 
462
  }
463
 
464
  /**
@@ -473,7 +476,11 @@ class SU_Module {
473
  }
474
 
475
  /**
 
 
476
  * @since 7.0
 
 
477
  */
478
  function has_enabled_parent() {
479
  return (strlen($p = $this->get_parent_module()) && $this->plugin->module_exists($p));
@@ -483,9 +490,6 @@ class SU_Module {
483
  * Returns the absolute URL of the module's admin page.
484
  *
485
  * @since 0.7
486
- * @uses get_parent_module()
487
- * @uses get_module_key()
488
- * @uses SEO_Ultimate::key_to_hook()
489
  *
490
  * @param string|false $key The key of the module for which to generate the admin URL. Optional.
491
  * @return string The absolute URL to the admin page.
@@ -777,32 +781,6 @@ class SU_Module {
777
  update_option("seo_ultimate_module_$module", $msdata);
778
  }
779
 
780
- /**
781
- * Adds 1 to the value of an integer setting in the module's settings array.
782
- *
783
- * @since 0.1
784
- * @uses get_setting()
785
- * @uses update_setting()
786
- *
787
- * @param string $key The key of the setting to be incremented.
788
- */
789
- function increment_setting($key) {
790
- $value = $this->get_setting($key);
791
- $this->update_setting($key, $value+1);
792
- }
793
-
794
- /**
795
- * Assigns a value of zero to a setting in the module's settings array.
796
- *
797
- * @since 0.1
798
- * @uses update_setting()
799
- *
800
- * @param string $key The key of the setting to be reset.
801
- */
802
- function reset_setting($key) {
803
- $this->update_setting($key, 0);
804
- }
805
-
806
  /**
807
  * Gets a setting's value, deletes the setting, and returns the value.
808
  *
@@ -835,26 +813,15 @@ class SU_Module {
835
  $msdata = (array)get_option("seo_ultimate_module_$module", array());
836
 
837
  if (isset($msdata[$key])) {
838
- if ($array_key)
839
- unset($msdata[$key][$array_key]);
840
- else
 
841
  unset($msdata[$key]);
 
842
  }
843
  }
844
 
845
- /**
846
- * Updates the value of more than one setting at a time.
847
- *
848
- * @since 0.1
849
- * @uses update_setting()
850
- *
851
- * @param array $settings The names (keys) and values of settings to be updated.
852
- */
853
- function update_settings($settings) {
854
- foreach ($settings as $key => $value)
855
- update_setting($key, $value, null, null);
856
- }
857
-
858
  /**
859
  * Returns a default setting. Only use this function if a default is indeed provided!
860
  *
@@ -1026,7 +993,7 @@ class SU_Module {
1026
  */
1027
  function get_postmeta_edit_tabs($fields) {
1028
 
1029
- $types = suwp::get_post_type_objects();
1030
 
1031
  //Turn the types array into a tabs array
1032
  $tabs = array();
@@ -1547,55 +1514,6 @@ class SU_Module {
1547
  echo "\t</tr>\n";
1548
  }
1549
 
1550
- /**
1551
- * Outputs a <tr> tag with <td> children, and consolidates adjacent, identical <td> elements with the rowspan attribute.
1552
- *
1553
- * @since 2.9
1554
- */
1555
- function table_rows_consolidated($rows, $cols_to_consolidate = 999) {
1556
- $mk = $this->get_module_key();
1557
-
1558
- $rowspans = array();
1559
-
1560
- //Cycle through each row
1561
- foreach ($rows as $rowid => $row) {
1562
-
1563
- echo "<tr>";
1564
-
1565
- //Cycle through the row's cells
1566
- $cellid = 0;
1567
- foreach ($row as $class => $cell) {
1568
-
1569
- //If a rowspan is already in process for this cell...
1570
- if ($rowspans[$cellid] > 1)
1571
- $rowspans[$cellid]--;
1572
- else {
1573
-
1574
- //Find out if we should start a rowspan
1575
- $rowspanhtml = '';
1576
- if ($cellid < $cols_to_consolidate) {
1577
- $rowspan = 1;
1578
- for ($larowid = $rowid+1; $larowid < count($rows); $larowid++) {
1579
- $lacell = $rows[$larowid][$class];
1580
- if (strlen($lacell) && $cell == $lacell) $rowspan++; else break;
1581
- }
1582
-
1583
- if ($rowspan > 1) {
1584
- $rowspans[$cellid] = $rowspan;
1585
- $rowspanhtml = " rowspan='$rowspan'";
1586
- }
1587
- }
1588
-
1589
- echo "<td class='su-$mk-$class'$rowspanhtml>$cell</td>";
1590
- }
1591
-
1592
- $cellid++;
1593
- }
1594
-
1595
- echo "</tr>";
1596
- }
1597
- }
1598
-
1599
  /**
1600
  * Ends a "widefat" WordPress table.
1601
  *
@@ -1639,22 +1557,6 @@ class SU_Module {
1639
  echo "</table></td></tr>";
1640
  }
1641
 
1642
- /**
1643
- * Applies the necessary HTML so that certain content is displayed only when the mouse hovers over the including table row.
1644
- *
1645
- * @since 0.1
1646
- *
1647
- * @param string $text The always-visible text.
1648
- * @param string $hovertext The text that only displays upon row hover.
1649
- * @return string The HTML to put in a hover-supporting table row.
1650
- */
1651
- function hover_row($text, $hovertext, $inline = false) {
1652
- if ($inline)
1653
- return "<span>$text</span>\n<span class='row-actions'> &mdash; $hovertext</span>";
1654
- else
1655
- return "<div>$text</div>\n<div class='row-actions'>$hovertext</div>";
1656
- }
1657
-
1658
  /**
1659
  * Outputs a text block into an admin form.
1660
  *
@@ -1690,13 +1592,20 @@ class SU_Module {
1690
  if ($this->is_action('update')) {
1691
  foreach ($checkboxes as $name => $desc) {
1692
  $new_value = isset($_POST[$name]) ? ($_POST[$name] == '1') : false;
1693
- $this->update_setting($name, $new_value);
1694
 
1695
- if (is_array($desc)) $desc = isset($desc['description']) ? $desc['description'] : '';
 
 
 
 
 
 
 
 
1696
 
1697
  if (strpos($desc, '%d') !== false) {
1698
  $name .= '_value';
1699
- $this->update_setting($name, intval($_POST[$name]));
1700
  }
1701
  }
1702
  }
@@ -1711,28 +1620,33 @@ class SU_Module {
1711
 
1712
  if (is_array($desc)) {
1713
  $indent = isset($desc['indent']) ? $desc['indent'] : false;
 
 
1714
  $desc = $desc['description'];
1715
  } else {
1716
  $indent = false;
 
 
1717
  }
1718
 
1719
- register_setting($this->get_module_key(), $name, 'intval');
1720
  $name = su_esc_attr($name);
1721
 
1722
  if (strpos($desc, '%d') === false) {
1723
  $onclick = '';
1724
  } else {
1725
  $int_var_name = $name.'_value';
1726
- $int_var_value = intval($this->get_setting($int_var_name));
1727
- if ($this->get_setting($name) === true) $disabled = ''; else $disabled = "readonly='readonly' ";
1728
- $desc = str_replace('%d', "</label><input name='$int_var_name' id='$int_var_name' type='text' value='$int_var_value' size='2' maxlength='3' $disabled/><label for='$name'>", $desc);
1729
  $desc = str_replace("<label for='$name'></label>", '', $desc);
1730
  $onclick = " onclick=\"javascript:document.getElementById('$int_var_name').readOnly=!this.checked;\"";
1731
  }
1732
 
1733
  if ($indent) $labelclass = " class='su-indent'"; else $labelclass = '';
1734
  echo "<label for='$name'$labelclass><input name='$name' id='$name' type='checkbox' value='1'";
1735
- if ($this->get_setting($name) === true) echo " checked='checked'";
 
1736
  echo "$onclick /> $desc</label><br />\n";
1737
  }
1738
  }
@@ -1810,7 +1724,6 @@ class SU_Module {
1810
  echo " /> $label";
1811
 
1812
  if (!sustr::has($label, '</label>')) echo '</label>';
1813
- //if (!sustr::has($desc, '</label>')) echo '<br />';
1814
  echo "</div>\n";
1815
  }
1816
  }
@@ -1819,20 +1732,6 @@ class SU_Module {
1819
  echo "</td>\n</tr>\n";
1820
  }
1821
 
1822
- /**
1823
- * Outputs a single radio button into an admin form and saves the set's value into the database after form submission.
1824
- *
1825
- * @since 3.0
1826
- * @uses radiobuttons()
1827
- *
1828
- * @param string $name The name of the set of radio buttons.
1829
- * @param string $value The value of this radio button.
1830
- * @param string $label The label for this radio button.
1831
- */
1832
- function radiobutton($name, $value, $label) {
1833
- $this->radiobuttons($name, array($value => $label));
1834
- }
1835
-
1836
  /**
1837
  * Outputs a dropdown into an admin form and saves the dropdown's value into the database after form submission.
1838
  *
@@ -1888,22 +1787,26 @@ class SU_Module {
1888
 
1889
  if (preg_match($pattern, $label, $matches)) {
1890
  $is_int_field = ($matches[1] == 'd');
1891
- $sfname = $matches[3];
1892
- if (!$sfname) $sfname = $name.'_value';
 
 
1893
 
1894
- if ($this->is_action('update')) {
1895
  $sfvalue = stripslashes($_POST[$sfname]);
1896
- if ($is_int_field) $sfvalue = intval($sfvalue);
1897
- $this->update_setting($sfname, $sfvalue);
1898
- } else {
1899
  $sfvalue = $this->get_setting($sfname);
1900
- if ($is_int_field) $sfvalue = intval($sfvalue);
1901
- }
 
 
 
 
1902
 
1903
  if ($enabled) $disabled = ''; else $disabled = " readonly='readonly'";
1904
 
1905
  $esfvalue = su_esc_attr($sfvalue);
1906
- $field_html = "</label><input class='regular-text textbox subfield' name='$sfname' id='$sfname' type='text' value='$esfvalue'$disabled";
1907
  if ($is_int_field) $field_html .= " size='2' maxlength='3'";
1908
  $field_html .= " /><label for='$name'>";
1909
 
@@ -2595,7 +2498,7 @@ class SU_Module {
2595
 
2596
  global $wp_query;
2597
 
2598
- if (!$id && (is_category() || is_tag() || is_tax()))
2599
  $id = $wp_query->get_queried_object_id();
2600
 
2601
  if (!$id)
16
  var $module_key;
17
 
18
  /**
19
+ * Stores the parent module (an SU_Module object) if this module has a parent.
20
  *
21
  * @since 1.5
22
  * @var SU_Module
24
  var $parent_module = null;
25
 
26
  /**
27
+ * Stores any child modules as an array of SU_Module objects.
28
  *
29
  * @since 1.5
30
  * @var array
327
 
328
  /**
329
  * Called under 3 circumstances:
330
+ * 1. When the SEO Ultimate plugin is activated (not necessarily for the first time)
331
  * 2. When a module is newly registered in the database, which can happen for two reasons:
332
+ * a. The plugin is activated *for the first time*
333
  * b. The module has been newly added via a plugin upgrade
334
  * 3. When the module is re-enabled in the Module Manager after being disabled.
335
  *
336
  * Note that this function will be called twice when the plugin is activated for the first time, since this will make #1 and #2 both true.
337
+ * If the plugin is deactivated and then reactivated, only #1 will be true.
338
  *
339
  * WARNING: Do not use "$this" in the activate() function. It will not work under condition #3. Check for isset($this) and if false, use self:: instead.
340
  *
402
  }
403
 
404
  /**
405
+ * Called at WordPress's load-{page} hook for this module's admin page.
406
+ *
407
  * @since 7.0
408
  */
409
  function load_hook() {
410
+ $this->add_help_tabs(get_current_screen());
 
411
  }
412
 
413
  /**
460
  if ($this->module_key)
461
  return $this->module_key;
462
  else
463
+ //This error will only be triggered if someone has seriously messed with the plugin architecture
464
+ die("An SEO Ultimate module did not initialize properly. Perhaps you're trying to load an SEO Ultimate module independent of the plugin?");
465
  }
466
 
467
  /**
476
  }
477
 
478
  /**
479
+ * Returns true only if this module has a parent AND that parent is enabled.
480
+ *
481
  * @since 7.0
482
+ *
483
+ * @return bool
484
  */
485
  function has_enabled_parent() {
486
  return (strlen($p = $this->get_parent_module()) && $this->plugin->module_exists($p));
490
  * Returns the absolute URL of the module's admin page.
491
  *
492
  * @since 0.7
 
 
 
493
  *
494
  * @param string|false $key The key of the module for which to generate the admin URL. Optional.
495
  * @return string The absolute URL to the admin page.
781
  update_option("seo_ultimate_module_$module", $msdata);
782
  }
783
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
784
  /**
785
  * Gets a setting's value, deletes the setting, and returns the value.
786
  *
813
  $msdata = (array)get_option("seo_ultimate_module_$module", array());
814
 
815
  if (isset($msdata[$key])) {
816
+ if ($array_key) {
817
+ if (isset($msdata[$key][$array_key]))
818
+ unset($msdata[$key][$array_key]);
819
+ } else {
820
  unset($msdata[$key]);
821
+ }
822
  }
823
  }
824
 
 
 
 
 
 
 
 
 
 
 
 
 
 
825
  /**
826
  * Returns a default setting. Only use this function if a default is indeed provided!
827
  *
993
  */
994
  function get_postmeta_edit_tabs($fields) {
995
 
996
+ $types = get_post_types(array('public' => true), 'objects');
997
 
998
  //Turn the types array into a tabs array
999
  $tabs = array();
1514
  echo "\t</tr>\n";
1515
  }
1516
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1517
  /**
1518
  * Ends a "widefat" WordPress table.
1519
  *
1557
  echo "</table></td></tr>";
1558
  }
1559
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1560
  /**
1561
  * Outputs a text block into an admin form.
1562
  *
1592
  if ($this->is_action('update')) {
1593
  foreach ($checkboxes as $name => $desc) {
1594
  $new_value = isset($_POST[$name]) ? ($_POST[$name] == '1') : false;
 
1595
 
1596
+ if (is_array($desc)) {
1597
+ $disabled = isset($desc['disabled']) ? $desc['disabled'] : false;
1598
+ $desc = isset($desc['description']) ? $desc['description'] : '';
1599
+ } else {
1600
+ $disabled = false;
1601
+ }
1602
+
1603
+ if (!$disabled)
1604
+ $this->update_setting($name, $new_value);
1605
 
1606
  if (strpos($desc, '%d') !== false) {
1607
  $name .= '_value';
1608
+ $this->update_setting($name, sustr::to_int($_POST[$name]));
1609
  }
1610
  }
1611
  }
1620
 
1621
  if (is_array($desc)) {
1622
  $indent = isset($desc['indent']) ? $desc['indent'] : false;
1623
+ $disabled = isset($desc['disabled']) ? $desc['disabled'] : false;
1624
+ $checked = isset($desc['checked']) ? $desc['checked'] : null;
1625
  $desc = $desc['description'];
1626
  } else {
1627
  $indent = false;
1628
+ $disabled = false;
1629
+ $checked = null;
1630
  }
1631
 
1632
+ register_setting($this->get_module_key(), $name, array('sustr', 'to_int'));
1633
  $name = su_esc_attr($name);
1634
 
1635
  if (strpos($desc, '%d') === false) {
1636
  $onclick = '';
1637
  } else {
1638
  $int_var_name = $name.'_value';
1639
+ $int_var_value = sustr::to_int($this->get_setting($int_var_name));
1640
+ if ($this->get_setting($name) === true) $sfdisabled = ''; else $sfdisabled = "readonly='readonly' ";
1641
+ $desc = str_replace('%d', "</label><input name='$int_var_name' id='$int_var_name' type='text' value='$int_var_value' size='2' maxlength='3' $sfdisabled/><label for='$name'>", $desc);
1642
  $desc = str_replace("<label for='$name'></label>", '', $desc);
1643
  $onclick = " onclick=\"javascript:document.getElementById('$int_var_name').readOnly=!this.checked;\"";
1644
  }
1645
 
1646
  if ($indent) $labelclass = " class='su-indent'"; else $labelclass = '';
1647
  echo "<label for='$name'$labelclass><input name='$name' id='$name' type='checkbox' value='1'";
1648
+ if ($checked !== false && ($checked === true || $this->get_setting($name) === true)) echo " checked='checked'";
1649
+ if ($disabled) echo " disabled='disabled'";
1650
  echo "$onclick /> $desc</label><br />\n";
1651
  }
1652
  }
1724
  echo " /> $label";
1725
 
1726
  if (!sustr::has($label, '</label>')) echo '</label>';
 
1727
  echo "</div>\n";
1728
  }
1729
  }
1732
  echo "</td>\n</tr>\n";
1733
  }
1734
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1735
  /**
1736
  * Outputs a dropdown into an admin form and saves the dropdown's value into the database after form submission.
1737
  *
1787
 
1788
  if (preg_match($pattern, $label, $matches)) {
1789
  $is_int_field = ($matches[1] == 'd');
1790
+ $sfname = $name.'_value';
1791
+
1792
+ if (isset($matches[3]))
1793
+ $sfname = $matches[3];
1794
 
1795
+ if ($this->is_action('update'))
1796
  $sfvalue = stripslashes($_POST[$sfname]);
1797
+ else
 
 
1798
  $sfvalue = $this->get_setting($sfname);
1799
+
1800
+ if ($is_int_field)
1801
+ $sfvalue = sustr::to_int($sfvalue);
1802
+
1803
+ if ($this->is_action('update'))
1804
+ $this->update_setting($sfname, $sfvalue);
1805
 
1806
  if ($enabled) $disabled = ''; else $disabled = " readonly='readonly'";
1807
 
1808
  $esfvalue = su_esc_attr($sfvalue);
1809
+ $field_html = "</label><input class='textbox subfield' name='$sfname' id='$sfname' type='text' value='$esfvalue'$disabled";
1810
  if ($is_int_field) $field_html .= " size='2' maxlength='3'";
1811
  $field_html .= " /><label for='$name'>";
1812
 
2498
 
2499
  global $wp_query;
2500
 
2501
+ if (!$id && suwp::is_tax())
2502
  $id = $wp_query->get_queried_object_id();
2503
 
2504
  if (!$id)
modules/files/files.php CHANGED
@@ -129,9 +129,9 @@ class SU_Files extends SU_Module {
129
 
130
  function privacy_options_notice() {
131
  global $pagenow;
132
- if ($pagenow == 'options-privacy.php') { //Shows on the "Settings > Privacy" page
133
  $this->print_message('info', sprintf(
134
- __('Please note that your privacy settings won&#8217;t have any effect on your robots.txt file, since you&#8217;re using <a href="%s">a custom one</a>.', 'seo-ultimate'),
135
  admin_url('admin.php?page='.$this->plugin->key_to_hook($this->get_module_key()))
136
  ));
137
  }
129
 
130
  function privacy_options_notice() {
131
  global $pagenow;
132
+ if ($pagenow == 'options-reading.php') { //Shows on the "Settings > Reading" page
133
  $this->print_message('info', sprintf(
134
+ __('Please note that the &#8220;discourage search engines&#8221; setting won&#8217;t have any effect on your robots.txt file, since you&#8217;re using <a href="%s">a custom one</a>.', 'seo-ultimate'),
135
  admin_url('admin.php?page='.$this->plugin->key_to_hook($this->get_module_key()))
136
  ));
137
  }
modules/internal-link-aliases/internal-link-aliases.php CHANGED
@@ -10,11 +10,14 @@ class SU_InternalLinkAliases extends SU_Module {
10
 
11
  function init() {
12
  add_filter('su_custom_update_postmeta-aliases', array(&$this, 'save_post_aliases'), 10, 4);
13
- add_filter('the_content', array(&$this, 'apply_aliases'), 9); //Run before wp_texturize etc.
14
- add_action('template_redirect', array(&$this, 'redirect_aliases'), 0);
15
- add_action('do_robotstxt', array(&$this, 'block_aliases_dir'));
16
- add_action('su_do_robotstxt', array(&$this, 'block_aliases_dir'));
17
  add_filter('su_get_setting-internal-link-aliases-alias_dir', array(&$this, 'filter_alias_dir'));
 
 
 
 
 
 
 
18
  }
19
 
20
  function admin_page_init() {
@@ -25,6 +28,14 @@ class SU_InternalLinkAliases extends SU_Module {
25
 
26
  function get_settings_key() { return 'internal-link-aliases'; }
27
 
 
 
 
 
 
 
 
 
28
  function get_admin_page_tabs() {
29
  return array(
30
  array('id' => 'aliases', 'title' => __('Aliases', 'seo-ultimate'), 'callback' => 'editor_tab')
@@ -86,7 +97,7 @@ class SU_InternalLinkAliases extends SU_Module {
86
  $headers = array(
87
  'alias-from' => __('Actual URL', 'seo-ultimate')
88
  , 'alias-to' => __('Alias URL', 'seo-ultimate')
89
- , 'alias-posts' => __('Only on This Post&hellip; (optional)', 'seo-ultimate')
90
  );
91
  if ($existing_item) $headers['alias-delete'] = __('Delete', 'seo-ultimate');
92
 
@@ -111,8 +122,7 @@ class SU_InternalLinkAliases extends SU_Module {
111
  $alias_dir = $this->get_setting('alias_dir', 'go', null, true);
112
  $alias_url = get_bloginfo('url') . "/$alias_dir/$u_alias_to/";
113
 
114
- if ($existing_item)
115
- $test_link = "<td class='su-alias-to-test'>[<a href='$alias_url' target='_blank'>" . __('Test', 'seo-ultimate') . "</a>]</td>";
116
 
117
  $cells = array(
118
  'alias-from' =>
@@ -141,7 +151,7 @@ class SU_InternalLinkAliases extends SU_Module {
141
  $this->admin_form_table_start();
142
  $this->textbox('alias_dir', __('Alias Directory', 'seo-ultimate'), $this->get_default_setting('alias_dir'));
143
  if ($this->plugin->module_exists('link-nofollow'))
144
- $this->checkbox('nofollow_aliased_links', __('Nofollow aliased links', 'seo-ultimate'), __('Link Attributes', 'seo-ultimate'));
145
  $this->admin_form_table_end();
146
  }
147
 
@@ -306,5 +316,57 @@ class SU_InternalLinkAliases extends SU_Module {
306
  _e('End Link Mask Generator output', 'seo-ultimate');
307
  echo "\n\n";
308
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
309
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
310
  }
10
 
11
  function init() {
12
  add_filter('su_custom_update_postmeta-aliases', array(&$this, 'save_post_aliases'), 10, 4);
 
 
 
 
13
  add_filter('su_get_setting-internal-link-aliases-alias_dir', array(&$this, 'filter_alias_dir'));
14
+
15
+ if (suwp::permalink_mode() == SUWP_PRETTY_PERMALINKS) {
16
+ add_filter('the_content', array(&$this, 'apply_aliases'), 9); //Run before wp_texturize etc.
17
+ add_action('template_redirect', array(&$this, 'redirect_aliases'), 0);
18
+ add_action('do_robotstxt', array(&$this, 'block_aliases_dir'));
19
+ add_action('su_do_robotstxt', array(&$this, 'block_aliases_dir'));
20
+ }
21
  }
22
 
23
  function admin_page_init() {
28
 
29
  function get_settings_key() { return 'internal-link-aliases'; }
30
 
31
+ function admin_page_contents() {
32
+
33
+ if (suwp::permalink_mode() != SUWP_PRETTY_PERMALINKS)
34
+ $this->print_message('error', sprintf(__('Link Mask Generator won&#8217;t work with default or &#8220;pathinfo&#8221; permalinks. Please change your <a href="%s">permalink structure</a> to enable this module&#8217;s functionality.', 'seo-ultimate'), 'options-permalink.php'));
35
+
36
+ $this->children_admin_page_tabs_form();
37
+ }
38
+
39
  function get_admin_page_tabs() {
40
  return array(
41
  array('id' => 'aliases', 'title' => __('Aliases', 'seo-ultimate'), 'callback' => 'editor_tab')
97
  $headers = array(
98
  'alias-from' => __('Actual URL', 'seo-ultimate')
99
  , 'alias-to' => __('Alias URL', 'seo-ultimate')
100
+ , 'alias-posts' => __('Only on This Post&hellip; <em>(optional)</em>', 'seo-ultimate')
101
  );
102
  if ($existing_item) $headers['alias-delete'] = __('Delete', 'seo-ultimate');
103
 
122
  $alias_dir = $this->get_setting('alias_dir', 'go', null, true);
123
  $alias_url = get_bloginfo('url') . "/$alias_dir/$u_alias_to/";
124
 
125
+ $test_link = $existing_item ? "<td class='su-alias-to-test'>[<a href='$alias_url' target='_blank'>" . __('Test', 'seo-ultimate') . "</a>]</td>" : '';
 
126
 
127
  $cells = array(
128
  'alias-from' =>
151
  $this->admin_form_table_start();
152
  $this->textbox('alias_dir', __('Alias Directory', 'seo-ultimate'), $this->get_default_setting('alias_dir'));
153
  if ($this->plugin->module_exists('link-nofollow'))
154
+ $this->checkbox('nofollow_aliased_links', __('Nofollow masked links', 'seo-ultimate'), __('Link Attributes', 'seo-ultimate'));
155
  $this->admin_form_table_end();
156
  }
157
 
316
  _e('End Link Mask Generator output', 'seo-ultimate');
317
  echo "\n\n";
318
  }
319
+
320
+
321
+ function add_help_tabs($screen) {
322
+
323
+ $screen->add_help_tab(array(
324
+ 'id' => 'su-internal-link-aliases-overview'
325
+ , 'title' => __('Overview', 'seo-ultimate')
326
+ , 'content' => __("
327
+ <ul>
328
+ <li><strong>What it does:</strong> Link Mask Generator lets you replace ugly affiliate links with clean-looking link aliases that redirect to the real URLs. Link Mask Generator will scan your posts for the links to the actual URLs and replace them with links to the alias URLs. When a visitor clicks on the link to the alias URL, Link Mask Generator will redirect the visitor to the actual URL.</li>
329
+ <li><strong>Why it helps:</strong> This type of functionality is a staple in an affiliate marketer&#8217;s toolkit. Link Mask Generator helps you by doing it in an SEO-friendly way: by funneling your affiliate links through a directory (e.g. <code>/go/</code>) which is blocked with <code>robots.txt</code> rules, effectively sealing off link juice flow to your affiliate links.</li>
330
+ <li><strong>How to use it:</strong> Type in the real URL, type in an alias URL, and click &#8220;Save Changes&#8221; &mdash; that&#8217;s it!</li>
331
+ </ul>
332
+ ", 'seo-ultimate')));
333
+
334
+ $screen->add_help_tab(array(
335
+ 'id' => 'su-internal-link-aliases-aliases'
336
+ , 'title' => __('Aliases Tab', 'seo-ultimate')
337
+ , 'content' => __("
338
+ <p>To add a link alias, fill in the fields and then click &#8220;Save Changes.&#8221; Once you do so, you can edit your newly masked link or add another one.</p>
339
+
340
+ <ul>
341
+ <li><strong>Actual URL</strong> &mdash; This box is where you put your affiliate URL (or other URL that you want to mask).</li>
342
+ <li><strong>Alias URL</strong> &mdash; This box is where you specify the new URL that will replace the actual one.</li>
343
+ <li><strong>Only on This Post</strong> &mdash; If you want to mask the actual URL across your entire site, leave this box blank. If you only want to mask the actual URL within an individual post, then type its name into this box and select it from the dropdown.</li>
344
+ <li><strong>Delete</strong> &mdash; To delete a link mask, tick its &#8220;Delete&#8221; checkbox and then click &#8220;Save Changes.&#8221;</li>
345
+ </ul>
346
+ ", 'seo-ultimate')));
347
+
348
+ $screen->add_help_tab(array(
349
+ 'id' => 'su-internal-link-aliases-settings'
350
+ , 'title' => __('Settings Tab', 'seo-ultimate')
351
+ , 'content' => __("
352
+ <p>The following options are available on the Settings tab:</p>
353
 
354
+ <ul>
355
+ <li><strong>Alias Directory</strong> &mdash; If you&#8217;d like, you can change the name of the directory that contains all your alias URLs. (Don&#8217;t worry, you won&#8217;t break any links by changing this.)</li>
356
+ <li><strong>Nofollow masked links</strong> &mdash; Checking this will add the <code>rel=&quot;nofollow&quot;</code> attribute to any masked links on your site. This makes it super-easy to nofollow all your affiliate links automatically.</li>
357
+ </ul>
358
+ ", 'seo-ultimate')));
359
+
360
+ $screen->add_help_tab(array(
361
+ 'id' => 'su-autolinks-faq'
362
+ , 'title' => __('FAQ', 'seo-ultimate')
363
+ , 'content' => __("
364
+ <ul>
365
+ <li><strong>Can I automatically link a phrase on my site to one of my alias URLs?</strong><br />Yes. Once you&#8217;ve created your link mask, go to Deeplink Juggernaut&#8217;s &#8220;Content Links&#8221; section, type the contents of your link mask&#8217;s &#8220;Alias URL&#8221; field into Deeplink Juggernaut&#8217;s &#8220;Destination&#8221; field, and select your link mask from the dropdown that appears.</li>
366
+ <li><strong>Will Link Mask Generator still add the <code>robots.txt</code> rules if I&#8217;m using the File Editor module to create a custom <code>robots.txt</code>?</strong><br />Yes.</li>
367
+ </ul>
368
+ ", 'seo-ultimate')));
369
+
370
+ }
371
+
372
  }
modules/meta/meta-descriptions.php CHANGED
@@ -200,13 +200,13 @@ class SU_MetaDescriptions extends SU_Module {
200
  ", 'seo-ultimate')));
201
 
202
  $screen->add_help_tab(array(
203
- 'id' => 'su-meta-descriptions-settings'
204
- , 'title' => __('Settings Help', 'seo-ultimate')
205
  , 'content' => __("
206
  <p>Here&#8217;s information on the various settings:</p>
207
 
208
  <ul>
209
- <li><strong>Blog Homepage Meta Description</strong> &mdash; When your blog homepage appears in search results, it&#8217;ll have a title and a description. When you insert content into the description field below, the Meta Editor will add code to your blog homepage (the <code>&lt;meta name=&quot;description&quot; /&gt;</code> tag) that asks search engines to use what you&#8217;ve entered as the homepage&#8217;s search results description.</li>
210
  <li><strong>Use this blog&#8217;s tagline as the default homepage description.</strong> &mdash; If this box is checked and if the Blog Homepage Meta Description field is empty, Meta Editor will use your blog&#8217;s tagline as the meta description. You can edit the blog&#8217;s tagline under <a href='options-general.php'>Settings &rArr; General</a>.</li>
211
  </ul>
212
  ", 'seo-ultimate')));
@@ -216,7 +216,7 @@ class SU_MetaDescriptions extends SU_Module {
216
  , 'title' => __('FAQ', 'seo-ultimate')
217
  , 'content' => __("
218
  <ul>
219
- <li><strong>How do I edit the meta description of my homepage?</strong><br />If you are using a &#8220;blog homepage&#8221; (the default option of showing your blog posts on your homepage), just use the Blog Homepage field. If you have configured your <a href='options-reading.php'>Settings &rArr; Reading</a> section to use a &#8220;frontpage&#8221; (i.e. a Page as your homepage), just edit that Page&#8217;s meta description on the &#8220;Pages&#8221; tab.</li>
220
  </ul>
221
  ", 'seo-ultimate')));
222
 
@@ -228,7 +228,7 @@ class SU_MetaDescriptions extends SU_Module {
228
  <li>
229
  <p><strong>What do I do if my site has multiple meta tags?</strong><br />First, try removing your theme&#8217;s built-in meta tags if it has them. Go to <a href='theme-editor.php' target='_blank'>Appearance &rArr; Editor</a> and edit <code>header.php</code>. Delete or comment-out any <code>&lt;meta&gt;</code> tags.</p>
230
  <p>If the problem persists, try disabling other SEO plugins that may be generating meta tags.</p>
231
- <p>Troubleshooting tip: Go to <a href='options-general.php?page=seo-ultimate'>Settings &rArr; SEO Ultimate</a> and enable the &#8220;Insert comments around HTML code insertions&#8221; option. This will mark SEO Ultimate&#8217;s meta tags with comments, allowing you to see which meta tags are generated by SEO Ultimate and which aren&#8217;t.</p>
232
  </li>
233
  </ul>
234
  ", 'seo-ultimate')));
200
  ", 'seo-ultimate')));
201
 
202
  $screen->add_help_tab(array(
203
+ 'id' => 'su-meta-descriptions-blog-homepage'
204
+ , 'title' => __('Blog Homepage Tab', 'seo-ultimate')
205
  , 'content' => __("
206
  <p>Here&#8217;s information on the various settings:</p>
207
 
208
  <ul>
209
+ <li><strong>Blog Homepage Meta Description</strong> &mdash; When your blog homepage appears in search results, it&#8217;ll have a title and a description. When you type a description into this box, the Meta Editor will add code to your blog homepage (the <code>&lt;meta name=&quot;description&quot; /&gt;</code> tag) that asks search engines to use what you&#8217;ve entered as the homepage&#8217;s search results description.</li>
210
  <li><strong>Use this blog&#8217;s tagline as the default homepage description.</strong> &mdash; If this box is checked and if the Blog Homepage Meta Description field is empty, Meta Editor will use your blog&#8217;s tagline as the meta description. You can edit the blog&#8217;s tagline under <a href='options-general.php'>Settings &rArr; General</a>.</li>
211
  </ul>
212
  ", 'seo-ultimate')));
216
  , 'title' => __('FAQ', 'seo-ultimate')
217
  , 'content' => __("
218
  <ul>
219
+ <li><strong>How do I edit the meta description of my homepage?</strong><br />If you have configured your <a href='options-reading.php'>Settings &rArr; Reading</a> section to use a &#8220;front page&#8221; and/or a &#8220;posts page,&#8221; just edit those pages&#8217;s meta descriptions on the &#8220;Pages&#8221; tab. Otherwise, just use the Blog Homepage field.</li>
220
  </ul>
221
  ", 'seo-ultimate')));
222
 
228
  <li>
229
  <p><strong>What do I do if my site has multiple meta tags?</strong><br />First, try removing your theme&#8217;s built-in meta tags if it has them. Go to <a href='theme-editor.php' target='_blank'>Appearance &rArr; Editor</a> and edit <code>header.php</code>. Delete or comment-out any <code>&lt;meta&gt;</code> tags.</p>
230
  <p>If the problem persists, try disabling other SEO plugins that may be generating meta tags.</p>
231
+ <p>Troubleshooting tip: Go to <a href='options-general.php?page=seo-ultimate'>Settings &rArr; SEO Ultimate</a> and enable the &#8220;Identify the plugin&#8217;s HTML code insertions with HTML comment tags&#8221; option. This will mark SEO Ultimate&#8217;s meta tags with comments, allowing you to see which meta tags are generated by SEO Ultimate and which aren&#8217;t.</p>
232
  </li>
233
  </ul>
234
  ", 'seo-ultimate')));
modules/meta/meta-keywords.php CHANGED
@@ -57,7 +57,7 @@ class SU_MetaKeywords extends SU_Module {
57
  function defaults_tab() {
58
  $this->admin_form_table_start();
59
 
60
- $posttypenames = suwp::get_post_type_names();
61
  foreach ($posttypenames as $posttypename) {
62
  $posttype = get_post_type_object($posttypename);
63
  $posttypelabel = $posttype->labels->name;
@@ -135,7 +135,12 @@ class SU_MetaKeywords extends SU_Module {
135
  } elseif (suwp::is_tax()) {
136
  global $wp_query;
137
  $tax_keywords = $this->get_setting('taxonomy_keywords');
138
- $kw = $tax_keywords[$wp_query->get_queried_object_id()];
 
 
 
 
 
139
  }
140
 
141
  if ($globals = $this->get_setting('global_keywords')) {
@@ -172,15 +177,23 @@ class SU_MetaKeywords extends SU_Module {
172
  'id' => 'su-meta-keywords-overview'
173
  , 'title' => __('Overview', 'seo-ultimate')
174
  , 'content' => __("
175
- <p>Meta Keywords Editor lets you tell search engines what keywords are associated with the various pages on your site. Modern search engines don&#8217;t give meta keywords much weight, but the option is there if you want to use it. You can customize the meta keywords of an individual post or page by using the textboxes that Meta Editor adds to the post/page editors.</p>
 
 
 
 
 
 
 
 
 
176
  ", 'seo-ultimate')));
177
 
178
  $screen->add_help_tab(array(
179
- 'id' => 'su-meta-keywords-settings'
180
- , 'title' => __('Settings Help', 'seo-ultimate')
181
  , 'content' => __("
182
  <ul>
183
- <li><strong>Sitewide Keywords</strong> &mdash; Here you can enter keywords that describe the overall subject matter of your entire blog. Use ommas to separate keywords. These keywords will be put in the <code>&gt;meta name=&quot;keywords&quot; /&gt;</code> tags of all webpages on the site (homepage, posts, pages, archives, etc.).</li>
184
  <li><strong>Blog Homepage Meta Keywords</strong> &mdash; These keywords will be applied only to the <em>blog</em> homepage. Note that if you&#8217;ve specified a &#8220;front page&#8221; under <a href='options-reading.php'>Settings &rArr; Reading</a>, you&#8217;ll need to edit your frontpage and set your frontpage keywords there.</li>
185
  </ul>
186
  ", 'seo-ultimate')));
@@ -190,10 +203,7 @@ class SU_MetaKeywords extends SU_Module {
190
  , 'title' => __('FAQ', 'seo-ultimate')
191
  , 'content' => __("
192
  <ul>
193
- <li>
194
- <p><strong>How do I edit the meta keywords of my homepage?</strong><br />If you are using a &#8220;blog homepage&#8221; (the default option of showing your blog posts on your homepage), just use the Blog Homepage field.</p>
195
- <p>If you have configured your <a href='options-reading.php'>Settings &rArr; Reading</a> section to use a &#8220;frontpage&#8221; (i.e. a Page as your homepage), just edit that Page and use the &#8220;Meta Keywords&#8221; field in the &#8220;SEO Settings&#8221; box.</p>
196
- </li>
197
  <li><strong>What happens if I add a global keyword that I previously assigned to individual posts or pages?</strong><br />Don&#8217;t worry; Meta Keywords Editor will remove duplicate keywords automatically.</li>
198
  </ul>
199
  ", 'seo-ultimate')));
57
  function defaults_tab() {
58
  $this->admin_form_table_start();
59
 
60
+ $posttypenames = get_post_types(array('public' => true), 'names');
61
  foreach ($posttypenames as $posttypename) {
62
  $posttype = get_post_type_object($posttypename);
63
  $posttypelabel = $posttype->labels->name;
135
  } elseif (suwp::is_tax()) {
136
  global $wp_query;
137
  $tax_keywords = $this->get_setting('taxonomy_keywords');
138
+
139
+ $term_id = $wp_query->get_queried_object_id();
140
+ if (isset($tax_keywords[$term_id]))
141
+ $kw = $tax_keywords[$term_id];
142
+ else
143
+ $kw = '';
144
  }
145
 
146
  if ($globals = $this->get_setting('global_keywords')) {
177
  'id' => 'su-meta-keywords-overview'
178
  , 'title' => __('Overview', 'seo-ultimate')
179
  , 'content' => __("
180
+ <p>Meta Keywords Editor lets you tell search engines what keywords are associated with the various pages on your site. Modern search engines don&#8217;t give meta keywords much weight, if any at all, but the option is there if you want to use it.</p>
181
+ ", 'seo-ultimate')));
182
+
183
+ $screen->add_help_tab(array(
184
+ 'id' => 'su-meta-keywords-global'
185
+ , 'title' => __('Sitewide Settings Tab', 'seo-ultimate')
186
+ , 'content' => __("
187
+ <ul>
188
+ <li><strong>Sitewide Keywords</strong> &mdash; Here you can enter keywords that describe the overall subject matter of your entire blog. Use commas to separate keywords. These keywords will be put in the <code>&gt;meta name=&quot;keywords&quot; /&gt;</code> tags of all webpages on the site (homepage, posts, pages, archives, etc.).</li>
189
+ </ul>
190
  ", 'seo-ultimate')));
191
 
192
  $screen->add_help_tab(array(
193
+ 'id' => 'su-meta-keywords-home'
194
+ , 'title' => __('Blog Homepage Tab', 'seo-ultimate')
195
  , 'content' => __("
196
  <ul>
 
197
  <li><strong>Blog Homepage Meta Keywords</strong> &mdash; These keywords will be applied only to the <em>blog</em> homepage. Note that if you&#8217;ve specified a &#8220;front page&#8221; under <a href='options-reading.php'>Settings &rArr; Reading</a>, you&#8217;ll need to edit your frontpage and set your frontpage keywords there.</li>
198
  </ul>
199
  ", 'seo-ultimate')));
203
  , 'title' => __('FAQ', 'seo-ultimate')
204
  , 'content' => __("
205
  <ul>
206
+ <li><strong>How do I edit the meta keywords of my homepage?</strong><br />If you have configured your <a href='options-reading.php'>Settings &rArr; Reading</a> section to use a &#8220;front page&#8221; and/or a &#8220;posts page,&#8221; just edit those pages&#8217;s meta keywords on the &#8220;Pages&#8221; tab. Otherwise, just use the Blog Homepage field.</li>
 
 
 
207
  <li><strong>What happens if I add a global keyword that I previously assigned to individual posts or pages?</strong><br />Don&#8217;t worry; Meta Keywords Editor will remove duplicate keywords automatically.</li>
208
  </ul>
209
  ", 'seo-ultimate')));
modules/meta/meta-robots.php CHANGED
@@ -57,43 +57,43 @@ class SU_MetaRobots extends SU_Module {
57
  <li><strong>How to use it:</strong> Adjust the settings as desired, and then click Save Changes. You can refer to the &#8220;Settings Help&#8221; tab for information on the settings available. You can also use the editor tabs to deindex individual content items on your site as well as enable the &#8220;nofollow&#8221; meta parameter that will nullify all outgoing links on a specific webpage.</li>
58
  </ul>
59
  ", 'seo-ultimate')));
60
-
61
- $screen->add_help_tab(array(
62
- 'id' => 'su-meta-robots-settings'
63
- , 'title' => __('Settings Help', 'seo-ultimate')
64
- , 'content' => __("
65
- <p>Here&#8217;s information on the various settings:</p>
66
-
67
  <ul>
68
- <li>
69
- <strong>Global: Spider Instructions</strong>
70
- <ul>
71
- <li><strong>Don't use this site's Open Directory / Yahoo! Directory description in search results.</strong> &mdash; If your site is listed in the <a href='http://www.dmoz.org/' target='_blank'>Open Directory (DMOZ)</a> or the <a href='http://dir.yahoo.com/' target='_blank'>Yahoo! Directory</a>, some search engines may use your directory listing as the meta description. These boxes tell search engines not to do that and will give you full control over your meta descriptions. These settings have no effect if your site isn&#8217;t listed in the Open Directory or Yahoo! Directory respectively.</li>
72
- <li>Don&#8217;t cache or archive this site.</li> &mdash; When you check this box, Meta Editor will ask search engines (Google, Yahoo!, Bing, etc.) and archivers (Archive.org, etc.) to <em>not</em> make cached or archived &#8220;copies&#8221; of your site.</li>
73
- </ul>
74
- </li>
75
- <li>
76
- <strong>Default Values: Prevent indexing of...</strong>
77
- <ul>
78
- <li><strong>Administration back-end pages</strong> &mdash; Tells spiders not to index the administration area (the part you&#8217;re in now), in the unlikely event a spider somehow gains access to the administration. Recommended.</li>
79
- <li><strong>Author archives</strong> &mdash; Tells spiders not to index author archives. Useful if your blog only has one author.</li>
80
- <li><strong>Blog search pages</strong> &mdash; Tells spiders not to index the result pages of WordPress's blog search function. Recommended.</li>
81
- <li><strong>Category archives</strong> &mdash; Tells spiders not to index category archives. Recommended only if you don't use categories.</li>
82
- <li><strong>Comment feeds</strong> &mdash; Tells spiders not to index the RSS feeds that exist for every post's comments. (These comment feeds are totally separate from your normal blog feeds.)</li>
83
- <li><strong>Comment subpages</strong> &mdash; Tells spiders not to index posts' comment subpages.</li>
84
- <li><strong>Date-based archives</strong> &mdash; Tells spiders not to index day/month/year archives. Recommended, since these pages have little keyword value.</li>
85
- <li><strong>Subpages of the homepage</strong> &mdash; Tells spiders not to index the homepage's subpages (page 2, page 3, etc). Recommended.</li>
86
- <li><strong>Tag archives</strong> &mdash; Tells spiders not to index tag archives. Recommended only if you don't use tags.</li>
87
- <li>User login/registration pages</strong> &mdash; Tells spiders not to index WordPress's user login and registration pages. Recommended.</li>
88
- </ul>
89
- </li>
90
- <li>
91
- <strong>Editor Tabs (Posts/Pages/etc.)</strong>
92
- <ul>
93
- <li><strong>Noindex</strong> &mdash; Checking this for an item will ask search engines to remove that item&#8217;s webpage from their indices. Use this to remove pages that you don&#8217;t want showing up in search results (such as a Privacy Policy page, for example).</li>
94
- <li><strong>Nofollow</strong> &mdash; Checking this for an item will tell search engines to ignore the links to other webpages that are on that item&#8217;s webpage. Note: this is page-level &#8220;meta nofollow,&#8221; not to be confused with link-level &#8220;rel nofollow.&#8221;</li>
95
- </ul>
96
- </li>
 
 
97
  </ul>
98
  ", 'seo-ultimate')));
99
 
@@ -110,7 +110,6 @@ class SU_MetaRobots extends SU_Module {
110
  </ul>
111
  ", 'seo-ultimate')));
112
 
113
-
114
  }
115
  }
116
 
57
  <li><strong>How to use it:</strong> Adjust the settings as desired, and then click Save Changes. You can refer to the &#8220;Settings Help&#8221; tab for information on the settings available. You can also use the editor tabs to deindex individual content items on your site as well as enable the &#8220;nofollow&#8221; meta parameter that will nullify all outgoing links on a specific webpage.</li>
58
  </ul>
59
  ", 'seo-ultimate')));
60
+
61
+ $screen->add_help_tab(array(
62
+ 'id' => 'su-meta-robots-global'
63
+ , 'title' => __('Sitewide Settings Tab', 'seo-ultimate')
64
+ , 'content' => __("
 
 
65
  <ul>
66
+ <li><strong>Don&#8217;t use this site&#8217;s Open Directory / Yahoo! Directory description in search results</strong> &mdash; If your site is listed in the <a href='http://www.dmoz.org/' target='_blank'>Open Directory (DMOZ)</a> or the <a href='http://dir.yahoo.com/' target='_blank'>Yahoo! Directory</a>, some search engines may use your directory listing as the meta description. These boxes tell search engines not to do that and will give you full control over your meta descriptions. These settings have no effect if your site isn&#8217;t listed in the Open Directory or Yahoo! Directory respectively.</li>
67
+ <li><strong>Don&#8217;t cache or archive this site</strong> &mdash; When you check this box, Meta Editor will ask search engines (Google, Yahoo!, Bing, etc.) and archivers (Archive.org, etc.) to <em>not</em> make cached or archived &#8220;copies&#8221; of your site.</li>
68
+ </ul>
69
+ ", 'seo-ultimate')));
70
+
71
+ $screen->add_help_tab(array(
72
+ 'id' => 'su-meta-robots-defaults'
73
+ , 'title' => __('Default Values Tab', 'seo-ultimate')
74
+ , 'content' => __("
75
+ <p><strong>Prevent indexing of&hellip;</strong></p>
76
+ <ul>
77
+ <li><strong>Administration back-end pages</strong> &mdash; Tells spiders not to index the administration area (the part you&#8217;re in now), in the unlikely event a spider somehow gains access to the administration. Recommended.</li>
78
+ <li><strong>Author archives</strong> &mdash; Tells spiders not to index author archives. Useful if your blog only has one author.</li>
79
+ <li><strong>Blog search pages</strong> &mdash; Tells spiders not to index the result pages of WordPress's blog search function. Recommended.</li>
80
+ <li><strong>Category archives</strong> &mdash; Tells spiders not to index category archives. Recommended only if you don't use categories.</li>
81
+ <li><strong>Comment feeds</strong> &mdash; Tells spiders not to index the RSS feeds that exist for every post's comments. (These comment feeds are totally separate from your normal blog feeds.)</li>
82
+ <li><strong>Comment subpages</strong> &mdash; Tells spiders not to index posts' comment subpages.</li>
83
+ <li><strong>Date-based archives</strong> &mdash; Tells spiders not to index day/month/year archives. Recommended, since these pages have little keyword value.</li>
84
+ <li><strong>Subpages of the homepage</strong> &mdash; Tells spiders not to index the homepage's subpages (page 2, page 3, etc). Recommended.</li>
85
+ <li><strong>Tag archives</strong> &mdash; Tells spiders not to index tag archives. Recommended only if you don't use tags.</li>
86
+ <li><strong>User login/registration pages</strong> &mdash; Tells spiders not to index WordPress's user login and registration pages. Recommended.</li>
87
+ </ul>
88
+ ", 'seo-ultimate')));
89
+
90
+ $screen->add_help_tab(array(
91
+ 'id' => 'su-meta-robots-metaedit'
92
+ , 'title' => __('Bulk Editor Tabs', 'seo-ultimate')
93
+ , 'content' => __("
94
+ <ul>
95
+ <li><strong>Noindex</strong> &mdash; Checking this for an item will ask search engines to remove that item&#8217;s webpage from their indices. Use this to remove pages that you don&#8217;t want showing up in search results (such as a Privacy Policy page, for example).</li>
96
+ <li><strong>Nofollow</strong> &mdash; Checking this for an item will tell search engines to ignore the links to other webpages that are on that item&#8217;s webpage. Note: this is page-level &#8220;meta nofollow,&#8221; not to be confused with link-level &#8220;rel nofollow.&#8221;</li>
97
  </ul>
98
  ", 'seo-ultimate')));
99
 
110
  </ul>
111
  ", 'seo-ultimate')));
112
 
 
113
  }
114
  }
115
 
modules/meta/webmaster-verify.php CHANGED
@@ -79,16 +79,29 @@ class SU_WebmasterVerify extends SU_Module {
79
 
80
  function add_help_tabs($screen) {
81
 
82
- $screen->add_help_tab(array(
83
- 'id' => 'su-webmaster-verify-overview'
84
- , 'title' => $this->has_enabled_parent() ? __('Webmaster Verification Assistant', 'seo-ultimate') : __('Overview', 'seo-ultimate')
85
- , 'content' => __("
86
  <ul>
87
  <li><strong>What it does:</strong> Webmaster Verification Assistant lets you enter in verification codes for the webmaster portals of leading search engines.</li>
88
  <li><strong>Why it helps:</strong> Webmaster Verification Assistant assists you in obtaining access to webmaster portals, which can provide you with valuable SEO tools.</li>
89
  <li><strong>How to use it:</strong> Use a search engine to locate the webmaster portal you&#8217;re interested in, sign up at the portal, and then obtain a verification code. Once you have the code, you can paste it in here, click Save Changes, then return to the portal to verify that you own the site. Once that&#8217;s done, you'll have access to the portal&#8217;s SEO tools.</li>
90
  </ul>
91
- ", 'seo-ultimate')));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
  }
93
 
94
  }
79
 
80
  function add_help_tabs($screen) {
81
 
82
+ $overview = __("
 
 
 
83
  <ul>
84
  <li><strong>What it does:</strong> Webmaster Verification Assistant lets you enter in verification codes for the webmaster portals of leading search engines.</li>
85
  <li><strong>Why it helps:</strong> Webmaster Verification Assistant assists you in obtaining access to webmaster portals, which can provide you with valuable SEO tools.</li>
86
  <li><strong>How to use it:</strong> Use a search engine to locate the webmaster portal you&#8217;re interested in, sign up at the portal, and then obtain a verification code. Once you have the code, you can paste it in here, click Save Changes, then return to the portal to verify that you own the site. Once that&#8217;s done, you'll have access to the portal&#8217;s SEO tools.</li>
87
  </ul>
88
+ ", 'seo-ultimate');
89
+
90
+ if ($this->has_enabled_parent()) {
91
+ $screen->add_help_tab(array(
92
+ 'id' => 'su-webmaster-verify-help'
93
+ , 'title' => __('Webmaster Verification Assistant', 'seo-ultimate')
94
+ , 'content' =>
95
+ '<h3>' . __('Overview', 'seo-ultimate') . '</h3>' . $overview
96
+ ));
97
+ } else {
98
+
99
+ $screen->add_help_tab(array(
100
+ 'id' => 'su-webmaster-verify-overview'
101
+ , 'title' => __('Overview', 'seo-ultimate')
102
+ , 'content' => $overview));
103
+
104
+ }
105
  }
106
 
107
  }
modules/modules.css CHANGED
@@ -39,6 +39,10 @@ div.su-module .form-table .jls_text_dest {
39
  width: 325px;
40
  }
41
 
 
 
 
 
42
  div.su-module .form-table td div.field {
43
  padding-bottom: 1em;
44
  }
39
  width: 325px;
40
  }
41
 
42
+ div.su-module .form-table .subfield {
43
+ width: auto;
44
+ }
45
+
46
  div.su-module .form-table td div.field {
47
  padding-bottom: 1em;
48
  }
modules/modules/modules.css CHANGED
@@ -1,5 +1,15 @@
 
 
 
 
 
 
 
 
1
  #su-modules td.module-status {
2
  padding-right: 2em;
 
 
3
  }
4
 
5
  #su-modules td.module-status input {
@@ -26,4 +36,9 @@
26
  #su-modules td.module-status .status-10 a.current { color: green; }
27
  #su-modules td.module-status .status-5 a.current { color: black; }
28
  #su-modules td.module-status .status-0 a.current { color: darkorange; }
29
- #su-modules td.module-status .status-n10 a.current{ color: red; }
 
 
 
 
 
1
+ #su-modules table.widefat {
2
+ clear: left;
3
+ }
4
+
5
+ #su-modules td {
6
+ vertical-align: middle;
7
+ }
8
+
9
  #su-modules td.module-status {
10
  padding-right: 2em;
11
+ white-space: nowrap;
12
+ min-width: 25em;
13
  }
14
 
15
  #su-modules td.module-status input {
36
  #su-modules td.module-status .status-10 a.current { color: green; }
37
  #su-modules td.module-status .status-5 a.current { color: black; }
38
  #su-modules td.module-status .status-0 a.current { color: darkorange; }
39
+ #su-modules td.module-status .status-n10 a.current{ color: red; }
40
+
41
+ #su-modules #wp-ultimate {
42
+ float: right;
43
+ margin: 0 1em 1em;
44
+ }
modules/modules/modules.php CHANGED
@@ -46,11 +46,23 @@ class SU_Modules extends SU_Module {
46
  }
47
 
48
  function admin_page_contents() {
49
- echo "<p>";
 
 
 
 
 
 
 
 
 
 
 
 
50
  _e('SEO Ultimate&#8217;s features are located in groups called &#8220;modules.&#8221; By default, most of these modules are listed in the &#8220;SEO&#8221; menu on the left. Whenever you&#8217;re working with a module, you can view documentation by clicking the &#8220;Help&#8221; tab in the upper-right-hand corner of your administration screen.', 'seo-ultimate');
51
- echo "</p><p>";
52
  _e('The Module Manager lets you disable or hide modules you don&#8217;t use. You can also silence modules from displaying bubble alerts on the menu.', 'seo-ultimate');
53
- echo "</p>";
54
 
55
  if (!empty($_GET['su-modules-updated']))
56
  $this->print_message('success', __('Modules updated.', 'seo-ultimate'));
@@ -176,6 +188,7 @@ STR;
176
  'id' => 'su-modules-options'
177
  , 'title' => __('Options Help', 'seo-ultimate')
178
  , 'content' => __("
 
179
  <p>The Module Manager lets you customize the visibility and accessibility of each module; here are the options available:</p>
180
  <ul>
181
  <li><strong>Enabled</strong> &mdash; The default option. The module will be fully enabled and accessible.</li>
46
  }
47
 
48
  function admin_page_contents() {
49
+
50
+ if ($this->plugin->should_show_wp_ultimate_promo()) {
51
+ ?>
52
+ <div id="wp-ultimate">
53
+ <a href="http://www.wpultimatetheme.com/" target="_blank">
54
+ <img src="<?php echo $this->plugin->plugin_dir_url; ?>plugin/images/wp-ultimate.gif" alt="<?php esc_attr_e('Like SEO Ultimate? Check out the WP Ultimate theme from SEO Design Solutions.', 'seo-ultimate'); ?>" title="" />
55
+ </a>
56
+ </div>
57
+
58
+ <?php
59
+ }
60
+
61
+ echo '<p>';
62
  _e('SEO Ultimate&#8217;s features are located in groups called &#8220;modules.&#8221; By default, most of these modules are listed in the &#8220;SEO&#8221; menu on the left. Whenever you&#8217;re working with a module, you can view documentation by clicking the &#8220;Help&#8221; tab in the upper-right-hand corner of your administration screen.', 'seo-ultimate');
63
+ echo "</p>\n<p>";
64
  _e('The Module Manager lets you disable or hide modules you don&#8217;t use. You can also silence modules from displaying bubble alerts on the menu.', 'seo-ultimate');
65
+ echo "</p>\n";
66
 
67
  if (!empty($_GET['su-modules-updated']))
68
  $this->print_message('success', __('Modules updated.', 'seo-ultimate'));
188
  'id' => 'su-modules-options'
189
  , 'title' => __('Options Help', 'seo-ultimate')
190
  , 'content' => __("
191
+ <p>SEO Ultimate&#8217;s features are located in groups called &#8220;modules.&#8221; By default, most of these modules are listed in the &#8220;SEO&#8221; menu on the left.</p>
192
  <p>The Module Manager lets you customize the visibility and accessibility of each module; here are the options available:</p>
193
  <ul>
194
  <li><strong>Enabled</strong> &mdash; The default option. The module will be fully enabled and accessible.</li>
modules/noindex/noindex.php CHANGED
@@ -93,7 +93,7 @@ class SU_Noindex extends SU_Module {
93
  //If global noindex tags are enabled, these settings will be moot, so notify the user.
94
  if (!get_option('blog_public'))
95
  $this->queue_message('error',
96
- __('Note: The current <a href="options-privacy.php">privacy settings</a> will block indexing of the entire site, regardless of which options are set below.', 'seo-ultimate') );
97
 
98
  $this->admin_form_table_start();
99
  $this->admin_form_subheader(__('Prevent indexing of...', 'seo-ultimate'));
93
  //If global noindex tags are enabled, these settings will be moot, so notify the user.
94
  if (!get_option('blog_public'))
95
  $this->queue_message('error',
96
+ __('Note: The <a href="options-reading.php">&#8220;discourage search engines&#8221; checkbox</a> will block indexing of the entire site, regardless of which options are set below.', 'seo-ultimate') );
97
 
98
  $this->admin_form_table_start();
99
  $this->admin_form_subheader(__('Prevent indexing of...', 'seo-ultimate'));
modules/opengraph/opengraph.php CHANGED
@@ -22,29 +22,56 @@ class SU_OpenGraph extends SU_Module {
22
  , 'default_post_twitter_card' => 'summary'
23
  , 'default_page_twitter_card' => 'summary'
24
  , 'default_attachment_twitter_card' => 'photo'
 
25
  );
26
  }
27
 
28
  function init() {
29
- add_filter('language_attributes', array(&$this, 'html_tag_xmlns_attrs'), 1000);
30
  add_action('su_head', array(&$this, 'head_tag_output'));
31
  add_filter('su_get_setting-opengraph-twitter_site_handle', array(&$this, 'sanitize_twitter_handle'));
32
  add_filter('user_contactmethods', array(&$this, 'add_twitter_field'));
33
  }
34
 
35
- function html_tag_xmlns_attrs($attrs) {
36
  $this->namespaces_declared = true;
37
- return $attrs . ' ' . implode(' ', $this->get_xmlns_attrs());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  }
39
 
40
- function get_xmlns_attrs() {
41
  return array(
42
- 'og' => 'xmlns:og="http://ogp.me/ns#"'
43
- , 'fb' => 'xmlns:fb="http://ogp.me/ns/fb#"'
44
  );
45
  }
46
 
47
  function head_tag_output() {
 
48
 
49
  $tags = $twitter_tags = array();
50
 
@@ -65,14 +92,13 @@ class SU_OpenGraph extends SU_Module {
65
  $tags['og:description'] = get_bloginfo('description');
66
 
67
  //URL
68
- $tags['og:url'] = get_bloginfo('url');
69
 
70
  //Image
71
  $tags['og:image'] = $this->get_setting('home_og_image');
72
 
73
  } elseif (is_singular()) {
74
 
75
- global $wp_query;
76
  $post = $wp_query->get_queried_object();
77
 
78
  if (is_object($post)) {
@@ -101,7 +127,7 @@ class SU_OpenGraph extends SU_Module {
101
  if (!$tags['og:image']) {
102
  if ('attachment' == $post->post_type)
103
  $tags['og:image'] = wp_get_attachment_url();
104
- elseif ($thumbnail_id = get_post_thumbnail_id($post->ID))
105
  $tags['og:image'] = wp_get_attachment_url($thumbnail_id);
106
  }
107
 
@@ -111,7 +137,10 @@ class SU_OpenGraph extends SU_Module {
111
 
112
  $tags['article:published_time'] = get_the_date('Y-m-d');
113
  $tags['article:modified_time'] = get_the_modified_date('Y-m-d');
114
- $tags['article:author'] = get_author_posts_url($post->post_author);
 
 
 
115
 
116
  $single_category = (count(get_the_category()) == 1);
117
 
@@ -140,7 +169,6 @@ class SU_OpenGraph extends SU_Module {
140
  }
141
  } elseif (is_author()) {
142
 
143
- global $wp_query;
144
  $author = $wp_query->get_queried_object();
145
 
146
  if (is_object($author)) {
@@ -193,22 +221,50 @@ class SU_OpenGraph extends SU_Module {
193
  $twitter_tags['twitter:site'] = $this->get_setting('twitter_site_handle');
194
 
195
  //Output meta tags
196
- $xmlns_attrs = $this->namespaces_declared ? array() : $this->get_xmlns_attrs();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
197
 
198
- $output_formats = array(
199
- '<meta property="%1$s" content="%2$s" %3$s/>' => $tags
200
- , '<meta name="%1$s" content="%2$s" />' => $twitter_tags
201
- );
202
  foreach ($output_formats as $html_format => $format_tags) {
203
  foreach ($format_tags as $property => $values) {
204
  foreach ((array)$values as $value) {
205
  $property = su_esc_attr($property);
206
  $value = su_esc_attr($value);
207
  if (strlen(trim($property)) && strlen(trim($value))) {
208
- $xmlns = sustr::upto($property, ':');
209
- $xmlns_attr = empty($xmlns_attrs[$xmlns]) ? '' : $xmlns_attrs[$xmlns] . ' ';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
210
  echo "\t";
211
- printf($html_format, $property, $value, $xmlns_attr);
212
  echo "\n";
213
  }
214
  }
@@ -260,6 +316,7 @@ class SU_OpenGraph extends SU_Module {
260
  array(
261
  array('title' => __('Sitewide Values', 'seo-ultimate'), 'id' => 'su-sitewide-values', 'callback' => 'global_tab')
262
  , array('title' => __('Default Values', 'seo-ultimate'), 'id' => 'su-default-values', 'callback' => 'defaults_tab')
 
263
  , array('title' => __('Blog Homepage', 'seo-ultimate'), 'id' => 'su-homepage', 'callback' => 'home_tab')
264
  )
265
  , $postmeta_edit_tabs
@@ -275,7 +332,7 @@ class SU_OpenGraph extends SU_Module {
275
  }
276
 
277
  function defaults_tab() {
278
- $posttypes = suwp::get_post_type_objects();
279
 
280
  $this->admin_subheader(__('Default Types', 'seo-ultimate'));
281
  $this->admin_wftable_start(array(
@@ -306,6 +363,17 @@ class SU_OpenGraph extends SU_Module {
306
  $this->admin_form_table_end();
307
  }
308
 
 
 
 
 
 
 
 
 
 
 
 
309
  function home_tab() {
310
  $this->admin_form_table_start();
311
  $this->textbox('home_og_title', __('Blog Homepage Title', 'seo-ultimate'), false, false, array(), array('placeholder' => get_bloginfo('name')));
@@ -343,7 +411,7 @@ class SU_OpenGraph extends SU_Module {
343
 
344
  function get_jlsuggest_box($name, $value, $params='', $placeholder='') {
345
 
346
- if (empty($value) && $this->jlsuggest_box_post_id && $thumbnail_id = get_post_thumbnail_id($this->jlsuggest_box_post_id)) {
347
  $selected_post = get_post($thumbnail_id);
348
  $placeholder = sprintf(__('Featured Image: %s', 'seo-ultimate'), $selected_post->post_title);
349
  }
@@ -403,6 +471,21 @@ class SU_OpenGraph extends SU_Module {
403
  $contactmethods['twitter'] = __('Twitter Handle', 'seo-ultimate');
404
  return $contactmethods;
405
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
406
  }
407
 
408
  }
22
  , 'default_post_twitter_card' => 'summary'
23
  , 'default_page_twitter_card' => 'summary'
24
  , 'default_attachment_twitter_card' => 'photo'
25
+ , 'enable_og_article_author' => true
26
  );
27
  }
28
 
29
  function init() {
30
+ add_filter('language_attributes', array(&$this, 'html_tag_attrs'), 1000);
31
  add_action('su_head', array(&$this, 'head_tag_output'));
32
  add_filter('su_get_setting-opengraph-twitter_site_handle', array(&$this, 'sanitize_twitter_handle'));
33
  add_filter('user_contactmethods', array(&$this, 'add_twitter_field'));
34
  }
35
 
36
+ function html_tag_attrs($attrs) {
37
  $this->namespaces_declared = true;
38
+ $namespace_urls = $this->get_namespace_urls();
39
+
40
+ $doctype = $this->get_setting('doctype', '');
41
+ switch ($doctype) {
42
+ case 'xhtml':
43
+ foreach ($namespace_urls as $namespace => $url) {
44
+ $namespace = su_esc_attr($namespace);
45
+ $url = su_esc_attr($url);
46
+ $attrs .= " xmlns:$namespace=\"$url\"";
47
+ }
48
+ break;
49
+ case 'html5':
50
+ default:
51
+ $attrs .= ' prefix="';
52
+ $whitespace = '';
53
+ foreach ($namespace_urls as $namespace => $url) {
54
+ $namespace = su_esc_attr($namespace);
55
+ $url = su_esc_attr($url);
56
+ $attrs .= "$whitespace$namespace: $url";
57
+ $whitespace = ' ';
58
+ }
59
+ $attrs .= '"';
60
+ break;
61
+ }
62
+
63
+ return $attrs;
64
  }
65
 
66
+ function get_namespace_urls() {
67
  return array(
68
+ 'og' => 'http://ogp.me/ns#'
69
+ , 'fb' => 'http://ogp.me/ns/fb#'
70
  );
71
  }
72
 
73
  function head_tag_output() {
74
+ global $wp_query;
75
 
76
  $tags = $twitter_tags = array();
77
 
92
  $tags['og:description'] = get_bloginfo('description');
93
 
94
  //URL
95
+ $tags['og:url'] = suwp::get_blog_home_url();
96
 
97
  //Image
98
  $tags['og:image'] = $this->get_setting('home_og_image');
99
 
100
  } elseif (is_singular()) {
101
 
 
102
  $post = $wp_query->get_queried_object();
103
 
104
  if (is_object($post)) {
127
  if (!$tags['og:image']) {
128
  if ('attachment' == $post->post_type)
129
  $tags['og:image'] = wp_get_attachment_url();
130
+ elseif (current_theme_supports('post-thumbnails') && $thumbnail_id = get_post_thumbnail_id($post->ID))
131
  $tags['og:image'] = wp_get_attachment_url($thumbnail_id);
132
  }
133
 
137
 
138
  $tags['article:published_time'] = get_the_date('Y-m-d');
139
  $tags['article:modified_time'] = get_the_modified_date('Y-m-d');
140
+
141
+ //Authorship generally doesn't apply to pages
142
+ if (!is_page() && $this->get_setting('enable_og_article_author', true))
143
+ $tags['article:author'] = get_author_posts_url($post->post_author);
144
 
145
  $single_category = (count(get_the_category()) == 1);
146
 
169
  }
170
  } elseif (is_author()) {
171
 
 
172
  $author = $wp_query->get_queried_object();
173
 
174
  if (is_object($author)) {
221
  $twitter_tags['twitter:site'] = $this->get_setting('twitter_site_handle');
222
 
223
  //Output meta tags
224
+ $namespace_urls = $this->namespaces_declared ? array() : $this->get_namespace_urls();
225
+ $doctype = $this->get_setting('doctype', '');
226
+
227
+ switch ($doctype) {
228
+ case 'xhtml':
229
+ $output_formats = array('<meta%3$s name="%1$s" content="%2$s" />' => array_merge($tags, $twitter_tags));
230
+ break;
231
+ case 'html5':
232
+ $output_formats = array('<meta%3$s property="%1$s" content="%2$s">' => array_merge($tags, $twitter_tags));
233
+ break;
234
+ default:
235
+ $output_formats = array(
236
+ '<meta%3$s property="%1$s" content="%2$s" />' => $tags
237
+ , '<meta%3$s name="%1$s" content="%2$s" />' => $twitter_tags
238
+ );
239
+ break;
240
+ }
241
 
 
 
 
 
242
  foreach ($output_formats as $html_format => $format_tags) {
243
  foreach ($format_tags as $property => $values) {
244
  foreach ((array)$values as $value) {
245
  $property = su_esc_attr($property);
246
  $value = su_esc_attr($value);
247
  if (strlen(trim($property)) && strlen(trim($value))) {
248
+
249
+ $namespace_attr = '';
250
+ $namespace = sustr::upto($property, ':');
251
+ if (!empty($namespace_urls[$namespace])) {
252
+ $a_namespace = su_esc_attr($namespace);
253
+ $a_namespace_url = su_esc_attr($namespace_urls[$namespace]);
254
+
255
+ switch ($doctype) {
256
+ case 'xhtml':
257
+ $namespace_attr = " xmlns:$a_namespace=\"$a_namespace_url\"";
258
+ break;
259
+ case 'html5':
260
+ default:
261
+ $namespace_attr = " prefix=\"$a_namespace: $a_namespace_url\"";
262
+ break;
263
+ }
264
+ }
265
+
266
  echo "\t";
267
+ printf($html_format, $property, $value, $namespace_attr);
268
  echo "\n";
269
  }
270
  }
316
  array(
317
  array('title' => __('Sitewide Values', 'seo-ultimate'), 'id' => 'su-sitewide-values', 'callback' => 'global_tab')
318
  , array('title' => __('Default Values', 'seo-ultimate'), 'id' => 'su-default-values', 'callback' => 'defaults_tab')
319
+ , array('title' => __('Settings', 'seo-ultimate'), 'id' => 'su-settings', 'callback' => 'settings_tab')
320
  , array('title' => __('Blog Homepage', 'seo-ultimate'), 'id' => 'su-homepage', 'callback' => 'home_tab')
321
  )
322
  , $postmeta_edit_tabs
332
  }
333
 
334
  function defaults_tab() {
335
+ $posttypes = get_post_types(array('public' => true), 'objects');
336
 
337
  $this->admin_subheader(__('Default Types', 'seo-ultimate'));
338
  $this->admin_wftable_start(array(
363
  $this->admin_form_table_end();
364
  }
365
 
366
+ function settings_tab() {
367
+ $this->admin_form_table_start();
368
+ $this->checkbox('enable_og_article_author', __('Include author data for posts', 'seo-ultimate'), __('Open Graph Data', 'seo-ultimate'));
369
+ $this->radiobuttons('doctype', array(
370
+ '' => __('Use the non-validating code prescribed by Open Graph and Twitter', 'seo-ultimate')
371
+ , 'xhtml' => __('Alter the code to validate as XHTML', 'seo-ultimate')
372
+ , 'html5' => __('Alter the code to validate as HTML5', 'seo-ultimate')
373
+ ), __('HTML Validation', 'seo-ultimate'));
374
+ $this->admin_form_table_end();
375
+ }
376
+
377
  function home_tab() {
378
  $this->admin_form_table_start();
379
  $this->textbox('home_og_title', __('Blog Homepage Title', 'seo-ultimate'), false, false, array(), array('placeholder' => get_bloginfo('name')));
411
 
412
  function get_jlsuggest_box($name, $value, $params='', $placeholder='') {
413
 
414
+ if (empty($value) && $this->jlsuggest_box_post_id && current_theme_supports('post-thumbnails') && $thumbnail_id = get_post_thumbnail_id($this->jlsuggest_box_post_id)) {
415
  $selected_post = get_post($thumbnail_id);
416
  $placeholder = sprintf(__('Featured Image: %s', 'seo-ultimate'), $selected_post->post_title);
417
  }
471
  $contactmethods['twitter'] = __('Twitter Handle', 'seo-ultimate');
472
  return $contactmethods;
473
  }
474
+
475
+ function add_help_tabs($screen) {
476
+
477
+ $screen->add_help_tab(array(
478
+ 'id' => 'su-opengraph-overview'
479
+ , 'title' => __('Overview', 'seo-ultimate')
480
+ , 'content' => __("
481
+ <ul>
482
+ <li><strong>What it does:</strong> Open Graph Integrator makes it easy for you to convey information about your site to social networks like Facebook, Twitter, and Google+.</li>
483
+ <li><strong>Why it helps:</strong> By providing this Open Graph data, you can customize how these social networks will present your site when people share it with their followers.</li>
484
+ <li><strong>How to use it:</strong> The &#8220;Sitewide Values&#8221; tab lets you specify data that applies to your entire site. The &#8220;Default Values&#8221; tab lets you specify default data for your posts, pages, etc. The bulk editor tabs let you override those defaults on individual posts and pages. If the authors on your site fill in the &#8220;Twitter Handle&#8221; field which Open Graph Integrator adds to the <a href='profile.php'>profile editor</a>, Open Graph Integrator will communicate that information to Twitter as well.</li>
485
+ </ul>
486
+ ", 'seo-ultimate')));
487
+
488
+ }
489
  }
490
 
491
  }
modules/permalinks/permalinks.php CHANGED
@@ -37,6 +37,7 @@ class SU_Permalinks extends SU_Module {
37
  }
38
  }
39
  if ($nobase_enabled) {
 
40
  add_filter('term_link', array(&$this, 'nobase_term_link'), 1000, 2);
41
  add_filter('query_vars', array(&$this, 'nobase_query_vars'));
42
  add_filter('request', array(&$this, 'nobase_old_base_redirect'));
@@ -58,6 +59,7 @@ class SU_Permalinks extends SU_Module {
58
  }
59
  }
60
  if ($nobase_enabled) {
 
61
  remove_filter('term_link', array(&$this, 'nobase_term_link'), 1000, 2);
62
  remove_filter('query_vars', array(&$this, 'nobase_query_vars'));
63
  remove_filter('request', array(&$this, 'nobase_old_base_redirect'));
@@ -162,6 +164,7 @@ class SU_Permalinks extends SU_Module {
162
  $tax_name = sustr::rtrim_str(current_filter(), '_rewrite_rules');
163
  $tax_obj = get_taxonomy($tax_name);
164
 
 
165
  $terms = get_terms($tax_name);
166
  if ($terms && !is_wp_error($terms)) {
167
  foreach ($terms as $term_obj) {
37
  }
38
  }
39
  if ($nobase_enabled) {
40
+ add_action('wp_insert_post', array(&$this, 'flush_rewrite_rules'));
41
  add_filter('term_link', array(&$this, 'nobase_term_link'), 1000, 2);
42
  add_filter('query_vars', array(&$this, 'nobase_query_vars'));
43
  add_filter('request', array(&$this, 'nobase_old_base_redirect'));
59
  }
60
  }
61
  if ($nobase_enabled) {
62
+ remove_action('wp_insert_post', array(&$this, 'flush_rewrite_rules'));
63
  remove_filter('term_link', array(&$this, 'nobase_term_link'), 1000, 2);
64
  remove_filter('query_vars', array(&$this, 'nobase_query_vars'));
65
  remove_filter('request', array(&$this, 'nobase_old_base_redirect'));
164
  $tax_name = sustr::rtrim_str(current_filter(), '_rewrite_rules');
165
  $tax_obj = get_taxonomy($tax_name);
166
 
167
+ wp_cache_flush(); //Otherwise get_terms() won't include the term just added
168
  $terms = get_terms($tax_name);
169
  if ($terms && !is_wp_error($terms)) {
170
  foreach ($terms as $term_obj) {
modules/rich-snippets/rich-snippets.php CHANGED
@@ -12,19 +12,20 @@ class SU_RichSnippets extends SU_Module {
12
  var $apply_subproperty_markup_args = array();
13
 
14
  function get_module_title() { return __('Rich Snippet Creator', 'seo-ultimate'); }
15
- function get_menu_title() { return false; }
16
 
17
- function get_admin_url($key = false) {
18
- if ($key)
19
- return parent::get_admin_url($key);
20
-
21
- return false;
22
- }
23
 
24
  function init() {
25
  add_filter('the_content', array(&$this, 'apply_markup'));
26
  }
27
 
 
 
 
 
 
 
28
  function get_supported_snippet_formats() {
29
 
30
  return array(
@@ -387,36 +388,44 @@ class SU_RichSnippets extends SU_Module {
387
  return $fields;
388
  }
389
 
 
390
  function add_help_tabs($screen) {
391
 
392
- $screen->add_help_tab(array(
393
- 'id' => 'su-rich-snippets-overview'
394
- , 'title' => __('Overview', 'seo-ultimate')
395
- , 'content' => __("
396
  <ul>
397
- <li><strong>What it does:</strong> Rich Snippet Creator adds special code to your posts that asks Google to display special pertinent information (known as <a href='http://www.google.com/support/webmasters/bin/topic.py?hl=en&topic=219' target='_blank'>Rich Snippets</a>) in search results for certain types of content. For example, if you&#8217;ve written a product review, you can use Rich Snippet Creator to ask Google to display the star rating that you gave the product in your review next to your review webpage when it appears in search results.</li>
398
  <li><strong>Why it helps:</strong> Rich Snippet Creator enhances the search engine results for your content by asking Google to add extra, eye-catching info that could help draw in more search engine visitors.</li>
399
- <li><p><strong>How it works:</strong> When editing one of your posts or pages, see if your content fits one of the available rich snippet types (for example, a review). If so, select that type from the &#8220;Rich Snippet Type&#8221; dropdown box. Once you select the applicable type, additional options will appear that vary based on the type selected. For example, a &#8220;Star Rating&#8221; field will appear if you select the &#8220;Review&#8221; type.</p><p>Once you save the post/page, Rich Snippet Creator will add the special code to it. You can remove this code at any time by selecting &#8220;None&#8221; from the &#8220;Rich Snippet Type&#8221; dropdown and resaving the post/page.</p></li>
400
  </ul>
401
- ", 'seo-ultimate')));
402
 
403
- $screen->add_help_tab(array(
404
- 'id' => 'su-rich-snippets-settings'
405
- , 'title' => __('Settings Help', 'seo-ultimate')
406
- , 'content' => __("
407
  <ul>
408
- <li><strong>Categories/Tags That Indicate Reviews</strong> &mdash; If you haven&#8217;t set the &#8220;Rich Snippet Type&#8221; setting for an old post or page, then Rich Snippet Creator will automatically set its default type to &#8220;Review&#8221; (instead of &#8220;None&#8221;) if it has a category or tag whose name is in this list (the default list is &#8220;Reviews&#8221; and &#8220;Review&#8221;). Put one category/tag name per line.</li>
409
  </ul>
410
- ", 'seo-ultimate')));
411
-
412
- $screen->add_help_tab(array(
413
- 'id' => 'su-rich-snippets-troubleshooting'
414
- , 'title' => __('Troubleshooting', 'seo-ultimate')
415
- , 'content' => __("
416
- <ul>
417
- <li><p><strong>Why aren&#8217;t rich snippets showing up in Google search results for my site?</strong><br />Enter the URL of your post/page into <a href='http://www.google.com/webmasters/tools/richsnippets' target='_blank'>Google&#8217;s testing tool</a> to make sure Google can find the rich snippet code on your site. If no code is found, check and make sure you've enabled rich snippets for that particular post/page.</p><p>Note that having the code on a post/page doesn&#8217;t guarantee that Google will actually use it to create a rich snippet. If Google is able to read your code but isn&#8217;t using it to generate rich snippets, you can ask Google to do so using <a href='http://www.google.com/support/webmasters/bin/request.py?contact_type=rich_snippets_feedback' target='_blank'>this form</a>.</p></li>
418
- </ul>
419
- ", 'seo-ultimate')));
 
 
 
 
 
 
 
 
 
 
 
 
 
420
  }
421
  }
422
 
12
  var $apply_subproperty_markup_args = array();
13
 
14
  function get_module_title() { return __('Rich Snippet Creator', 'seo-ultimate'); }
 
15
 
16
+ function get_parent_module() { return 'misc'; }
17
+ function get_settings_key() { return 'rich-snippets'; }
 
 
 
 
18
 
19
  function init() {
20
  add_filter('the_content', array(&$this, 'apply_markup'));
21
  }
22
 
23
+ function admin_page_contents() {
24
+ $this->child_admin_form_start();
25
+ $this->textblock(__('Rich Snippet Creator adds a &#8220;Search Result Type&#8221; dropdown to the WordPress content editor screen. To add rich snippet data to a post, select &#8220;Review&#8221; or &#8220;Place&#8221; from a post&#8217;s &#8220;Search Result Type&#8221; dropdown and fill in the fields that appear.', 'seo-ultimate'));
26
+ $this->child_admin_form_end();
27
+ }
28
+
29
  function get_supported_snippet_formats() {
30
 
31
  return array(
388
  return $fields;
389
  }
390
 
391
+
392
  function add_help_tabs($screen) {
393
 
394
+ $overview = __("
 
 
 
395
  <ul>
396
+ <li><strong>What it does:</strong> Rich Snippet Creator adds special code (called Schema.org data) to your posts that asks Google and other major search engines to display special pertinent information (known as Rich Snippets) in search results for certain types of content. For example, if you&#8217;ve written a product review, you can use Rich Snippet Creator to ask Google to display the star rating that you gave the product in your review next to your review webpage when it appears in search results.</li>
397
  <li><strong>Why it helps:</strong> Rich Snippet Creator enhances the search engine results for your content by asking Google to add extra, eye-catching info that could help draw in more search engine visitors.</li>
398
+ <li><strong>How it works:</strong> When editing one of your posts or pages, see if your content fits one of the available rich snippet types (for example, a review). If so, select that type from the &#8220;Search Result Type&#8221; dropdown box. Once you select the applicable type, additional options will appear that vary based on the type selected. For example, a &#8220;Star Rating for Reviewed Item&#8221; field will appear if you select the &#8220;Review&#8221; type. Once you save the post/page, Rich Snippet Creator will add the special code to it. You can remove this code at any time by selecting &#8220;Standard&#8221; from the &#8220;Search Result Type&#8221; dropdown and resaving the post/page.</li>
399
  </ul>
400
+ ", 'seo-ultimate');
401
 
402
+ $troubleshooting = __("
 
 
 
403
  <ul>
404
+ <li><p><strong>Why aren&#8217;t rich snippets showing up in Google search results for my site?</strong><br />Enter the URL of your post/page into <a href='http://www.google.com/webmasters/tools/richsnippets' target='_blank'>Google&#8217;s testing tool</a> to make sure Google can find the rich snippet code on your site. If no code is found, check and make sure you&#8217;ve enabled rich snippets for that particular post/page.</p><p>Note that having the code on a post/page doesn&#8217;t guarantee that Google will actually use it to create a rich snippet. If Google is able to read your code but isn&#8217;t using it to generate rich snippets, you can ask Google to do so using <a href='http://www.google.com/support/webmasters/bin/request.py?contact_type=rich_snippets_feedback' target='_blank'>this form</a>.</p></li>
405
  </ul>
406
+ ", 'seo-ultimate');
407
+
408
+ if ($this->has_enabled_parent()) {
409
+ $screen->add_help_tab(array(
410
+ 'id' => 'su-rich-snippets-help'
411
+ , 'title' => __('Rich Snippet Creator', 'seo-ultimate')
412
+ , 'content' =>
413
+ '<h3>' . __('Overview', 'seo-ultimate') . '</h3>' . $overview .
414
+ '<h3>' . __('Troubleshooting', 'seo-ultimate') . '</h3>' . $troubleshooting
415
+ ));
416
+ } else {
417
+
418
+ $screen->add_help_tab(array(
419
+ 'id' => 'su-rich-snippets-overview'
420
+ , 'title' => __('Overview', 'seo-ultimate')
421
+ , 'content' => $overview));
422
+
423
+ $screen->add_help_tab(array(
424
+ 'id' => 'su-rich-snippets-troubleshooting'
425
+ , 'title' => __('Troubleshooting', 'seo-ultimate')
426
+ , 'content' => $troubleshooting));
427
+ }
428
+
429
  }
430
  }
431
 
modules/sds-blog/sds-blog.php CHANGED
@@ -63,7 +63,7 @@ class SU_SdsBlog extends SU_Module {
63
  function truncate_at_ellipsis($content) {
64
  $end = '[...]';
65
  if (sustr::has($content, $end)) {
66
- $content = sustr::truncate_at($content, $end);
67
  $content = sustr::rtrim_substr($content, $end);
68
  }
69
  return sustr::endwith($content, '[&hellip;]');
63
  function truncate_at_ellipsis($content) {
64
  $end = '[...]';
65
  if (sustr::has($content, $end)) {
66
+ $content = sustr::upto($content, $end);
67
  $content = sustr::rtrim_substr($content, $end);
68
  }
69
  return sustr::endwith($content, '[&hellip;]');
modules/settings/global-settings.php CHANGED
@@ -21,6 +21,7 @@ class SU_GlobalSettings extends SU_Module {
21
  return array(
22
  'attribution_link' => false
23
  , 'mark_code' => true
 
24
  );
25
  }
26
 
@@ -34,13 +35,19 @@ class SU_GlobalSettings extends SU_Module {
34
 
35
  function admin_page_contents() {
36
 
37
- //Plugin Settings
38
  $this->admin_form_start();
39
- $this->checkboxes(array(
 
40
  'mark_code' => __('Identify the plugin&#8217;s HTML code insertions with HTML comment tags', 'seo-ultimate')
41
  , 'attribution_link' => __('Enable nofollow&#8217;d attribution link on my site', 'seo-ultimate')
42
  , 'attribution_link_css' => array('description' => __('Add CSS styles to the attribution link', 'seo-ultimate'), 'indent' => true)
43
- ));
 
 
 
 
 
 
44
  $this->admin_form_end();
45
  }
46
 
21
  return array(
22
  'attribution_link' => false
23
  , 'mark_code' => true
24
+ , 'wp_ultimate' => true
25
  );
26
  }
27
 
35
 
36
  function admin_page_contents() {
37
 
 
38
  $this->admin_form_start();
39
+
40
+ $checkboxes = array(
41
  'mark_code' => __('Identify the plugin&#8217;s HTML code insertions with HTML comment tags', 'seo-ultimate')
42
  , 'attribution_link' => __('Enable nofollow&#8217;d attribution link on my site', 'seo-ultimate')
43
  , 'attribution_link_css' => array('description' => __('Add CSS styles to the attribution link', 'seo-ultimate'), 'indent' => true)
44
+ );
45
+
46
+ if ($this->plugin->is_wp_ultimate_promo_applicable())
47
+ $checkboxes['wp_ultimate'] = __('Show the promo image for WP Ultimate on the Module Manager page', 'seo-ultimate');
48
+
49
+ $this->checkboxes($checkboxes);
50
+
51
  $this->admin_form_end();
52
  }
53
 
modules/settings/install.php CHANGED
@@ -109,7 +109,7 @@ class SU_Install extends SU_Module {
109
  return;
110
  }
111
 
112
- $radiobuttons = $this->get_version_radiobuttons(SU_DOWNGRADE_LIMIT, SU_VERSION);
113
  if (is_array($radiobuttons)) {
114
  if (count($radiobuttons) > 1) {
115
 
@@ -125,7 +125,7 @@ class SU_Install extends SU_Module {
125
  $this->admin_form_end(__('Downgrade', 'seo-ultimate'));
126
  echo "</div>\n";
127
  } else
128
- $this->print_message('warning', sprintf(__('Downgrading to versions earlier than %s is not supported because doing so will result in data loss.', 'seo-ultimate'), SU_DOWNGRADE_LIMIT));
129
  } else
130
  $this->print_message('error', __('There was an error retrieving the list of available versions. Please try again later.', 'seo-ultimate'));
131
  }
@@ -146,7 +146,7 @@ class SU_Install extends SU_Module {
146
  $this->admin_form_end(__('Reinstall', 'seo-ultimate'), false);
147
  }
148
 
149
- function get_version_radiobuttons($min, $max) {
150
 
151
  $this->update_setting('version', SU_VERSION);
152
 
@@ -155,7 +155,7 @@ class SU_Install extends SU_Module {
155
  if (is_array($versions) && count($versions)) {
156
 
157
  $radiobuttons = array();
158
- $first = true;
159
  foreach ($versions as $title => $changes) {
160
  if (preg_match('|Version ([0-9.]{3,9}) |', $title, $matches)) {
161
  $version = $matches[1];
@@ -166,7 +166,7 @@ class SU_Install extends SU_Module {
166
  $changes = wptexturize($changes);
167
  if ($version == SU_VERSION)
168
  $message = __('Your Current Version', 'seo-ultimate');
169
- elseif ($first)
170
  $message = __('Latest Version', 'seo-ultimate');
171
  else
172
  $message = '';
@@ -174,7 +174,7 @@ class SU_Install extends SU_Module {
174
 
175
  $radiobuttons[$version] = "<strong>$title</strong>$message</label>\n$changes\n";
176
 
177
- $first = false;
178
  }
179
  }
180
 
@@ -186,6 +186,8 @@ class SU_Install extends SU_Module {
186
 
187
  function do_installation() {
188
 
 
 
189
  $nv = sustr::preg_filter('0-9a-zA-Z .', $_POST['version']);
190
  if (!strlen($nv)) return false;
191
 
109
  return;
110
  }
111
 
112
+ $radiobuttons = $this->get_version_radiobuttons(SU_DOWNGRADE_LIMIT, SU_VERSION, 5);
113
  if (is_array($radiobuttons)) {
114
  if (count($radiobuttons) > 1) {
115
 
125
  $this->admin_form_end(__('Downgrade', 'seo-ultimate'));
126
  echo "</div>\n";
127
  } else
128
+ $this->print_message('warning', sprintf(__('Downgrading to versions earlier than %s is not supported because doing so will result the loss of some or all of your SEO Ultimate settings.', 'seo-ultimate'), SU_DOWNGRADE_LIMIT));
129
  } else
130
  $this->print_message('error', __('There was an error retrieving the list of available versions. Please try again later.', 'seo-ultimate'));
131
  }
146
  $this->admin_form_end(__('Reinstall', 'seo-ultimate'), false);
147
  }
148
 
149
+ function get_version_radiobuttons($min, $max, $limit=false) {
150
 
151
  $this->update_setting('version', SU_VERSION);
152
 
155
  if (is_array($versions) && count($versions)) {
156
 
157
  $radiobuttons = array();
158
+ $i = 0;
159
  foreach ($versions as $title => $changes) {
160
  if (preg_match('|Version ([0-9.]{3,9}) |', $title, $matches)) {
161
  $version = $matches[1];
166
  $changes = wptexturize($changes);
167
  if ($version == SU_VERSION)
168
  $message = __('Your Current Version', 'seo-ultimate');
169
+ elseif (0 == $i)
170
  $message = __('Latest Version', 'seo-ultimate');
171
  else
172
  $message = '';
174
 
175
  $radiobuttons[$version] = "<strong>$title</strong>$message</label>\n$changes\n";
176
 
177
+ if ($limit !== false && $limit > 0 && ++$i >= $limit) break;
178
  }
179
  }
180
 
186
 
187
  function do_installation() {
188
 
189
+ if (!isset($_POST['version'])) return false;
190
+
191
  $nv = sustr::preg_filter('0-9a-zA-Z .', $_POST['version']);
192
  if (!strlen($nv)) return false;
193
 
modules/sharing-buttons/sharing-buttons.php CHANGED
@@ -66,16 +66,29 @@ class SU_SharingButtons extends SU_Module {
66
 
67
  function add_help_tabs($screen) {
68
 
69
- $screen->add_help_tab(array(
70
- 'id' => 'su-sharing-buttons-overview'
71
- , 'title' => $this->has_enabled_parent() ? __('Sharing Facilitator', 'seo-ultimate') : __('Overview', 'seo-ultimate')
72
- , 'content' => __("
73
  <ul>
74
  <li><strong>What it does:</strong> Sharing Facilitator adds buttons to your posts/pages that make it easy for visitors to share your content.</li>
75
  <li><strong>Why it helps:</strong> When visitors share your content on social networking sites, this can build links to your site. Sharing Facilitator makes it easy for visitors to do this.</li>
76
  <li><strong>How to use it:</strong> Pick which button type you&#8217;d like to use (ShareThis or AddThis) and click Save Changes. Try enabling each button on your site and see which one you like better.</li>
77
  </ul>
78
- ", 'seo-ultimate')));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  }
80
 
81
  }
66
 
67
  function add_help_tabs($screen) {
68
 
69
+ $overview = __("
 
 
 
70
  <ul>
71
  <li><strong>What it does:</strong> Sharing Facilitator adds buttons to your posts/pages that make it easy for visitors to share your content.</li>
72
  <li><strong>Why it helps:</strong> When visitors share your content on social networking sites, this can build links to your site. Sharing Facilitator makes it easy for visitors to do this.</li>
73
  <li><strong>How to use it:</strong> Pick which button type you&#8217;d like to use (ShareThis or AddThis) and click Save Changes. Try enabling each button on your site and see which one you like better.</li>
74
  </ul>
75
+ ", 'seo-ultimate');
76
+
77
+ if ($this->has_enabled_parent()) {
78
+ $screen->add_help_tab(array(
79
+ 'id' => 'su-sharing-buttons-help'
80
+ , 'title' => __('Sharing Facilitator', 'seo-ultimate')
81
+ , 'content' =>
82
+ '<h3>' . __('Overview', 'seo-ultimate') . '</h3>' . $overview
83
+ ));
84
+ } else {
85
+
86
+ $screen->add_help_tab(array(
87
+ 'id' => 'su-sharing-buttons-overview'
88
+ , 'title' => __('Overview', 'seo-ultimate')
89
+ , 'content' => $overview));
90
+
91
+ }
92
  }
93
 
94
  }
modules/titles/titles.php CHANGED
@@ -159,7 +159,7 @@ class SU_Titles extends SU_Module {
159
  return htmlspecialchars($this->get_title_paged($post_title));
160
 
161
  //Custom taxonomy title?
162
- if (is_category() || is_tag() || is_tax()) {
163
  $tax_titles = $this->get_setting('taxonomy_titles');
164
  if ($tax_title = $tax_titles[$wp_query->get_queried_object_id()])
165
  return htmlspecialchars($this->get_title_paged($tax_title));
@@ -432,6 +432,7 @@ class SU_Titles extends SU_Module {
432
  , 'content' => __("
433
  <p>Here&#8217;s documentation for the options on the &#8220;Settings&#8221; tab.</p>
434
  <ul>
 
435
  <li>
436
  <p><strong>Rewrite Method</strong> &mdash; This setting controls the method by which Title Tag Rewriter edits your site&#8217;s <code>&lt;title&gt;</code> tags.</p>
437
  <ul>
159
  return htmlspecialchars($this->get_title_paged($post_title));
160
 
161
  //Custom taxonomy title?
162
+ if (suwp::is_tax()) {
163
  $tax_titles = $this->get_setting('taxonomy_titles');
164
  if ($tax_title = $tax_titles[$wp_query->get_queried_object_id()])
165
  return htmlspecialchars($this->get_title_paged($tax_title));
432
  , 'content' => __("
433
  <p>Here&#8217;s documentation for the options on the &#8220;Settings&#8221; tab.</p>
434
  <ul>
435
+ <li><strong>Convert lowercase category/tag names to title case when used in title tags</strong> &mdash; If your Tag Title Format is set to <code>{tag} | {blog}</code> and you have a tag called &#8220;blue widgets,&#8221; your title tag would be <code>blue widgets | My WordPress Blog</code>. Enabling this setting would capitalize the words in &#8220;blue widgets&#8221; so that the title tag would be <code>Blue Widgets | My WordPress Blog</code> instead.</li>
436
  <li>
437
  <p><strong>Rewrite Method</strong> &mdash; This setting controls the method by which Title Tag Rewriter edits your site&#8217;s <code>&lt;title&gt;</code> tags.</p>
438
  <ul>
modules/wp-settings/wp-settings.php CHANGED
@@ -10,9 +10,8 @@ if (class_exists('SU_Module')) {
10
  class SU_WpSettings extends SU_Module {
11
 
12
  var $results = array();
13
-
14
- function get_module_title() { return __('Settings Monitor (Beta)', 'seo-ultimate'); }
15
- function get_menu_title() { return __('Settings Monitor', 'seo-ultimate'); }
16
 
17
  function has_menu_count() { return true; }
18
  function get_menu_count() {
@@ -31,7 +30,7 @@ class SU_WpSettings extends SU_Module {
31
  __('WordPress will allow search engines to visit your site.', 'seo-ultimate'));
32
  else
33
  $this->results[] = array(SU_RESULT_ERROR, __('Blog is hidden from search engines', 'seo-ultimate'),
34
- __('WordPress is configured to block search engines. This will nullify your site&#8217;s SEO and should be resolved immediately.', 'seo-ultimate'), 'options-privacy.php');
35
 
36
  switch (suwp::permalink_mode()) {
37
  case SUWP_QUERY_PERMALINKS:
10
  class SU_WpSettings extends SU_Module {
11
 
12
  var $results = array();
13
+
14
+ function get_module_title() { return __('Settings Monitor', 'seo-ultimate'); }
 
15
 
16
  function has_menu_count() { return true; }
17
  function get_menu_count() {
30
  __('WordPress will allow search engines to visit your site.', 'seo-ultimate'));
31
  else
32
  $this->results[] = array(SU_RESULT_ERROR, __('Blog is hidden from search engines', 'seo-ultimate'),
33
+ __('WordPress is configured to discourage search engines. This will nullify your site&#8217;s SEO and should be resolved immediately.', 'seo-ultimate'), 'options-reading.php');
34
 
35
  switch (suwp::permalink_mode()) {
36
  case SUWP_QUERY_PERMALINKS:
plugin/class.seo-ultimate.php CHANGED
@@ -208,9 +208,6 @@ class SEO_Ultimate {
208
  if (!get_option('blog_public')) {
209
  //Add admin-wide notice
210
  add_action('admin_notices', array(&$this, 'private_blog_admin_notice'));
211
-
212
- //Remove duplicate Robots Meta notice
213
- suwp::remove_instance_action('admin_footer', 'RobotsMeta_Admin', 'blog_public_warning');
214
  }
215
 
216
  add_action('admin_init', array(&$this, 'admin_init'));
@@ -1402,17 +1399,31 @@ class SEO_Ultimate {
1402
  }
1403
 
1404
  /**
1405
- * Outputs a WordPress-esque admin notice regarding the privacy setting.
1406
- * The setting must be checked *before* this function is hooked into WordPress.
1407
  *
1408
  * @since 1.7
1409
  */
1410
  function private_blog_admin_notice() {
1411
  echo "\n<div class='error'><p>";
1412
- _e('<strong>SEO Ultimate Notice:</strong> Your blog is configured to block search engine spiders. To resolve this, <a href="options-privacy.php" target="_blank">go to your Privacy settings</a> and set your blog visible to everyone.', 'seo-ultimate');
1413
  echo "</p></div>";
1414
  }
1415
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1416
 
1417
  /********** MODULE FUNCTIONS ***********/
1418
 
@@ -1461,6 +1472,17 @@ class SEO_Ultimate {
1461
  return false;
1462
  }
1463
 
 
 
 
 
 
 
 
 
 
 
 
1464
  /**
1465
  * @since 6.4
1466
  */
@@ -1519,8 +1541,8 @@ class SEO_Ultimate {
1519
  if (!isset($fields['misc'][$tab])) $fields['misc'][$tab] = array();
1520
  $fields['misc'][$tab] += $tab_fields;
1521
  } else {
1522
- list($pos, $key) = explode('|', $tab);
1523
- $fields['misc'][$pos][$key] = $tab_fields;
1524
  }
1525
  }
1526
  }
@@ -1544,7 +1566,7 @@ class SEO_Ultimate {
1544
  function add_postmeta_box() {
1545
 
1546
  //Add the metabox to posts and pages.
1547
- $posttypes = suwp::get_post_type_names();
1548
  foreach ($posttypes as $screen) {
1549
 
1550
  if (strpos($screen, '"') !== false)
@@ -1774,7 +1796,7 @@ class SEO_Ultimate {
1774
  }
1775
 
1776
 
1777
- $posttypeobjs = suwp::get_post_type_objects();
1778
  foreach ($posttypeobjs as $posttypeobj) {
1779
 
1780
  if ($include && !in_array('posttype', $include) && !in_array('posttype_' . $posttypeobj->name, $include))
208
  if (!get_option('blog_public')) {
209
  //Add admin-wide notice
210
  add_action('admin_notices', array(&$this, 'private_blog_admin_notice'));
 
 
 
211
  }
212
 
213
  add_action('admin_init', array(&$this, 'admin_init'));
1399
  }
1400
 
1401
  /**
1402
+ * Outputs a WordPress-esque admin notice regarding the "discourage search engines" setting.
1403
+ * The value of this setting must be assessed *before* this function is hooked into WordPress.
1404
  *
1405
  * @since 1.7
1406
  */
1407
  function private_blog_admin_notice() {
1408
  echo "\n<div class='error'><p>";
1409
+ _e('<strong>SEO Ultimate Notice:</strong> Your blog is configured to block search engine spiders. To resolve this, <a href="options-reading.php" target="_blank">go to your Reading settings</a> and disable the &#8220;discourage search engines&#8221; option.', 'seo-ultimate');
1410
  echo "</p></div>";
1411
  }
1412
 
1413
+ /**
1414
+ * @since 7.6
1415
+ */
1416
+ function should_show_wp_ultimate_promo() {
1417
+ return $this->is_wp_ultimate_promo_applicable() && $this->get_setting('wp_ultimate', true, 'settings');
1418
+ }
1419
+
1420
+ /**
1421
+ * @since 7.6
1422
+ */
1423
+ function is_wp_ultimate_promo_applicable() {
1424
+ //If the current user can install themes and if WP Ultimate isn't already uploaded...
1425
+ return current_user_can('install_themes') && (wp_get_theme('wpultimate')->errors() !== false);
1426
+ }
1427
 
1428
  /********** MODULE FUNCTIONS ***********/
1429
 
1472
  return false;
1473
  }
1474
 
1475
+ /**
1476
+ * @since 7.6
1477
+ */
1478
+ function get_module_var($key, $var, $default) {
1479
+
1480
+ if (isset($this->modules[$key]) && property_exists($this->modules[$key], $var))
1481
+ return $this->modules[$key]->$var;
1482
+
1483
+ return $default;
1484
+ }
1485
+
1486
  /**
1487
  * @since 6.4
1488
  */
1541
  if (!isset($fields['misc'][$tab])) $fields['misc'][$tab] = array();
1542
  $fields['misc'][$tab] += $tab_fields;
1543
  } else {
1544
+ list($pos, $keys) = explode('|', $tab, 2);
1545
+ $fields['misc'][$pos][$keys] = $tab_fields;
1546
  }
1547
  }
1548
  }
1566
  function add_postmeta_box() {
1567
 
1568
  //Add the metabox to posts and pages.
1569
+ $posttypes = get_post_types(array('public' => true), 'names');
1570
  foreach ($posttypes as $screen) {
1571
 
1572
  if (strpos($screen, '"') !== false)
1796
  }
1797
 
1798
 
1799
+ $posttypeobjs = get_post_types(array('public' => true), 'objects');
1800
  foreach ($posttypeobjs as $posttypeobj) {
1801
 
1802
  if ($include && !in_array('posttype', $include) && !in_array('posttype_' . $posttypeobj->name, $include))
plugin/global.css CHANGED
@@ -237,7 +237,7 @@ div.su-module select optgroup option {
237
  text-decoration: none;
238
  }
239
 
240
- .su-tabs ul.ui-tabs-nav li.ui-tabs-selected a {
241
  -moz-border-radius-topleft: 4px;
242
  -moz-border-radius-topright: 4px;
243
  -webkit-border-top-left-radius: 4px;
@@ -250,11 +250,11 @@ div.su-module select optgroup option {
250
  padding: 0 9px;
251
  }
252
 
253
- .su-tabs ul.ui-tabs-nav li.ui-tabs-selected a {
254
  border-bottom-color: #fff;
255
  }
256
 
257
- #su-postmeta-box .su-tabs ul.ui-tabs-nav li.ui-tabs-selected a {
258
  background-color: white;
259
  }
260
 
237
  text-decoration: none;
238
  }
239
 
240
+ .su-tabs ul.ui-tabs-nav li.ui-state-active a {
241
  -moz-border-radius-topleft: 4px;
242
  -moz-border-radius-topright: 4px;
243
  -webkit-border-top-left-radius: 4px;
250
  padding: 0 9px;
251
  }
252
 
253
+ .su-tabs ul.ui-tabs-nav li.ui-state-active a {
254
  border-bottom-color: #fff;
255
  }
256
 
257
+ #su-postmeta-box .su-tabs ul.ui-tabs-nav li.ui-state-active a {
258
  background-color: white;
259
  }
260
 
plugin/images/wp-ultimate.gif ADDED
Binary file
readme.txt CHANGED
@@ -1,9 +1,9 @@
1
  === SEO Ultimate ===
2
  Contributors: SEO Design Solutions, JohnLamansky
3
  Tags: seo, SEO Ultimate, suite, google, yahoo, bing, search engines, admin, post, page, custom post types, categories, tags, terms, custom taxonomies, base, title, title tag, wp_title, meta, robots, noindex, nofollow, canonical, HTTP headers, 404, robots.txt, htaccess, slugs, url, anchor, more, link, excerpt, permalink, links, autolinks, code, footer, settings, redirect, 301, 302, 307, modules, uninstallable, reinstallable, downgradable, import, export, CSV, affiliate, Open Graph, og, microdata, Facebook, Twitter, Schema.org
4
- Requires at least: 3.3
5
- Tested up to: 3.4.1
6
- Stable tag: 7.5.7
7
 
8
  This all-in-one SEO plugin gives you control over title tags, noindex, meta tags, Open Graph, 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 7.5 adds support for Twitter Cards, Schema.org, and place snippets
15
  * Version 7.4 adds the Author Highlighter module
16
  * Version 7.3 adds the Open Graph Integrator module
17
  * Version 7.2 updates Permalink Tweaker
18
- * Version 7.1 adds new Link Mask Generator features
19
 
20
  = Features =
21
 
@@ -28,24 +28,12 @@ SEO Ultimate is an all-in-one [SEO](http://www.seodesignsolutions.com/) plugin w
28
  * Format the `<title>` tags of posts, pages, categories, tags, archives, search results, and more!
29
  * Choose between two rewrite methods: "output buffering" or "filtering"
30
 
31
- * **Meta Description Editor** -- UPDATED in Version 7.0
32
  * Edit the `<meta>` description tags for posts, pages, attachments, categories, tags, post format archives, and the homepage.
33
  * Increase SERP clickthrough rates by influencing search engine result snippets.
34
  * Mass-editor makes it a cinch to go back and add descriptions to old posts.
35
  * Use the `{excerpt::autogen}` variable to auto-generate meta descriptions if desired.
36
 
37
- * **Meta Keywords Editor**
38
- * Edit the `<meta>` keyword tags for posts, pages, categories, terms, and the homepage.
39
- * Easily specify global keywords that are applied across the entire site.
40
- * Go back and edit old posts' and pages' keywords with the mass-editor.
41
- * Automatically generate meta keywords based on categories, tags, custom taxonomy terms, and frequently-used words.
42
-
43
- * **Meta Robot Tags Editor**
44
- * Add the `<meta name="robots" content="noindex,follow" />` tag to archives, comment feeds, the login page, and more.
45
- * Set meta robots tags (index/noindex and follow/nofollow) for each individual post, page, category, tag, and post type archive on your blog. Also supports custom post types and custom taxonomies.
46
- * Avoid duplicate content SEO issues with the recommended noindex settings (see built-in module documentation for details).
47
- * Give instructions to search engine spiders if desired (`noodp`, `noydir`, and `noarchive`).
48
-
49
  * **Deeplink Juggernaut**
50
  * Use the power of anchor text to boost your internal ranking SEO paradigm.
51
  * Searches your site's content for anchor texts you specify and automatically links them to a destination of your choosing. Lets you easily build internal links to URLs, posts, pages, attachments, custom post type items, categories, terms, post format archives, and custom taxonomy term archives.
@@ -53,7 +41,7 @@ SEO Ultimate is an all-in-one [SEO](http://www.seodesignsolutions.com/) plugin w
53
  * Easily select autolink destinations using autocomplete textboxes that scour your site's content and taxonomy terms to find the link destination you're looking for.
54
  * Autolinks point to the objects themselves, not to their URLs, so if you change the URL of a post or category on your site, the autolinks automatically adjust.
55
  * Avoid over-optimization penalties by controlling the maximum number of autolinks added to each post/page, the maximum number of times an anchor is linked per post/page, and/or the maximum number of times a post/page can link to the same destination.
56
- * Decide how many times each anchor is linked across your entire site, on a per-link or global basis.
57
  * Choose whether or not posts can link to themselves and/or to the current URL with a few simple checkboxes.
58
  * Apply the nofollow attribute on a per-link basis. (Perfect for automatic affiliate links.)
59
  * Exclude specific posts/pages from having links added to them, if desired (e.g. contact pages, the homepage, etc.).
@@ -62,52 +50,25 @@ SEO Ultimate is an all-in-one [SEO](http://www.seodesignsolutions.com/) plugin w
62
  * Build internal links to your posts from within the WordPress post editor! Use "Instant Post Propulsion" technology to automatically link your old posts to new ones.
63
  * Lets you enable "Silo Linking" mode so that posts only link to other posts in the same category.
64
 
65
- * **Canonicalizer**
66
- * Point search engines to preferred content access points with `<link rel="canonical" />` head tags and/or `Link: <url>; rel="canonical"` HTTP headers.
67
- * Go beyond the basic canonical tag functionality of WordPress 2.9+ with SEO Ultimate's support for category/tag/date/author archives.
68
- * Redirect requests for non-existent pagination with a simple checkbox.
69
-
70
- * **404 Monitor**
71
- * Improve the visiting experience of users and spiders by keeping tabs on "page not found" errors. (Use a redirection plugin to point dead-end URLs to your content.)
72
- * Find out what URLs are referring visitors to 404 errors.
73
- * The default settings hone in on the most important errors by only logging 404s that either have a referring URL or are generated by a search engine spider.
74
- * If desired, ignore 404s generated from specific URLs or wildcard URL patterns.
75
-
76
- * **Linkbox Inserter**
77
- * Encourage natural linkbuilding activity by adding textboxes to the end of your posts/pages that contain automatically-generated link HTML.
78
-
79
- * **File Editor**
80
- * Implement advanced SEO strategies with the `.htaccess` editor.
81
- * Give instructions to search engines via the `robots.txt` editor.
82
-
83
- * **Slug Optimizer**
84
- * Increase in-URL keyword potency by removing "filler words" (like "the," "with," "and," etc.) from post/page URLs.
85
- * Lets you customize the "filler words" list as desired.
86
-
87
- * **More Link Customizer**
88
- * SEO your posts' "read more" links by including the posts' keyword-rich titles in the anchor text.
89
- * Override the "read more" link on a per-post basis.
90
- * Include `<strong>` or `<em>` tags in the anchor text if so desired.
91
-
92
- * **Code Inserter**
93
- * Easily insert custom HTML into your site's `<head>` tag, footer, or item content.
94
- * Use to add Google Analytics, Feedburner FeedFlare, Google AdSense section targeting, and other SEO/SEM-enhancing code snippets.
95
- * Code remains even when switching themes.
96
 
97
- * **Rich Snippet Creator** -- UPDATED in Version 7.5
98
  * Easily add rich snippet code for reviews and places.
99
  * Attract more search traffic with eye-catching supplementary SERP data.
100
  * Supports the new Schema.org format used by Google, Bing, Yahoo, and Yandex.
101
 
102
- * **Sharing Facilitator**
103
- * Adds buttons that make it easy for visitors to share your content on social networking sites (thus building links to your site).
104
- * Choose from either the ShareThis or the AddThis button.
105
- * Unlike the official ShareThis plugin, SEO Ultimate doesn't require you to register at the ShareThis website before enabling the button -- just enable and go.
106
-
107
- * **Webmaster Verification Assistant**
108
- * Enter verification codes in the provided fields to access search engine webmaster tools.
109
 
110
- * **Link Mask Generator** -- UPDATED in Version 7.1
111
  * Generate robots.txt-blocked "link masks" (e.g. `www.example.com/go/google/`) that pass-through to an external URL.
112
  * Mask links on a per-link, per-post basis so you can exert fine-tuned control over your posts' linkflow.
113
  * Create global link masks that apply across your entire site.
@@ -115,56 +76,62 @@ SEO Ultimate is an all-in-one [SEO](http://www.seodesignsolutions.com/) plugin w
115
  * Link masks provide a modern replacement for the deprecated, nofollow-based "PageRank Sculpting" technique.
116
  * Perfect for affiliate marketers and SEO-savvy bloggers.
117
 
118
- * **Nofollow Manager**
119
- * Lets you maintain `rel="nofollow"` settings when migrating from other SEO plugins
 
 
120
 
121
- * **Permalink Tweaker** -- UPDATED in Version 7.2
 
 
 
 
 
 
122
  * Lets you remove the permalink base for categories, tags, and/or custom taxonomies.
123
  * For example, enable category base removal to convert `http://example.com/category/example` into `http://example.com/example`, and then pair that with a `/%category%/%postname%/` permalink to enable some serious SEO siloing action.
124
  * The "URL Conflict Resolution" setting lets you arbitrate between pages/terms when taxonomy base removal causes their URLs to conflict
125
 
 
 
 
 
 
 
126
  * **SEO Ultimate Widgets**
127
  * Lets you output your Deeplink Juggernaut Footer Links in a widget.
128
  * The Siloed Categories widget makes it drag-and-drop-easy to construct siloed navigation on your site.
129
 
130
- * **Settings Monitor**
131
- * Keep tabs on the SEO-friendliness of your site's settings with a dashboard of green/yellow/red indicators.
132
-
133
- * **Open Graph Integrator** -- UPDATED in Version 7.5
134
- * Out-of-the-box functionality autogenerates Open Graph data for your homepage, posts, pages, attachments, custom post type objects, and user profile pages.
135
- * Fine-grained controls allow you to customize the Open Graph title, image, and content type for every single post, page, attachment, and custom post type object on your site.
136
- * Mass-editors let you specify Open Graph data for multiple posts and pages at a time.
137
- * Includes support for summary-style and photo-style Twitter Cards.
138
-
139
- * **Author Highlighter** -- NEW in Version 7.4
140
- * Generates code so that when one of your site's posts appears in Google search results, the Google+ profile picture of the post's author will appear alongside it.
141
- * Includes support for both single-author and multi-author site setups.
142
- * Supports author highlighting for posts, pages, attachments, custom post types, the homepage, archive pages, and author pages.
143
- * Inserts a "Google+ Profile URL" field on the WordPress user profile editor, so that users can insert their Google+ URL and enable author highlighting on their posts.
144
-
145
  * **Plugin Settings Manager** (located under Settings > SEO Ultimate)
146
  * Export your SEO Ultimate settings to a file and re-import later if desired.
147
  * Use the export/import functionality to move SEO Ultimate settings between WordPress sites.
148
  * Reset all settings back to "factory defaults" if something goes wrong.
149
 
 
 
 
 
 
 
 
 
 
 
 
 
150
  * **Additional features**
 
 
 
151
  * Lets you import post meta from All in One SEO Pack.
152
- * Displays admin notices if blog privacy settings are configured to block search engines.
 
153
  * Supports [WordPress plugin translation](http://urbangiraffe.com/articles/translating-wordpress-themes-and-plugins/). POT file is included in the zip file.
154
- * SEO Ultimate documentation is seamlessly integrated into the contextual help system of WordPress 2.7+ and is accessible via the dropdowns in the upper-right-hand corner of the admin screen. In-depth info, explanations, and FAQ are just a click away.
155
- * Unlike certain other SEO plugins, SEO Ultimate sports a clean, simple, aesthetically-pleasing interface, with no ads or donation nags.
156
- * SEO Ultimate cleanly integrates itself into WordPress without plastering its name all over the interface.
157
- * Includes icon integration with the WordPress 2.7+ menu and the Ozh Admin Drop Down Menu plugin.
158
- * Uses WordPress plugin security features like nonces, etc.
159
  * Includes an uninstaller that can delete the plugin's files and database entries if desired.
160
- * Lets you upgrade/downgrade the plugin to versions of your choosing.
161
-
162
- * **More Features In the Works**
163
- There are many additional features in development. Install SEO Ultimate today and use WordPress's automatic plugin updater to get new features as they're released.
164
 
165
  [**Download**](http://downloads.wordpress.org/plugin/seo-ultimate.zip) **your free copy of SEO Ultimate today.**
166
 
167
- [youtube http://www.youtube.com/watch?v=IE_10_nwe0c]
168
 
169
  == Installation ==
170
 
@@ -277,6 +244,22 @@ Frequently asked questions, settings help, and troubleshooting tips for SEO Ulti
277
 
278
  == Changelog ==
279
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
280
  = Version 7.5.7 (August 17, 2012) =
281
  * Removed Feature: Open Graph Integrator no longer falls back to using webpage screenshot images from the WordPress.com mShots service, as this was causing "Generating Image" placeholders to be cached by Facebook
282
 
1
  === SEO Ultimate ===
2
  Contributors: SEO Design Solutions, JohnLamansky
3
  Tags: seo, SEO Ultimate, suite, google, yahoo, bing, search engines, admin, post, page, custom post types, categories, tags, terms, custom taxonomies, base, title, title tag, wp_title, meta, robots, noindex, nofollow, canonical, HTTP headers, 404, robots.txt, htaccess, slugs, url, anchor, more, link, excerpt, permalink, links, autolinks, code, footer, settings, redirect, 301, 302, 307, modules, uninstallable, reinstallable, downgradable, import, export, CSV, affiliate, Open Graph, og, microdata, Facebook, Twitter, Schema.org
4
+ Requires at least: 3.5
5
+ Tested up to: 3.5
6
+ Stable tag: 7.6
7
 
8
  This all-in-one SEO plugin gives you control over title tags, noindex, meta tags, Open Graph, slugs, canonical, autolinks, 404 errors, rich snippets, and more.
9
 
11
 
12
  = Recent Releases =
13
 
14
+ * Version 7.6 adds Deeplink Juggernaut autolink dampening
15
  * Version 7.5 adds support for Twitter Cards, Schema.org, and place snippets
16
  * Version 7.4 adds the Author Highlighter module
17
  * Version 7.3 adds the Open Graph Integrator module
18
  * Version 7.2 updates Permalink Tweaker
 
19
 
20
  = Features =
21
 
28
  * Format the `<title>` tags of posts, pages, categories, tags, archives, search results, and more!
29
  * Choose between two rewrite methods: "output buffering" or "filtering"
30
 
31
+ * **Meta Description Editor**
32
  * Edit the `<meta>` description tags for posts, pages, attachments, categories, tags, post format archives, and the homepage.
33
  * Increase SERP clickthrough rates by influencing search engine result snippets.
34
  * Mass-editor makes it a cinch to go back and add descriptions to old posts.
35
  * Use the `{excerpt::autogen}` variable to auto-generate meta descriptions if desired.
36
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  * **Deeplink Juggernaut**
38
  * Use the power of anchor text to boost your internal ranking SEO paradigm.
39
  * Searches your site's content for anchor texts you specify and automatically links them to a destination of your choosing. Lets you easily build internal links to URLs, posts, pages, attachments, custom post type items, categories, terms, post format archives, and custom taxonomy term archives.
41
  * Easily select autolink destinations using autocomplete textboxes that scour your site's content and taxonomy terms to find the link destination you're looking for.
42
  * Autolinks point to the objects themselves, not to their URLs, so if you change the URL of a post or category on your site, the autolinks automatically adjust.
43
  * Avoid over-optimization penalties by controlling the maximum number of autolinks added to each post/page, the maximum number of times an anchor is linked per post/page, and/or the maximum number of times a post/page can link to the same destination.
44
+ * Reduce autolink frequency by a given percentage (globally or per-link) with the frequency dampener feature. (Useful for large sites.)
45
  * Choose whether or not posts can link to themselves and/or to the current URL with a few simple checkboxes.
46
  * Apply the nofollow attribute on a per-link basis. (Perfect for automatic affiliate links.)
47
  * Exclude specific posts/pages from having links added to them, if desired (e.g. contact pages, the homepage, etc.).
50
  * Build internal links to your posts from within the WordPress post editor! Use "Instant Post Propulsion" technology to automatically link your old posts to new ones.
51
  * Lets you enable "Silo Linking" mode so that posts only link to other posts in the same category.
52
 
53
+ * **Open Graph Integrator**
54
+ * Out-of-the-box functionality autogenerates Open Graph data for your homepage, posts, pages, attachments, custom post type objects, and user profile pages.
55
+ * Fine-grained controls allow you to customize the Open Graph title, image, and content type for every single post, page, attachment, and custom post type object on your site.
56
+ * Mass-editors let you specify Open Graph data for multiple posts and pages at a time.
57
+ * Includes support for summary-style and photo-style Twitter Cards.
58
+ * Lets you fix the official Facebook/Twitter HTML so that it validates as XHTML or HTML5.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
 
60
+ * **Rich Snippet Creator**
61
  * Easily add rich snippet code for reviews and places.
62
  * Attract more search traffic with eye-catching supplementary SERP data.
63
  * Supports the new Schema.org format used by Google, Bing, Yahoo, and Yandex.
64
 
65
+ * **Author Highlighter**
66
+ * Generates code so that when one of your site's posts appears in Google search results, the Google+ profile picture of the post's author will appear alongside it.
67
+ * Includes support for both single-author and multi-author site setups.
68
+ * Supports author highlighting for posts, pages, attachments, custom post types, the homepage, archive pages, and author pages.
69
+ * Inserts a "Google+ Profile URL" field on the WordPress user profile editor, so that users can insert their Google+ URL and enable author highlighting on their posts.
 
 
70
 
71
+ * **Link Mask Generator**
72
  * Generate robots.txt-blocked "link masks" (e.g. `www.example.com/go/google/`) that pass-through to an external URL.
73
  * Mask links on a per-link, per-post basis so you can exert fine-tuned control over your posts' linkflow.
74
  * Create global link masks that apply across your entire site.
76
  * Link masks provide a modern replacement for the deprecated, nofollow-based "PageRank Sculpting" technique.
77
  * Perfect for affiliate marketers and SEO-savvy bloggers.
78
 
79
+ * **Canonicalizer**
80
+ * Point search engines to preferred content access points with `<link rel="canonical" />` head tags and/or `Link: <url>; rel="canonical"` HTTP headers.
81
+ * Go beyond WordPress's basic canonical tag functionality with SEO Ultimate's support for category/tag/date/author archives.
82
+ * Redirect requests for non-existent pagination with a simple checkbox.
83
 
84
+ * **404 Monitor**
85
+ * Improve the visiting experience of users and spiders by keeping tabs on "page not found" errors. (Use a redirection plugin to point dead-end URLs to your content.)
86
+ * Find out what URLs are referring visitors to 404 errors.
87
+ * The default settings hone in on the most important errors by only logging 404s that either have a referring URL or are generated by a search engine spider.
88
+ * If desired, ignore 404s generated from specific URLs or wildcard URL patterns.
89
+
90
+ * **Permalink Tweaker**
91
  * Lets you remove the permalink base for categories, tags, and/or custom taxonomies.
92
  * For example, enable category base removal to convert `http://example.com/category/example` into `http://example.com/example`, and then pair that with a `/%category%/%postname%/` permalink to enable some serious SEO siloing action.
93
  * The "URL Conflict Resolution" setting lets you arbitrate between pages/terms when taxonomy base removal causes their URLs to conflict
94
 
95
+ * **Meta Robot Tags Editor**
96
+ * Add the `<meta name="robots" content="noindex,follow" />` tag to archives, comment feeds, the login page, and more.
97
+ * Set meta robots tags (index/noindex and follow/nofollow) for each individual post, page, category, tag, and post type archive on your blog. Also supports custom post types and custom taxonomies.
98
+ * Avoid duplicate content SEO issues with the recommended noindex settings (see built-in module documentation for details).
99
+ * Give instructions to search engine spiders if desired (`noodp`, `noydir`, and `noarchive`).
100
+
101
  * **SEO Ultimate Widgets**
102
  * Lets you output your Deeplink Juggernaut Footer Links in a widget.
103
  * The Siloed Categories widget makes it drag-and-drop-easy to construct siloed navigation on your site.
104
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105
  * **Plugin Settings Manager** (located under Settings > SEO Ultimate)
106
  * Export your SEO Ultimate settings to a file and re-import later if desired.
107
  * Use the export/import functionality to move SEO Ultimate settings between WordPress sites.
108
  * Reset all settings back to "factory defaults" if something goes wrong.
109
 
110
+ * And much more...
111
+ * **Code Inserter**: Easily insert SEO/SEM-enhancing custom HTML into your site's `<head>` tag, footer, or item content. Code remains even when switching themes.
112
+ * **File Editor**: Implement advanced SEO strategies with the `.htaccess` editor, and give instructions to search engines via the `robots.txt` editor.
113
+ * **Linkbox Inserter**: Encourage natural linkbuilding activity by adding textboxes to the end of your posts/pages that contain automatically-generated link HTML.
114
+ * **Meta Keywords Editor**: Auto-generate and edit `<meta>` keywords for posts, pages, categories, tags, terms, and the homepage.
115
+ * **More Link Customizer**: Optimize your posts' "read more" links by including the posts' keyword-rich titles in the anchor text.
116
+ * **Nofollow Manager**: Lets you maintain `rel="nofollow"` settings when migrating from other SEO plugins
117
+ * **Settings Monitor**: Keep tabs on the SEO-friendliness of your site's settings with a dashboard of green/yellow/red indicators.
118
+ * **Sharing Facilitator**: Adds buttons that make it easy for visitors to share your content on social networking sites (thus building links to your site).
119
+ * **Slug Optimizer**: Increase in-URL keyword potency by removing customizeable "filler words" (like "the," "with," "and," etc.) from post/page URLs.
120
+ * **Webmaster Verification Assistant**: Enter verification codes in the provided fields to access search engine webmaster tools.
121
+
122
  * **Additional features**
123
+ * Features a clean, aesthetically-pleasing interface, with no donation nags.
124
+ * Cleanly integrates into the admin interface with minimal branding.
125
+ * Includes seamlessly-integrated documentation, accessible via the "Help" dropdown in the upper-right-hand corner of the admin screen. In-depth info, explanations, and FAQs are just a click away.
126
  * Lets you import post meta from All in One SEO Pack.
127
+ * Lets you downgrade to the previous version of the plugin in case an upgrade goes awry.
128
+ * Displays admin notices if WordPress settings are configured to discourage search engines.
129
  * Supports [WordPress plugin translation](http://urbangiraffe.com/articles/translating-wordpress-themes-and-plugins/). POT file is included in the zip file.
 
 
 
 
 
130
  * Includes an uninstaller that can delete the plugin's files and database entries if desired.
 
 
 
 
131
 
132
  [**Download**](http://downloads.wordpress.org/plugin/seo-ultimate.zip) **your free copy of SEO Ultimate today.**
133
 
134
+ [youtube http://www.youtube.com/watch?v=CZwZuUPCAto]
135
 
136
  == Installation ==
137
 
244
 
245
  == Changelog ==
246
 
247
+ = Version 7.6 (December 31, 2012) =
248
+ * Feature: Open Graph Integrator now lets you output W3C-valid XHTML or HTML5 instead of the non-validating code prescribed by Open Graph and Twitter
249
+ * Improvement: Deeplink Juggernaut's "Site Cap" feauture has been replaced with a more efficient "Dampener" feature
250
+ * Improvement: Open Graph Integrator no longer outputs author data for pages, and lets you turn it off for posts
251
+ * Improvement: Rich Snippet Creator now has an admin section that gives a brief explanation of how to use it, since some users were confused by the module's lack of an admin page and assumed it wasn't working
252
+ * Improvement: Link Mask Generator now disables itself and displays a warning if you're not using a compatible permalink structure
253
+ * Improvement: Added lots of missing documentation
254
+ * Improvement: Removed unused code throughout the plugin
255
+ * Bugfix: Open Graph Integrator no longer generates a fatal error when the active theme doesn't support post thumbnails
256
+ * Bugfix: Open Graph Integrator now outputs the correct URL on the "Posts page" when the "Front page displays" option (under Settings > Reading) is set to "A static page"
257
+ * Bugfix: Fixed errors that would appear when Meta Keywords Editor and the WP_DEBUG mode were both enabled
258
+ * Bugfix: Archive pages for new terms no longer generate 404 errors when Permalink Tweaker's base removal feature is in use
259
+ * Bugfix: The "Nofollow" checkbox on the "Miscellaneous" tab of the "SEO Settings" post editor box no longer reverts to an unchecked state when the post is saved
260
+ * Bugfix: The plugin no longer generates a "WordPress Database Error" after upgrading the plugin on sites with the WP_DEBUG mode enabled
261
+ * Compatibility: Fixed minor WordPress 3.5 compatibility issues
262
+
263
  = Version 7.5.7 (August 17, 2012) =
264
  * Removed Feature: Open Graph Integrator no longer falls back to using webpage screenshot images from the WordPress.com mShots service, as this was causing "Generating Image" placeholders to be cached by Facebook
265
 
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: 7.5.7
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 7.5.7
16
  * @link http://www.seodesignsolutions.com/wordpress-seo/ SEO Ultimate Homepage
17
  */
18
 
@@ -41,21 +41,21 @@ if (!defined('ABSPATH')) {
41
 
42
  /********** CONSTANTS **********/
43
 
44
- //The minimum version of WordPress required
 
45
  define('SU_MINIMUM_WP_VER', '3.3');
46
 
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', '7.5.7');
51
  define('SU_AUTHOR', 'SEO Design Solutions');
52
  define('SU_AUTHOR_URI', 'http://www.seodesignsolutions.com/');
53
- define('SU_USER_AGENT', 'SeoUltimate/7.5.7');
54
 
55
  /********** INCLUDES **********/
56
 
57
  //Libraries
58
- include 'includes/backcompat.php';
59
  include 'includes/jlfunctions/jlfunctions.php';
60
  include 'includes/jlwp/jlwp.php';
61
 
@@ -69,7 +69,7 @@ include 'modules/class.su-module.php';
69
  include 'modules/class.su-importmodule.php';
70
 
71
 
72
- /********** PLUGIN FILE LOAD HANDLER **********/
73
 
74
  global $wp_version;
75
  if (version_compare($wp_version, SU_MINIMUM_WP_VER, '>=')) {
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: 7.6
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 7.6
16
  * @link http://www.seodesignsolutions.com/wordpress-seo/ SEO Ultimate Homepage
17
  */
18
 
41
 
42
  /********** CONSTANTS **********/
43
 
44
+ //The bare minimum version of WordPress required to run without generating a fatal error.
45
+ //SEO Ultimate will refuse to run if activated on a lower version of WP.
46
  define('SU_MINIMUM_WP_VER', '3.3');
47
 
48
  //Reading plugin info from constants is faster than trying to parse it from the header above.
49
  define('SU_PLUGIN_NAME', 'SEO Ultimate');
50
  define('SU_PLUGIN_URI', 'http://www.seodesignsolutions.com/wordpress-seo/');
51
+ define('SU_VERSION', '7.6');
52
  define('SU_AUTHOR', 'SEO Design Solutions');
53
  define('SU_AUTHOR_URI', 'http://www.seodesignsolutions.com/');
54
+ define('SU_USER_AGENT', 'SeoUltimate/7.6');
55
 
56
  /********** INCLUDES **********/
57
 
58
  //Libraries
 
59
  include 'includes/jlfunctions/jlfunctions.php';
60
  include 'includes/jlwp/jlwp.php';
61
 
69
  include 'modules/class.su-importmodule.php';
70
 
71
 
72
+ /********** VERSION CHECK & INITIALIZATION **********/
73
 
74
  global $wp_version;
75
  if (version_compare($wp_version, SU_MINIMUM_WP_VER, '>=')) {
translations/seo-ultimate.pot CHANGED
@@ -1,63 +1,39 @@
1
- # Copyright (C) 2012 SEO Ultimate
2
  # This file is distributed under the same license as the SEO Ultimate package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: SEO Ultimate 7.5.7\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/seo-ultimate\n"
7
- "POT-Creation-Date: 2012-08-17 17:00:14+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2012-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <LL@li.org>\n"
14
 
15
- #: includes/jlfunctions/str.php:105 plugin/su-functions.php:77
16
  msgid "%s and %s"
17
  msgstr ""
18
 
19
- #: includes/jlfunctions/str.php:108 plugin/su-functions.php:80
20
  msgid ", "
21
  msgstr ""
22
 
23
- #: includes/jlfunctions/str.php:109 plugin/su-functions.php:81
24
  msgid "%s, and %s"
25
  msgstr ""
26
 
27
- #: includes/jlwp/functions.php:65
28
- msgid "Posts"
29
- msgstr ""
30
-
31
- #: includes/jlwp/functions.php:65
32
- msgid "Post"
33
- msgstr ""
34
-
35
- #: includes/jlwp/functions.php:66
36
- msgid "Pages"
37
- msgstr ""
38
-
39
- #: includes/jlwp/functions.php:66
40
- msgid "Page"
41
- msgstr ""
42
-
43
- #: includes/jlwp/functions.php:67
44
- msgid "Attachments"
45
- msgstr ""
46
-
47
- #: includes/jlwp/functions.php:67
48
- msgid "Attachment"
49
- msgstr ""
50
-
51
- #: includes/jlwp/functions.php:96
52
  msgctxt "post format"
53
  msgid "Format"
54
  msgstr ""
55
 
56
- #: includes/jlwp/functions.php:97
57
  msgid "Post Format Archives"
58
  msgstr ""
59
 
60
- #: includes/jlwp/functions.php:165
61
  msgid "backup your database"
62
  msgstr ""
63
 
@@ -69,89 +45,89 @@ msgstr ""
69
  msgid "Log"
70
  msgstr ""
71
 
72
- #: modules/404s/fofs-log.php:113 modules/class.su-module.php:1181
73
  msgid "Actions"
74
  msgstr ""
75
 
76
- #: modules/404s/fofs-log.php:114
77
  msgid "Hits"
78
  msgstr ""
79
 
80
- #: modules/404s/fofs-log.php:115
81
  msgid "URL with 404 Error"
82
  msgstr ""
83
 
84
- #: modules/404s/fofs-log.php:116
85
  msgid "Date of Most Recent Hit"
86
  msgstr ""
87
 
88
- #: modules/404s/fofs-log.php:117
89
  msgid "Referers"
90
  msgstr ""
91
 
92
- #: modules/404s/fofs-log.php:118 modules/404s/fofs-log.php:222
93
  msgid "User Agents"
94
  msgstr ""
95
 
96
- #: modules/404s/fofs-log.php:134
97
  msgid ""
98
  "New 404 errors will not be recorded because 404 logging is disabled on the "
99
  "Settings tab."
100
  msgstr ""
101
 
102
- #: modules/404s/fofs-log.php:141
103
  msgid "The log entry was successfully deleted."
104
  msgstr ""
105
 
106
- #: modules/404s/fofs-log.php:143
107
  msgid "This log entry has already been deleted."
108
  msgstr ""
109
 
110
- #: modules/404s/fofs-log.php:152
111
  msgid "The log was successfully cleared."
112
  msgstr ""
113
 
114
- #: modules/404s/fofs-log.php:156
115
  msgid "No 404 errors in the log."
116
  msgstr ""
117
 
118
- #: modules/404s/fofs-log.php:181
119
  msgid "Open URL in new window (will not be logged)"
120
  msgstr ""
121
 
122
- #: modules/404s/fofs-log.php:182
123
  msgid "Query Google for cached version of URL (opens in new window)"
124
  msgstr ""
125
 
126
- #: modules/404s/fofs-log.php:183
127
  msgid "Remove this URL from the log"
128
  msgstr ""
129
 
130
- #: modules/404s/fofs-log.php:186
131
  msgid "%s at %s"
132
  msgstr ""
133
 
134
- #: modules/404s/fofs-log.php:190
135
  msgid "View list of referring URLs"
136
  msgstr ""
137
 
138
- #: modules/404s/fofs-log.php:191
139
  msgid "View list of user agents"
140
  msgstr ""
141
 
142
- #: modules/404s/fofs-log.php:201
143
  msgid "Referring URLs"
144
  msgstr ""
145
 
146
- #: modules/404s/fofs-log.php:202 modules/404s/fofs-log.php:223
147
  msgid "Hide list"
148
  msgstr ""
149
 
150
- #: modules/404s/fofs-log.php:254
151
  msgid "Are you sure you want to delete all 404 log entries?"
152
  msgstr ""
153
 
154
- #: modules/404s/fofs-log.php:256
155
  msgid "Clear Log"
156
  msgstr ""
157
 
@@ -160,8 +136,8 @@ msgid "404 Monitor Settings"
160
  msgstr ""
161
 
162
  #: modules/404s/fofs-settings.php:17
163
- #: modules/internal-link-aliases/internal-link-aliases.php:31
164
- #: modules/titles/titles.php:40
165
  msgid "Settings"
166
  msgstr ""
167
 
@@ -205,15 +181,21 @@ msgstr ""
205
  msgid "404 Monitor"
206
  msgstr ""
207
 
208
- #: modules/404s/fofs.php:19 modules/canonical/canonical.php:212
209
- #: modules/files/files.php:144 modules/link-nofollow/link-nofollow.php:132
210
- #: modules/linkbox/linkbox.php:128 modules/linkbox/linkbox.php:135
211
- #: modules/meta/meta-descriptions.php:193 modules/meta/meta-keywords.php:173
212
- #: modules/meta/meta-robots.php:52 modules/meta/webmaster-verify.php:84
 
 
 
213
  #: modules/more-links/more-links.php:104 modules/more-links/more-links.php:111
214
- #: modules/rich-snippets/rich-snippets.php:394
 
 
215
  #: modules/settings/settings.php:63
216
- #: modules/sharing-buttons/sharing-buttons.php:71 modules/slugs/slugs.php:112
 
217
  #: modules/slugs/slugs.php:120 modules/titles/titles.php:357
218
  #: modules/user-code/user-code.php:97
219
  msgid "Overview"
@@ -253,25 +235,32 @@ msgid ""
253
  "<p>You can perform the following actions on each entry in the log:</p>\r\n"
254
  "\r\n"
255
  "<ul>\r\n"
256
- "\t<li>The &#8220;View&#8221; button will open the URL in a new window. This "
257
- "is useful for testing whether or not a redirect is working.</li>\r\n"
258
- "\t<li>The &#8220;Google Cache&#8221; button will open Google's archived "
259
- "version of the URL in a new window. This is useful for determining what "
260
- "content, if any, used to be located at that URL.</li>\r\n"
261
- "\t<li>Once you've taken care of a 404 error, you can click the &#8220;"
262
- "Remove&#8221; button to remove it from the list. The URL will reappear on "
263
- "the list if it triggers a 404 error in the future.</li>\r\n"
 
 
 
 
 
 
264
  "</ul>\r\n"
 
 
 
265
  msgstr ""
266
 
267
- #: modules/404s/fofs.php:45 modules/linkbox/linkbox.php:129
268
- #: modules/linkbox/linkbox.php:140 modules/meta/meta-descriptions.php:204
269
- #: modules/meta/meta-keywords.php:180 modules/meta/meta-robots.php:63
270
- #: modules/rich-snippets/rich-snippets.php:405
271
  msgid "Settings Help"
272
  msgstr ""
273
 
274
- #: modules/404s/fofs.php:46
275
  msgid ""
276
  "\r\n"
277
  "<p>The following options are available on the Settings tab:</p>\r\n"
@@ -316,16 +305,17 @@ msgid ""
316
  "</ul>\r\n"
317
  msgstr ""
318
 
319
- #: modules/404s/fofs.php:74 modules/files/files.php:165
320
- #: modules/meta/meta-descriptions.php:225 modules/meta/meta-keywords.php:203
321
- #: modules/meta/meta-robots.php:102
322
- #: modules/rich-snippets/rich-snippets.php:414 modules/slugs/slugs.php:114
323
- #: modules/slugs/slugs.php:130 modules/titles/titles.php:479
 
324
  #: modules/user-code/user-code.php:111
325
  msgid "Troubleshooting"
326
  msgstr ""
327
 
328
- #: modules/404s/fofs.php:75
329
  msgid ""
330
  "\r\n"
331
  "<p>404 Monitor doesn't appear to work? Take these notes into consideration:</"
@@ -384,6 +374,340 @@ msgstr ""
384
  msgid "Deeplink Juggernaut"
385
  msgstr ""
386
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
387
  #: modules/autolinks/content-autolinks-settings.php:16
388
  msgid "Content Deeplink Juggernaut Settings"
389
  msgstr ""
@@ -392,43 +716,33 @@ msgstr ""
392
  msgid "Content Link Settings"
393
  msgstr ""
394
 
395
- #: modules/autolinks/content-autolinks-settings.php:40
396
  msgid "Add Autolinks to..."
397
  msgstr ""
398
 
399
- #: modules/autolinks/content-autolinks-settings.php:43
400
- msgid "Allow posts to link to themselves."
401
  msgstr ""
402
 
403
- #: modules/autolinks/content-autolinks-settings.php:44
404
  msgid ""
405
- "Allow posts to link to the URL by which the visitor is accessing the post."
406
  msgstr ""
407
 
408
- #: modules/autolinks/content-autolinks-settings.php:45
409
  msgid "Self-Linking"
410
  msgstr ""
411
 
412
- #: modules/autolinks/content-autolinks-settings.php:48
413
- msgid "Enable per-link customization of quantity limits."
414
- msgstr ""
415
-
416
- #: modules/autolinks/content-autolinks-settings.php:49
417
  msgid "Don&#8217;t add any more than %d autolinks per post/page/etc."
418
  msgstr ""
419
 
420
- #: modules/autolinks/content-autolinks-settings.php:50
421
  msgid ""
422
  "Don&#8217;t link the same anchor text any more than %d times per post/page/"
423
  "etc."
424
  msgstr ""
425
 
426
- #: modules/autolinks/content-autolinks-settings.php:51
427
- msgid ""
428
- "Don&#8217;t link the same anchor text any more than %d times across my "
429
- "entire site."
430
- msgstr ""
431
-
432
  #: modules/autolinks/content-autolinks-settings.php:52
433
  msgid ""
434
  "Don&#8217;t link to the same destination any more than %d times per post/"
@@ -439,106 +753,139 @@ msgstr ""
439
  msgid "Quantity Restrictions"
440
  msgstr ""
441
 
442
- #: modules/autolinks/content-autolinks-settings.php:55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
443
  msgid ""
444
  "Don&#8217;t add autolinks to text within these HTML tags <em>(separate with "
445
  "commas)</em>:"
446
  msgstr ""
447
 
448
- #: modules/autolinks/content-autolinks-settings.php:55
449
  msgid "Tag Restrictions"
450
  msgstr ""
451
 
452
- #: modules/autolinks/content-autolinks-settings.php:63
453
  msgid "%s can only link to internal destinations that share at least one..."
454
  msgstr ""
455
 
456
- #: modules/autolinks/content-autolinks-settings.php:76
457
  msgid "Siloing"
458
  msgstr ""
459
 
460
- #: modules/autolinks/content-autolinks-settings.php:78
461
  msgid "CSS Class for Autolinks"
462
  msgstr ""
463
 
464
- #: modules/autolinks/content-autolinks.php:16
465
  msgid "Content Deeplink Juggernaut"
466
  msgstr ""
467
 
468
- #: modules/autolinks/content-autolinks.php:17
469
  msgid "Content Links"
470
  msgstr ""
471
 
472
- #: modules/autolinks/content-autolinks.php:284
473
  msgid ""
474
  "The Content Links section of Deeplink Juggernaut lets you automatically link "
475
  "a certain word or phrase in your post/page content to a URL you specify."
476
  msgstr ""
477
 
478
- #: modules/autolinks/content-autolinks.php:340
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
479
  #: modules/autolinks/footer-autolinks.php:157
480
  msgid "Edit Existing Links"
481
  msgstr ""
482
 
483
- #: modules/autolinks/content-autolinks.php:344
484
  #: modules/autolinks/footer-autolinks.php:161
485
  msgid "Add a New Link"
486
  msgstr ""
487
 
488
- #: modules/autolinks/content-autolinks.php:355
489
  #: modules/autolinks/footer-autolinks.php:171
490
  msgid "Anchor Text"
491
  msgstr ""
492
 
493
- #: modules/autolinks/content-autolinks.php:356
494
  #: modules/autolinks/footer-autolinks.php:172
495
  msgid "Destination"
496
  msgstr ""
497
 
498
- #: modules/autolinks/content-autolinks.php:357
499
  #: modules/autolinks/footer-autolinks.php:173
500
- msgid "Title Attribute"
 
 
 
 
501
  msgstr ""
502
 
503
- #: modules/autolinks/content-autolinks.php:359
504
  msgid "Site Cap"
505
  msgstr ""
506
 
507
- #: modules/autolinks/content-autolinks.php:360
508
  #: modules/autolinks/footer-autolinks.php:174
509
  msgid "Options"
510
  msgstr ""
511
 
512
- #: modules/autolinks/content-autolinks.php:362
513
  #: modules/autolinks/footer-autolinks.php:176
514
- #: modules/internal-link-aliases/internal-link-aliases.php:91
515
  msgid "Delete"
516
  msgstr ""
517
 
518
- #: modules/autolinks/content-autolinks.php:397
519
  #: modules/autolinks/footer-autolinks.php:210 modules/noindex/noindex.php:61
520
  #: modules/noindex/noindex.php:85
521
  msgid "Nofollow"
522
  msgstr ""
523
 
524
- #: modules/autolinks/content-autolinks.php:399
525
  #: modules/autolinks/footer-autolinks.php:212
526
  msgid "New window"
527
  msgstr ""
528
 
529
- #: modules/autolinks/content-autolinks.php:480
530
  msgid "Inbound Autolink Anchors:<br /><em>(one per line)</em>"
531
  msgstr ""
532
 
533
- #: modules/autolinks/content-autolinks.php:483
534
  msgid "Don&#8217;t add autolinks to anchor texts found in this post."
535
  msgstr ""
536
 
537
- #: modules/autolinks/content-autolinks.php:483
538
  msgid "Autolink Exclusion:"
539
  msgstr ""
540
 
541
- #: modules/autolinks/content-autolinks.php:489
542
  msgid ""
543
  "<strong>Incoming Autolink Anchors</strong> &mdash; When you enter anchors "
544
  "into this box, Deeplink Juggernaut will search for that anchor in all your "
@@ -585,7 +932,7 @@ msgid "Footer Links"
585
  msgstr ""
586
 
587
  #: modules/autolinks/footer-autolinks.php:169
588
- msgid "Link Location (optional)"
589
  msgstr ""
590
 
591
  #: modules/autolinks/footer-autolinks.php:197
@@ -596,7 +943,7 @@ msgstr ""
596
  msgid "Negative match"
597
  msgstr ""
598
 
599
- #: modules/canonical/canonical.php:12 modules/canonical/canonical.php:212
600
  msgid "Canonicalizer"
601
  msgstr ""
602
 
@@ -639,36 +986,21 @@ msgstr ""
639
  msgid "Automated 301 Redirects"
640
  msgstr ""
641
 
642
- #: modules/canonical/canonical.php:213
643
  msgid ""
644
  "\r\n"
645
  "<ul>\r\n"
646
- "\t<li>\r\n"
647
- "\t\t<p><strong>What it does:</strong> Canonicalizer improves on two "
648
- "WordPress features to minimize possible exact-content duplication penalties. "
649
- "The <code>&lt;link rel=&quot;canonical&quot; /&gt;</code> tags setting "
650
- "improves on the canonical tags feature of WordPress 2.9 and above by "
651
- "encompassing much more of your site than just your posts and Pages.</p>\r\n"
652
- "\t\t<p>The nonexistent pagination redirect feature fills a gap in "
653
- "WordPress's built-in canonicalization functionality: for example, if a URL "
654
- "request is made for page 6 of a category archive, and that category doesn't "
655
- "have a page 6, then by default, depending on the context, WordPress will "
656
- "display a blank page, or it will display the content of the closest page "
657
- "number available, without issuing a 404 error or a 301 redirect (thus "
658
- "creating two or more identical webpages). This duplicate-content situation "
659
- "can happen when you, for example, remove many posts from a category, thus "
660
- "reducing the amount of pagination needed in the category's archive. The "
661
- "Canonicalizer's feature fixes that behavior by issuing 301 redirects to page "
662
- "1 of the paginated section in question.</p>\r\n"
663
- "\t</li>\r\n"
664
- "\t<li><strong>Why it helps:</strong> These features will point Google to the "
665
  "correct URL for your homepage and each of your posts, Pages, categories, "
666
- "tags, date archives, and author archives. That way, if Google comes across "
667
- "an alternate URL by which one of those items can be accessed, it will be "
668
- "able to find the correct URL and won't penalize you for having two identical "
669
- "pages on your site.</li>\r\n"
670
- "\t<li><strong>How to use it:</strong> Just check all three checkboxes and "
671
- "click Save Changes. SEO Ultimate will do the rest.</li>\r\n"
 
 
 
672
  "</ul>\r\n"
673
  msgstr ""
674
 
@@ -784,109 +1116,109 @@ msgid_plural ""
784
  msgstr[0] ""
785
  msgstr[1] ""
786
 
787
- #: modules/class.su-module.php:696
788
  msgid ""
789
  "All the modules on this page have been disabled. You can re-enable them "
790
  "using the <a href=\"%s\">Module Manager</a>."
791
  msgstr ""
792
 
793
- #: modules/class.su-module.php:994
794
  msgid "%1$s | %2$s %3$s by %4$s"
795
  msgstr ""
796
 
797
- #: modules/class.su-module.php:1073
798
  msgid "Your site currently doesn&#8217;t have any public items of this type."
799
  msgstr ""
800
 
801
- #: modules/class.su-module.php:1160
802
  msgid "&laquo;"
803
  msgstr ""
804
 
805
- #: modules/class.su-module.php:1161
806
  msgid "&raquo;"
807
  msgstr ""
808
 
809
- #: modules/class.su-module.php:1168
810
  msgid "Displaying %s&#8211;%s of %s"
811
  msgstr ""
812
 
813
- #: modules/class.su-module.php:1182
814
  msgid "ID"
815
  msgstr ""
816
 
817
- #: modules/class.su-module.php:1228
818
  msgid "View"
819
  msgstr ""
820
 
821
- #: modules/class.su-module.php:1230
822
  msgid "Edit"
823
  msgstr ""
824
 
825
- #: modules/class.su-module.php:1400
826
  msgid "Settings updated."
827
  msgstr ""
828
 
829
- #: modules/class.su-module.php:1421
830
  msgid "Save Changes"
831
  msgstr ""
832
 
833
- #: modules/class.su-module.php:1974
834
  msgid ""
835
  "Are you sure you want to replace the textbox contents with this default "
836
  "value?"
837
  msgstr ""
838
 
839
- #: modules/class.su-module.php:2000 modules/settings/settings-data.php:23
840
  msgid "Reset"
841
  msgstr ""
842
 
843
- #: modules/class.su-module.php:2738 modules/class.su-module.php:2750
844
  msgid "A Deleted %s"
845
  msgstr ""
846
 
847
- #: modules/class.su-module.php:2740
848
  msgid "A Deleted Post"
849
  msgstr ""
850
 
851
- #: modules/class.su-module.php:2755
852
  msgid "A Deleted Term"
853
  msgstr ""
854
 
855
- #: modules/class.su-module.php:2761 modules/meta/meta-descriptions.php:31
856
- #: modules/meta/meta-keywords.php:40 modules/opengraph/opengraph.php:263
857
- #: plugin/class.seo-ultimate.php:1773
858
  msgid "Blog Homepage"
859
  msgstr ""
860
 
861
- #: modules/class.su-module.php:2766 plugin/class.seo-ultimate.php:1849
862
  msgid "Author"
863
  msgstr ""
864
 
865
- #: modules/class.su-module.php:2768
866
  msgid "A Deleted User"
867
  msgstr ""
868
 
869
- #: modules/class.su-module.php:2783 plugin/class.seo-ultimate.php:1879
870
  msgid "Link Mask"
871
  msgstr ""
872
 
873
- #: modules/class.su-module.php:2785
874
  msgid "Link Mask (Disabled)"
875
  msgstr ""
876
 
877
- #: modules/class.su-module.php:2790
878
  msgid "A Deleted Link Mask"
879
  msgstr ""
880
 
881
- #: modules/class.su-module.php:2820
882
  msgid "Type a URL or start typing the name of an item on your site"
883
  msgstr ""
884
 
885
- #: modules/class.su-module.php:2833
886
  msgid "Remove this location from this textbox"
887
  msgstr ""
888
 
889
- #: modules/class.su-module.php:2833
890
  msgid "X"
891
  msgstr ""
892
 
@@ -941,8 +1273,9 @@ msgstr ""
941
 
942
  #: modules/files/files.php:134
943
  msgid ""
944
- "Please note that your privacy settings won&#8217;t have any effect on your "
945
- "robots.txt file, since you&#8217;re using <a href=\"%s\">a custom one</a>."
 
946
  msgstr ""
947
 
948
  #: modules/files/files.php:145
@@ -963,14 +1296,6 @@ msgid ""
963
  "</ul>\r\n"
964
  msgstr ""
965
 
966
- #: modules/files/files.php:155 modules/meta/meta-descriptions.php:216
967
- #: modules/meta/meta-keywords.php:190 modules/modules/modules.php:190
968
- #: modules/more-links/more-links.php:105 modules/more-links/more-links.php:116
969
- #: modules/settings/settings.php:81 modules/slugs/slugs.php:113
970
- #: modules/slugs/slugs.php:125 modules/titles/titles.php:468
971
- msgid "FAQ"
972
- msgstr ""
973
-
974
  #: modules/files/files.php:156
975
  msgid ""
976
  "\r\n"
@@ -1041,76 +1366,167 @@ msgid ""
1041
  "first and run AIOSP&#8217;s upgrade process."
1042
  msgstr ""
1043
 
1044
- #: modules/internal-link-aliases/internal-link-aliases.php:24
1045
  msgid "Link Mask Generator"
1046
  msgstr ""
1047
 
1048
- #: modules/internal-link-aliases/internal-link-aliases.php:30
 
 
 
 
 
 
 
1049
  msgid "Aliases"
1050
  msgstr ""
1051
 
1052
- #: modules/internal-link-aliases/internal-link-aliases.php:75
1053
  msgid "Edit Existing Aliases"
1054
  msgstr ""
1055
 
1056
- #: modules/internal-link-aliases/internal-link-aliases.php:79
1057
  msgid "Add a New Alias"
1058
  msgstr ""
1059
 
1060
- #: modules/internal-link-aliases/internal-link-aliases.php:87
1061
  msgid "Actual URL"
1062
  msgstr ""
1063
 
1064
- #: modules/internal-link-aliases/internal-link-aliases.php:88
1065
  msgid "Alias URL"
1066
  msgstr ""
1067
 
1068
- #: modules/internal-link-aliases/internal-link-aliases.php:89
1069
- msgid "Only on This Post&hellip; (optional)"
1070
  msgstr ""
1071
 
1072
- #: modules/internal-link-aliases/internal-link-aliases.php:115
1073
  msgid "Test"
1074
  msgstr ""
1075
 
1076
- #: modules/internal-link-aliases/internal-link-aliases.php:142
1077
  msgid "Alias Directory"
1078
  msgstr ""
1079
 
1080
- #: modules/internal-link-aliases/internal-link-aliases.php:144
1081
- msgid "Nofollow aliased links"
1082
  msgstr ""
1083
 
1084
- #: modules/internal-link-aliases/internal-link-aliases.php:144
1085
  msgid "Link Attributes"
1086
  msgstr ""
1087
 
1088
- #: modules/internal-link-aliases/internal-link-aliases.php:167
1089
  msgid "Link Masks:"
1090
  msgstr ""
1091
 
1092
- #: modules/internal-link-aliases/internal-link-aliases.php:170
1093
  msgid "URL"
1094
  msgstr ""
1095
 
1096
- #: modules/internal-link-aliases/internal-link-aliases.php:170
1097
  msgid "Mask URL"
1098
  msgstr ""
1099
 
1100
- #: modules/internal-link-aliases/internal-link-aliases.php:208
1101
  msgid ""
1102
  "You can stop search engines from following a link by typing in a mask for "
1103
  "its URL."
1104
  msgstr ""
1105
 
1106
- #: modules/internal-link-aliases/internal-link-aliases.php:295
1107
  msgid "Added by SEO Ultimate's Link Mask Generator module"
1108
  msgstr ""
1109
 
1110
- #: modules/internal-link-aliases/internal-link-aliases.php:306
1111
  msgid "End Link Mask Generator output"
1112
  msgstr ""
1113
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1114
  #: modules/link-nofollow/link-nofollow.php:12
1115
  #: modules/link-nofollow/link-nofollow.php:132
1116
  msgid "Nofollow Manager"
@@ -1355,6 +1771,10 @@ msgid ""
1355
  "</ul>\r\n"
1356
  msgstr ""
1357
 
 
 
 
 
1358
  #: modules/meta/meta-descriptions.php:205
1359
  msgid ""
1360
  "\r\n"
@@ -1363,11 +1783,11 @@ msgid ""
1363
  "<ul>\r\n"
1364
  "\t<li><strong>Blog Homepage Meta Description</strong> &mdash; When your blog "
1365
  "homepage appears in search results, it&#8217;ll have a title and a "
1366
- "description. When you insert content into the description field below, the "
1367
- "Meta Editor will add code to your blog homepage (the <code>&lt;meta "
1368
- "name=&quot;description&quot; /&gt;</code> tag) that asks search engines to "
1369
- "use what you&#8217;ve entered as the homepage&#8217;s search results "
1370
- "description.</li>\r\n"
1371
  "\t<li><strong>Use this blog&#8217;s tagline as the default homepage "
1372
  "description.</strong> &mdash; If this box is checked and if the Blog "
1373
  "Homepage Meta Description field is empty, Meta Editor will use your "
@@ -1382,17 +1802,15 @@ msgid ""
1382
  "\r\n"
1383
  "<ul>\r\n"
1384
  "\t<li><strong>How do I edit the meta description of my homepage?</"
1385
- "strong><br />If you are using a &#8220;blog homepage&#8221; (the default "
1386
- "option of showing your blog posts on your homepage), just use the Blog "
1387
- "Homepage field. If you have configured your <a href='options-reading."
1388
- "php'>Settings &rArr; Reading</a> section to use a &#8220;frontpage&#8221; (i."
1389
- "e. a Page as your homepage), just edit that Page&#8217;s meta description on "
1390
- "the &#8220;Pages&#8221; tab.</li>\r\n"
1391
  "</ul>\r\n"
1392
  msgstr ""
1393
 
1394
- #: modules/meta/meta-descriptions.php:226 modules/meta/meta-keywords.php:204
1395
- #: modules/meta/meta-robots.php:103
1396
  msgid ""
1397
  "\r\n"
1398
  "<ul>\r\n"
@@ -1405,10 +1823,11 @@ msgid ""
1405
  "\t\t<p>If the problem persists, try disabling other SEO plugins that may be "
1406
  "generating meta tags.</p>\r\n"
1407
  "\t\t<p>Troubleshooting tip: Go to <a href='options-general.php?page=seo-"
1408
- "ultimate'>Settings &rArr; SEO Ultimate</a> and enable the &#8220;Insert "
1409
- "comments around HTML code insertions&#8221; option. This will mark SEO "
1410
- "Ultimate&#8217;s meta tags with comments, allowing you to see which meta "
1411
- "tags are generated by SEO Ultimate and which aren&#8217;t.</p>\r\n"
 
1412
  "\t</li>\r\n"
1413
  "</ul>\r\n"
1414
  msgstr ""
@@ -1422,12 +1841,12 @@ msgid "Meta Keywords"
1422
  msgstr ""
1423
 
1424
  #: modules/meta/meta-keywords.php:38 modules/meta/meta-robots.php:22
1425
- #: modules/opengraph/opengraph.php:261
1426
  msgid "Sitewide Values"
1427
  msgstr ""
1428
 
1429
  #: modules/meta/meta-keywords.php:39 modules/noindex/noindex.php:50
1430
- #: modules/opengraph/opengraph.php:262
1431
  msgid "Default Values"
1432
  msgstr ""
1433
 
@@ -1447,30 +1866,39 @@ msgstr ""
1447
  msgid "Blog Homepage Meta Keywords"
1448
  msgstr ""
1449
 
1450
- #: modules/meta/meta-keywords.php:165
1451
  msgid "Meta Keywords:<br /><em>(separate with commas)</em>"
1452
  msgstr ""
1453
 
1454
- #: modules/meta/meta-keywords.php:174
1455
  msgid ""
1456
  "\r\n"
1457
  "<p>Meta Keywords Editor lets you tell search engines what keywords are "
1458
  "associated with the various pages on your site. Modern search engines "
1459
- "don&#8217;t give meta keywords much weight, but the option is there if you "
1460
- "want to use it. You can customize the meta keywords of an individual post or "
1461
- "page by using the textboxes that Meta Editor adds to the post/page editors.</"
1462
- "p>\r\n"
1463
  msgstr ""
1464
 
1465
- #: modules/meta/meta-keywords.php:181
 
 
 
 
1466
  msgid ""
1467
  "\r\n"
1468
  "<ul>\r\n"
1469
  "\t<li><strong>Sitewide Keywords</strong> &mdash; Here you can enter keywords "
1470
- "that describe the overall subject matter of your entire blog. Use ommas to "
1471
  "separate keywords. These keywords will be put in the <code>&gt;meta "
1472
  "name=&quot;keywords&quot; /&gt;</code> tags of all webpages on the site "
1473
  "(homepage, posts, pages, archives, etc.).</li>\r\n"
 
 
 
 
 
 
 
1474
  "\t<li><strong>Blog Homepage Meta Keywords</strong> &mdash; These keywords "
1475
  "will be applied only to the <em>blog</em> homepage. Note that if you&#8217;"
1476
  "ve specified a &#8220;front page&#8221; under <a href='options-reading."
@@ -1479,26 +1907,42 @@ msgid ""
1479
  "</ul>\r\n"
1480
  msgstr ""
1481
 
1482
- #: modules/meta/meta-keywords.php:191
1483
  msgid ""
1484
  "\r\n"
1485
  "<ul>\r\n"
1486
- "\t<li>\r\n"
1487
- "\t\t<p><strong>How do I edit the meta keywords of my homepage?</strong><br /"
1488
- ">If you are using a &#8220;blog homepage&#8221; (the default option of "
1489
- "showing your blog posts on your homepage), just use the Blog Homepage field."
1490
- "</p>\r\n"
1491
- "\t\t<p>If you have configured your <a href='options-reading.php'>Settings "
1492
- "&rArr; Reading</a> section to use a &#8220;frontpage&#8221; (i.e. a Page as "
1493
- "your homepage), just edit that Page and use the &#8220;Meta Keywords&#8221; "
1494
- "field in the &#8220;SEO Settings&#8221; box.</p>\r\n"
1495
- "\t</li>\r\n"
1496
  "\t<li><strong>What happens if I add a global keyword that I previously "
1497
  "assigned to individual posts or pages?</strong><br />Don&#8217;t worry; Meta "
1498
  "Keywords Editor will remove duplicate keywords automatically.</li>\r\n"
1499
  "</ul>\r\n"
1500
  msgstr ""
1501
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1502
  #: modules/meta/meta-robots.php:12
1503
  msgid "Meta Robot Tags Editor"
1504
  msgstr ""
@@ -1556,76 +2000,80 @@ msgstr ""
1556
  #: modules/meta/meta-robots.php:64
1557
  msgid ""
1558
  "\r\n"
1559
- "<p>Here&#8217;s information on the various settings:</p>\r\n"
1560
- "\r\n"
1561
  "<ul>\r\n"
1562
- "\t<li>\r\n"
1563
- "\t\t<strong>Global: Spider Instructions</strong>\r\n"
1564
- "\t\t<ul>\r\n"
1565
- "\t\t\t<li><strong>Don't use this site's Open Directory / Yahoo! Directory "
1566
- "description in search results.</strong> &mdash; If your site is listed in "
1567
- "the <a href='http://www.dmoz.org/' target='_blank'>Open Directory (DMOZ)</a> "
1568
- "or the <a href='http://dir.yahoo.com/' target='_blank'>Yahoo! Directory</a>, "
1569
- "some search engines may use your directory listing as the meta description. "
1570
- "These boxes tell search engines not to do that and will give you full "
1571
- "control over your meta descriptions. These settings have no effect if your "
1572
- "site isn&#8217;t listed in the Open Directory or Yahoo! Directory "
1573
- "respectively.</li>\r\n"
1574
- "\t\t\t<li>Don&#8217;t cache or archive this site.</li> &mdash; When you "
1575
- "check this box, Meta Editor will ask search engines (Google, Yahoo!, Bing, "
1576
- "etc.) and archivers (Archive.org, etc.) to <em>not</em> make cached or "
1577
  "archived &#8220;copies&#8221; of your site.</li>\r\n"
1578
- "\t\t</ul>\r\n"
1579
- "\t</li>\r\n"
1580
- "\t<li>\r\n"
1581
- "\t\t<strong>Default Values: Prevent indexing of...</strong>\r\n"
1582
- "\t\t<ul>\r\n"
1583
- "\t\t\t<li><strong>Administration back-end pages</strong> &mdash; Tells "
1584
- "spiders not to index the administration area (the part you&#8217;re in now), "
1585
- "in the unlikely event a spider somehow gains access to the administration. "
1586
- "Recommended.</li>\r\n"
1587
- "\t\t\t<li><strong>Author archives</strong> &mdash; Tells spiders not to "
1588
- "index author archives. Useful if your blog only has one author.</li>\r\n"
1589
- "\t\t\t<li><strong>Blog search pages</strong> &mdash; Tells spiders not to "
1590
- "index the result pages of WordPress's blog search function. Recommended.</li>"
1591
- "\r\n"
1592
- "\t\t\t<li><strong>Category archives</strong> &mdash; Tells spiders not to "
1593
- "index category archives. Recommended only if you don't use categories.</li>"
1594
  "\r\n"
1595
- "\t\t\t<li><strong>Comment feeds</strong> &mdash; Tells spiders not to index "
1596
- "the RSS feeds that exist for every post's comments. (These comment feeds are "
 
 
 
 
 
 
 
 
 
 
 
 
1597
  "totally separate from your normal blog feeds.)</li>\r\n"
1598
- "\t\t\t<li><strong>Comment subpages</strong> &mdash; Tells spiders not to "
1599
- "index posts' comment subpages.</li>\r\n"
1600
- "\t\t\t<li><strong>Date-based archives</strong> &mdash; Tells spiders not to "
1601
  "index day/month/year archives. Recommended, since these pages have little "
1602
  "keyword value.</li>\r\n"
1603
- "\t\t\t<li><strong>Subpages of the homepage</strong> &mdash; Tells spiders "
1604
- "not to index the homepage's subpages (page 2, page 3, etc). Recommended.</li>"
 
 
 
 
1605
  "\r\n"
1606
- "\t\t\t<li><strong>Tag archives</strong> &mdash; Tells spiders not to index "
1607
- "tag archives. Recommended only if you don't use tags.</li>\r\n"
1608
- "\t\t\t<li>User login/registration pages</strong> &mdash; Tells spiders not "
1609
- "to index WordPress's user login and registration pages. Recommended.</li>\r\n"
1610
- "\t\t</ul>\r\n"
1611
- "\t</li>\r\n"
1612
- "\t<li>\r\n"
1613
- "\t\t<strong>Editor Tabs (Posts/Pages/etc.)</strong>\r\n"
1614
- "\t\t<ul>\r\n"
1615
- "\t\t\t<li><strong>Noindex</strong> &mdash; Checking this for an item will "
1616
- "ask search engines to remove that item&#8217;s webpage from their indices. "
1617
- "Use this to remove pages that you don&#8217;t want showing up in search "
1618
- "results (such as a Privacy Policy page, for example).</li>\r\n"
1619
- "\t\t\t<li><strong>Nofollow</strong> &mdash; Checking this for an item will "
1620
- "tell search engines to ignore the links to other webpages that are on that "
 
 
1621
  "item&#8217;s webpage. Note: this is page-level &#8220;meta nofollow,&#8221; "
1622
  "not to be confused with link-level &#8220;rel nofollow.&#8221;</li>\r\n"
1623
- "\t\t</ul>\r\n"
1624
- "\t</li>\r\n"
1625
  "</ul>\r\n"
1626
  msgstr ""
1627
 
1628
- #: modules/meta/webmaster-verify.php:12 modules/meta/webmaster-verify.php:84
1629
  msgid "Webmaster Verification Assistant"
1630
  msgstr ""
1631
 
@@ -1649,7 +2097,7 @@ msgstr ""
1649
  msgid "Meta Tag"
1650
  msgstr ""
1651
 
1652
- #: modules/meta/webmaster-verify.php:85
1653
  msgid ""
1654
  "\r\n"
1655
  "<ul>\r\n"
@@ -1668,7 +2116,7 @@ msgid ""
1668
  "</ul>\r\n"
1669
  msgstr ""
1670
 
1671
- #: modules/misc/misc.php:11 plugin/class.seo-ultimate.php:1486
1672
  msgid "Miscellaneous"
1673
  msgstr ""
1674
 
@@ -1686,7 +2134,12 @@ msgstr ""
1686
  msgid "Modules"
1687
  msgstr ""
1688
 
1689
- #: modules/modules/modules.php:50
 
 
 
 
 
1690
  msgid ""
1691
  "SEO Ultimate&#8217;s features are located in groups called &#8220;modules."
1692
  "&#8221; By default, most of these modules are listed in the &#8220;"
@@ -1695,47 +2148,50 @@ msgid ""
1695
  "upper-right-hand corner of your administration screen."
1696
  msgstr ""
1697
 
1698
- #: modules/modules/modules.php:52
1699
  msgid ""
1700
  "The Module Manager lets you disable or hide modules you don&#8217;t use. "
1701
  "You can also silence modules from displaying bubble alerts on the menu."
1702
  msgstr ""
1703
 
1704
- #: modules/modules/modules.php:56
1705
  msgid "Modules updated."
1706
  msgstr ""
1707
 
1708
- #: modules/modules/modules.php:61
1709
  msgid "Status"
1710
  msgstr ""
1711
 
1712
- #: modules/modules/modules.php:62
1713
  msgid "Module"
1714
  msgstr ""
1715
 
1716
- #: modules/modules/modules.php:75
1717
  msgid "Enabled"
1718
  msgstr ""
1719
 
1720
- #: modules/modules/modules.php:76
1721
  msgid "Silenced"
1722
  msgstr ""
1723
 
1724
- #: modules/modules/modules.php:77
1725
  msgid "Hidden"
1726
  msgstr ""
1727
 
1728
- #: modules/modules/modules.php:78
1729
  msgid "Disabled"
1730
  msgstr ""
1731
 
1732
- #: modules/modules/modules.php:177
1733
  msgid "Options Help"
1734
  msgstr ""
1735
 
1736
- #: modules/modules/modules.php:178
1737
  msgid ""
1738
  "\r\n"
 
 
 
1739
  "<p>The Module Manager lets you customize the visibility and accessibility of "
1740
  "each module; here are the options available:</p>\r\n"
1741
  "<ul>\r\n"
@@ -1753,7 +2209,7 @@ msgid ""
1753
  "</ul>\r\n"
1754
  msgstr ""
1755
 
1756
- #: modules/modules/modules.php:191
1757
  msgid ""
1758
  "\r\n"
1759
  "<ul>\r\n"
@@ -1853,8 +2309,8 @@ msgid "Noindex"
1853
  msgstr ""
1854
 
1855
  #: modules/noindex/noindex.php:69 modules/noindex/noindex.php:80
1856
- #: modules/opengraph/opengraph.php:232 modules/opengraph/opengraph.php:322
1857
- #: modules/opengraph/opengraph.php:323
1858
  msgid "Use default"
1859
  msgstr ""
1860
 
@@ -1876,8 +2332,9 @@ msgstr ""
1876
 
1877
  #: modules/noindex/noindex.php:96
1878
  msgid ""
1879
- "Note: The current <a href=\"options-privacy.php\">privacy settings</a> will "
1880
- "block indexing of the entire site, regardless of which options are set below."
 
1881
  msgstr ""
1882
 
1883
  #: modules/noindex/noindex.php:99
@@ -1944,218 +2401,263 @@ msgstr ""
1944
  msgid "Open Graph"
1945
  msgstr ""
1946
 
1947
- #: modules/opengraph/opengraph.php:234
1948
  msgid "Type"
1949
  msgstr ""
1950
 
1951
- #: modules/opengraph/opengraph.php:239
1952
  msgid "Title"
1953
  msgstr ""
1954
 
1955
- #: modules/opengraph/opengraph.php:244
1956
  msgid "Description"
1957
  msgstr ""
1958
 
1959
- #: modules/opengraph/opengraph.php:249
1960
  msgid "Image"
1961
  msgstr ""
1962
 
1963
- #: modules/opengraph/opengraph.php:271
1964
  msgid "Site Name"
1965
  msgstr ""
1966
 
1967
- #: modules/opengraph/opengraph.php:272
1968
  msgid "Facebook App ID"
1969
  msgstr ""
1970
 
1971
- #: modules/opengraph/opengraph.php:273
1972
  msgid "This Site&#8217;s Twitter Handle"
1973
  msgstr ""
1974
 
1975
- #: modules/opengraph/opengraph.php:280
1976
  msgid "Default Types"
1977
  msgstr ""
1978
 
1979
- #: modules/opengraph/opengraph.php:282
1980
  msgid "Post Type"
1981
  msgstr ""
1982
 
1983
- #: modules/opengraph/opengraph.php:283
1984
  msgid "Open Graph Type"
1985
  msgstr ""
1986
 
1987
- #: modules/opengraph/opengraph.php:284
1988
  msgid "Twitter Type"
1989
  msgstr ""
1990
 
1991
- #: modules/opengraph/opengraph.php:299 modules/opengraph/opengraph.php:304
1992
  msgid "Default Image"
1993
  msgstr ""
1994
 
1995
- #: modules/opengraph/opengraph.php:302
1996
  msgid ""
1997
  "In the box below, you can specify an image URL or an image from your media "
1998
  "library to use as a default image in the event that there is no image "
1999
  "otherwise specified for a given webpage on your site."
2000
  msgstr ""
2001
 
2002
- #: modules/opengraph/opengraph.php:311 modules/titles/titles.php:91
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2003
  msgid "Blog Homepage Title"
2004
  msgstr ""
2005
 
2006
- #: modules/opengraph/opengraph.php:312
2007
  msgid "Blog Homepage Description"
2008
  msgstr ""
2009
 
2010
- #: modules/opengraph/opengraph.php:313
2011
  msgid "Blog Homepage Image"
2012
  msgstr ""
2013
 
2014
- #: modules/opengraph/opengraph.php:319 modules/widgets/widgets.php:140
2015
  msgid "Title:"
2016
  msgstr ""
2017
 
2018
- #: modules/opengraph/opengraph.php:320
2019
  msgid "Description:"
2020
  msgstr ""
2021
 
2022
- #: modules/opengraph/opengraph.php:321
2023
  msgid "Image:"
2024
  msgstr ""
2025
 
2026
- #: modules/opengraph/opengraph.php:322
2027
  msgid "Open Graph Type:"
2028
  msgstr ""
2029
 
2030
- #: modules/opengraph/opengraph.php:323
2031
  msgid "Twitter Type:"
2032
  msgstr ""
2033
 
2034
- #: modules/opengraph/opengraph.php:348
2035
  msgid "Featured Image: %s"
2036
  msgstr ""
2037
 
2038
- #: modules/opengraph/opengraph.php:356
2039
- #: modules/rich-snippets/rich-snippets.php:357
2040
  msgid "None"
2041
  msgstr ""
2042
 
2043
- #: modules/opengraph/opengraph.php:357
2044
  msgid "Internet"
2045
  msgstr ""
2046
 
2047
- #: modules/opengraph/opengraph.php:358
2048
  msgid "Article"
2049
  msgstr ""
2050
 
2051
- #: modules/opengraph/opengraph.php:359
2052
  msgid "Blog"
2053
  msgstr ""
2054
 
2055
- #: modules/opengraph/opengraph.php:360
2056
  msgid "Profile"
2057
  msgstr ""
2058
 
2059
- #: modules/opengraph/opengraph.php:361
2060
  msgid "Website"
2061
  msgstr ""
2062
 
2063
- #: modules/opengraph/opengraph.php:362
2064
  msgid "Products"
2065
  msgstr ""
2066
 
2067
- #: modules/opengraph/opengraph.php:363
2068
  msgid "Book"
2069
  msgstr ""
2070
 
2071
- #: modules/opengraph/opengraph.php:364
2072
  msgid "Music"
2073
  msgstr ""
2074
 
2075
- #: modules/opengraph/opengraph.php:365
2076
  msgid "Album"
2077
  msgstr ""
2078
 
2079
- #: modules/opengraph/opengraph.php:366
2080
  msgid "Playlist"
2081
  msgstr ""
2082
 
2083
- #: modules/opengraph/opengraph.php:367
2084
  msgid "Radio Station"
2085
  msgstr ""
2086
 
2087
- #: modules/opengraph/opengraph.php:368
2088
  msgid "Song"
2089
  msgstr ""
2090
 
2091
- #: modules/opengraph/opengraph.php:369
2092
  msgid "Videos"
2093
  msgstr ""
2094
 
2095
- #: modules/opengraph/opengraph.php:370
2096
  msgid "Movie"
2097
  msgstr ""
2098
 
2099
- #: modules/opengraph/opengraph.php:371
2100
  msgid "TV Episode"
2101
  msgstr ""
2102
 
2103
- #: modules/opengraph/opengraph.php:372
2104
  msgid "TV Show"
2105
  msgstr ""
2106
 
2107
- #: modules/opengraph/opengraph.php:373
2108
  msgid "Video"
2109
  msgstr ""
2110
 
2111
- #: modules/opengraph/opengraph.php:380
2112
  msgid "Regular"
2113
  msgstr ""
2114
 
2115
- #: modules/opengraph/opengraph.php:381
2116
- #: modules/rich-snippets/rich-snippets.php:120
2117
  msgid "Photo"
2118
  msgstr ""
2119
 
2120
- #: modules/opengraph/opengraph.php:403
2121
  msgid "Twitter Handle"
2122
  msgstr ""
2123
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2124
  #: modules/permalinks/permalinks.php:15
2125
  msgid "Permalink Tweaker"
2126
  msgstr ""
2127
 
2128
- #: modules/permalinks/permalinks.php:73
2129
  msgid ""
2130
  "To use the Permalinks Tweaker, you must disable default (query-string) "
2131
  "permalinks in your <a href=\"options-permalink.php\">Permalink Settings</a>."
2132
  msgstr ""
2133
 
2134
- #: modules/permalinks/permalinks.php:98
2135
  msgid "Remove the URL bases of..."
2136
  msgstr ""
2137
 
2138
- #: modules/permalinks/permalinks.php:103
2139
  msgid "Before"
2140
  msgstr ""
2141
 
2142
- #: modules/permalinks/permalinks.php:105
2143
  msgid "After"
2144
  msgstr ""
2145
 
2146
- #: modules/permalinks/permalinks.php:125
2147
  msgid "term archive"
2148
  msgstr ""
2149
 
2150
- #: modules/permalinks/permalinks.php:126
2151
  msgid "page"
2152
  msgstr ""
2153
 
2154
- #: modules/permalinks/permalinks.php:127
2155
  msgid "URL Conflict Resolution"
2156
  msgstr ""
2157
 
2158
- #: modules/permalinks/permalinks.php:127
2159
  msgid ""
2160
  "If a term archive and a Page with the same slug end up having the same URL "
2161
  "because of the term&#8217;s base being removed, the URL should be given to "
@@ -2163,231 +2665,226 @@ msgid ""
2163
  msgstr ""
2164
 
2165
  #: modules/rich-snippets/rich-snippets.php:14
 
2166
  msgid "Rich Snippet Creator"
2167
  msgstr ""
2168
 
2169
- #: modules/rich-snippets/rich-snippets.php:32
 
 
 
 
 
 
 
 
2170
  msgid "Schema.org Microdata"
2171
  msgstr ""
2172
 
2173
- #: modules/rich-snippets/rich-snippets.php:45
2174
- #: modules/rich-snippets/rich-snippets.php:345
2175
  msgid "Review"
2176
  msgstr ""
2177
 
2178
- #: modules/rich-snippets/rich-snippets.php:50
2179
  msgid "Name of Reviewed Item"
2180
  msgstr ""
2181
 
2182
- #: modules/rich-snippets/rich-snippets.php:53
2183
  msgid "Star Rating"
2184
  msgstr ""
2185
 
2186
- #: modules/rich-snippets/rich-snippets.php:66
2187
  msgid "Image of Reviewed Item"
2188
  msgstr ""
2189
 
2190
- #: modules/rich-snippets/rich-snippets.php:71
2191
  msgid "Review Author"
2192
  msgstr ""
2193
 
2194
- #: modules/rich-snippets/rich-snippets.php:76
2195
  msgid "Date Reviewed"
2196
  msgstr ""
2197
 
2198
- #: modules/rich-snippets/rich-snippets.php:84
2199
- #: modules/rich-snippets/rich-snippets.php:346
2200
  msgid "Place"
2201
  msgstr ""
2202
 
2203
- #: modules/rich-snippets/rich-snippets.php:88
2204
  msgid "Address"
2205
  msgstr ""
2206
 
2207
- #: modules/rich-snippets/rich-snippets.php:92
2208
  msgid "Street Address"
2209
  msgstr ""
2210
 
2211
- #: modules/rich-snippets/rich-snippets.php:95
2212
  msgid "PO Box"
2213
  msgstr ""
2214
 
2215
- #: modules/rich-snippets/rich-snippets.php:98
2216
- #: modules/rich-snippets/rich-snippets.php:101
2217
  msgid "City"
2218
  msgstr ""
2219
 
2220
- #: modules/rich-snippets/rich-snippets.php:104
2221
  msgid "Country"
2222
  msgstr ""
2223
 
2224
- #: modules/rich-snippets/rich-snippets.php:107
2225
  msgid "Postal Code"
2226
  msgstr ""
2227
 
2228
- #: modules/rich-snippets/rich-snippets.php:112
2229
  msgid "Fax Number"
2230
  msgstr ""
2231
 
2232
- #: modules/rich-snippets/rich-snippets.php:115
2233
  msgid "Map URL"
2234
  msgstr ""
2235
 
2236
- #: modules/rich-snippets/rich-snippets.php:129
2237
  msgid "Phone Number"
2238
  msgstr ""
2239
 
2240
- #: modules/rich-snippets/rich-snippets.php:306
2241
  msgid "Schema.org markup generated by %1$s (%2$s)"
2242
  msgstr ""
2243
 
2244
- #: modules/rich-snippets/rich-snippets.php:344
2245
  msgid "Standard"
2246
  msgstr ""
2247
 
2248
- #: modules/rich-snippets/rich-snippets.php:347
2249
  msgid "Search Result Type:"
2250
  msgstr ""
2251
 
2252
- #: modules/rich-snippets/rich-snippets.php:352
2253
  msgid "Name of Reviewed Item:"
2254
  msgstr ""
2255
 
2256
- #: modules/rich-snippets/rich-snippets.php:354
2257
  msgid "Image of Reviewed Item:"
2258
  msgstr ""
2259
 
2260
- #: modules/rich-snippets/rich-snippets.php:358
2261
  msgid "0.5 stars"
2262
  msgstr ""
2263
 
2264
- #: modules/rich-snippets/rich-snippets.php:359
2265
  msgid "1 star"
2266
  msgstr ""
2267
 
2268
- #: modules/rich-snippets/rich-snippets.php:360
2269
  msgid "1.5 stars"
2270
  msgstr ""
2271
 
2272
- #: modules/rich-snippets/rich-snippets.php:361
2273
  msgid "2 stars"
2274
  msgstr ""
2275
 
2276
- #: modules/rich-snippets/rich-snippets.php:362
2277
  msgid "2.5 stars"
2278
  msgstr ""
2279
 
2280
- #: modules/rich-snippets/rich-snippets.php:363
2281
  msgid "3 stars"
2282
  msgstr ""
2283
 
2284
- #: modules/rich-snippets/rich-snippets.php:364
2285
  msgid "3.5 stars"
2286
  msgstr ""
2287
 
2288
- #: modules/rich-snippets/rich-snippets.php:365
2289
  msgid "4 stars"
2290
  msgstr ""
2291
 
2292
- #: modules/rich-snippets/rich-snippets.php:366
2293
  msgid "4.5 stars"
2294
  msgstr ""
2295
 
2296
- #: modules/rich-snippets/rich-snippets.php:367
2297
  msgid "5 stars"
2298
  msgstr ""
2299
 
2300
- #: modules/rich-snippets/rich-snippets.php:368
2301
  msgid "Star Rating for Reviewed Item:"
2302
  msgstr ""
2303
 
2304
- #: modules/rich-snippets/rich-snippets.php:374
2305
  msgid "Street Address:"
2306
  msgstr ""
2307
 
2308
- #: modules/rich-snippets/rich-snippets.php:375
2309
  msgid "Post Office Box Number:"
2310
  msgstr ""
2311
 
2312
- #: modules/rich-snippets/rich-snippets.php:376
2313
  msgid "City:"
2314
  msgstr ""
2315
 
2316
- #: modules/rich-snippets/rich-snippets.php:377
2317
  msgid "State or Region:"
2318
  msgstr ""
2319
 
2320
- #: modules/rich-snippets/rich-snippets.php:378
2321
  msgid "Country:"
2322
  msgstr ""
2323
 
2324
- #: modules/rich-snippets/rich-snippets.php:379
2325
  msgid "Postal Code:"
2326
  msgstr ""
2327
 
2328
- #: modules/rich-snippets/rich-snippets.php:380
2329
  msgid "Address:"
2330
  msgstr ""
2331
 
2332
- #: modules/rich-snippets/rich-snippets.php:381
2333
  msgid "Map Page:"
2334
  msgstr ""
2335
 
2336
- #: modules/rich-snippets/rich-snippets.php:382
2337
  msgid "Phone Number:"
2338
  msgstr ""
2339
 
2340
- #: modules/rich-snippets/rich-snippets.php:383
2341
  msgid "Fax Number:"
2342
  msgstr ""
2343
 
2344
- #: modules/rich-snippets/rich-snippets.php:384
2345
  msgid "Photo:"
2346
  msgstr ""
2347
 
2348
- #: modules/rich-snippets/rich-snippets.php:395
2349
  msgid ""
2350
  "\r\n"
2351
  "<ul>\r\n"
2352
  "\t<li><strong>What it does:</strong> Rich Snippet Creator adds special code "
2353
- "to your posts that asks Google to display special pertinent information "
2354
- "(known as <a href='http://www.google.com/support/webmasters/bin/topic.py?"
2355
- "hl=en&topic=219' target='_blank'>Rich Snippets</a>) in search results for "
2356
- "certain types of content. For example, if you&#8217;ve written a product "
2357
- "review, you can use Rich Snippet Creator to ask Google to display the star "
2358
- "rating that you gave the product in your review next to your review webpage "
2359
- "when it appears in search results.</li>\r\n"
2360
  "\t<li><strong>Why it helps:</strong> Rich Snippet Creator enhances the "
2361
  "search engine results for your content by asking Google to add extra, eye-"
2362
  "catching info that could help draw in more search engine visitors.</li>\r\n"
2363
- "\t<li><p><strong>How it works:</strong> When editing one of your posts or "
2364
  "pages, see if your content fits one of the available rich snippet types (for "
2365
- "example, a review). If so, select that type from the &#8220;Rich Snippet "
2366
  "Type&#8221; dropdown box. Once you select the applicable type, additional "
2367
  "options will appear that vary based on the type selected. For example, a "
2368
- "&#8220;Star Rating&#8221; field will appear if you select the &#8220;"
2369
- "Review&#8221; type.</p><p>Once you save the post/page, Rich Snippet Creator "
2370
- "will add the special code to it. You can remove this code at any time by "
2371
- "selecting &#8220;None&#8221; from the &#8220;Rich Snippet Type&#8221; "
2372
- "dropdown and resaving the post/page.</p></li>\r\n"
2373
  "</ul>\r\n"
2374
  msgstr ""
2375
 
2376
- #: modules/rich-snippets/rich-snippets.php:406
2377
- msgid ""
2378
- "\r\n"
2379
- "<ul>\r\n"
2380
- "\t<li><strong>Categories/Tags That Indicate Reviews</strong> &mdash; If you "
2381
- "haven&#8217;t set the &#8220;Rich Snippet Type&#8221; setting for an old "
2382
- "post or page, then Rich Snippet Creator will automatically set its default "
2383
- "type to &#8220;Review&#8221; (instead of &#8220;None&#8221;) if it has a "
2384
- "category or tag whose name is in this list (the default list is &#8220;"
2385
- "Reviews&#8221; and &#8220;Review&#8221;). Put one category/tag name per line."
2386
- "</li>\r\n"
2387
- "</ul>\r\n"
2388
- msgstr ""
2389
-
2390
- #: modules/rich-snippets/rich-snippets.php:415
2391
  msgid ""
2392
  "\r\n"
2393
  "<ul>\r\n"
@@ -2396,8 +2893,8 @@ msgid ""
2396
  "href='http://www.google.com/webmasters/tools/richsnippets' "
2397
  "target='_blank'>Google&#8217;s testing tool</a> to make sure Google can find "
2398
  "the rich snippet code on your site. If no code is found, check and make sure "
2399
- "you've enabled rich snippets for that particular post/page.</p><p>Note that "
2400
- "having the code on a post/page doesn&#8217;t guarantee that Google will "
2401
  "actually use it to create a rich snippet. If Google is able to read your "
2402
  "code but isn&#8217;t using it to generate rich snippets, you can ask Google "
2403
  "to do so using <a href='http://www.google.com/support/webmasters/bin/request."
@@ -2414,7 +2911,7 @@ msgstr ""
2414
  msgid "SEO Design Solutions Whitepapers"
2415
  msgstr ""
2416
 
2417
- #. #-#-#-#-# plugin.pot (SEO Ultimate 7.5.7) #-#-#-#-#
2418
  #. Author of the plugin/theme
2419
  #: modules/sds-blog/sds-blog.php:49
2420
  msgid "SEO Design Solutions"
@@ -2431,18 +2928,22 @@ msgstr ""
2431
  msgid "Global Settings"
2432
  msgstr ""
2433
 
2434
- #: modules/settings/global-settings.php:40
2435
  msgid "Identify the plugin&#8217;s HTML code insertions with HTML comment tags"
2436
  msgstr ""
2437
 
2438
- #: modules/settings/global-settings.php:41
2439
  msgid "Enable nofollow&#8217;d attribution link on my site"
2440
  msgstr ""
2441
 
2442
- #: modules/settings/global-settings.php:42
2443
  msgid "Add CSS styles to the attribution link"
2444
  msgstr ""
2445
 
 
 
 
 
2446
  #: modules/settings/install.php:18
2447
  msgid "Upgrade/Downgrade/Reinstall"
2448
  msgstr ""
@@ -2463,7 +2964,7 @@ msgstr ""
2463
  msgid "Reinstall"
2464
  msgstr ""
2465
 
2466
- #: modules/settings/install.php:82 modules/settings/install.php:218
2467
  msgid "You do not have sufficient permissions to upgrade plugins on this site."
2468
  msgstr ""
2469
 
@@ -2484,7 +2985,7 @@ msgid ""
2484
  "using the WordPress plugin upgrader."
2485
  msgstr ""
2486
 
2487
- #: modules/settings/install.php:108 modules/settings/install.php:200
2488
  msgid ""
2489
  "You do not have sufficient permissions to downgrade plugins on this site."
2490
  msgstr ""
@@ -2506,7 +3007,7 @@ msgstr ""
2506
  #: modules/settings/install.php:128
2507
  msgid ""
2508
  "Downgrading to versions earlier than %s is not supported because doing so "
2509
- "will result in data loss."
2510
  msgstr ""
2511
 
2512
  #: modules/settings/install.php:130
@@ -2515,7 +3016,7 @@ msgid ""
2515
  "again later."
2516
  msgstr ""
2517
 
2518
- #: modules/settings/install.php:136 modules/settings/install.php:209
2519
  msgid ""
2520
  "You do not have sufficient permissions to reinstall plugins on this site."
2521
  msgstr ""
@@ -2534,15 +3035,15 @@ msgstr ""
2534
  msgid "Latest Version"
2535
  msgstr ""
2536
 
2537
- #: modules/settings/install.php:197
2538
  msgid "Downgrade to SEO Ultimate %s"
2539
  msgstr ""
2540
 
2541
- #: modules/settings/install.php:206
2542
  msgid "Reinstall SEO Ultimate %s"
2543
  msgstr ""
2544
 
2545
- #: modules/settings/install.php:215
2546
  msgid "Upgrade to SEO Ultimate %s"
2547
  msgstr ""
2548
 
@@ -2730,9 +3231,9 @@ msgstr ""
2730
  msgid "SEO Ultimate Plugin Settings"
2731
  msgstr ""
2732
 
2733
- #. #-#-#-#-# plugin.pot (SEO Ultimate 7.5.7) #-#-#-#-#
2734
  #. Plugin Name of the plugin/theme
2735
- #: modules/settings/settings.php:26 plugin/class.seo-ultimate.php:861
2736
  msgid "SEO Ultimate"
2737
  msgstr ""
2738
 
@@ -2784,7 +3285,7 @@ msgid "Uninstaller"
2784
  msgstr ""
2785
 
2786
  #: modules/settings/uninstall.php:18 modules/settings/uninstall.php:22
2787
- #: plugin/class.seo-ultimate.php:1324
2788
  msgid "Uninstall"
2789
  msgstr ""
2790
 
@@ -2829,7 +3330,7 @@ msgid "Uninstallation complete. Thanks for trying SEO Ultimate."
2829
  msgstr ""
2830
 
2831
  #: modules/sharing-buttons/sharing-buttons.php:12
2832
- #: modules/sharing-buttons/sharing-buttons.php:71
2833
  msgid "Sharing Facilitator"
2834
  msgstr ""
2835
 
@@ -2853,7 +3354,7 @@ msgstr ""
2853
  msgid "Which provider would you like to use for your sharing buttons?"
2854
  msgstr ""
2855
 
2856
- #: modules/sharing-buttons/sharing-buttons.php:72
2857
  msgid ""
2858
  "\r\n"
2859
  "<ul>\r\n"
@@ -3215,16 +3716,19 @@ msgid ""
3215
  "</ul>\r\n"
3216
  msgstr ""
3217
 
3218
- #: modules/titles/titles.php:431
3219
- msgid "Settings Tab"
3220
- msgstr ""
3221
-
3222
  #: modules/titles/titles.php:432
3223
  msgid ""
3224
  "\r\n"
3225
  "<p>Here&#8217;s documentation for the options on the &#8220;Settings&#8221; "
3226
  "tab.</p>\r\n"
3227
  "<ul>\r\n"
 
 
 
 
 
 
 
3228
  "\t<li>\r\n"
3229
  "\t\t<p><strong>Rewrite Method</strong> &mdash; This setting controls the "
3230
  "method by which Title Tag Rewriter edits your site&#8217;s <code>&lt;"
@@ -3276,7 +3780,7 @@ msgid ""
3276
  "</ul>\r\n"
3277
  msgstr ""
3278
 
3279
- #: modules/titles/titles.php:469
3280
  msgid ""
3281
  "\r\n"
3282
  "<ul>\r\n"
@@ -3299,7 +3803,7 @@ msgid ""
3299
  "</ul>\r\n"
3300
  msgstr ""
3301
 
3302
- #: modules/titles/titles.php:480
3303
  msgid ""
3304
  "\r\n"
3305
  "<ul>\r\n"
@@ -3453,207 +3957,203 @@ msgid "Use my <a href=\"%s\" target=\"_blank\">footer link HTML formats</a>"
3453
  msgstr ""
3454
 
3455
  #: modules/wp-settings/wp-settings.php:14
3456
- msgid "Settings Monitor (Beta)"
3457
- msgstr ""
3458
-
3459
- #: modules/wp-settings/wp-settings.php:15
3460
  msgid "Settings Monitor"
3461
  msgstr ""
3462
 
3463
- #: modules/wp-settings/wp-settings.php:30
3464
  msgid "Blog is visible to search engines"
3465
  msgstr ""
3466
 
3467
- #: modules/wp-settings/wp-settings.php:31
3468
  msgid "WordPress will allow search engines to visit your site."
3469
  msgstr ""
3470
 
3471
- #: modules/wp-settings/wp-settings.php:33
3472
  msgid "Blog is hidden from search engines"
3473
  msgstr ""
3474
 
3475
- #: modules/wp-settings/wp-settings.php:34
3476
  msgid ""
3477
- "WordPress is configured to block search engines. This will nullify your "
3478
  "site&#8217;s SEO and should be resolved immediately."
3479
  msgstr ""
3480
 
3481
- #: modules/wp-settings/wp-settings.php:38
3482
  msgid "Query-string permalinks enabled"
3483
  msgstr ""
3484
 
3485
- #: modules/wp-settings/wp-settings.php:39
3486
  msgid ""
3487
  "It is highly recommended that you use a non-default and non-numeric "
3488
  "permalink structure."
3489
  msgstr ""
3490
 
3491
- #: modules/wp-settings/wp-settings.php:43
3492
  msgid "Pathinfo permalinks enabled"
3493
  msgstr ""
3494
 
3495
- #: modules/wp-settings/wp-settings.php:44
3496
  msgid ""
3497
  "Pathinfo permalinks add a keyword-less &#8220;index.php&#8221; prefix. This "
3498
  "is not ideal, but it may be beyond your control (since it&#8217;s likely "
3499
  "caused by your site&#8217;s web hosting setup)."
3500
  msgstr ""
3501
 
3502
- #: modules/wp-settings/wp-settings.php:49
3503
  msgid "Permalinks include the post slug"
3504
  msgstr ""
3505
 
3506
- #: modules/wp-settings/wp-settings.php:50
3507
  msgid ""
3508
  "Including a version of the post&#8217;s title helps provide keyword-rich "
3509
  "URLs."
3510
  msgstr ""
3511
 
3512
- #: modules/wp-settings/wp-settings.php:52
3513
  msgid "Permalinks do not include the post slug"
3514
  msgstr ""
3515
 
3516
- #: modules/wp-settings/wp-settings.php:53
3517
  msgid ""
3518
  "It is highly recommended that you include the %postname% variable in the "
3519
  "permalink structure."
3520
  msgstr ""
3521
 
3522
- #: modules/wp-settings/wp-settings.php:63
3523
  msgid ""
3524
  "Settings Monitor analyzes your blog&#8217;s settings and notifies you of any "
3525
  "problems. If any issues are found, they will show up in red or yellow below."
3526
  msgstr ""
3527
 
3528
- #: modules/wp-settings/wp-settings.php:75
3529
  msgid "Go to setting &raquo;"
3530
  msgstr ""
3531
 
3532
- #: plugin/class.seo-ultimate.php:861
3533
  msgid "SEO"
3534
  msgstr ""
3535
 
3536
- #: plugin/class.seo-ultimate.php:1046
3537
  msgid ""
3538
  "It looks like you made changes to the settings of this SEO Ultimate module. "
3539
  "If you leave before saving, those changes will be lost."
3540
  msgstr ""
3541
 
3542
- #: plugin/class.seo-ultimate.php:1140 plugin/class.seo-ultimate.php:1555
3543
  msgid "SEO Settings"
3544
  msgstr ""
3545
 
3546
- #: plugin/class.seo-ultimate.php:1179
3547
  msgid ""
3548
  "%1$s is known to cause conflicts with SEO Ultimate. Please deactivate %1$s "
3549
  "if you wish to continue using SEO Ultimate."
3550
  msgstr ""
3551
 
3552
- #: plugin/class.seo-ultimate.php:1223
3553
  msgid "new module"
3554
  msgstr ""
3555
 
3556
- #: plugin/class.seo-ultimate.php:1223
3557
  msgid "new modules"
3558
  msgstr ""
3559
 
3560
- #: plugin/class.seo-ultimate.php:1224
3561
  msgid "new feature"
3562
  msgstr ""
3563
 
3564
- #: plugin/class.seo-ultimate.php:1224
3565
  msgid "new features"
3566
  msgstr ""
3567
 
3568
- #: plugin/class.seo-ultimate.php:1225
3569
  msgid "bugfix"
3570
  msgstr ""
3571
 
3572
- #: plugin/class.seo-ultimate.php:1225
3573
  msgid "bugfixes"
3574
  msgstr ""
3575
 
3576
- #: plugin/class.seo-ultimate.php:1226
3577
  msgid "improvement"
3578
  msgstr ""
3579
 
3580
- #: plugin/class.seo-ultimate.php:1226
3581
  msgid "improvements"
3582
  msgstr ""
3583
 
3584
- #: plugin/class.seo-ultimate.php:1227
3585
  msgid "security fix"
3586
  msgstr ""
3587
 
3588
- #: plugin/class.seo-ultimate.php:1227
3589
  msgid "security fixes"
3590
  msgstr ""
3591
 
3592
- #: plugin/class.seo-ultimate.php:1228
3593
  msgid "new language pack"
3594
  msgstr ""
3595
 
3596
- #: plugin/class.seo-ultimate.php:1228
3597
  msgid "new language packs"
3598
  msgstr ""
3599
 
3600
- #: plugin/class.seo-ultimate.php:1229
3601
  msgid "language pack update"
3602
  msgstr ""
3603
 
3604
- #: plugin/class.seo-ultimate.php:1229
3605
  msgid "language pack updates"
3606
  msgstr ""
3607
 
3608
- #: plugin/class.seo-ultimate.php:1260
3609
  msgid "%d %s"
3610
  msgstr ""
3611
 
3612
- #: plugin/class.seo-ultimate.php:1266
3613
  msgid "Upgrade now to get %s. %s."
3614
  msgstr ""
3615
 
3616
- #: plugin/class.seo-ultimate.php:1268
3617
  msgid "View changelog"
3618
  msgstr ""
3619
 
3620
- #: plugin/class.seo-ultimate.php:1345
3621
  msgid "Active Modules: "
3622
  msgstr ""
3623
 
3624
- #: plugin/class.seo-ultimate.php:1412
3625
  msgid ""
3626
  "<strong>SEO Ultimate Notice:</strong> Your blog is configured to block "
3627
- "search engine spiders. To resolve this, <a href=\"options-privacy.php\" "
3628
- "target=\"_blank\">go to your Privacy settings</a> and set your blog visible "
3629
- "to everyone."
3630
  msgstr ""
3631
 
3632
- #: plugin/class.seo-ultimate.php:1483
3633
  msgid "Search Engine Listing"
3634
  msgstr ""
3635
 
3636
- #: plugin/class.seo-ultimate.php:1484
3637
  msgid "Social Networks Listing"
3638
  msgstr ""
3639
 
3640
- #: plugin/class.seo-ultimate.php:1485
3641
  msgid "Links"
3642
  msgstr ""
3643
 
3644
- #: plugin/class.seo-ultimate.php:1585
3645
  msgid "%1$s %2$s by %3$s"
3646
  msgstr ""
3647
 
3648
- #: plugin/class.seo-ultimate.php:1772
3649
  msgid "Home"
3650
  msgstr ""
3651
 
3652
- #: plugin/class.seo-ultimate.php:1843
3653
  msgid "Author Archives"
3654
  msgstr ""
3655
 
3656
- #: plugin/class.seo-ultimate.php:1872
3657
  msgid "Link Masks"
3658
  msgstr ""
3659
 
1
+ # Copyright (C) 2013 SEO Ultimate
2
  # This file is distributed under the same license as the SEO Ultimate package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: SEO Ultimate 7.6\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/seo-ultimate\n"
7
+ "POT-Creation-Date: 2013-01-01 04:50:50+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2013-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <LL@li.org>\n"
14
 
15
+ #: includes/jlfunctions/str.php:144 plugin/su-functions.php:77
16
  msgid "%s and %s"
17
  msgstr ""
18
 
19
+ #: includes/jlfunctions/str.php:147 plugin/su-functions.php:80
20
  msgid ", "
21
  msgstr ""
22
 
23
+ #: includes/jlfunctions/str.php:148 plugin/su-functions.php:81
24
  msgid "%s, and %s"
25
  msgstr ""
26
 
27
+ #: includes/jlwp/functions.php:47
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  msgctxt "post format"
29
  msgid "Format"
30
  msgstr ""
31
 
32
+ #: includes/jlwp/functions.php:48
33
  msgid "Post Format Archives"
34
  msgstr ""
35
 
36
+ #: includes/jlwp/functions.php:89
37
  msgid "backup your database"
38
  msgstr ""
39
 
45
  msgid "Log"
46
  msgstr ""
47
 
48
+ #: modules/404s/fofs-log.php:118 modules/class.su-module.php:1148
49
  msgid "Actions"
50
  msgstr ""
51
 
52
+ #: modules/404s/fofs-log.php:119
53
  msgid "Hits"
54
  msgstr ""
55
 
56
+ #: modules/404s/fofs-log.php:120
57
  msgid "URL with 404 Error"
58
  msgstr ""
59
 
60
+ #: modules/404s/fofs-log.php:121
61
  msgid "Date of Most Recent Hit"
62
  msgstr ""
63
 
64
+ #: modules/404s/fofs-log.php:122
65
  msgid "Referers"
66
  msgstr ""
67
 
68
+ #: modules/404s/fofs-log.php:123 modules/404s/fofs-log.php:227
69
  msgid "User Agents"
70
  msgstr ""
71
 
72
+ #: modules/404s/fofs-log.php:139
73
  msgid ""
74
  "New 404 errors will not be recorded because 404 logging is disabled on the "
75
  "Settings tab."
76
  msgstr ""
77
 
78
+ #: modules/404s/fofs-log.php:146
79
  msgid "The log entry was successfully deleted."
80
  msgstr ""
81
 
82
+ #: modules/404s/fofs-log.php:148
83
  msgid "This log entry has already been deleted."
84
  msgstr ""
85
 
86
+ #: modules/404s/fofs-log.php:157
87
  msgid "The log was successfully cleared."
88
  msgstr ""
89
 
90
+ #: modules/404s/fofs-log.php:161
91
  msgid "No 404 errors in the log."
92
  msgstr ""
93
 
94
+ #: modules/404s/fofs-log.php:186
95
  msgid "Open URL in new window (will not be logged)"
96
  msgstr ""
97
 
98
+ #: modules/404s/fofs-log.php:187
99
  msgid "Query Google for cached version of URL (opens in new window)"
100
  msgstr ""
101
 
102
+ #: modules/404s/fofs-log.php:188
103
  msgid "Remove this URL from the log"
104
  msgstr ""
105
 
106
+ #: modules/404s/fofs-log.php:191
107
  msgid "%s at %s"
108
  msgstr ""
109
 
110
+ #: modules/404s/fofs-log.php:195
111
  msgid "View list of referring URLs"
112
  msgstr ""
113
 
114
+ #: modules/404s/fofs-log.php:196
115
  msgid "View list of user agents"
116
  msgstr ""
117
 
118
+ #: modules/404s/fofs-log.php:206
119
  msgid "Referring URLs"
120
  msgstr ""
121
 
122
+ #: modules/404s/fofs-log.php:207 modules/404s/fofs-log.php:228
123
  msgid "Hide list"
124
  msgstr ""
125
 
126
+ #: modules/404s/fofs-log.php:259
127
  msgid "Are you sure you want to delete all 404 log entries?"
128
  msgstr ""
129
 
130
+ #: modules/404s/fofs-log.php:261
131
  msgid "Clear Log"
132
  msgstr ""
133
 
136
  msgstr ""
137
 
138
  #: modules/404s/fofs-settings.php:17
139
+ #: modules/internal-link-aliases/internal-link-aliases.php:42
140
+ #: modules/opengraph/opengraph.php:319 modules/titles/titles.php:40
141
  msgid "Settings"
142
  msgstr ""
143
 
181
  msgid "404 Monitor"
182
  msgstr ""
183
 
184
+ #: modules/404s/fofs.php:19 modules/autolinks/autolinks.php:17
185
+ #: modules/canonical/canonical.php:223 modules/canonical/canonical.php:229
186
+ #: modules/files/files.php:144
187
+ #: modules/internal-link-aliases/internal-link-aliases.php:325
188
+ #: modules/link-nofollow/link-nofollow.php:132 modules/linkbox/linkbox.php:128
189
+ #: modules/linkbox/linkbox.php:135 modules/meta/meta-descriptions.php:193
190
+ #: modules/meta/meta-keywords.php:178 modules/meta/meta-robots.php:52
191
+ #: modules/meta/webmaster-verify.php:95 modules/meta/webmaster-verify.php:101
192
  #: modules/more-links/more-links.php:104 modules/more-links/more-links.php:111
193
+ #: modules/opengraph/opengraph.php:479
194
+ #: modules/rich-snippets/rich-snippets.php:413
195
+ #: modules/rich-snippets/rich-snippets.php:420
196
  #: modules/settings/settings.php:63
197
+ #: modules/sharing-buttons/sharing-buttons.php:82
198
+ #: modules/sharing-buttons/sharing-buttons.php:88 modules/slugs/slugs.php:112
199
  #: modules/slugs/slugs.php:120 modules/titles/titles.php:357
200
  #: modules/user-code/user-code.php:97
201
  msgid "Overview"
235
  "<p>You can perform the following actions on each entry in the log:</p>\r\n"
236
  "\r\n"
237
  "<ul>\r\n"
238
+ "\t<li>Clicking the first icon will open the URL in a new window. This is "
239
+ "useful for testing whether or not a redirect is working.</li>\r\n"
240
+ "\t<li>Clicking the second icon will open Google's archived version of the "
241
+ "URL in a new window. This is useful for determining what content, if any, "
242
+ "used to be located at that URL.</li>\r\n"
243
+ "\t<li>Once you've taken care of a 404 error, you can click the third icon to "
244
+ "remove it from the list. The URL will reappear on the list if it triggers a "
245
+ "404 error in the future.</li>\r\n"
246
+ "\t<li>To view the list of the URLs by which visitors and/or search engines "
247
+ "reached this non-existent URL, click the scroll icon in the &#8220;"
248
+ "Referers&#8221; column.</li>\r\n"
249
+ "\t<li>To view the list of visitor browsers and search engine bots which "
250
+ "tried to access this non-existent URL, click the scroll icon in the &#8220;"
251
+ "User Agents&#8221; column.</li>\r\n"
252
  "</ul>\r\n"
253
+ "\r\n"
254
+ "<p>The &#8220;Clear Log&#8221; button will erase all of entries in the log. "
255
+ "The log will remain empty until more 404 errors are logged.</p>\r\n"
256
  msgstr ""
257
 
258
+ #: modules/404s/fofs.php:49 modules/linkbox/linkbox.php:129
259
+ #: modules/linkbox/linkbox.php:140
 
 
260
  msgid "Settings Help"
261
  msgstr ""
262
 
263
+ #: modules/404s/fofs.php:50
264
  msgid ""
265
  "\r\n"
266
  "<p>The following options are available on the Settings tab:</p>\r\n"
305
  "</ul>\r\n"
306
  msgstr ""
307
 
308
+ #: modules/404s/fofs.php:78 modules/autolinks/autolinks.php:161
309
+ #: modules/files/files.php:165 modules/meta/meta-descriptions.php:225
310
+ #: modules/meta/meta-keywords.php:213 modules/meta/meta-robots.php:102
311
+ #: modules/rich-snippets/rich-snippets.php:414
312
+ #: modules/rich-snippets/rich-snippets.php:425 modules/slugs/slugs.php:114
313
+ #: modules/slugs/slugs.php:130 modules/titles/titles.php:480
314
  #: modules/user-code/user-code.php:111
315
  msgid "Troubleshooting"
316
  msgstr ""
317
 
318
+ #: modules/404s/fofs.php:79
319
  msgid ""
320
  "\r\n"
321
  "<p>404 Monitor doesn't appear to work? Take these notes into consideration:</"
374
  msgid "Deeplink Juggernaut"
375
  msgstr ""
376
 
377
+ #: modules/autolinks/autolinks.php:18
378
+ msgid ""
379
+ "\r\n"
380
+ "<ul>\r\n"
381
+ "\t<li><strong>What it does:</strong> Deeplink Juggernaut lets you "
382
+ "automatically generate hyperlinks in your site&#8217;s content and footer.</"
383
+ "li>\r\n"
384
+ "\t<li><strong>Why it helps:</strong> Search engines use the anchor text of "
385
+ "hyperlinks to determine the topicality of the webpage to which the link "
386
+ "points. Deeplink Juggernaut lets you automatically generate hyperlinks to "
387
+ "various pages on your site, which can help increase the linked page&#8217;s "
388
+ "ranking for the term used in the anchor text.</li>\r\n"
389
+ "\t<li><strong>How to use it:</strong> The Content Links section lets you "
390
+ "automatically link words or phrases in your site&#8217;s content to a target "
391
+ "page of your choosing. The Footer Links section lets you add links in the "
392
+ "footer of your entire site or just a particular set of webpages.</li>\r\n"
393
+ "</ul>\r\n"
394
+ msgstr ""
395
+
396
+ #: modules/autolinks/autolinks.php:28
397
+ msgid "Content Links Tab"
398
+ msgstr ""
399
+
400
+ #: modules/autolinks/autolinks.php:29
401
+ msgid ""
402
+ "\r\n"
403
+ "<p>To add an autolink, fill in the fields and then click &#8220;Save Changes."
404
+ "&#8221; Once you do so, you can edit your new autolink or add another one.</"
405
+ "p>\r\n"
406
+ "\r\n"
407
+ "<ul>\r\n"
408
+ "\t<li><strong>Anchor Text</strong> &mdash; Deeplink Juggernaut will scan "
409
+ "your site&#8217;s content for the word or phrase you put in this box, and "
410
+ "then hyperlink instances of that word or phrase to the webpage or item you "
411
+ "specify in the Destination box. The Anchor Text should be a keyword that you "
412
+ "want the Destination page to rank for.</li>\r\n"
413
+ "\t<li><p><strong>Destination</strong> &mdash; This is the box where you "
414
+ "specify the webpage where you want the auto-generated hyperlinks to point.</"
415
+ "p>\r\n"
416
+ "\t\t<ul>\r\n"
417
+ "\t\t\t<li>To link to a post, page, attachment, category, tag, term, or "
418
+ "author on your site, just type in its name and then select it from the "
419
+ "dropdown.</li>\r\n"
420
+ "\t\t\t<li>To link to your blog homepage, just type in &#8220;home&#8221; and "
421
+ "select &#8220;Blog Homepage&#8221; from the dropdown.</li>\r\n"
422
+ "\t\t\t<li>To link to one of the aliased URLs you created with the Link Mask "
423
+ "Generator, just type in part of the original URL or alias URL and then "
424
+ "select the link mask from the dropdown.</li>\r\n"
425
+ "\t\t\t<li>To link to some other webpage, just type or paste in its URL in "
426
+ "the box.</li>\r\n"
427
+ "\t\t</ul>\r\n"
428
+ "\t</li>\r\n"
429
+ "\t<li><strong>Title Attribute</strong> &mdash; The link&#8217;s title "
430
+ "attribute is the text that will appear when the visitor&#8217;s mouse "
431
+ "pointer hovers over the link. Totally optional.</li>\r\n"
432
+ "\t<li><p><strong>Dampener:</strong> If the anchor text you specify occurs "
433
+ "many times throughout your site&#8217;s content, you may wish to reduce the "
434
+ "overall frequency with which the anchor text is hyperlinked. You can reduce "
435
+ "the autolinking frequency by a percentage with the Dampener field. For "
436
+ "example:</p>\r\n"
437
+ "\t\t<ul>\r\n"
438
+ "\t\t\t<li>0% dampening will have no effect.</li>\r\n"
439
+ "\t\t\t<li>50% dampening means the anchor text will be autolinked "
440
+ "approximately half as often as it otherwise would be.</li>\r\n"
441
+ "\t\t\t<li>90% dampening means the anchor text will be autolinked only 10% as "
442
+ "often as it otherwise would be.</li>\r\n"
443
+ "\t\t\t<li>100% dampening means the anchor text won&#8217;t be linked at all."
444
+ "</li>\r\n"
445
+ "\t\t</ul>\r\n"
446
+ "\t\t<p>The &#8220;Dampener&#8221; column will only appear if you&#8217;ve "
447
+ "enabled it under the &#8220;Content Link Settings&#8221; tab.</p>\r\n"
448
+ "\t</li>\r\n"
449
+ "\t<li><strong>Nofollow</strong> &mdash; Checking this will add the "
450
+ "<code>rel=&quot;nofollow&quot;</code> attribute to all autolinks generated "
451
+ "for that anchor text. You should enable this only if you&#8217;re creating "
452
+ "an automatic affiliate link.</li>\r\n"
453
+ "\t<li><strong>New window</strong> &mdash; Checking this will make the link "
454
+ "destination open up in a new window when the autolink is clicked.</li>\r\n"
455
+ "\t<li><strong>Delete</strong> &mdash; To delete an autolink, tick its &#8220;"
456
+ "Delete&#8221; checkbox and then click &#8220;Save Changes.&#8221;</li>\r\n"
457
+ "</ul>\r\n"
458
+ msgstr ""
459
+
460
+ #: modules/autolinks/autolinks.php:60
461
+ msgid "Content Link Settings Tab"
462
+ msgstr ""
463
+
464
+ #: modules/autolinks/autolinks.php:61
465
+ msgid ""
466
+ "\r\n"
467
+ "<p>The following options are available on the Content Link Settings tab:</p>"
468
+ "\r\n"
469
+ "\r\n"
470
+ "<ul>\r\n"
471
+ "\t<li><strong>Add Autolinks to...</strong> &mdash; You can stop Deeplink "
472
+ "Juggernaut from adding hyperlinks to the content of items of a given post "
473
+ "type by unchecking the post type&#8217;s checkbox.</li>\r\n"
474
+ "\t<li>\r\n"
475
+ "\t\t<p><strong>Self-Linking</strong></p>\r\n"
476
+ "\t\t<ul>\r\n"
477
+ "\t\t\t<li><strong>Allow posts to link to themselves</strong> &mdash; This "
478
+ "permits Deeplink Juggernaut to add a link to the content of a given post/"
479
+ "page even if the link is pointing to the URL of that post/page.</li>\r\n"
480
+ "\t\t\t<li><strong>Allow posts to link to the URL by which the visitor is "
481
+ "accessing the post</strong> &mdash; There are lots of URLs by which you can "
482
+ "access any given post/page on your site. You can access posts/pages via the "
483
+ "homepage URL, your site&#8217;s many archive URLs, or the URLs of the posts/"
484
+ "pages themselves. If you have an autolink that points to the homepage, and "
485
+ "if Deeplink Juggernaut were to add that link to the content of posts when "
486
+ "those posts are accessed from the homepage, then the homepage would be "
487
+ "linking to itself. By default, Deeplink Juggernaut won&#8217;t let this "
488
+ "happen. But if you&#8217;re okay with that sort of behavior, you can enable "
489
+ "it by checking this box.</li>\r\n"
490
+ "\t\t</ul>\r\n"
491
+ "\t</li>\r\n"
492
+ "\t<li>\r\n"
493
+ "\t\t<p><strong>Quantity Restrictions</strong></p>\r\n"
494
+ "\t\t<ul>\r\n"
495
+ "\t\t\t<li><strong>Don&#8217;t add any more than ___ autolinks per post/page/"
496
+ "etc.</strong> &mdash; Use this option to cap the total number of autolinks "
497
+ "(for all anchor texts combined) that can be added to the content of any one "
498
+ "item.</li>\r\n"
499
+ "\t\t\t<li><strong>Don&#8217;t link the same anchor text any more than ___ "
500
+ "times per post/page/etc.</strong> &mdash; Use this option to cap the number "
501
+ "of times that each anchor text can be autolinked in the content of any one "
502
+ "item.</li>\r\n"
503
+ "\t\t\t<li><strong>Don&#8217;t link to the same destination any more than ___ "
504
+ "times per post/page/etc.</strong> &mdash; Use this option to cap the number "
505
+ "of autolinks that any one URL can get within the content of any one item. "
506
+ "(This is different from the previous option because you can have multiple "
507
+ "anchor texts pointing to the same place.)</li>\r\n"
508
+ "\t\t</ul>\r\n"
509
+ "\t</li>\r\n"
510
+ "\t<li>\r\n"
511
+ "\t\t<p><strong>Additional Dampening Effect</strong></p>\r\n"
512
+ "\t\t<ul>\r\n"
513
+ "\t\t\t<li><strong>Globally decrease autolinking frequency by ___%</strong> "
514
+ "&mdash; If you have massive amounts of content on your site (e.g. thousands "
515
+ "of posts), the &#8220;Quantity Restrictions&#8221; settings may not be "
516
+ "sufficient to reign in the number of autolinks being generated. If that is "
517
+ "the case, you can use this option to reduce overall autolinking frequency by "
518
+ "a given percentage. For example, if you were to set global dampening to 10%, "
519
+ "then autolinks would be added only 90% as often as before.</li>\r\n"
520
+ "\t\t\t<li><strong>Add a &#8220;Dampener&#8221; column to the Content Links "
521
+ "editor</strong> &mdash; Check this box and click &#8220;Save Changes&#8221; "
522
+ "to add a new column to the &#8220;Content Links&#8221; editor table that "
523
+ "will let you apply the dampening effect to individual autolinks. If "
524
+ "you&#8217;ve also enabled the global dampening option, this will let you "
525
+ "override the global value for individual links. (For example, you can "
526
+ "disable dampening for just one of your links by setting the Dampener field "
527
+ "to 0%.)</li>\r\n"
528
+ "\t\t</ul>\r\n"
529
+ "\t</li>\r\n"
530
+ "\t<li><strong>Tag Restrictions</strong> &mdash; By default, Deeplink "
531
+ "Juggernaut will not autolink a particular anchor text if that anchor text is "
532
+ "found in a header or in a code block. You can further customize these "
533
+ "exceptions by adding HTML tags to the list.</li>\r\n"
534
+ "\t<li><strong>Siloing</strong> &mdash; If you enable the siloing feature for "
535
+ "a given post type (such as posts or pages), then items of that post type "
536
+ "will only be able to autolink to a webpage on your site if it falls within a "
537
+ "category, tag, or term shared by that item. For example, you can set it up "
538
+ "so that posts in Category A can&#8217;t autolink to anything on your site "
539
+ "with the exception of other posts in Category A and the Category A archive. "
540
+ "Autolinks to external sites will not be affected, since the siloing setting "
541
+ "will not affect autolinks that have a URL in the Destination box.</li>\r\n"
542
+ "\t<li><strong>CSS Class for Autolinks</strong> &mdash; If you want to apply "
543
+ "CSS styling to Content Links generated by Deeplink Juggernaut, type in a "
544
+ "class name here (e.g. &#8220;autolink&#8221;).</li>\r\n"
545
+ "</ul>\r\n"
546
+ msgstr ""
547
+
548
+ #: modules/autolinks/autolinks.php:96
549
+ msgid "Footer Links Tab"
550
+ msgstr ""
551
+
552
+ #: modules/autolinks/autolinks.php:97
553
+ msgid ""
554
+ "\r\n"
555
+ "<p>To add a footer link, fill in the fields and then click &#8220;Save "
556
+ "Changes.&#8221; Once you do so, you can edit your new footer link or add "
557
+ "another one.</p>\r\n"
558
+ "\r\n"
559
+ "<ul>\r\n"
560
+ "\t<li><p><strong>Link Location</strong> &mdash; If you want to add a footer "
561
+ "link across your entire site, leave this box blank. Otherwise, type in the "
562
+ "location on your site where you want the footer link to appear.</p>\r\n"
563
+ "\t\t<p>If you only want the footer link to appear on&hellip;</p>\r\n"
564
+ "\t\t<ul>\r\n"
565
+ "\t\t\t<li>&hellip;A particular post, page, attachment, or category/tag/term/"
566
+ "author archive, just type in the item&#8217;s name and then select it from "
567
+ "the dropdown.</li>\r\n"
568
+ "\t\t\t<li>&hellip;Your blog homepage, just type in &#8220;home&#8221; and "
569
+ "select &#8220;Blog Homepage&#8221; from the dropdown.</li>\r\n"
570
+ "\t\t\t<li>&hellip;A particular URL on your site, just type or paste it into "
571
+ "the box.</li>\r\n"
572
+ "\t\t</ul>\r\n"
573
+ "\t</li>\r\n"
574
+ "\t<li><p><strong>Match child content</strong> &mdash; What this does depends "
575
+ "on what type of Link Location you specified.</p>\r\n"
576
+ "\t\t<ul>\r\n"
577
+ "\t\t\t<li>If the Link Location is a category/tag/term archive, then the "
578
+ "footer link will also be added to posts within that term.</li>\r\n"
579
+ "\t\t\t<li>If the Link Location is an author archive, then the footer link "
580
+ "will also be added to posts written by that author.</li>\r\n"
581
+ "\t\t\t<li>If the Link Location is a URL, then the footer link will also be "
582
+ "added to URLs that begin with whatever URL you entered.</li>\r\n"
583
+ "\t\t</ul>\r\n"
584
+ "\t</li>\r\n"
585
+ "\t<li><strong>Negative match</strong> &mdash; This will cause the footer "
586
+ "link to be inserted on webpages <em>other than</em> the Link Location and "
587
+ "(if the appropriate box is checked) its child content.</li>\r\n"
588
+ "\t<li><strong>Anchor Text</strong> &mdash; Deeplink Juggernaut insert this "
589
+ "text into your site&#8217;s footer and will link that text to the webpage or "
590
+ "item you specify in the Destination box. The Anchor Text should be a keyword "
591
+ "that you want the Destination page to rank for.</li>\r\n"
592
+ "\t<li><p><strong>Destination</strong> &mdash; This is the box where you "
593
+ "specify the webpage where you want the auto-generated hyperlinks to point.</"
594
+ "p>\r\n"
595
+ "\t\t<ul>\r\n"
596
+ "\t\t\t<li>To link to a post, page, attachment, category, tag, term, or "
597
+ "author on your site, just type in its name and then select it from the "
598
+ "dropdown.</li>\r\n"
599
+ "\t\t\t<li>To link to your blog homepage, just type in &#8220;home&#8221; and "
600
+ "select &#8220;Blog Homepage&#8221; from the dropdown.</li>\r\n"
601
+ "\t\t\t<li>To link to one of the aliased URLs you created with the Link Mask "
602
+ "Generator, just type in part of the original URL or alias URL and then "
603
+ "select the link mask from the dropdown.</li>\r\n"
604
+ "\t\t\t<li>To link to some other webpage, just type or paste in its URL in "
605
+ "the box.</li>\r\n"
606
+ "\t\t</ul>\r\n"
607
+ "\t</li>\r\n"
608
+ "\t<li><strong>Title Attribute</strong> &mdash; The link&#8217;s title "
609
+ "attribute is the text that will appear when the visitor&#8217;s mouse "
610
+ "pointer hovers over the link. Totally optional.</li>\r\n"
611
+ "\t<li><strong>Nofollow</strong> &mdash; Checking this will add the "
612
+ "<code>rel=&quot;nofollow&quot;</code> attribute to all instances of this "
613
+ "footer link. You should enable this only if you&#8217;re creating an "
614
+ "automatic affiliate link.</li>\r\n"
615
+ "\t<li><strong>New window</strong> &mdash; Checking this will make the link "
616
+ "destination open up in a new window when the footer link is clicked.</li>\r\n"
617
+ "\t<li><strong>Delete</strong> &mdash; To delete an autolink, tick its &#8220;"
618
+ "Delete&#8221; checkbox and then click &#8220;Save Changes.&#8221;</li>\r\n"
619
+ "</ul>\r\n"
620
+ msgstr ""
621
+
622
+ #: modules/autolinks/autolinks.php:135
623
+ msgid "Footer Link Settings Tab"
624
+ msgstr ""
625
+
626
+ #: modules/autolinks/autolinks.php:136
627
+ msgid ""
628
+ "\r\n"
629
+ "<p>The following options are available on the Footer Link Settings tab:</p>"
630
+ "\r\n"
631
+ "\r\n"
632
+ "<ul>\r\n"
633
+ "\t<li><strong>Link Section Format</strong> &mdash; Lets you customize the "
634
+ "text/HTML that will surround the list of links outputted in your site&#8217;"
635
+ "s footer (represented by the <code>{links}</code> variable).</li>\r\n"
636
+ "\t<li><strong>Link Format</strong> &mdash; Lets you specify text or HTML "
637
+ "that will surround each individual link (represented by the <code>{link}</"
638
+ "code> variable).</li>\r\n"
639
+ "\t<li><strong>Link Separator</strong> &mdash; Lets you specify text or HTML "
640
+ "that will separate each individual link.</li>\r\n"
641
+ "</ul>\r\n"
642
+ msgstr ""
643
+
644
+ #: modules/autolinks/autolinks.php:148 modules/files/files.php:155
645
+ #: modules/internal-link-aliases/internal-link-aliases.php:362
646
+ #: modules/meta/meta-descriptions.php:216 modules/meta/meta-keywords.php:203
647
+ #: modules/modules/modules.php:203 modules/more-links/more-links.php:105
648
+ #: modules/more-links/more-links.php:116 modules/settings/settings.php:81
649
+ #: modules/slugs/slugs.php:113 modules/slugs/slugs.php:125
650
+ #: modules/titles/titles.php:469
651
+ msgid "FAQ"
652
+ msgstr ""
653
+
654
+ #: modules/autolinks/autolinks.php:149
655
+ msgid ""
656
+ "\r\n"
657
+ "<ul>\r\n"
658
+ "\t<li><strong>What happens if I autolink to a post and then delete the post "
659
+ "later?</strong><br />Deeplink Juggernaut will disable all autolinks that "
660
+ "point to the deleted post. Deeplink Juggernaut will keep the autolink in the "
661
+ "list though, so that you can point it somewhere else.</li>\r\n"
662
+ "\t<li><strong>What happens if I autolink to a draft post?</strong><br /"
663
+ ">Don&#8217;t worry: Deeplink Juggernaut won&#8217;t actually autolink to it "
664
+ "until the post is published.</li>\r\n"
665
+ "\t<li><strong>Does Deeplink Juggernaut edit my posts&#8217; content as it is "
666
+ "stored in the database?</strong><br />No. Autolinks are added dynamically. "
667
+ "This means all the autolinks will go away if you disable Deeplink Juggernaut "
668
+ "or deactivate SEO Ultimate.</li>\r\n"
669
+ "\t<li><strong>How does the Dampener work?</strong><br />When the Dampener is "
670
+ "in effect, Deeplink Juggernaut creates a hash for each autolink and creates "
671
+ "a hash for each post/page/etc. on your site. In order for the autolink to be "
672
+ "added to the content of a post/page, the two hashes have to be compatible "
673
+ "with each other. If the Dampener is set to 70%, then the hashes will match "
674
+ "and the autolink will be applied approximately 30% of the time. This hash "
675
+ "system results in a pseudo-random dampening effect that will always have a "
676
+ "consistent outcome for any given anchor/post combination.</li>\r\n"
677
+ "\t<li><strong>Can I still use the Footer Links feature if my theme has a "
678
+ "widgetized footer?</strong><br />Yes. Make sure the &#8220;SEO Ultimate "
679
+ "Widgets&#8221; module is enabled in the SEO Ultimate <a href='admin.php?"
680
+ "page=seo' target='_blank'>Module Manager</a>, then go to your <a "
681
+ "href='widgets.php' target='_blank'>Widgets</a> page and add the &#8220;"
682
+ "Footer Links&#8221; widget.\r\n"
683
+ "</ul>\r\n"
684
+ msgstr ""
685
+
686
+ #: modules/autolinks/autolinks.php:162
687
+ msgid ""
688
+ "\r\n"
689
+ "<ul>\r\n"
690
+ "\t<li><strong>I configured a Content Link, but the anchor text isn&#8217;t "
691
+ "being linked on my site.</strong><br />You likely enabled a setting on the "
692
+ "&#8220;Content Link Settings&#8221; tab that is preventing the autolink from "
693
+ "being applied.</li>\r\n"
694
+ "\t<li><strong>I have Content Links configured for &#8220;widgets&#8221; and "
695
+ "&#8220;blue widgets,&#8221; but when the phrase &#8220;blue widgets&#8221; "
696
+ "appears on my site, only the word &#8220;widgets&#8221; is being linked. Why "
697
+ "is that?</strong><br />Deeplink Juggernaut always links longer anchor texts "
698
+ "first, so if this is happening, then the &#8220;blue widgets&#8221; autolink "
699
+ "must have been disabled in that particular instance due to a Quantity "
700
+ "Restriction or the Dampener effect being applied.</li>\r\n"
701
+ "\t<li><strong>Why aren&#8217;t my footer links appearing?</strong><br /"
702
+ ">Check to make sure your theme is <a href='http://johnlamansky.com/wordpress/"
703
+ "theme-plugin-hooks/' target='_blank'>plugin-friendly</a>. Also, check the "
704
+ "&#8220;Footer Link Settings&#8221; tab and make sure that the &#8220;Link "
705
+ "Section Format&#8221; field includes the <code>{links}</code> variable and "
706
+ "that the &#8220;Link Format&#8221; field includes the <code>{link}</code> "
707
+ "variable.</li>\r\n"
708
+ "</ul>\r\n"
709
+ msgstr ""
710
+
711
  #: modules/autolinks/content-autolinks-settings.php:16
712
  msgid "Content Deeplink Juggernaut Settings"
713
  msgstr ""
716
  msgid "Content Link Settings"
717
  msgstr ""
718
 
719
+ #: modules/autolinks/content-autolinks-settings.php:42
720
  msgid "Add Autolinks to..."
721
  msgstr ""
722
 
723
+ #: modules/autolinks/content-autolinks-settings.php:45
724
+ msgid "Allow posts to link to themselves"
725
  msgstr ""
726
 
727
+ #: modules/autolinks/content-autolinks-settings.php:46
728
  msgid ""
729
+ "Allow posts to link to the URL by which the visitor is accessing the post"
730
  msgstr ""
731
 
732
+ #: modules/autolinks/content-autolinks-settings.php:47
733
  msgid "Self-Linking"
734
  msgstr ""
735
 
736
+ #: modules/autolinks/content-autolinks-settings.php:50
 
 
 
 
737
  msgid "Don&#8217;t add any more than %d autolinks per post/page/etc."
738
  msgstr ""
739
 
740
+ #: modules/autolinks/content-autolinks-settings.php:51
741
  msgid ""
742
  "Don&#8217;t link the same anchor text any more than %d times per post/page/"
743
  "etc."
744
  msgstr ""
745
 
 
 
 
 
 
 
746
  #: modules/autolinks/content-autolinks-settings.php:52
747
  msgid ""
748
  "Don&#8217;t link to the same destination any more than %d times per post/"
753
  msgid "Quantity Restrictions"
754
  msgstr ""
755
 
756
+ #: modules/autolinks/content-autolinks-settings.php:57
757
+ msgid "Globally decrease autolinking frequency by %d%"
758
+ msgstr ""
759
+
760
+ #: modules/autolinks/content-autolinks-settings.php:59
761
+ msgid ""
762
+ "Add a &#8220;Dampener&#8221; column to the Content Links editor to let me "
763
+ "customize frequency dampening on a per-link basis"
764
+ msgstr ""
765
+
766
+ #: modules/autolinks/content-autolinks-settings.php:63
767
+ msgid "Additional Dampening Effect"
768
+ msgstr ""
769
+
770
+ #: modules/autolinks/content-autolinks-settings.php:65
771
  msgid ""
772
  "Don&#8217;t add autolinks to text within these HTML tags <em>(separate with "
773
  "commas)</em>:"
774
  msgstr ""
775
 
776
+ #: modules/autolinks/content-autolinks-settings.php:65
777
  msgid "Tag Restrictions"
778
  msgstr ""
779
 
780
+ #: modules/autolinks/content-autolinks-settings.php:73
781
  msgid "%s can only link to internal destinations that share at least one..."
782
  msgstr ""
783
 
784
+ #: modules/autolinks/content-autolinks-settings.php:86
785
  msgid "Siloing"
786
  msgstr ""
787
 
788
+ #: modules/autolinks/content-autolinks-settings.php:88
789
  msgid "CSS Class for Autolinks"
790
  msgstr ""
791
 
792
+ #: modules/autolinks/content-autolinks.php:18
793
  msgid "Content Deeplink Juggernaut"
794
  msgstr ""
795
 
796
+ #: modules/autolinks/content-autolinks.php:19
797
  msgid "Content Links"
798
  msgstr ""
799
 
800
+ #: modules/autolinks/content-autolinks.php:247
801
  msgid ""
802
  "The Content Links section of Deeplink Juggernaut lets you automatically link "
803
  "a certain word or phrase in your post/page content to a URL you specify."
804
  msgstr ""
805
 
806
+ #: modules/autolinks/content-autolinks.php:310
807
+ msgid ""
808
+ "<strong>Functionality Change Notice:</strong> The &#8220;Site Cap&#8221; "
809
+ "feature (which allowed you set a per-link sitewide quantity limit) has been "
810
+ "replaced with a more efficient &#8220;Dampener&#8221; feature that lets you "
811
+ "reduce autolinking frequency by a percentage. Although the Site Cap feature "
812
+ "has been replaced, we retained the &#8220;Site Cap&#8221; column for you in "
813
+ "the table below, since it looks like you&#8217;ve used the Site Cap feature "
814
+ "in the past. We retained the column to help you remember which links used "
815
+ "the old feature, so that you know to which links to apply the new &#8220;"
816
+ "Dampener&#8221; feature. Once you&#8217;re done migrating the Site Cap "
817
+ "values to Dampener percentages, just clear the &#8220;Site Cap&#8221; boxes "
818
+ "to make those boxes (and this message) go away."
819
+ msgstr ""
820
+
821
+ #: modules/autolinks/content-autolinks.php:316
822
  #: modules/autolinks/footer-autolinks.php:157
823
  msgid "Edit Existing Links"
824
  msgstr ""
825
 
826
+ #: modules/autolinks/content-autolinks.php:320
827
  #: modules/autolinks/footer-autolinks.php:161
828
  msgid "Add a New Link"
829
  msgstr ""
830
 
831
+ #: modules/autolinks/content-autolinks.php:333
832
  #: modules/autolinks/footer-autolinks.php:171
833
  msgid "Anchor Text"
834
  msgstr ""
835
 
836
+ #: modules/autolinks/content-autolinks.php:334
837
  #: modules/autolinks/footer-autolinks.php:172
838
  msgid "Destination"
839
  msgstr ""
840
 
841
+ #: modules/autolinks/content-autolinks.php:335
842
  #: modules/autolinks/footer-autolinks.php:173
843
+ msgid "Title Attribute <em>(optional)</em>"
844
+ msgstr ""
845
+
846
+ #: modules/autolinks/content-autolinks.php:337
847
+ msgid "Dampener"
848
  msgstr ""
849
 
850
+ #: modules/autolinks/content-autolinks.php:339
851
  msgid "Site Cap"
852
  msgstr ""
853
 
854
+ #: modules/autolinks/content-autolinks.php:340
855
  #: modules/autolinks/footer-autolinks.php:174
856
  msgid "Options"
857
  msgstr ""
858
 
859
+ #: modules/autolinks/content-autolinks.php:342
860
  #: modules/autolinks/footer-autolinks.php:176
861
+ #: modules/internal-link-aliases/internal-link-aliases.php:102
862
  msgid "Delete"
863
  msgstr ""
864
 
865
+ #: modules/autolinks/content-autolinks.php:375
866
  #: modules/autolinks/footer-autolinks.php:210 modules/noindex/noindex.php:61
867
  #: modules/noindex/noindex.php:85
868
  msgid "Nofollow"
869
  msgstr ""
870
 
871
+ #: modules/autolinks/content-autolinks.php:377
872
  #: modules/autolinks/footer-autolinks.php:212
873
  msgid "New window"
874
  msgstr ""
875
 
876
+ #: modules/autolinks/content-autolinks.php:458
877
  msgid "Inbound Autolink Anchors:<br /><em>(one per line)</em>"
878
  msgstr ""
879
 
880
+ #: modules/autolinks/content-autolinks.php:461
881
  msgid "Don&#8217;t add autolinks to anchor texts found in this post."
882
  msgstr ""
883
 
884
+ #: modules/autolinks/content-autolinks.php:461
885
  msgid "Autolink Exclusion:"
886
  msgstr ""
887
 
888
+ #: modules/autolinks/content-autolinks.php:467
889
  msgid ""
890
  "<strong>Incoming Autolink Anchors</strong> &mdash; When you enter anchors "
891
  "into this box, Deeplink Juggernaut will search for that anchor in all your "
932
  msgstr ""
933
 
934
  #: modules/autolinks/footer-autolinks.php:169
935
+ msgid "Link Location <em>(optional)</em>"
936
  msgstr ""
937
 
938
  #: modules/autolinks/footer-autolinks.php:197
943
  msgid "Negative match"
944
  msgstr ""
945
 
946
+ #: modules/canonical/canonical.php:12 modules/canonical/canonical.php:221
947
  msgid "Canonicalizer"
948
  msgstr ""
949
 
986
  msgid "Automated 301 Redirects"
987
  msgstr ""
988
 
989
+ #: modules/canonical/canonical.php:210
990
  msgid ""
991
  "\r\n"
992
  "<ul>\r\n"
993
+ "\t<li><strong>What it does:</strong> Canonicalizer will point Google to the "
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
994
  "correct URL for your homepage and each of your posts, Pages, categories, "
995
+ "tags, date archives, and author archives.</li>\r\n"
996
+ "\t<li><strong>Why it helps:</strong> If Google comes across an alternate URL "
997
+ "by which one of those items can be accessed, it will be able to find the "
998
+ "correct URL and won&#8217;t penalize you for having two identical pages on "
999
+ "your site.</li>\r\n"
1000
+ "\t<li><strong>How to use it:</strong> Just check the three checkboxes. If "
1001
+ "your site is accessible using both <code>http://</code> and <code>https://</"
1002
+ "code>, be sure to set the preferred one under &#8220;Canonical URL Scheme."
1003
+ "&#8221;</li>\r\n"
1004
  "</ul>\r\n"
1005
  msgstr ""
1006
 
1116
  msgstr[0] ""
1117
  msgstr[1] ""
1118
 
1119
+ #: modules/class.su-module.php:700
1120
  msgid ""
1121
  "All the modules on this page have been disabled. You can re-enable them "
1122
  "using the <a href=\"%s\">Module Manager</a>."
1123
  msgstr ""
1124
 
1125
+ #: modules/class.su-module.php:961
1126
  msgid "%1$s | %2$s %3$s by %4$s"
1127
  msgstr ""
1128
 
1129
+ #: modules/class.su-module.php:1040
1130
  msgid "Your site currently doesn&#8217;t have any public items of this type."
1131
  msgstr ""
1132
 
1133
+ #: modules/class.su-module.php:1127
1134
  msgid "&laquo;"
1135
  msgstr ""
1136
 
1137
+ #: modules/class.su-module.php:1128
1138
  msgid "&raquo;"
1139
  msgstr ""
1140
 
1141
+ #: modules/class.su-module.php:1135
1142
  msgid "Displaying %s&#8211;%s of %s"
1143
  msgstr ""
1144
 
1145
+ #: modules/class.su-module.php:1149
1146
  msgid "ID"
1147
  msgstr ""
1148
 
1149
+ #: modules/class.su-module.php:1195
1150
  msgid "View"
1151
  msgstr ""
1152
 
1153
+ #: modules/class.su-module.php:1197
1154
  msgid "Edit"
1155
  msgstr ""
1156
 
1157
+ #: modules/class.su-module.php:1367
1158
  msgid "Settings updated."
1159
  msgstr ""
1160
 
1161
+ #: modules/class.su-module.php:1388
1162
  msgid "Save Changes"
1163
  msgstr ""
1164
 
1165
+ #: modules/class.su-module.php:1877
1166
  msgid ""
1167
  "Are you sure you want to replace the textbox contents with this default "
1168
  "value?"
1169
  msgstr ""
1170
 
1171
+ #: modules/class.su-module.php:1903 modules/settings/settings-data.php:23
1172
  msgid "Reset"
1173
  msgstr ""
1174
 
1175
+ #: modules/class.su-module.php:2641 modules/class.su-module.php:2653
1176
  msgid "A Deleted %s"
1177
  msgstr ""
1178
 
1179
+ #: modules/class.su-module.php:2643
1180
  msgid "A Deleted Post"
1181
  msgstr ""
1182
 
1183
+ #: modules/class.su-module.php:2658
1184
  msgid "A Deleted Term"
1185
  msgstr ""
1186
 
1187
+ #: modules/class.su-module.php:2664 modules/meta/meta-descriptions.php:31
1188
+ #: modules/meta/meta-keywords.php:40 modules/opengraph/opengraph.php:320
1189
+ #: plugin/class.seo-ultimate.php:1795
1190
  msgid "Blog Homepage"
1191
  msgstr ""
1192
 
1193
+ #: modules/class.su-module.php:2669 plugin/class.seo-ultimate.php:1871
1194
  msgid "Author"
1195
  msgstr ""
1196
 
1197
+ #: modules/class.su-module.php:2671
1198
  msgid "A Deleted User"
1199
  msgstr ""
1200
 
1201
+ #: modules/class.su-module.php:2686 plugin/class.seo-ultimate.php:1901
1202
  msgid "Link Mask"
1203
  msgstr ""
1204
 
1205
+ #: modules/class.su-module.php:2688
1206
  msgid "Link Mask (Disabled)"
1207
  msgstr ""
1208
 
1209
+ #: modules/class.su-module.php:2693
1210
  msgid "A Deleted Link Mask"
1211
  msgstr ""
1212
 
1213
+ #: modules/class.su-module.php:2723
1214
  msgid "Type a URL or start typing the name of an item on your site"
1215
  msgstr ""
1216
 
1217
+ #: modules/class.su-module.php:2736
1218
  msgid "Remove this location from this textbox"
1219
  msgstr ""
1220
 
1221
+ #: modules/class.su-module.php:2736
1222
  msgid "X"
1223
  msgstr ""
1224
 
1273
 
1274
  #: modules/files/files.php:134
1275
  msgid ""
1276
+ "Please note that the &#8220;discourage search engines&#8221; setting "
1277
+ "won&#8217;t have any effect on your robots.txt file, since you&#8217;re "
1278
+ "using <a href=\"%s\">a custom one</a>."
1279
  msgstr ""
1280
 
1281
  #: modules/files/files.php:145
1296
  "</ul>\r\n"
1297
  msgstr ""
1298
 
 
 
 
 
 
 
 
 
1299
  #: modules/files/files.php:156
1300
  msgid ""
1301
  "\r\n"
1366
  "first and run AIOSP&#8217;s upgrade process."
1367
  msgstr ""
1368
 
1369
+ #: modules/internal-link-aliases/internal-link-aliases.php:27
1370
  msgid "Link Mask Generator"
1371
  msgstr ""
1372
 
1373
+ #: modules/internal-link-aliases/internal-link-aliases.php:34
1374
+ msgid ""
1375
+ "Link Mask Generator won&#8217;t work with default or &#8220;pathinfo&#8221; "
1376
+ "permalinks. Please change your <a href=\"%s\">permalink structure</a> to "
1377
+ "enable this module&#8217;s functionality."
1378
+ msgstr ""
1379
+
1380
+ #: modules/internal-link-aliases/internal-link-aliases.php:41
1381
  msgid "Aliases"
1382
  msgstr ""
1383
 
1384
+ #: modules/internal-link-aliases/internal-link-aliases.php:86
1385
  msgid "Edit Existing Aliases"
1386
  msgstr ""
1387
 
1388
+ #: modules/internal-link-aliases/internal-link-aliases.php:90
1389
  msgid "Add a New Alias"
1390
  msgstr ""
1391
 
1392
+ #: modules/internal-link-aliases/internal-link-aliases.php:98
1393
  msgid "Actual URL"
1394
  msgstr ""
1395
 
1396
+ #: modules/internal-link-aliases/internal-link-aliases.php:99
1397
  msgid "Alias URL"
1398
  msgstr ""
1399
 
1400
+ #: modules/internal-link-aliases/internal-link-aliases.php:100
1401
+ msgid "Only on This Post&hellip; <em>(optional)</em>"
1402
  msgstr ""
1403
 
1404
+ #: modules/internal-link-aliases/internal-link-aliases.php:125
1405
  msgid "Test"
1406
  msgstr ""
1407
 
1408
+ #: modules/internal-link-aliases/internal-link-aliases.php:152
1409
  msgid "Alias Directory"
1410
  msgstr ""
1411
 
1412
+ #: modules/internal-link-aliases/internal-link-aliases.php:154
1413
+ msgid "Nofollow masked links"
1414
  msgstr ""
1415
 
1416
+ #: modules/internal-link-aliases/internal-link-aliases.php:154
1417
  msgid "Link Attributes"
1418
  msgstr ""
1419
 
1420
+ #: modules/internal-link-aliases/internal-link-aliases.php:177
1421
  msgid "Link Masks:"
1422
  msgstr ""
1423
 
1424
+ #: modules/internal-link-aliases/internal-link-aliases.php:180
1425
  msgid "URL"
1426
  msgstr ""
1427
 
1428
+ #: modules/internal-link-aliases/internal-link-aliases.php:180
1429
  msgid "Mask URL"
1430
  msgstr ""
1431
 
1432
+ #: modules/internal-link-aliases/internal-link-aliases.php:218
1433
  msgid ""
1434
  "You can stop search engines from following a link by typing in a mask for "
1435
  "its URL."
1436
  msgstr ""
1437
 
1438
+ #: modules/internal-link-aliases/internal-link-aliases.php:305
1439
  msgid "Added by SEO Ultimate's Link Mask Generator module"
1440
  msgstr ""
1441
 
1442
+ #: modules/internal-link-aliases/internal-link-aliases.php:316
1443
  msgid "End Link Mask Generator output"
1444
  msgstr ""
1445
 
1446
+ #: modules/internal-link-aliases/internal-link-aliases.php:326
1447
+ msgid ""
1448
+ "\r\n"
1449
+ "<ul>\r\n"
1450
+ "\t<li><strong>What it does:</strong> Link Mask Generator lets you replace "
1451
+ "ugly affiliate links with clean-looking link aliases that redirect to the "
1452
+ "real URLs. Link Mask Generator will scan your posts for the links to the "
1453
+ "actual URLs and replace them with links to the alias URLs. When a visitor "
1454
+ "clicks on the link to the alias URL, Link Mask Generator will redirect the "
1455
+ "visitor to the actual URL.</li>\r\n"
1456
+ "\t<li><strong>Why it helps:</strong> This type of functionality is a staple "
1457
+ "in an affiliate marketer&#8217;s toolkit. Link Mask Generator helps you by "
1458
+ "doing it in an SEO-friendly way: by funneling your affiliate links through a "
1459
+ "directory (e.g. <code>/go/</code>) which is blocked with <code>robots.txt</"
1460
+ "code> rules, effectively sealing off link juice flow to your affiliate links."
1461
+ "</li>\r\n"
1462
+ "\t<li><strong>How to use it:</strong> Type in the real URL, type in an alias "
1463
+ "URL, and click &#8220;Save Changes&#8221; &mdash; that&#8217;s it!</li>\r\n"
1464
+ "</ul>\r\n"
1465
+ msgstr ""
1466
+
1467
+ #: modules/internal-link-aliases/internal-link-aliases.php:336
1468
+ msgid "Aliases Tab"
1469
+ msgstr ""
1470
+
1471
+ #: modules/internal-link-aliases/internal-link-aliases.php:337
1472
+ msgid ""
1473
+ "\r\n"
1474
+ "<p>To add a link alias, fill in the fields and then click &#8220;Save "
1475
+ "Changes.&#8221; Once you do so, you can edit your newly masked link or add "
1476
+ "another one.</p>\r\n"
1477
+ "\r\n"
1478
+ "<ul>\r\n"
1479
+ "\t<li><strong>Actual URL</strong> &mdash; This box is where you put your "
1480
+ "affiliate URL (or other URL that you want to mask).</li>\r\n"
1481
+ "\t<li><strong>Alias URL</strong> &mdash; This box is where you specify the "
1482
+ "new URL that will replace the actual one.</li>\r\n"
1483
+ "\t<li><strong>Only on This Post</strong> &mdash; If you want to mask the "
1484
+ "actual URL across your entire site, leave this box blank. If you only want "
1485
+ "to mask the actual URL within an individual post, then type its name into "
1486
+ "this box and select it from the dropdown.</li>\r\n"
1487
+ "\t<li><strong>Delete</strong> &mdash; To delete a link mask, tick its &#8220;"
1488
+ "Delete&#8221; checkbox and then click &#8220;Save Changes.&#8221;</li>\r\n"
1489
+ "</ul>\r\n"
1490
+ msgstr ""
1491
+
1492
+ #: modules/internal-link-aliases/internal-link-aliases.php:350
1493
+ #: modules/titles/titles.php:431
1494
+ msgid "Settings Tab"
1495
+ msgstr ""
1496
+
1497
+ #: modules/internal-link-aliases/internal-link-aliases.php:351
1498
+ msgid ""
1499
+ "\r\n"
1500
+ "<p>The following options are available on the Settings tab:</p>\r\n"
1501
+ "\r\n"
1502
+ "<ul>\r\n"
1503
+ "\t<li><strong>Alias Directory</strong> &mdash; If you&#8217;d like, you can "
1504
+ "change the name of the directory that contains all your alias URLs. "
1505
+ "(Don&#8217;t worry, you won&#8217;t break any links by changing this.)</li>"
1506
+ "\r\n"
1507
+ "\t<li><strong>Nofollow masked links</strong> &mdash; Checking this will add "
1508
+ "the <code>rel=&quot;nofollow&quot;</code> attribute to any masked links on "
1509
+ "your site. This makes it super-easy to nofollow all your affiliate links "
1510
+ "automatically.</li>\r\n"
1511
+ "</ul>\r\n"
1512
+ msgstr ""
1513
+
1514
+ #: modules/internal-link-aliases/internal-link-aliases.php:363
1515
+ msgid ""
1516
+ "\r\n"
1517
+ "<ul>\r\n"
1518
+ "\t<li><strong>Can I automatically link a phrase on my site to one of my "
1519
+ "alias URLs?</strong><br />Yes. Once you&#8217;ve created your link mask, go "
1520
+ "to Deeplink Juggernaut&#8217;s &#8220;Content Links&#8221; section, type the "
1521
+ "contents of your link mask&#8217;s &#8220;Alias URL&#8221; field into "
1522
+ "Deeplink Juggernaut&#8217;s &#8220;Destination&#8221; field, and select your "
1523
+ "link mask from the dropdown that appears.</li>\r\n"
1524
+ "\t<li><strong>Will Link Mask Generator still add the <code>robots.txt</code> "
1525
+ "rules if I&#8217;m using the File Editor module to create a custom "
1526
+ "<code>robots.txt</code>?</strong><br />Yes.</li>\r\n"
1527
+ "</ul>\r\n"
1528
+ msgstr ""
1529
+
1530
  #: modules/link-nofollow/link-nofollow.php:12
1531
  #: modules/link-nofollow/link-nofollow.php:132
1532
  msgid "Nofollow Manager"
1771
  "</ul>\r\n"
1772
  msgstr ""
1773
 
1774
+ #: modules/meta/meta-descriptions.php:204 modules/meta/meta-keywords.php:194
1775
+ msgid "Blog Homepage Tab"
1776
+ msgstr ""
1777
+
1778
  #: modules/meta/meta-descriptions.php:205
1779
  msgid ""
1780
  "\r\n"
1783
  "<ul>\r\n"
1784
  "\t<li><strong>Blog Homepage Meta Description</strong> &mdash; When your blog "
1785
  "homepage appears in search results, it&#8217;ll have a title and a "
1786
+ "description. When you type a description into this box, the Meta Editor will "
1787
+ "add code to your blog homepage (the <code>&lt;meta name=&quot;"
1788
+ "description&quot; /&gt;</code> tag) that asks search engines to use what "
1789
+ "you&#8217;ve entered as the homepage&#8217;s search results description.</li>"
1790
+ "\r\n"
1791
  "\t<li><strong>Use this blog&#8217;s tagline as the default homepage "
1792
  "description.</strong> &mdash; If this box is checked and if the Blog "
1793
  "Homepage Meta Description field is empty, Meta Editor will use your "
1802
  "\r\n"
1803
  "<ul>\r\n"
1804
  "\t<li><strong>How do I edit the meta description of my homepage?</"
1805
+ "strong><br />If you have configured your <a href='options-reading."
1806
+ "php'>Settings &rArr; Reading</a> section to use a &#8220;front page&#8221; "
1807
+ "and/or a &#8220;posts page,&#8221; just edit those pages&#8217;s meta "
1808
+ "descriptions on the &#8220;Pages&#8221; tab. Otherwise, just use the Blog "
1809
+ "Homepage field.</li>\r\n"
 
1810
  "</ul>\r\n"
1811
  msgstr ""
1812
 
1813
+ #: modules/meta/meta-descriptions.php:226
 
1814
  msgid ""
1815
  "\r\n"
1816
  "<ul>\r\n"
1823
  "\t\t<p>If the problem persists, try disabling other SEO plugins that may be "
1824
  "generating meta tags.</p>\r\n"
1825
  "\t\t<p>Troubleshooting tip: Go to <a href='options-general.php?page=seo-"
1826
+ "ultimate'>Settings &rArr; SEO Ultimate</a> and enable the &#8220;Identify "
1827
+ "the plugin&#8217;s HTML code insertions with HTML comment tags&#8221; "
1828
+ "option. This will mark SEO Ultimate&#8217;s meta tags with comments, "
1829
+ "allowing you to see which meta tags are generated by SEO Ultimate and which "
1830
+ "aren&#8217;t.</p>\r\n"
1831
  "\t</li>\r\n"
1832
  "</ul>\r\n"
1833
  msgstr ""
1841
  msgstr ""
1842
 
1843
  #: modules/meta/meta-keywords.php:38 modules/meta/meta-robots.php:22
1844
+ #: modules/opengraph/opengraph.php:317
1845
  msgid "Sitewide Values"
1846
  msgstr ""
1847
 
1848
  #: modules/meta/meta-keywords.php:39 modules/noindex/noindex.php:50
1849
+ #: modules/opengraph/opengraph.php:318
1850
  msgid "Default Values"
1851
  msgstr ""
1852
 
1866
  msgid "Blog Homepage Meta Keywords"
1867
  msgstr ""
1868
 
1869
+ #: modules/meta/meta-keywords.php:170
1870
  msgid "Meta Keywords:<br /><em>(separate with commas)</em>"
1871
  msgstr ""
1872
 
1873
+ #: modules/meta/meta-keywords.php:179
1874
  msgid ""
1875
  "\r\n"
1876
  "<p>Meta Keywords Editor lets you tell search engines what keywords are "
1877
  "associated with the various pages on your site. Modern search engines "
1878
+ "don&#8217;t give meta keywords much weight, if any at all, but the option is "
1879
+ "there if you want to use it.</p>\r\n"
 
 
1880
  msgstr ""
1881
 
1882
+ #: modules/meta/meta-keywords.php:185 modules/meta/meta-robots.php:63
1883
+ msgid "Sitewide Settings Tab"
1884
+ msgstr ""
1885
+
1886
+ #: modules/meta/meta-keywords.php:186
1887
  msgid ""
1888
  "\r\n"
1889
  "<ul>\r\n"
1890
  "\t<li><strong>Sitewide Keywords</strong> &mdash; Here you can enter keywords "
1891
+ "that describe the overall subject matter of your entire blog. Use commas to "
1892
  "separate keywords. These keywords will be put in the <code>&gt;meta "
1893
  "name=&quot;keywords&quot; /&gt;</code> tags of all webpages on the site "
1894
  "(homepage, posts, pages, archives, etc.).</li>\r\n"
1895
+ "</ul>\r\n"
1896
+ msgstr ""
1897
+
1898
+ #: modules/meta/meta-keywords.php:195
1899
+ msgid ""
1900
+ "\r\n"
1901
+ "<ul>\r\n"
1902
  "\t<li><strong>Blog Homepage Meta Keywords</strong> &mdash; These keywords "
1903
  "will be applied only to the <em>blog</em> homepage. Note that if you&#8217;"
1904
  "ve specified a &#8220;front page&#8221; under <a href='options-reading."
1907
  "</ul>\r\n"
1908
  msgstr ""
1909
 
1910
+ #: modules/meta/meta-keywords.php:204
1911
  msgid ""
1912
  "\r\n"
1913
  "<ul>\r\n"
1914
+ "\t<li><strong>How do I edit the meta keywords of my homepage?</strong><br /"
1915
+ ">If you have configured your <a href='options-reading.php'>Settings &rArr; "
1916
+ "Reading</a> section to use a &#8220;front page&#8221; and/or a &#8220;posts "
1917
+ "page,&#8221; just edit those pages&#8217;s meta keywords on the &#8220;"
1918
+ "Pages&#8221; tab. Otherwise, just use the Blog Homepage field.</li>\r\n"
 
 
 
 
 
1919
  "\t<li><strong>What happens if I add a global keyword that I previously "
1920
  "assigned to individual posts or pages?</strong><br />Don&#8217;t worry; Meta "
1921
  "Keywords Editor will remove duplicate keywords automatically.</li>\r\n"
1922
  "</ul>\r\n"
1923
  msgstr ""
1924
 
1925
+ #: modules/meta/meta-keywords.php:214 modules/meta/meta-robots.php:103
1926
+ msgid ""
1927
+ "\r\n"
1928
+ "<ul>\r\n"
1929
+ "\t<li>\r\n"
1930
+ "\t\t<p><strong>What do I do if my site has multiple meta tags?</strong><br /"
1931
+ ">First, try removing your theme&#8217;s built-in meta tags if it has them. "
1932
+ "Go to <a href='theme-editor.php' target='_blank'>Appearance &rArr; Editor</"
1933
+ "a> and edit <code>header.php</code>. Delete or comment-out any <code>&lt;"
1934
+ "meta&gt;</code> tags.</p>\r\n"
1935
+ "\t\t<p>If the problem persists, try disabling other SEO plugins that may be "
1936
+ "generating meta tags.</p>\r\n"
1937
+ "\t\t<p>Troubleshooting tip: Go to <a href='options-general.php?page=seo-"
1938
+ "ultimate'>Settings &rArr; SEO Ultimate</a> and enable the &#8220;Insert "
1939
+ "comments around HTML code insertions&#8221; option. This will mark SEO "
1940
+ "Ultimate&#8217;s meta tags with comments, allowing you to see which meta "
1941
+ "tags are generated by SEO Ultimate and which aren&#8217;t.</p>\r\n"
1942
+ "\t</li>\r\n"
1943
+ "</ul>\r\n"
1944
+ msgstr ""
1945
+
1946
  #: modules/meta/meta-robots.php:12
1947
  msgid "Meta Robot Tags Editor"
1948
  msgstr ""
2000
  #: modules/meta/meta-robots.php:64
2001
  msgid ""
2002
  "\r\n"
 
 
2003
  "<ul>\r\n"
2004
+ "\t<li><strong>Don&#8217;t use this site&#8217;s Open Directory / Yahoo! "
2005
+ "Directory description in search results</strong> &mdash; If your site is "
2006
+ "listed in the <a href='http://www.dmoz.org/' target='_blank'>Open Directory "
2007
+ "(DMOZ)</a> or the <a href='http://dir.yahoo.com/' target='_blank'>Yahoo! "
2008
+ "Directory</a>, some search engines may use your directory listing as the "
2009
+ "meta description. These boxes tell search engines not to do that and will "
2010
+ "give you full control over your meta descriptions. These settings have no "
2011
+ "effect if your site isn&#8217;t listed in the Open Directory or Yahoo! "
2012
+ "Directory respectively.</li>\r\n"
2013
+ "\t<li><strong>Don&#8217;t cache or archive this site</strong> &mdash; When "
2014
+ "you check this box, Meta Editor will ask search engines (Google, Yahoo!, "
2015
+ "Bing, etc.) and archivers (Archive.org, etc.) to <em>not</em> make cached or "
 
 
 
2016
  "archived &#8220;copies&#8221; of your site.</li>\r\n"
2017
+ "</ul>\r\n"
2018
+ msgstr ""
2019
+
2020
+ #: modules/meta/meta-robots.php:73
2021
+ msgid "Default Values Tab"
2022
+ msgstr ""
2023
+
2024
+ #: modules/meta/meta-robots.php:74
2025
+ msgid ""
 
 
 
 
 
 
 
2026
  "\r\n"
2027
+ "<p><strong>Prevent indexing of&hellip;</strong></p>\r\n"
2028
+ "<ul>\r\n"
2029
+ "\t<li><strong>Administration back-end pages</strong> &mdash; Tells spiders "
2030
+ "not to index the administration area (the part you&#8217;re in now), in the "
2031
+ "unlikely event a spider somehow gains access to the administration. "
2032
+ "Recommended.</li>\r\n"
2033
+ "\t<li><strong>Author archives</strong> &mdash; Tells spiders not to index "
2034
+ "author archives. Useful if your blog only has one author.</li>\r\n"
2035
+ "\t<li><strong>Blog search pages</strong> &mdash; Tells spiders not to index "
2036
+ "the result pages of WordPress's blog search function. Recommended.</li>\r\n"
2037
+ "\t<li><strong>Category archives</strong> &mdash; Tells spiders not to index "
2038
+ "category archives. Recommended only if you don't use categories.</li>\r\n"
2039
+ "\t<li><strong>Comment feeds</strong> &mdash; Tells spiders not to index the "
2040
+ "RSS feeds that exist for every post's comments. (These comment feeds are "
2041
  "totally separate from your normal blog feeds.)</li>\r\n"
2042
+ "\t<li><strong>Comment subpages</strong> &mdash; Tells spiders not to index "
2043
+ "posts' comment subpages.</li>\r\n"
2044
+ "\t<li><strong>Date-based archives</strong> &mdash; Tells spiders not to "
2045
  "index day/month/year archives. Recommended, since these pages have little "
2046
  "keyword value.</li>\r\n"
2047
+ "\t<li><strong>Subpages of the homepage</strong> &mdash; Tells spiders not to "
2048
+ "index the homepage's subpages (page 2, page 3, etc). Recommended.</li>\r\n"
2049
+ "\t<li><strong>Tag archives</strong> &mdash; Tells spiders not to index tag "
2050
+ "archives. Recommended only if you don't use tags.</li>\r\n"
2051
+ "\t<li><strong>User login/registration pages</strong> &mdash; Tells spiders "
2052
+ "not to index WordPress's user login and registration pages. Recommended.</li>"
2053
  "\r\n"
2054
+ "</ul>\r\n"
2055
+ msgstr ""
2056
+
2057
+ #: modules/meta/meta-robots.php:92
2058
+ msgid "Bulk Editor Tabs"
2059
+ msgstr ""
2060
+
2061
+ #: modules/meta/meta-robots.php:93
2062
+ msgid ""
2063
+ "\r\n"
2064
+ "<ul>\r\n"
2065
+ "\t<li><strong>Noindex</strong> &mdash; Checking this for an item will ask "
2066
+ "search engines to remove that item&#8217;s webpage from their indices. Use "
2067
+ "this to remove pages that you don&#8217;t want showing up in search results "
2068
+ "(such as a Privacy Policy page, for example).</li>\r\n"
2069
+ "\t<li><strong>Nofollow</strong> &mdash; Checking this for an item will tell "
2070
+ "search engines to ignore the links to other webpages that are on that "
2071
  "item&#8217;s webpage. Note: this is page-level &#8220;meta nofollow,&#8221; "
2072
  "not to be confused with link-level &#8220;rel nofollow.&#8221;</li>\r\n"
 
 
2073
  "</ul>\r\n"
2074
  msgstr ""
2075
 
2076
+ #: modules/meta/webmaster-verify.php:12 modules/meta/webmaster-verify.php:93
2077
  msgid "Webmaster Verification Assistant"
2078
  msgstr ""
2079
 
2097
  msgid "Meta Tag"
2098
  msgstr ""
2099
 
2100
+ #: modules/meta/webmaster-verify.php:82
2101
  msgid ""
2102
  "\r\n"
2103
  "<ul>\r\n"
2116
  "</ul>\r\n"
2117
  msgstr ""
2118
 
2119
+ #: modules/misc/misc.php:11 plugin/class.seo-ultimate.php:1508
2120
  msgid "Miscellaneous"
2121
  msgstr ""
2122
 
2134
  msgid "Modules"
2135
  msgstr ""
2136
 
2137
+ #: modules/modules/modules.php:54
2138
+ msgid ""
2139
+ "Like SEO Ultimate? Check out the WP Ultimate theme from SEO Design Solutions."
2140
+ msgstr ""
2141
+
2142
+ #: modules/modules/modules.php:62
2143
  msgid ""
2144
  "SEO Ultimate&#8217;s features are located in groups called &#8220;modules."
2145
  "&#8221; By default, most of these modules are listed in the &#8220;"
2148
  "upper-right-hand corner of your administration screen."
2149
  msgstr ""
2150
 
2151
+ #: modules/modules/modules.php:64
2152
  msgid ""
2153
  "The Module Manager lets you disable or hide modules you don&#8217;t use. "
2154
  "You can also silence modules from displaying bubble alerts on the menu."
2155
  msgstr ""
2156
 
2157
+ #: modules/modules/modules.php:68
2158
  msgid "Modules updated."
2159
  msgstr ""
2160
 
2161
+ #: modules/modules/modules.php:73
2162
  msgid "Status"
2163
  msgstr ""
2164
 
2165
+ #: modules/modules/modules.php:74
2166
  msgid "Module"
2167
  msgstr ""
2168
 
2169
+ #: modules/modules/modules.php:87
2170
  msgid "Enabled"
2171
  msgstr ""
2172
 
2173
+ #: modules/modules/modules.php:88
2174
  msgid "Silenced"
2175
  msgstr ""
2176
 
2177
+ #: modules/modules/modules.php:89
2178
  msgid "Hidden"
2179
  msgstr ""
2180
 
2181
+ #: modules/modules/modules.php:90
2182
  msgid "Disabled"
2183
  msgstr ""
2184
 
2185
+ #: modules/modules/modules.php:189
2186
  msgid "Options Help"
2187
  msgstr ""
2188
 
2189
+ #: modules/modules/modules.php:190
2190
  msgid ""
2191
  "\r\n"
2192
+ "<p>SEO Ultimate&#8217;s features are located in groups called &#8220;modules."
2193
+ "&#8221; By default, most of these modules are listed in the &#8220;"
2194
+ "SEO&#8221; menu on the left.</p>\r\n"
2195
  "<p>The Module Manager lets you customize the visibility and accessibility of "
2196
  "each module; here are the options available:</p>\r\n"
2197
  "<ul>\r\n"
2209
  "</ul>\r\n"
2210
  msgstr ""
2211
 
2212
+ #: modules/modules/modules.php:204
2213
  msgid ""
2214
  "\r\n"
2215
  "<ul>\r\n"
2309
  msgstr ""
2310
 
2311
  #: modules/noindex/noindex.php:69 modules/noindex/noindex.php:80
2312
+ #: modules/opengraph/opengraph.php:288 modules/opengraph/opengraph.php:390
2313
+ #: modules/opengraph/opengraph.php:391
2314
  msgid "Use default"
2315
  msgstr ""
2316
 
2332
 
2333
  #: modules/noindex/noindex.php:96
2334
  msgid ""
2335
+ "Note: The <a href=\"options-reading.php\">&#8220;discourage search "
2336
+ "engines&#8221; checkbox</a> will block indexing of the entire site, "
2337
+ "regardless of which options are set below."
2338
  msgstr ""
2339
 
2340
  #: modules/noindex/noindex.php:99
2401
  msgid "Open Graph"
2402
  msgstr ""
2403
 
2404
+ #: modules/opengraph/opengraph.php:290
2405
  msgid "Type"
2406
  msgstr ""
2407
 
2408
+ #: modules/opengraph/opengraph.php:295
2409
  msgid "Title"
2410
  msgstr ""
2411
 
2412
+ #: modules/opengraph/opengraph.php:300
2413
  msgid "Description"
2414
  msgstr ""
2415
 
2416
+ #: modules/opengraph/opengraph.php:305
2417
  msgid "Image"
2418
  msgstr ""
2419
 
2420
+ #: modules/opengraph/opengraph.php:328
2421
  msgid "Site Name"
2422
  msgstr ""
2423
 
2424
+ #: modules/opengraph/opengraph.php:329
2425
  msgid "Facebook App ID"
2426
  msgstr ""
2427
 
2428
+ #: modules/opengraph/opengraph.php:330
2429
  msgid "This Site&#8217;s Twitter Handle"
2430
  msgstr ""
2431
 
2432
+ #: modules/opengraph/opengraph.php:337
2433
  msgid "Default Types"
2434
  msgstr ""
2435
 
2436
+ #: modules/opengraph/opengraph.php:339
2437
  msgid "Post Type"
2438
  msgstr ""
2439
 
2440
+ #: modules/opengraph/opengraph.php:340
2441
  msgid "Open Graph Type"
2442
  msgstr ""
2443
 
2444
+ #: modules/opengraph/opengraph.php:341
2445
  msgid "Twitter Type"
2446
  msgstr ""
2447
 
2448
+ #: modules/opengraph/opengraph.php:356 modules/opengraph/opengraph.php:361
2449
  msgid "Default Image"
2450
  msgstr ""
2451
 
2452
+ #: modules/opengraph/opengraph.php:359
2453
  msgid ""
2454
  "In the box below, you can specify an image URL or an image from your media "
2455
  "library to use as a default image in the event that there is no image "
2456
  "otherwise specified for a given webpage on your site."
2457
  msgstr ""
2458
 
2459
+ #: modules/opengraph/opengraph.php:368
2460
+ msgid "Include author data for posts"
2461
+ msgstr ""
2462
+
2463
+ #: modules/opengraph/opengraph.php:368
2464
+ msgid "Open Graph Data"
2465
+ msgstr ""
2466
+
2467
+ #: modules/opengraph/opengraph.php:370
2468
+ msgid "Use the non-validating code prescribed by Open Graph and Twitter"
2469
+ msgstr ""
2470
+
2471
+ #: modules/opengraph/opengraph.php:371
2472
+ msgid "Alter the code to validate as XHTML"
2473
+ msgstr ""
2474
+
2475
+ #: modules/opengraph/opengraph.php:372
2476
+ msgid "Alter the code to validate as HTML5"
2477
+ msgstr ""
2478
+
2479
+ #: modules/opengraph/opengraph.php:373
2480
+ msgid "HTML Validation"
2481
+ msgstr ""
2482
+
2483
+ #: modules/opengraph/opengraph.php:379 modules/titles/titles.php:91
2484
  msgid "Blog Homepage Title"
2485
  msgstr ""
2486
 
2487
+ #: modules/opengraph/opengraph.php:380
2488
  msgid "Blog Homepage Description"
2489
  msgstr ""
2490
 
2491
+ #: modules/opengraph/opengraph.php:381
2492
  msgid "Blog Homepage Image"
2493
  msgstr ""
2494
 
2495
+ #: modules/opengraph/opengraph.php:387 modules/widgets/widgets.php:140
2496
  msgid "Title:"
2497
  msgstr ""
2498
 
2499
+ #: modules/opengraph/opengraph.php:388
2500
  msgid "Description:"
2501
  msgstr ""
2502
 
2503
+ #: modules/opengraph/opengraph.php:389
2504
  msgid "Image:"
2505
  msgstr ""
2506
 
2507
+ #: modules/opengraph/opengraph.php:390
2508
  msgid "Open Graph Type:"
2509
  msgstr ""
2510
 
2511
+ #: modules/opengraph/opengraph.php:391
2512
  msgid "Twitter Type:"
2513
  msgstr ""
2514
 
2515
+ #: modules/opengraph/opengraph.php:416
2516
  msgid "Featured Image: %s"
2517
  msgstr ""
2518
 
2519
+ #: modules/opengraph/opengraph.php:424
2520
+ #: modules/rich-snippets/rich-snippets.php:358
2521
  msgid "None"
2522
  msgstr ""
2523
 
2524
+ #: modules/opengraph/opengraph.php:425
2525
  msgid "Internet"
2526
  msgstr ""
2527
 
2528
+ #: modules/opengraph/opengraph.php:426
2529
  msgid "Article"
2530
  msgstr ""
2531
 
2532
+ #: modules/opengraph/opengraph.php:427
2533
  msgid "Blog"
2534
  msgstr ""
2535
 
2536
+ #: modules/opengraph/opengraph.php:428
2537
  msgid "Profile"
2538
  msgstr ""
2539
 
2540
+ #: modules/opengraph/opengraph.php:429
2541
  msgid "Website"
2542
  msgstr ""
2543
 
2544
+ #: modules/opengraph/opengraph.php:430
2545
  msgid "Products"
2546
  msgstr ""
2547
 
2548
+ #: modules/opengraph/opengraph.php:431
2549
  msgid "Book"
2550
  msgstr ""
2551
 
2552
+ #: modules/opengraph/opengraph.php:432
2553
  msgid "Music"
2554
  msgstr ""
2555
 
2556
+ #: modules/opengraph/opengraph.php:433
2557
  msgid "Album"
2558
  msgstr ""
2559
 
2560
+ #: modules/opengraph/opengraph.php:434
2561
  msgid "Playlist"
2562
  msgstr ""
2563
 
2564
+ #: modules/opengraph/opengraph.php:435
2565
  msgid "Radio Station"
2566
  msgstr ""
2567
 
2568
+ #: modules/opengraph/opengraph.php:436
2569
  msgid "Song"
2570
  msgstr ""
2571
 
2572
+ #: modules/opengraph/opengraph.php:437
2573
  msgid "Videos"
2574
  msgstr ""
2575
 
2576
+ #: modules/opengraph/opengraph.php:438
2577
  msgid "Movie"
2578
  msgstr ""
2579
 
2580
+ #: modules/opengraph/opengraph.php:439
2581
  msgid "TV Episode"
2582
  msgstr ""
2583
 
2584
+ #: modules/opengraph/opengraph.php:440
2585
  msgid "TV Show"
2586
  msgstr ""
2587
 
2588
+ #: modules/opengraph/opengraph.php:441
2589
  msgid "Video"
2590
  msgstr ""
2591
 
2592
+ #: modules/opengraph/opengraph.php:448
2593
  msgid "Regular"
2594
  msgstr ""
2595
 
2596
+ #: modules/opengraph/opengraph.php:449
2597
+ #: modules/rich-snippets/rich-snippets.php:121
2598
  msgid "Photo"
2599
  msgstr ""
2600
 
2601
+ #: modules/opengraph/opengraph.php:471
2602
  msgid "Twitter Handle"
2603
  msgstr ""
2604
 
2605
+ #: modules/opengraph/opengraph.php:480
2606
+ msgid ""
2607
+ "\r\n"
2608
+ "<ul>\r\n"
2609
+ "\t<li><strong>What it does:</strong> Open Graph Integrator makes it easy for "
2610
+ "you to convey information about your site to social networks like Facebook, "
2611
+ "Twitter, and Google+.</li>\r\n"
2612
+ "\t<li><strong>Why it helps:</strong> By providing this Open Graph data, you "
2613
+ "can customize how these social networks will present your site when people "
2614
+ "share it with their followers.</li>\r\n"
2615
+ "\t<li><strong>How to use it:</strong> The &#8220;Sitewide Values&#8221; tab "
2616
+ "lets you specify data that applies to your entire site. The &#8220;Default "
2617
+ "Values&#8221; tab lets you specify default data for your posts, pages, etc. "
2618
+ "The bulk editor tabs let you override those defaults on individual posts and "
2619
+ "pages. If the authors on your site fill in the &#8220;Twitter Handle&#8221; "
2620
+ "field which Open Graph Integrator adds to the <a href='profile.php'>profile "
2621
+ "editor</a>, Open Graph Integrator will communicate that information to "
2622
+ "Twitter as well.</li>\r\n"
2623
+ "</ul>\r\n"
2624
+ msgstr ""
2625
+
2626
  #: modules/permalinks/permalinks.php:15
2627
  msgid "Permalink Tweaker"
2628
  msgstr ""
2629
 
2630
+ #: modules/permalinks/permalinks.php:75
2631
  msgid ""
2632
  "To use the Permalinks Tweaker, you must disable default (query-string) "
2633
  "permalinks in your <a href=\"options-permalink.php\">Permalink Settings</a>."
2634
  msgstr ""
2635
 
2636
+ #: modules/permalinks/permalinks.php:100
2637
  msgid "Remove the URL bases of..."
2638
  msgstr ""
2639
 
2640
+ #: modules/permalinks/permalinks.php:105
2641
  msgid "Before"
2642
  msgstr ""
2643
 
2644
+ #: modules/permalinks/permalinks.php:107
2645
  msgid "After"
2646
  msgstr ""
2647
 
2648
+ #: modules/permalinks/permalinks.php:127
2649
  msgid "term archive"
2650
  msgstr ""
2651
 
2652
+ #: modules/permalinks/permalinks.php:128
2653
  msgid "page"
2654
  msgstr ""
2655
 
2656
+ #: modules/permalinks/permalinks.php:129
2657
  msgid "URL Conflict Resolution"
2658
  msgstr ""
2659
 
2660
+ #: modules/permalinks/permalinks.php:129
2661
  msgid ""
2662
  "If a term archive and a Page with the same slug end up having the same URL "
2663
  "because of the term&#8217;s base being removed, the URL should be given to "
2665
  msgstr ""
2666
 
2667
  #: modules/rich-snippets/rich-snippets.php:14
2668
+ #: modules/rich-snippets/rich-snippets.php:411
2669
  msgid "Rich Snippet Creator"
2670
  msgstr ""
2671
 
2672
+ #: modules/rich-snippets/rich-snippets.php:25
2673
+ msgid ""
2674
+ "Rich Snippet Creator adds a &#8220;Search Result Type&#8221; dropdown to the "
2675
+ "WordPress content editor screen. To add rich snippet data to a post, select "
2676
+ "&#8220;Review&#8221; or &#8220;Place&#8221; from a post&#8217;s &#8220;"
2677
+ "Search Result Type&#8221; dropdown and fill in the fields that appear."
2678
+ msgstr ""
2679
+
2680
+ #: modules/rich-snippets/rich-snippets.php:33
2681
  msgid "Schema.org Microdata"
2682
  msgstr ""
2683
 
2684
+ #: modules/rich-snippets/rich-snippets.php:46
2685
+ #: modules/rich-snippets/rich-snippets.php:346
2686
  msgid "Review"
2687
  msgstr ""
2688
 
2689
+ #: modules/rich-snippets/rich-snippets.php:51
2690
  msgid "Name of Reviewed Item"
2691
  msgstr ""
2692
 
2693
+ #: modules/rich-snippets/rich-snippets.php:54
2694
  msgid "Star Rating"
2695
  msgstr ""
2696
 
2697
+ #: modules/rich-snippets/rich-snippets.php:67
2698
  msgid "Image of Reviewed Item"
2699
  msgstr ""
2700
 
2701
+ #: modules/rich-snippets/rich-snippets.php:72
2702
  msgid "Review Author"
2703
  msgstr ""
2704
 
2705
+ #: modules/rich-snippets/rich-snippets.php:77
2706
  msgid "Date Reviewed"
2707
  msgstr ""
2708
 
2709
+ #: modules/rich-snippets/rich-snippets.php:85
2710
+ #: modules/rich-snippets/rich-snippets.php:347
2711
  msgid "Place"
2712
  msgstr ""
2713
 
2714
+ #: modules/rich-snippets/rich-snippets.php:89
2715
  msgid "Address"
2716
  msgstr ""
2717
 
2718
+ #: modules/rich-snippets/rich-snippets.php:93
2719
  msgid "Street Address"
2720
  msgstr ""
2721
 
2722
+ #: modules/rich-snippets/rich-snippets.php:96
2723
  msgid "PO Box"
2724
  msgstr ""
2725
 
2726
+ #: modules/rich-snippets/rich-snippets.php:99
2727
+ #: modules/rich-snippets/rich-snippets.php:102
2728
  msgid "City"
2729
  msgstr ""
2730
 
2731
+ #: modules/rich-snippets/rich-snippets.php:105
2732
  msgid "Country"
2733
  msgstr ""
2734
 
2735
+ #: modules/rich-snippets/rich-snippets.php:108
2736
  msgid "Postal Code"
2737
  msgstr ""
2738
 
2739
+ #: modules/rich-snippets/rich-snippets.php:113
2740
  msgid "Fax Number"
2741
  msgstr ""
2742
 
2743
+ #: modules/rich-snippets/rich-snippets.php:116
2744
  msgid "Map URL"
2745
  msgstr ""
2746
 
2747
+ #: modules/rich-snippets/rich-snippets.php:130
2748
  msgid "Phone Number"
2749
  msgstr ""
2750
 
2751
+ #: modules/rich-snippets/rich-snippets.php:307
2752
  msgid "Schema.org markup generated by %1$s (%2$s)"
2753
  msgstr ""
2754
 
2755
+ #: modules/rich-snippets/rich-snippets.php:345
2756
  msgid "Standard"
2757
  msgstr ""
2758
 
2759
+ #: modules/rich-snippets/rich-snippets.php:348
2760
  msgid "Search Result Type:"
2761
  msgstr ""
2762
 
2763
+ #: modules/rich-snippets/rich-snippets.php:353
2764
  msgid "Name of Reviewed Item:"
2765
  msgstr ""
2766
 
2767
+ #: modules/rich-snippets/rich-snippets.php:355
2768
  msgid "Image of Reviewed Item:"
2769
  msgstr ""
2770
 
2771
+ #: modules/rich-snippets/rich-snippets.php:359
2772
  msgid "0.5 stars"
2773
  msgstr ""
2774
 
2775
+ #: modules/rich-snippets/rich-snippets.php:360
2776
  msgid "1 star"
2777
  msgstr ""
2778
 
2779
+ #: modules/rich-snippets/rich-snippets.php:361
2780
  msgid "1.5 stars"
2781
  msgstr ""
2782
 
2783
+ #: modules/rich-snippets/rich-snippets.php:362
2784
  msgid "2 stars"
2785
  msgstr ""
2786
 
2787
+ #: modules/rich-snippets/rich-snippets.php:363
2788
  msgid "2.5 stars"
2789
  msgstr ""
2790
 
2791
+ #: modules/rich-snippets/rich-snippets.php:364
2792
  msgid "3 stars"
2793
  msgstr ""
2794
 
2795
+ #: modules/rich-snippets/rich-snippets.php:365
2796
  msgid "3.5 stars"
2797
  msgstr ""
2798
 
2799
+ #: modules/rich-snippets/rich-snippets.php:366
2800
  msgid "4 stars"
2801
  msgstr ""
2802
 
2803
+ #: modules/rich-snippets/rich-snippets.php:367
2804
  msgid "4.5 stars"
2805
  msgstr ""
2806
 
2807
+ #: modules/rich-snippets/rich-snippets.php:368
2808
  msgid "5 stars"
2809
  msgstr ""
2810
 
2811
+ #: modules/rich-snippets/rich-snippets.php:369
2812
  msgid "Star Rating for Reviewed Item:"
2813
  msgstr ""
2814
 
2815
+ #: modules/rich-snippets/rich-snippets.php:375
2816
  msgid "Street Address:"
2817
  msgstr ""
2818
 
2819
+ #: modules/rich-snippets/rich-snippets.php:376
2820
  msgid "Post Office Box Number:"
2821
  msgstr ""
2822
 
2823
+ #: modules/rich-snippets/rich-snippets.php:377
2824
  msgid "City:"
2825
  msgstr ""
2826
 
2827
+ #: modules/rich-snippets/rich-snippets.php:378
2828
  msgid "State or Region:"
2829
  msgstr ""
2830
 
2831
+ #: modules/rich-snippets/rich-snippets.php:379
2832
  msgid "Country:"
2833
  msgstr ""
2834
 
2835
+ #: modules/rich-snippets/rich-snippets.php:380
2836
  msgid "Postal Code:"
2837
  msgstr ""
2838
 
2839
+ #: modules/rich-snippets/rich-snippets.php:381
2840
  msgid "Address:"
2841
  msgstr ""
2842
 
2843
+ #: modules/rich-snippets/rich-snippets.php:382
2844
  msgid "Map Page:"
2845
  msgstr ""
2846
 
2847
+ #: modules/rich-snippets/rich-snippets.php:383
2848
  msgid "Phone Number:"
2849
  msgstr ""
2850
 
2851
+ #: modules/rich-snippets/rich-snippets.php:384
2852
  msgid "Fax Number:"
2853
  msgstr ""
2854
 
2855
+ #: modules/rich-snippets/rich-snippets.php:385
2856
  msgid "Photo:"
2857
  msgstr ""
2858
 
2859
+ #: modules/rich-snippets/rich-snippets.php:394
2860
  msgid ""
2861
  "\r\n"
2862
  "<ul>\r\n"
2863
  "\t<li><strong>What it does:</strong> Rich Snippet Creator adds special code "
2864
+ "(called Schema.org data) to your posts that asks Google and other major "
2865
+ "search engines to display special pertinent information (known as Rich "
2866
+ "Snippets) in search results for certain types of content. For example, if "
2867
+ "you&#8217;ve written a product review, you can use Rich Snippet Creator to "
2868
+ "ask Google to display the star rating that you gave the product in your "
2869
+ "review next to your review webpage when it appears in search results.</li>"
2870
+ "\r\n"
2871
  "\t<li><strong>Why it helps:</strong> Rich Snippet Creator enhances the "
2872
  "search engine results for your content by asking Google to add extra, eye-"
2873
  "catching info that could help draw in more search engine visitors.</li>\r\n"
2874
+ "\t<li><strong>How it works:</strong> When editing one of your posts or "
2875
  "pages, see if your content fits one of the available rich snippet types (for "
2876
+ "example, a review). If so, select that type from the &#8220;Search Result "
2877
  "Type&#8221; dropdown box. Once you select the applicable type, additional "
2878
  "options will appear that vary based on the type selected. For example, a "
2879
+ "&#8220;Star Rating for Reviewed Item&#8221; field will appear if you select "
2880
+ "the &#8220;Review&#8221; type. Once you save the post/page, Rich Snippet "
2881
+ "Creator will add the special code to it. You can remove this code at any "
2882
+ "time by selecting &#8220;Standard&#8221; from the &#8220;Search Result "
2883
+ "Type&#8221; dropdown and resaving the post/page.</li>\r\n"
2884
  "</ul>\r\n"
2885
  msgstr ""
2886
 
2887
+ #: modules/rich-snippets/rich-snippets.php:402
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2888
  msgid ""
2889
  "\r\n"
2890
  "<ul>\r\n"
2893
  "href='http://www.google.com/webmasters/tools/richsnippets' "
2894
  "target='_blank'>Google&#8217;s testing tool</a> to make sure Google can find "
2895
  "the rich snippet code on your site. If no code is found, check and make sure "
2896
+ "you&#8217;ve enabled rich snippets for that particular post/page.</p><p>Note "
2897
+ "that having the code on a post/page doesn&#8217;t guarantee that Google will "
2898
  "actually use it to create a rich snippet. If Google is able to read your "
2899
  "code but isn&#8217;t using it to generate rich snippets, you can ask Google "
2900
  "to do so using <a href='http://www.google.com/support/webmasters/bin/request."
2911
  msgid "SEO Design Solutions Whitepapers"
2912
  msgstr ""
2913
 
2914
+ #. #-#-#-#-# plugin.pot (SEO Ultimate 7.6) #-#-#-#-#
2915
  #. Author of the plugin/theme
2916
  #: modules/sds-blog/sds-blog.php:49
2917
  msgid "SEO Design Solutions"
2928
  msgid "Global Settings"
2929
  msgstr ""
2930
 
2931
+ #: modules/settings/global-settings.php:41
2932
  msgid "Identify the plugin&#8217;s HTML code insertions with HTML comment tags"
2933
  msgstr ""
2934
 
2935
+ #: modules/settings/global-settings.php:42
2936
  msgid "Enable nofollow&#8217;d attribution link on my site"
2937
  msgstr ""
2938
 
2939
+ #: modules/settings/global-settings.php:43
2940
  msgid "Add CSS styles to the attribution link"
2941
  msgstr ""
2942
 
2943
+ #: modules/settings/global-settings.php:47
2944
+ msgid "Show the promo image for WP Ultimate on the Module Manager page"
2945
+ msgstr ""
2946
+
2947
  #: modules/settings/install.php:18
2948
  msgid "Upgrade/Downgrade/Reinstall"
2949
  msgstr ""
2964
  msgid "Reinstall"
2965
  msgstr ""
2966
 
2967
+ #: modules/settings/install.php:82 modules/settings/install.php:220
2968
  msgid "You do not have sufficient permissions to upgrade plugins on this site."
2969
  msgstr ""
2970
 
2985
  "using the WordPress plugin upgrader."
2986
  msgstr ""
2987
 
2988
+ #: modules/settings/install.php:108 modules/settings/install.php:202
2989
  msgid ""
2990
  "You do not have sufficient permissions to downgrade plugins on this site."
2991
  msgstr ""
3007
  #: modules/settings/install.php:128
3008
  msgid ""
3009
  "Downgrading to versions earlier than %s is not supported because doing so "
3010
+ "will result the loss of some or all of your SEO Ultimate settings."
3011
  msgstr ""
3012
 
3013
  #: modules/settings/install.php:130
3016
  "again later."
3017
  msgstr ""
3018
 
3019
+ #: modules/settings/install.php:136 modules/settings/install.php:211
3020
  msgid ""
3021
  "You do not have sufficient permissions to reinstall plugins on this site."
3022
  msgstr ""
3035
  msgid "Latest Version"
3036
  msgstr ""
3037
 
3038
+ #: modules/settings/install.php:199
3039
  msgid "Downgrade to SEO Ultimate %s"
3040
  msgstr ""
3041
 
3042
+ #: modules/settings/install.php:208
3043
  msgid "Reinstall SEO Ultimate %s"
3044
  msgstr ""
3045
 
3046
+ #: modules/settings/install.php:217
3047
  msgid "Upgrade to SEO Ultimate %s"
3048
  msgstr ""
3049
 
3231
  msgid "SEO Ultimate Plugin Settings"
3232
  msgstr ""
3233
 
3234
+ #. #-#-#-#-# plugin.pot (SEO Ultimate 7.6) #-#-#-#-#
3235
  #. Plugin Name of the plugin/theme
3236
+ #: modules/settings/settings.php:26 plugin/class.seo-ultimate.php:858
3237
  msgid "SEO Ultimate"
3238
  msgstr ""
3239
 
3285
  msgstr ""
3286
 
3287
  #: modules/settings/uninstall.php:18 modules/settings/uninstall.php:22
3288
+ #: plugin/class.seo-ultimate.php:1321
3289
  msgid "Uninstall"
3290
  msgstr ""
3291
 
3330
  msgstr ""
3331
 
3332
  #: modules/sharing-buttons/sharing-buttons.php:12
3333
+ #: modules/sharing-buttons/sharing-buttons.php:80
3334
  msgid "Sharing Facilitator"
3335
  msgstr ""
3336
 
3354
  msgid "Which provider would you like to use for your sharing buttons?"
3355
  msgstr ""
3356
 
3357
+ #: modules/sharing-buttons/sharing-buttons.php:69
3358
  msgid ""
3359
  "\r\n"
3360
  "<ul>\r\n"
3716
  "</ul>\r\n"
3717
  msgstr ""
3718
 
 
 
 
 
3719
  #: modules/titles/titles.php:432
3720
  msgid ""
3721
  "\r\n"
3722
  "<p>Here&#8217;s documentation for the options on the &#8220;Settings&#8221; "
3723
  "tab.</p>\r\n"
3724
  "<ul>\r\n"
3725
+ "\t<li><strong>Convert lowercase category/tag names to title case when used "
3726
+ "in title tags</strong> &mdash; If your Tag Title Format is set to <code>"
3727
+ "{tag} | {blog}</code> and you have a tag called &#8220;blue widgets,&#8221; "
3728
+ "your title tag would be <code>blue widgets | My WordPress Blog</code>. "
3729
+ "Enabling this setting would capitalize the words in &#8220;blue "
3730
+ "widgets&#8221; so that the title tag would be <code>Blue Widgets | My "
3731
+ "WordPress Blog</code> instead.</li>\r\n"
3732
  "\t<li>\r\n"
3733
  "\t\t<p><strong>Rewrite Method</strong> &mdash; This setting controls the "
3734
  "method by which Title Tag Rewriter edits your site&#8217;s <code>&lt;"
3780
  "</ul>\r\n"
3781
  msgstr ""
3782
 
3783
+ #: modules/titles/titles.php:470
3784
  msgid ""
3785
  "\r\n"
3786
  "<ul>\r\n"
3803
  "</ul>\r\n"
3804
  msgstr ""
3805
 
3806
+ #: modules/titles/titles.php:481
3807
  msgid ""
3808
  "\r\n"
3809
  "<ul>\r\n"
3957
  msgstr ""
3958
 
3959
  #: modules/wp-settings/wp-settings.php:14
 
 
 
 
3960
  msgid "Settings Monitor"
3961
  msgstr ""
3962
 
3963
+ #: modules/wp-settings/wp-settings.php:29
3964
  msgid "Blog is visible to search engines"
3965
  msgstr ""
3966
 
3967
+ #: modules/wp-settings/wp-settings.php:30
3968
  msgid "WordPress will allow search engines to visit your site."
3969
  msgstr ""
3970
 
3971
+ #: modules/wp-settings/wp-settings.php:32
3972
  msgid "Blog is hidden from search engines"
3973
  msgstr ""
3974
 
3975
+ #: modules/wp-settings/wp-settings.php:33
3976
  msgid ""
3977
+ "WordPress is configured to discourage search engines. This will nullify your "
3978
  "site&#8217;s SEO and should be resolved immediately."
3979
  msgstr ""
3980
 
3981
+ #: modules/wp-settings/wp-settings.php:37
3982
  msgid "Query-string permalinks enabled"
3983
  msgstr ""
3984
 
3985
+ #: modules/wp-settings/wp-settings.php:38
3986
  msgid ""
3987
  "It is highly recommended that you use a non-default and non-numeric "
3988
  "permalink structure."
3989
  msgstr ""
3990
 
3991
+ #: modules/wp-settings/wp-settings.php:42
3992
  msgid "Pathinfo permalinks enabled"
3993
  msgstr ""
3994
 
3995
+ #: modules/wp-settings/wp-settings.php:43
3996
  msgid ""
3997
  "Pathinfo permalinks add a keyword-less &#8220;index.php&#8221; prefix. This "
3998
  "is not ideal, but it may be beyond your control (since it&#8217;s likely "
3999
  "caused by your site&#8217;s web hosting setup)."
4000
  msgstr ""
4001
 
4002
+ #: modules/wp-settings/wp-settings.php:48
4003
  msgid "Permalinks include the post slug"
4004
  msgstr ""
4005
 
4006
+ #: modules/wp-settings/wp-settings.php:49
4007
  msgid ""
4008
  "Including a version of the post&#8217;s title helps provide keyword-rich "
4009
  "URLs."
4010
  msgstr ""
4011
 
4012
+ #: modules/wp-settings/wp-settings.php:51
4013
  msgid "Permalinks do not include the post slug"
4014
  msgstr ""
4015
 
4016
+ #: modules/wp-settings/wp-settings.php:52
4017
  msgid ""
4018
  "It is highly recommended that you include the %postname% variable in the "
4019
  "permalink structure."
4020
  msgstr ""
4021
 
4022
+ #: modules/wp-settings/wp-settings.php:62
4023
  msgid ""
4024
  "Settings Monitor analyzes your blog&#8217;s settings and notifies you of any "
4025
  "problems. If any issues are found, they will show up in red or yellow below."
4026
  msgstr ""
4027
 
4028
+ #: modules/wp-settings/wp-settings.php:74
4029
  msgid "Go to setting &raquo;"
4030
  msgstr ""
4031
 
4032
+ #: plugin/class.seo-ultimate.php:858
4033
  msgid "SEO"
4034
  msgstr ""
4035
 
4036
+ #: plugin/class.seo-ultimate.php:1043
4037
  msgid ""
4038
  "It looks like you made changes to the settings of this SEO Ultimate module. "
4039
  "If you leave before saving, those changes will be lost."
4040
  msgstr ""
4041
 
4042
+ #: plugin/class.seo-ultimate.php:1137 plugin/class.seo-ultimate.php:1577
4043
  msgid "SEO Settings"
4044
  msgstr ""
4045
 
4046
+ #: plugin/class.seo-ultimate.php:1176
4047
  msgid ""
4048
  "%1$s is known to cause conflicts with SEO Ultimate. Please deactivate %1$s "
4049
  "if you wish to continue using SEO Ultimate."
4050
  msgstr ""
4051
 
4052
+ #: plugin/class.seo-ultimate.php:1220
4053
  msgid "new module"
4054
  msgstr ""
4055
 
4056
+ #: plugin/class.seo-ultimate.php:1220
4057
  msgid "new modules"
4058
  msgstr ""
4059
 
4060
+ #: plugin/class.seo-ultimate.php:1221
4061
  msgid "new feature"
4062
  msgstr ""
4063
 
4064
+ #: plugin/class.seo-ultimate.php:1221
4065
  msgid "new features"
4066
  msgstr ""
4067
 
4068
+ #: plugin/class.seo-ultimate.php:1222
4069
  msgid "bugfix"
4070
  msgstr ""
4071
 
4072
+ #: plugin/class.seo-ultimate.php:1222
4073
  msgid "bugfixes"
4074
  msgstr ""
4075
 
4076
+ #: plugin/class.seo-ultimate.php:1223
4077
  msgid "improvement"
4078
  msgstr ""
4079
 
4080
+ #: plugin/class.seo-ultimate.php:1223
4081
  msgid "improvements"
4082
  msgstr ""
4083
 
4084
+ #: plugin/class.seo-ultimate.php:1224
4085
  msgid "security fix"
4086
  msgstr ""
4087
 
4088
+ #: plugin/class.seo-ultimate.php:1224
4089
  msgid "security fixes"
4090
  msgstr ""
4091
 
4092
+ #: plugin/class.seo-ultimate.php:1225
4093
  msgid "new language pack"
4094
  msgstr ""
4095
 
4096
+ #: plugin/class.seo-ultimate.php:1225
4097
  msgid "new language packs"
4098
  msgstr ""
4099
 
4100
+ #: plugin/class.seo-ultimate.php:1226
4101
  msgid "language pack update"
4102
  msgstr ""
4103
 
4104
+ #: plugin/class.seo-ultimate.php:1226
4105
  msgid "language pack updates"
4106
  msgstr ""
4107
 
4108
+ #: plugin/class.seo-ultimate.php:1257
4109
  msgid "%d %s"
4110
  msgstr ""
4111
 
4112
+ #: plugin/class.seo-ultimate.php:1263
4113
  msgid "Upgrade now to get %s. %s."
4114
  msgstr ""
4115
 
4116
+ #: plugin/class.seo-ultimate.php:1265
4117
  msgid "View changelog"
4118
  msgstr ""
4119
 
4120
+ #: plugin/class.seo-ultimate.php:1342
4121
  msgid "Active Modules: "
4122
  msgstr ""
4123
 
4124
+ #: plugin/class.seo-ultimate.php:1409
4125
  msgid ""
4126
  "<strong>SEO Ultimate Notice:</strong> Your blog is configured to block "
4127
+ "search engine spiders. To resolve this, <a href=\"options-reading.php\" "
4128
+ "target=\"_blank\">go to your Reading settings</a> and disable the &#8220;"
4129
+ "discourage search engines&#8221; option."
4130
  msgstr ""
4131
 
4132
+ #: plugin/class.seo-ultimate.php:1505
4133
  msgid "Search Engine Listing"
4134
  msgstr ""
4135
 
4136
+ #: plugin/class.seo-ultimate.php:1506
4137
  msgid "Social Networks Listing"
4138
  msgstr ""
4139
 
4140
+ #: plugin/class.seo-ultimate.php:1507
4141
  msgid "Links"
4142
  msgstr ""
4143
 
4144
+ #: plugin/class.seo-ultimate.php:1607
4145
  msgid "%1$s %2$s by %3$s"
4146
  msgstr ""
4147
 
4148
+ #: plugin/class.seo-ultimate.php:1794
4149
  msgid "Home"
4150
  msgstr ""
4151
 
4152
+ #: plugin/class.seo-ultimate.php:1865
4153
  msgid "Author Archives"
4154
  msgstr ""
4155
 
4156
+ #: plugin/class.seo-ultimate.php:1894
4157
  msgid "Link Masks"
4158
  msgstr ""
4159