Version Description
Download this release
Release Info
Developer | SEO Design Solutions |
Plugin | SEO Ultimate |
Version | 2.1 |
Comparing to | |
See all releases |
Code changes from version 2.0 to 2.1
- includes/jlfunctions/arr.php +7 -0
- includes/jlfunctions/str.php +30 -0
- includes/jlwp/functions.php +1 -0
- includes/tabs.js +3 -3
- modules/404s/404s.php +0 -117
- modules/404s/fofs-log.css +26 -0
- modules/404s/fofs-log.php +262 -0
- modules/404s/fofs-settings.php +28 -0
- modules/404s/fofs.php +17 -0
- modules/404s/hit-cache.png +0 -0
- modules/404s/hit-delete.png +0 -0
- modules/404s/hit-details.png +0 -0
- modules/404s/hit-open.png +0 -0
- modules/404s/hit-redirect.png +0 -0
- modules/404s/index.php +4 -0
- modules/autolinks/autolinks.css +4 -0
- modules/autolinks/autolinks.php +1 -12
- modules/autolinks/index.php +4 -0
- modules/canonical/canonical.php +0 -1
- modules/canonical/index.php +4 -0
- modules/class.su-importmodule.php +3 -6
- modules/class.su-module.php +207 -53
- modules/competition-queries/competition-queries.js +8 -0
- modules/competition-queries/competition-queries.php +0 -15
- modules/competition-queries/index.php +4 -0
- modules/files/files.php +0 -32
- modules/files/index.php +4 -0
- modules/import-aiosp/import-aiosp.css +16 -0
- modules/import-aiosp/import-aiosp.php +0 -23
- modules/import-aiosp/index.php +4 -0
- modules/linkbox/index.php +4 -0
- modules/linkbox/linkbox.php +0 -1
- modules/meta/index.php +4 -0
- modules/meta/meta-settings.php +1 -2
- modules/meta/meta.php +1 -4
- modules/modules.css +20 -5
- modules/modules.js +11 -0
- modules/modules/index.php +4 -0
- modules/modules/modules.css +29 -0
- modules/modules/modules.js +8 -0
- modules/modules/modules.php +1 -51
- modules/more-links/index.php +4 -0
- modules/more-links/more-links.php +0 -1
- modules/noindex/index.php +4 -0
- modules/noindex/noindex.php +1 -2
- modules/sds-blog/index.php +4 -0
- modules/sds-blog/sds-blog.css +38 -0
- modules/sds-blog/sds-blog.php +27 -66
- modules/settings/global-settings.php +66 -0
- modules/settings/index.php +4 -0
- modules/settings/settings-data.css +20 -0
- modules/settings/settings-data.php +225 -0
- modules/settings/settings.php +2 -211
- modules/settings/uninstall.php +66 -0
- modules/site-keyword-queries/index.php +4 -0
- modules/site-keyword-queries/site-keyword-queries.php +0 -1
- modules/slugs/index.php +4 -0
- modules/slugs/slugs.php +0 -1
- modules/titles/index.php +4 -0
- modules/titles/titles-formats.php +6 -0
- modules/titles/titles-posts.php +0 -1
- modules/titles/titles-taxonomies.php +0 -1
- modules/titles/titles.css +7 -0
- modules/titles/titles.php +5 -31
- plugin/class.seo-ultimate.php +247 -127
- plugin/class.su-hitset.php +0 -112
- plugin/su-functions.php +10 -18
- readme.txt +58 -36
- screenshot-1.png +0 -0
- screenshot-10.png +0 -0
- screenshot-11.png +0 -0
- screenshot-12.png +0 -0
- screenshot-13.png +0 -0
- screenshot-14.png +0 -0
- screenshot-15.png +0 -0
- screenshot-2.png +0 -0
- screenshot-3.png +0 -0
- screenshot-4.png +0 -0
- screenshot-5.png +0 -0
- screenshot-6.png +0 -0
- screenshot-7.png +0 -0
- screenshot-8.png +0 -0
- screenshot-9.png +0 -0
- seo-ultimate.php +4 -5
- seo-ultimate.pot +412 -385
includes/jlfunctions/arr.php
CHANGED
@@ -59,6 +59,13 @@ class suarr {
|
|
59 |
$valuekey = sustr::preg_filter('A-Za-z0-9', $valuekey);
|
60 |
uksort($arr, create_function('$a,$b', 'return strlen($b["'.$valuekey.'"]) - strlen($a["'.$valuekey.'"]);'));
|
61 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
}
|
63 |
|
64 |
?>
|
59 |
$valuekey = sustr::preg_filter('A-Za-z0-9', $valuekey);
|
60 |
uksort($arr, create_function('$a,$b', 'return strlen($b["'.$valuekey.'"]) - strlen($a["'.$valuekey.'"]);'));
|
61 |
}
|
62 |
+
|
63 |
+
function flatten_values($arr, $value_key = 0) {
|
64 |
+
if (!is_array($arr) || !count($arr)) return array();
|
65 |
+
$newarr = array();
|
66 |
+
foreach ($arr as $key => $array_value) $newarr[$key] = $array_value[$value_key];
|
67 |
+
return $newarr;
|
68 |
+
}
|
69 |
}
|
70 |
|
71 |
?>
|
includes/jlfunctions/str.php
CHANGED
@@ -28,6 +28,13 @@ class sustr {
|
|
28 |
return ( substr( $str, strlen( $str ) - strlen( $sub ) ) === $sub );
|
29 |
}
|
30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
function has($str, $sub) {
|
32 |
return (strpos($str, $sub) !== false);
|
33 |
}
|
@@ -46,6 +53,13 @@ class sustr {
|
|
46 |
return $str;
|
47 |
}
|
48 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
/**
|
50 |
* Joins strings into a natural-language list.
|
51 |
* Can be internationalized with gettext or the su_lang_implode filter.
|
@@ -99,6 +113,16 @@ class sustr {
|
|
99 |
return $str;
|
100 |
}
|
101 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
102 |
function batch_replace($search, $replace, $subjects) {
|
103 |
$subjects = array_unique((array)$subjects);
|
104 |
$results = array();
|
@@ -115,6 +139,12 @@ class sustr {
|
|
115 |
return $str;
|
116 |
}
|
117 |
|
|
|
|
|
|
|
|
|
|
|
|
|
118 |
function preg_filter($filter, $str) {
|
119 |
return preg_replace("/[^{$filter}]/", '', $str);
|
120 |
}
|
28 |
return ( substr( $str, strlen( $str ) - strlen( $sub ) ) === $sub );
|
29 |
}
|
30 |
|
31 |
+
function endwith( $str, $end ) {
|
32 |
+
if (!sustr::endswith($str, $end))
|
33 |
+
return $str.$end;
|
34 |
+
else
|
35 |
+
return $str;
|
36 |
+
}
|
37 |
+
|
38 |
function has($str, $sub) {
|
39 |
return (strpos($str, $sub) !== false);
|
40 |
}
|
53 |
return $str;
|
54 |
}
|
55 |
|
56 |
+
function truncate_at( $str, $end ) {
|
57 |
+
if ($endpos = strpos($str, $end))
|
58 |
+
return substr($str, 0, $endpos);
|
59 |
+
else
|
60 |
+
return $str;
|
61 |
+
}
|
62 |
+
|
63 |
/**
|
64 |
* Joins strings into a natural-language list.
|
65 |
* Can be internationalized with gettext or the su_lang_implode filter.
|
113 |
return $str;
|
114 |
}
|
115 |
|
116 |
+
function rtrim_substr($str, $totrim) {
|
117 |
+
for ($i = strlen($totrim); $i > 0; $i--) {
|
118 |
+
$totrimsub = substr($totrim, 0, $i);
|
119 |
+
if (sustr::endswith($str, $totrimsub))
|
120 |
+
return sustr::rtrim_str($str, $totrimsub);
|
121 |
+
}
|
122 |
+
|
123 |
+
return $str;
|
124 |
+
}
|
125 |
+
|
126 |
function batch_replace($search, $replace, $subjects) {
|
127 |
$subjects = array_unique((array)$subjects);
|
128 |
$results = array();
|
139 |
return $str;
|
140 |
}
|
141 |
|
142 |
+
function remove_double_words($str) {
|
143 |
+
$words = explode(' ', $str);
|
144 |
+
foreach ($words as $word) $str = str_replace("$word $word", $word, $str);
|
145 |
+
return $str;
|
146 |
+
}
|
147 |
+
|
148 |
function preg_filter($filter, $str) {
|
149 |
return preg_replace("/[^{$filter}]/", '', $str);
|
150 |
}
|
includes/jlwp/functions.php
CHANGED
@@ -115,4 +115,5 @@ class suwp {
|
|
115 |
return false;
|
116 |
}
|
117 |
}
|
|
|
118 |
?>
|
115 |
return false;
|
116 |
}
|
117 |
}
|
118 |
+
|
119 |
?>
|
includes/tabs.js
CHANGED
@@ -7,7 +7,7 @@ function su_init_tabs()
|
|
7 |
{
|
8 |
/* if this is not the SEO Ultimate admin page, quit */
|
9 |
if (!jQuery("#su-tabset").length) return;
|
10 |
-
|
11 |
/* init markup for tabs */
|
12 |
jQuery('#su-tabset').prepend("<ul><\/ul>");
|
13 |
jQuery('#su-tabset > fieldset').each(function(i)
|
@@ -29,8 +29,8 @@ function su_init_tabs()
|
|
29 |
default:
|
30 |
jQuery("#su-tabset > ul").tabs();
|
31 |
}
|
32 |
-
|
33 |
-
/* handler for
|
34 |
jQuery('#su-tabset ul a').click(function(i){
|
35 |
var form = jQuery('#su-admin-form');
|
36 |
var action = form.attr("action").split('#', 1) + jQuery(this).attr('href');
|
7 |
{
|
8 |
/* if this is not the SEO Ultimate admin page, quit */
|
9 |
if (!jQuery("#su-tabset").length) return;
|
10 |
+
|
11 |
/* init markup for tabs */
|
12 |
jQuery('#su-tabset').prepend("<ul><\/ul>");
|
13 |
jQuery('#su-tabset > fieldset').each(function(i)
|
29 |
default:
|
30 |
jQuery("#su-tabset > ul").tabs();
|
31 |
}
|
32 |
+
|
33 |
+
/* handler for opening the last tab after submit (compability version) */
|
34 |
jQuery('#su-tabset ul a').click(function(i){
|
35 |
var form = jQuery('#su-admin-form');
|
36 |
var action = form.attr("action").split('#', 1) + jQuery(this).attr('href');
|
modules/404s/404s.php
DELETED
@@ -1,117 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* 404 Monitor Module
|
4 |
-
*
|
5 |
-
* @version 1.0.8
|
6 |
-
* @since 0.4
|
7 |
-
*/
|
8 |
-
|
9 |
-
if (class_exists('SU_Module')) {
|
10 |
-
|
11 |
-
class SU_404s extends SU_Module {
|
12 |
-
|
13 |
-
var $hitset;
|
14 |
-
|
15 |
-
function __construct() {
|
16 |
-
//Load 404s from the database
|
17 |
-
$this->hitset = new SU_HitSet('404s', "status_code=404 AND redirect_url='' AND url NOT LIKE '%/favicon.ico'");
|
18 |
-
|
19 |
-
add_filter('su_save_hit', array(&$this, 'should_log_hit'), 10, 2);
|
20 |
-
}
|
21 |
-
|
22 |
-
function should_log_hit($should_log, $hit) {
|
23 |
-
if ($hit['status_code'] == 404)
|
24 |
-
return true;
|
25 |
-
else
|
26 |
-
return $should_log;
|
27 |
-
}
|
28 |
-
|
29 |
-
function get_module_title() { return __('404 Monitor', 'seo-ultimate'); }
|
30 |
-
|
31 |
-
function has_menu_count() { return true; }
|
32 |
-
|
33 |
-
function get_menu_count() {
|
34 |
-
//Find out how many *new* 404s there are
|
35 |
-
global $wpdb;
|
36 |
-
$table = $this->plugin->get_table_name('hits');
|
37 |
-
return $wpdb->query("SELECT id FROM $table WHERE is_new=1 AND status_code=404 AND redirect_url='' AND url NOT LIKE '%/favicon.ico'");
|
38 |
-
}
|
39 |
-
|
40 |
-
function admin_page_contents() {
|
41 |
-
|
42 |
-
global $wpdb;
|
43 |
-
$table = $this->plugin->get_table_name('hits');
|
44 |
-
|
45 |
-
if (!$this->get_setting('log_hits', true, 'settings'))
|
46 |
-
|
47 |
-
$this->queue_message('warning', sprintf(
|
48 |
-
__('Please note that new 404 errors will not be recorded, since visitor logging is disabled in the %s.', 'seo-ultimate'),
|
49 |
-
$this->get_admin_link('settings', __('Plugin Settings module', 'seo-ultimate'))
|
50 |
-
));
|
51 |
-
|
52 |
-
//Are we deleting a 404 entry?
|
53 |
-
if ($this->is_action('delete')) {
|
54 |
-
|
55 |
-
if ($wpdb->query($wpdb->prepare("DELETE FROM $table WHERE id = %d LIMIT 1", intval($_GET['object']))))
|
56 |
-
$this->queue_message('success', __('The log entry was successfully deleted.', 'seo-ultimate'));
|
57 |
-
else
|
58 |
-
$this->queue_message('error', __('This log entry has already been deleted.', 'seo-ultimate'));
|
59 |
-
|
60 |
-
//The database has changed, so reload our data from it
|
61 |
-
$this->hitset->query_db();
|
62 |
-
|
63 |
-
//Are we clearing the whole 404 log?
|
64 |
-
} elseif ($this->is_action('clear')) {
|
65 |
-
|
66 |
-
if ($wpdb->query("DELETE FROM $table WHERE status_code=404")) {
|
67 |
-
$this->queue_message('success', __('The log was successfully cleared.', 'seo-ultimate'));
|
68 |
-
|
69 |
-
//The database has changed, so reload our data from it
|
70 |
-
$this->hitset->query_db();
|
71 |
-
}
|
72 |
-
}
|
73 |
-
|
74 |
-
if (!$this->hitset->have_hits())
|
75 |
-
$this->queue_message('success', __("No 404 errors in the log.", 'seo-ultimate'));
|
76 |
-
|
77 |
-
$this->print_messages();
|
78 |
-
|
79 |
-
if ($this->hitset->have_hits()) {
|
80 |
-
|
81 |
-
//Display the 404 table
|
82 |
-
$this->hitset->admin_table(array(&$this, 'hits_table_action_links'));
|
83 |
-
|
84 |
-
//Create the "Clear Log" button
|
85 |
-
$clearurl = $this->get_nonce_url('clear');
|
86 |
-
$confirm = __("Are you sure you want to delete all 404 log entries?", 'seo-ultimate');
|
87 |
-
echo "<a href=\"$clearurl\" class=\"button-secondary\" onclick=\"javascript:return confirm('$confirm')\">";
|
88 |
-
_e("Clear Log", 'seo-ultimate');
|
89 |
-
echo "</a>";
|
90 |
-
}
|
91 |
-
}
|
92 |
-
|
93 |
-
//Returns the HTML that should appear when the user hovers over a row of the 404s table
|
94 |
-
function hits_table_action_links($row) {
|
95 |
-
$url = $row['url'];
|
96 |
-
|
97 |
-
$deleteurl = $this->get_nonce_url('delete', $row['id']);
|
98 |
-
$url_encoded = urlencode($url);
|
99 |
-
|
100 |
-
$anchors = array(
|
101 |
-
__("Open", 'seo-ultimate')
|
102 |
-
, __("Google Cache", 'seo-ultimate')
|
103 |
-
, __("Delete Log Entry", 'seo-ultimate')
|
104 |
-
);
|
105 |
-
|
106 |
-
return <<<STR
|
107 |
-
|
108 |
-
<span class="open"><a href="$url" target="_blank">{$anchors[0]}</a> | </span>
|
109 |
-
<span class="cache"><a href="http://www.google.com/search?q=cache%3A$url_encoded" target="_blank">{$anchors[1]}</a> | </span>
|
110 |
-
<span class="delete"><a href="$deleteurl">{$anchors[2]}</a></span>
|
111 |
-
|
112 |
-
STR;
|
113 |
-
}
|
114 |
-
}
|
115 |
-
|
116 |
-
}
|
117 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
modules/404s/fofs-log.css
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#su-fofs table.widefat {
|
2 |
+
width: 100%;
|
3 |
+
}
|
4 |
+
|
5 |
+
#su-fofs table tr.su-404s-hit-data td,
|
6 |
+
#su-fofs table tr.su-404s-hit-referers td {
|
7 |
+
border-bottom: 0 none;
|
8 |
+
}
|
9 |
+
|
10 |
+
#su-fofs table tr.su-404s-hit-referers td,
|
11 |
+
#su-fofs table tr.su-404s-hit-user-agents td {
|
12 |
+
padding-top: 0;
|
13 |
+
padding-bottom: 0;
|
14 |
+
}
|
15 |
+
|
16 |
+
#su-fofs table tr.su-404s-new-hit td {
|
17 |
+
background-color: #DFFFE3;
|
18 |
+
}
|
19 |
+
|
20 |
+
#su-fofs table .actions span {
|
21 |
+
padding-right: 0.5em;
|
22 |
+
}
|
23 |
+
|
24 |
+
#su-fofs .su-404s-clear-log {
|
25 |
+
float: right;
|
26 |
+
}
|
modules/404s/fofs-log.php
ADDED
@@ -0,0 +1,262 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* 404 Monitor Log Module
|
4 |
+
*
|
5 |
+
* @since 2.1
|
6 |
+
*/
|
7 |
+
|
8 |
+
if (class_exists('SU_Module')) {
|
9 |
+
|
10 |
+
class SU_FofsLog extends SU_Module {
|
11 |
+
|
12 |
+
function get_parent_module() { return 'fofs'; }
|
13 |
+
function get_child_order() { return 10; }
|
14 |
+
function is_independent_module() { return false; }
|
15 |
+
|
16 |
+
function get_module_title() { return __('404 Monitor Log', 'seo-ultimate'); }
|
17 |
+
function get_module_subtitle() { return __('Log', 'seo-ultimate'); }
|
18 |
+
|
19 |
+
function has_menu_count() { return true; }
|
20 |
+
function get_settings_key() { return '404s'; }
|
21 |
+
|
22 |
+
function get_menu_count() {
|
23 |
+
$new = 0;
|
24 |
+
$the404s = $this->get_setting('log');
|
25 |
+
if (count($the404s)) {
|
26 |
+
foreach ($the404s as $a404) {
|
27 |
+
if ($a404['is_new']) $new++;
|
28 |
+
}
|
29 |
+
}
|
30 |
+
return $new;
|
31 |
+
}
|
32 |
+
|
33 |
+
function get_default_settings() {
|
34 |
+
return array(
|
35 |
+
'exceptions' => "*/favicon.ico\n*/apple-touch-icon.png"
|
36 |
+
, 'max_log_size' => 1000
|
37 |
+
, 'log_enabled' => $this->flush_setting('log_hits', true, 'settings')
|
38 |
+
);
|
39 |
+
}
|
40 |
+
|
41 |
+
function init() {
|
42 |
+
add_action('admin_enqueue_scripts', array(&$this, 'queue_admin_scripts'));
|
43 |
+
add_action('su_save_hit', array(&$this, 'log_hit'));
|
44 |
+
add_filter('su_settings_export_array', array(&$this, 'filter_export_array'));
|
45 |
+
}
|
46 |
+
|
47 |
+
function filter_export_array($settings) {
|
48 |
+
unset($settings[$this->get_module_key()]['log']);
|
49 |
+
return $settings;
|
50 |
+
}
|
51 |
+
|
52 |
+
//Upgrade to new wp_options-only system if needed
|
53 |
+
function upgrade() {
|
54 |
+
global $wpdb;
|
55 |
+
//Get old storage system if it exists
|
56 |
+
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)) {
|
57 |
+
|
58 |
+
//Get new storage system
|
59 |
+
$l = $this->get_setting('log', array());
|
60 |
+
|
61 |
+
//Move old to new
|
62 |
+
foreach ($result as $row) $this->log_hit($row);
|
63 |
+
|
64 |
+
//Out with the old
|
65 |
+
mysql_query("DROP TABLE IF EXISTS {$wpdb->prefix}sds_hits");
|
66 |
+
}
|
67 |
+
}
|
68 |
+
|
69 |
+
function queue_admin_scripts() {
|
70 |
+
if ($this->is_module_admin_page()) wp_enqueue_script('scriptaculous-effects');
|
71 |
+
}
|
72 |
+
|
73 |
+
function log_hit($hit) {
|
74 |
+
|
75 |
+
if ($hit['status_code'] == 404) {
|
76 |
+
|
77 |
+
$exceptions = explode("\n", $this->get_setting('exceptions', ''));
|
78 |
+
foreach ($exceptions as $exception) {
|
79 |
+
$exception = trim($exception); //Remove any \r's
|
80 |
+
$exception = str_replace('*', '.*', $exception);
|
81 |
+
$regex = "@^$exception$@i";
|
82 |
+
$regex = str_replace(array('@^.*', '.*$@i'), array('@', '@i'), $regex);
|
83 |
+
if (preg_match($regex, $hit['url'])) return;
|
84 |
+
}
|
85 |
+
|
86 |
+
$l = $this->get_setting('log', array());
|
87 |
+
while (count($l) >= $this->get_setting('max_log_size')) array_pop($l);
|
88 |
+
|
89 |
+
$u = $hit['url'];
|
90 |
+
if (!isset($l[$u])) {
|
91 |
+
$l[$u] = array();
|
92 |
+
$l[$u]['hit_count'] = 0;
|
93 |
+
$l[$u]['is_new'] = isset($hit['is_new']) ? $hit['is_new'] : true;
|
94 |
+
$l[$u]['referers'] = array();
|
95 |
+
$l[$u]['user_agents'] = array();
|
96 |
+
$l[$u]['last_hit_time'] = 0;
|
97 |
+
}
|
98 |
+
|
99 |
+
$l[$u]['hit_count']++;
|
100 |
+
if (!$l[$u]['is_new'] && $hit['is_new'])
|
101 |
+
$l[$u]['is_new'] = true;
|
102 |
+
if ($hit['time'] > $l[$u]['last_hit_time'])
|
103 |
+
$l[$u]['last_hit_time'] = $hit['time'];
|
104 |
+
if (strlen($hit['referer']))
|
105 |
+
$l[$u]['referers'][] = $hit['referer'];
|
106 |
+
if (strlen($hit['user_agent']) && !in_array($hit['user_agent'], $l[$u]['user_agents']))
|
107 |
+
$l[$u]['user_agents'][] = $hit['user_agent'];
|
108 |
+
|
109 |
+
$this->update_setting('log', $l);
|
110 |
+
}
|
111 |
+
}
|
112 |
+
|
113 |
+
function get_admin_table_columns() {
|
114 |
+
return array(
|
115 |
+
'actions' => __('Actions', 'seo-ultimate')
|
116 |
+
, 'hit-count' => __('Hits', 'seo-ultimate')
|
117 |
+
, 'url' => __('URL with 404 Error', 'seo-ultimate')
|
118 |
+
, 'last-hit-time' => __('Date of Most Recent Hit', 'seo-ultimate')
|
119 |
+
, 'referers' => __('Referers', 'seo-ultimate')
|
120 |
+
, 'user-agents' => __('User Agents', 'seo-ultimate')
|
121 |
+
);
|
122 |
+
}
|
123 |
+
|
124 |
+
function sort_log_callback($a, $b) {
|
125 |
+
if ($a['is_new'] == $b['is_new'])
|
126 |
+
return $b['last_hit_time'] - $a['last_hit_time'];
|
127 |
+
|
128 |
+
return $a['is_new'] ? -1 : 1;
|
129 |
+
}
|
130 |
+
|
131 |
+
function admin_page_contents() {
|
132 |
+
|
133 |
+
$the404s = $this->get_setting('log');
|
134 |
+
|
135 |
+
if (!$this->get_setting('log_enabled', true))
|
136 |
+
$this->queue_message('warning', __('New 404 errors will not be recorded because 404 logging is disabled on the Settings tab.', 'seo-ultimate'));
|
137 |
+
|
138 |
+
//Are we deleting a 404 entry?
|
139 |
+
if ($this->is_action('delete')) {
|
140 |
+
|
141 |
+
if (isset($the404s[$_GET['object']])) {
|
142 |
+
unset($the404s[$_GET['object']]);
|
143 |
+
$this->queue_message('success', __('The log entry was successfully deleted.', 'seo-ultimate'));
|
144 |
+
} else
|
145 |
+
$this->queue_message('error', __('This log entry has already been deleted.', 'seo-ultimate'));
|
146 |
+
|
147 |
+
$this->update_setting('log', $the404s);
|
148 |
+
|
149 |
+
//Are we clearing the whole 404 log?
|
150 |
+
} elseif ($this->is_action('clear')) {
|
151 |
+
|
152 |
+
$the404s = array();
|
153 |
+
$this->update_setting('log', array());
|
154 |
+
$this->queue_message('success', __('The log was successfully cleared.', 'seo-ultimate'));
|
155 |
+
}
|
156 |
+
|
157 |
+
if (!count($the404s))
|
158 |
+
$this->queue_message('success', __("No 404 errors in the log.", 'seo-ultimate'));
|
159 |
+
|
160 |
+
$this->print_messages();
|
161 |
+
|
162 |
+
if (count($the404s)) {
|
163 |
+
|
164 |
+
$this->clear_log_button();
|
165 |
+
|
166 |
+
$headers = $this->get_admin_table_columns();
|
167 |
+
$this->admin_wftable_start();
|
168 |
+
|
169 |
+
uasort($the404s, array(&$this, 'sort_log_callback'));
|
170 |
+
|
171 |
+
foreach ($the404s as $url => $data) {
|
172 |
+
$new = $data['is_new'] ? ' su-404s-new-hit' : '';
|
173 |
+
|
174 |
+
$escurl = su_esc_attr($url);
|
175 |
+
$encurl = urlencode($escurl);
|
176 |
+
$md5url = md5($url);
|
177 |
+
|
178 |
+
echo "\t<tr id='su-404s-hit-$md5url-data' class='su-404s-hit-data$new'>\n";
|
179 |
+
|
180 |
+
$this->table_cells(array(
|
181 |
+
'actions' =>
|
182 |
+
"<span class='su-404s-hit-open'><a href='$escurl' target='_blank'><img src='{$this->module_dir_url}hit-open.png' title='".__('Open URL in new window (will not be logged)', 'seo-ultimate')."' /></a></span>"
|
183 |
+
. "<span class='su-404s-hit-cache'><a href='http://www.google.com/search?q=cache%3A$encurl' target='_blank'><img src='{$this->module_dir_url}hit-cache.png' title='".__('Query Google for cached version of URL (opens in new window)', 'seo-ultimate')."' /></a></span>"
|
184 |
+
. "<span class='su-404s-hit-delete'><a href='".$this->get_nonce_url('delete', $url)."'><img src='{$this->module_dir_url}hit-delete.png' title='".__('Remove this URL from the log', 'seo-ultimate')."' /></a></span>"
|
185 |
+
, 'hit-count' => $data['hit_count']
|
186 |
+
, 'url' => $url
|
187 |
+
, 'last-hit-time' => sprintf(__('%s at %s', 'seo-ultimate')
|
188 |
+
, date_i18n(get_option('date_format'), $data['last_hit_time'])
|
189 |
+
, date_i18n(get_option('time_format'), $data['last_hit_time'])
|
190 |
+
)
|
191 |
+
, 'referers' => number_format_i18n(count($data['referers'])) . (count($data['referers']) ? " <a href='#' onclick=\"su_toggle_blind('su-404s-hit-$md5url-referers')\";'><img src='{$this->module_dir_url}hit-details.png' title='".__('View list of referring URLs', 'seo-ultimate')."' /></a>" : '')
|
192 |
+
, 'user-agents' => number_format_i18n(count($data['user_agents'])) . (count($data['user_agents']) ? " <a href='#' onclick=\"su_toggle_blind('su-404s-hit-$md5url-user-agents')\";'><img src='{$this->module_dir_url}hit-details.png' title='".__('View list of user agents', 'seo-ultimate')."' /></a>" : '')
|
193 |
+
));
|
194 |
+
|
195 |
+
echo "\t</tr>\n";
|
196 |
+
|
197 |
+
echo "\t<tr class='su-404s-hit-referers$new'>\n\t\t<td colspan='".count($headers)."'>";
|
198 |
+
|
199 |
+
if (count($data['referers'])) {
|
200 |
+
|
201 |
+
echo "<div id='su-404s-hit-$md5url-referers' style='display: none;'>\n";
|
202 |
+
echo "\t\t\t<div><strong>".__('Referring URLs', 'seo-ultimate')."</strong> — ";
|
203 |
+
echo "<a href='#' onclick=\"Effect.BlindUp('su-404s-hit-$md5url-referers')\"; return false;'>".__('Hide list', 'seo-ultimate')."</a>";
|
204 |
+
echo "</div>\n";
|
205 |
+
echo "\t\t\t<ul>\n";
|
206 |
+
|
207 |
+
foreach ($data['referers'] as $referer) {
|
208 |
+
$referer = su_esc_attr($referer); //Don't let attacks pass through the referer URLs!
|
209 |
+
echo "\t\t\t\t<li><a href='$referer' target='_blank'>$referer</a></li>\n";
|
210 |
+
}
|
211 |
+
|
212 |
+
echo "\t\t\t</ul>\n";
|
213 |
+
|
214 |
+
echo "\t\t</div>";
|
215 |
+
}
|
216 |
+
|
217 |
+
echo "</td>\n\t</tr>\n";
|
218 |
+
|
219 |
+
echo "\t<tr class='su-404s-hit-user-agents$new'>\n\t\t<td colspan='".count($headers)."'>";
|
220 |
+
|
221 |
+
if (count($data['user_agents'])) {
|
222 |
+
echo "<div id='su-404s-hit-$md5url-user-agents' style='display: none;'>\n";
|
223 |
+
echo "\t\t\t<div><strong>".__('User Agents', 'seo-ultimate')."</strong> — ";
|
224 |
+
echo "<a href='#' onclick=\"Effect.BlindUp('su-404s-hit-$md5url-user-agents')\"; return false;'>".__('Hide list', 'seo-ultimate')."</a>";
|
225 |
+
echo "</div>\n";
|
226 |
+
echo "\t\t\t<ul>\n";
|
227 |
+
|
228 |
+
foreach ($data['user_agents'] as $useragent) {
|
229 |
+
$useragent = su_esc_html($useragent); //Don't let attacks pass through the user agent strings!
|
230 |
+
echo "\t\t\t\t<li>$useragent</li>\n";
|
231 |
+
}
|
232 |
+
|
233 |
+
echo "\t\t\t</ul>\n";
|
234 |
+
|
235 |
+
echo "</td>\n\t</tr>\n";
|
236 |
+
}
|
237 |
+
|
238 |
+
echo "\t\t</div>";
|
239 |
+
|
240 |
+
$the404s[$url]['is_new'] = false;
|
241 |
+
}
|
242 |
+
|
243 |
+
$this->update_setting('log', $the404s);
|
244 |
+
|
245 |
+
$this->admin_wftable_end();
|
246 |
+
|
247 |
+
$this->clear_log_button();
|
248 |
+
}
|
249 |
+
}
|
250 |
+
|
251 |
+
function clear_log_button() {
|
252 |
+
//Create the "Clear Log" button
|
253 |
+
$clearurl = $this->get_nonce_url('clear');
|
254 |
+
$confirm = __("Are you sure you want to delete all 404 log entries?", 'seo-ultimate');
|
255 |
+
echo "<div class='su-404s-clear-log'><a href=\"$clearurl\" class=\"button-secondary\" onclick=\"javascript:return confirm('$confirm')\">";
|
256 |
+
_e("Clear Log", 'seo-ultimate');
|
257 |
+
echo "</a></div>";
|
258 |
+
}
|
259 |
+
}
|
260 |
+
|
261 |
+
}
|
262 |
+
?>
|
modules/404s/fofs-settings.php
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* 404 Monitor Settings Module
|
4 |
+
*
|
5 |
+
* @since 2.1
|
6 |
+
*/
|
7 |
+
|
8 |
+
if (class_exists('SU_Module')) {
|
9 |
+
|
10 |
+
class SU_FofsSettings extends SU_Module {
|
11 |
+
|
12 |
+
function get_parent_module() { return 'fofs'; }
|
13 |
+
function get_child_order() { return 20; }
|
14 |
+
function is_independent_module() { return false; }
|
15 |
+
|
16 |
+
function get_module_title() { return __('404 Monitor Settings', 'seo-ultimate'); }
|
17 |
+
function get_module_subtitle() { return __('Settings', 'seo-ultimate'); }
|
18 |
+
function get_settings_key() { return '404s'; }
|
19 |
+
|
20 |
+
function admin_page_contents() {
|
21 |
+
$this->admin_form_start();
|
22 |
+
$this->checkbox('log_enabled', __("Continue monitoring for new 404 errors", 'seo-ultimate'));
|
23 |
+
$this->admin_form_end();
|
24 |
+
}
|
25 |
+
}
|
26 |
+
|
27 |
+
}
|
28 |
+
?>
|
modules/404s/fofs.php
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* 404 Monitor Module
|
4 |
+
*
|
5 |
+
* @since 0.4
|
6 |
+
*/
|
7 |
+
|
8 |
+
if (class_exists('SU_Module')) {
|
9 |
+
|
10 |
+
class SU_Fofs extends SU_Module {
|
11 |
+
function get_module_title() { return __('404 Monitor', 'seo-ultimate'); }
|
12 |
+
function has_menu_count() { return true; }
|
13 |
+
function admin_page_contents() { $this->children_admin_page_tabs(); }
|
14 |
+
}
|
15 |
+
|
16 |
+
}
|
17 |
+
?>
|
modules/404s/hit-cache.png
ADDED
Binary file
|
modules/404s/hit-delete.png
ADDED
Binary file
|
modules/404s/hit-details.png
ADDED
Binary file
|
modules/404s/hit-open.png
ADDED
Binary file
|
modules/404s/hit-redirect.png
ADDED
Binary file
|
modules/404s/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
header('Status: 403 Forbidden');
|
3 |
+
header('HTTP/1.1 403 Forbidden');
|
4 |
+
?>
|
modules/autolinks/autolinks.css
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
#su-autolinks table.widefat,
|
2 |
+
#su-autolinks table.widefat input {
|
3 |
+
width: 100%;
|
4 |
+
}
|
modules/autolinks/autolinks.php
CHANGED
@@ -2,7 +2,6 @@
|
|
2 |
/**
|
3 |
* Deeplink Juggernaut Module
|
4 |
*
|
5 |
-
* @version 0.1
|
6 |
* @since 1.8
|
7 |
*/
|
8 |
|
@@ -76,19 +75,9 @@ class SU_Autolinks extends SU_Module {
|
|
76 |
}
|
77 |
|
78 |
$this->admin_wftable_end();
|
79 |
-
$this->admin_form_end(
|
80 |
}
|
81 |
}
|
82 |
|
83 |
-
} elseif ($_GET['css'] == 'admin') {
|
84 |
-
header('Content-type: text/css');
|
85 |
-
?>
|
86 |
-
|
87 |
-
#su-autolinks table.widefat,
|
88 |
-
#su-autolinks table.widefat input {
|
89 |
-
width: 100%;
|
90 |
-
}
|
91 |
-
|
92 |
-
<?php
|
93 |
}
|
94 |
?>
|
2 |
/**
|
3 |
* Deeplink Juggernaut Module
|
4 |
*
|
|
|
5 |
* @since 1.8
|
6 |
*/
|
7 |
|
75 |
}
|
76 |
|
77 |
$this->admin_wftable_end();
|
78 |
+
$this->admin_form_end(null, false);
|
79 |
}
|
80 |
}
|
81 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
}
|
83 |
?>
|
modules/autolinks/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
header('Status: 403 Forbidden');
|
3 |
+
header('HTTP/1.1 403 Forbidden');
|
4 |
+
?>
|
modules/canonical/canonical.php
CHANGED
@@ -2,7 +2,6 @@
|
|
2 |
/**
|
3 |
* Canonicalizer Module
|
4 |
*
|
5 |
-
* @version 1.1.2
|
6 |
* @since 0.3
|
7 |
*/
|
8 |
|
2 |
/**
|
3 |
* Canonicalizer Module
|
4 |
*
|
|
|
5 |
* @since 0.3
|
6 |
*/
|
7 |
|
modules/canonical/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
header('Status: 403 Forbidden');
|
3 |
+
header('HTTP/1.1 403 Forbidden');
|
4 |
+
?>
|
modules/class.su-importmodule.php
CHANGED
@@ -3,7 +3,6 @@
|
|
3 |
* Import Module
|
4 |
*
|
5 |
* @abstract
|
6 |
-
* @version 1.0
|
7 |
* @since 1.5
|
8 |
*/
|
9 |
|
@@ -33,8 +32,8 @@ class SU_ImportModule extends SU_Module {
|
|
33 |
$this->admin_page_end();
|
34 |
}
|
35 |
|
36 |
-
function admin_form_end($button =
|
37 |
-
if (
|
38 |
parent::admin_form_end($button, $table);
|
39 |
|
40 |
$this->print_message('warning', sprintf(__('The import cannot be undone. It is your responsibility to <a href="%s" target="_blank">backup your database</a> before proceeding!', 'seo-ultimate'), suwp::get_backup_url()));
|
@@ -66,10 +65,8 @@ class SU_ImportModule extends SU_Module {
|
|
66 |
}
|
67 |
|
68 |
function import_status($type, $message) {
|
69 |
-
//echo "<tr><td class='image'><img src='{$this->import_status_image}' alt='' /></td><td class='message'>$message</td></tr>";
|
70 |
-
$type = su_esc_attr($type);
|
71 |
if (strcmp($type, 'error') == 0) $this->error = true;
|
72 |
-
|
73 |
}
|
74 |
|
75 |
function import_option($module, $key, $option) {
|
3 |
* Import Module
|
4 |
*
|
5 |
* @abstract
|
|
|
6 |
* @since 1.5
|
7 |
*/
|
8 |
|
32 |
$this->admin_page_end();
|
33 |
}
|
34 |
|
35 |
+
function admin_form_end($button = null, $table = true) {
|
36 |
+
if ($button === null) $button = __("Import Now", 'seo-ultimate');
|
37 |
parent::admin_form_end($button, $table);
|
38 |
|
39 |
$this->print_message('warning', sprintf(__('The import cannot be undone. It is your responsibility to <a href="%s" target="_blank">backup your database</a> before proceeding!', 'seo-ultimate'), suwp::get_backup_url()));
|
65 |
}
|
66 |
|
67 |
function import_status($type, $message) {
|
|
|
|
|
68 |
if (strcmp($type, 'error') == 0) $this->error = true;
|
69 |
+
$this->print_mini_message($type, $message);
|
70 |
}
|
71 |
|
72 |
function import_option($module, $key, $option) {
|
modules/class.su-module.php
CHANGED
@@ -40,13 +40,29 @@ class SU_Module {
|
|
40 |
var $module_url;
|
41 |
|
42 |
/**
|
43 |
-
* Stores the URL to the directory containing the module file
|
44 |
*
|
45 |
* @since 1.5
|
46 |
* @var string
|
47 |
*/
|
48 |
var $module_dir_url;
|
49 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
/**
|
51 |
* Stores the module's plugin page hook (the full hook with seo_page_ prefix).
|
52 |
* A reconstructed value of the get_plugin_page_hook() function, which is only available after admin init.
|
@@ -159,7 +175,13 @@ class SU_Module {
|
|
159 |
*
|
160 |
* @return int The number that should be displayed.
|
161 |
*/
|
162 |
-
function get_menu_count() {
|
|
|
|
|
|
|
|
|
|
|
|
|
163 |
|
164 |
/**
|
165 |
* Whether or not the module will ever return a non-zero menu count.
|
@@ -275,6 +297,13 @@ class SU_Module {
|
|
275 |
*/
|
276 |
function activate() { }
|
277 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
278 |
/**
|
279 |
* Returns an array of default settings. The defaults will be saved in the database if the settings don't exist.
|
280 |
*
|
@@ -293,6 +322,17 @@ class SU_Module {
|
|
293 |
$this->children_admin_page_tabs_form();
|
294 |
}
|
295 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
296 |
/**
|
297 |
* Returns an array of custom contextual help dropdowns; internationalized titles are the array keys and contents are the array values.
|
298 |
*
|
@@ -309,20 +349,22 @@ class SU_Module {
|
|
309 |
$paths = array($this->plugin->get_translated_readme_path(), $this->plugin->get_readme_path());
|
310 |
|
311 |
foreach ($paths as $path) {
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
$
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
|
|
|
|
|
|
|
|
323 |
}
|
324 |
-
|
325 |
-
return $sections;
|
326 |
}
|
327 |
}
|
328 |
|
@@ -376,6 +418,17 @@ class SU_Module {
|
|
376 |
die(str_rot13('Zbqhyr ybnqrq sebz na rkgreany fbhepr!'));
|
377 |
}
|
378 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
379 |
/**
|
380 |
* Returns the absolute URL of the module's admin page.
|
381 |
*
|
@@ -433,7 +486,7 @@ class SU_Module {
|
|
433 |
function is_module_admin_page() {
|
434 |
if (is_admin()) {
|
435 |
global $plugin_page;
|
436 |
-
if (strcmp($plugin_page, $this->plugin->key_to_hook($this->
|
437 |
}
|
438 |
|
439 |
return false;
|
@@ -496,9 +549,14 @@ class SU_Module {
|
|
496 |
foreach ($this->modules as $key => $x_module) {
|
497 |
$module =& $this->modules[$key];
|
498 |
$child_tabs = $module->get_admin_page_tabs();
|
|
|
499 |
if (empty($child_tabs))
|
500 |
$child_tabs[$module->get_module_subtitle()] = array(&$module, 'admin_page_contents');
|
501 |
-
|
|
|
|
|
|
|
|
|
502 |
}
|
503 |
|
504 |
return $tabs;
|
@@ -524,7 +582,7 @@ class SU_Module {
|
|
524 |
if (count($tabs = $this->get_children_admin_page_tabs())) {
|
525 |
$this->admin_form_start(false, false);
|
526 |
$this->admin_page_tabs($tabs);
|
527 |
-
$this->admin_form_end(
|
528 |
}
|
529 |
}
|
530 |
|
@@ -645,6 +703,37 @@ class SU_Module {
|
|
645 |
$this->update_setting($key, 0);
|
646 |
}
|
647 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
648 |
/**
|
649 |
* Updates the value of more than one setting at a time.
|
650 |
*
|
@@ -684,9 +773,11 @@ class SU_Module {
|
|
684 |
* @uses admin_page_end()
|
685 |
*/
|
686 |
function admin_page() {
|
687 |
-
|
688 |
-
|
689 |
-
|
|
|
|
|
690 |
}
|
691 |
|
692 |
/**
|
@@ -723,14 +814,14 @@ class SU_Module {
|
|
723 |
}
|
724 |
|
725 |
/**
|
726 |
-
* Outputs an administration page subheader (an <
|
727 |
*
|
728 |
* @since 0.1
|
729 |
*
|
730 |
* @param string $title The text to output.
|
731 |
*/
|
732 |
function admin_subheader($title) {
|
733 |
-
echo "<
|
734 |
}
|
735 |
|
736 |
/**
|
@@ -774,7 +865,7 @@ class SU_Module {
|
|
774 |
|
775 |
if ($c > 1) {
|
776 |
$id = preg_replace('/[^a-z0-9]/', '', strtolower($title));
|
777 |
-
echo "<fieldset id='
|
778 |
}
|
779 |
|
780 |
if ($table) echo "<table class='form-table'>\n";
|
@@ -801,7 +892,7 @@ class SU_Module {
|
|
801 |
if ($table) echo "</table>";
|
802 |
|
803 |
if ($c > 1)
|
804 |
-
echo "</fieldset>\n";
|
805 |
}
|
806 |
|
807 |
if ($c > 1) {
|
@@ -836,7 +927,7 @@ class SU_Module {
|
|
836 |
* Adds the module's custom screen meta, if present.
|
837 |
*
|
838 |
* @since 0.9
|
839 |
-
* @uses
|
840 |
*/
|
841 |
function screen_meta_filter($screen_meta) {
|
842 |
|
@@ -849,7 +940,7 @@ class SU_Module {
|
|
849 |
$content = "<div class='su-help'>\n";
|
850 |
|
851 |
$header = sprintf(_c('%s %s|Dropdown Title', 'seo-ultimate'), $this->get_module_title(), $label);
|
852 |
-
$header = sustr::
|
853 |
|
854 |
$text = wptexturize(Markdown($text));
|
855 |
$text = str_replace('<a ', '<a target="_blank" ', $text);
|
@@ -905,11 +996,11 @@ class SU_Module {
|
|
905 |
* @param mixed $header The text of the subheader that should go right before the form. Optional.
|
906 |
* @param boolean $table Whether or not to start a form table.
|
907 |
*/
|
908 |
-
function admin_form_start($header = false, $table = true) {
|
909 |
-
$hook = $this->plugin->key_to_hook($this->
|
910 |
if ($header) $this->admin_subheader($header);
|
911 |
|
912 |
-
if (
|
913 |
if ($this->is_action('update')) $this->print_message('success', __('Settings updated.', 'seo-ultimate'));
|
914 |
echo "<form id='su-admin-form' method='post' action='?page=$hook'>\n";
|
915 |
settings_fields($hook);
|
@@ -929,11 +1020,11 @@ class SU_Module {
|
|
929 |
* @param string|false $button The label of the submit button.
|
930 |
* @param boolean $table Whether or not a form table should be ended.
|
931 |
*/
|
932 |
-
function admin_form_end($button =
|
933 |
-
if (
|
934 |
if ($table) echo "</table>\n";
|
935 |
|
936 |
-
if (
|
937 |
?>
|
938 |
<p class="submit">
|
939 |
<input type="submit" class="button-primary" value="<?php echo $button ?>" />
|
@@ -968,24 +1059,69 @@ class SU_Module {
|
|
968 |
*
|
969 |
* @param $headers Array of (CSS class => Internationalized column title)
|
970 |
*/
|
971 |
-
function admin_wftable_start($headers) {
|
972 |
-
echo
|
973 |
-
|
974 |
-
|
975 |
-
|
976 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
977 |
foreach ($headers as $class => $header) {
|
978 |
-
$class = is_numeric($class) ? '' : " class='
|
979 |
echo "\t\t<th scope='col'$class>$header</th>\n";
|
980 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
981 |
|
982 |
-
|
983 |
-
|
984 |
-
|
985 |
-
|
986 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
987 |
}
|
988 |
|
|
|
|
|
|
|
|
|
|
|
989 |
function admin_wftable_end() {
|
990 |
echo "\t</tbody>\n</table>\n";
|
991 |
}
|
@@ -1154,14 +1290,22 @@ STR;
|
|
1154 |
register_setting($this->get_module_key(), $name);
|
1155 |
$name = su_esc_attr($name);
|
1156 |
|
|
|
1157 |
foreach ($values as $value => $desc) {
|
1158 |
|
1159 |
$value = su_esc_attr($value);
|
1160 |
$id = "{$name}_{$value}";
|
1161 |
|
1162 |
-
|
1163 |
-
|
1164 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1165 |
}
|
1166 |
}
|
1167 |
|
@@ -1310,7 +1454,7 @@ STR;
|
|
1310 |
return (
|
1311 |
(
|
1312 |
( strcasecmp($_GET['page'], $this->plugin->key_to_hook($this->get_module_key())) == 0 ) //Is $this module being shown?
|
1313 |
-
|| ( strlen($this->get_parent_module()) && strcasecmp($_GET['page'], $this->plugin->key_to_hook($this->get_parent_module())) == 0)
|
1314 |
)
|
1315 |
&& ($_GET['action'] == $action || $_POST['action'] == $action) //Is this $action being executed?
|
1316 |
&& $this->nonce_validates($action, $object) //Is the nonce valid?
|
@@ -1375,7 +1519,7 @@ STR;
|
|
1375 |
$action = urlencode($action);
|
1376 |
if ($object) $objectqs = '&object='.urlencode($object); else $objectqs = '';
|
1377 |
|
1378 |
-
$hook = $this->plugin->key_to_hook($this->
|
1379 |
|
1380 |
//We don't need to escape ampersands since wp_nonce_url will do that for us
|
1381 |
return wp_nonce_url("?page=$hook&action=$action$objectqs",
|
@@ -1431,6 +1575,16 @@ STR;
|
|
1431 |
$this->messages = array();
|
1432 |
}
|
1433 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1434 |
/********** ADMIN POST META BOX FUNCTIONS **********/
|
1435 |
|
1436 |
/**
|
@@ -1492,12 +1646,12 @@ STR;
|
|
1492 |
$title = str_replace(' ', ' ', $title);
|
1493 |
|
1494 |
$html .= "<tr class='textbox'>\n<th scope='row'><label for='$id'>$title</label></th>\n"
|
1495 |
-
."<td><input name='$id' id='$id' type='text' value='$value' class='regular-text' /></td>\n</tr>\n";
|
1496 |
}
|
1497 |
|
1498 |
return $html;
|
1499 |
}
|
1500 |
-
|
1501 |
/**
|
1502 |
* Generates the HTML for a single post meta textbox.
|
1503 |
*
|
@@ -1533,7 +1687,7 @@ STR;
|
|
1533 |
$checked = ($this->get_postmeta($name) == 1);
|
1534 |
$name = "_su_".su_esc_attr($name);
|
1535 |
|
1536 |
-
$html .= "<label for='$name'><input name='$name' id='$name' type='checkbox' value='1'";
|
1537 |
if ($checked) $html .= " checked='checked'";
|
1538 |
$html .= " /> $desc</label><br />\n";
|
1539 |
}
|
40 |
var $module_url;
|
41 |
|
42 |
/**
|
43 |
+
* Stores the URL to the directory containing the module file. Has trailing slash.
|
44 |
*
|
45 |
* @since 1.5
|
46 |
* @var string
|
47 |
*/
|
48 |
var $module_dir_url;
|
49 |
|
50 |
+
/**
|
51 |
+
* Stores the module file's URL relative to the plugin directory.
|
52 |
+
*
|
53 |
+
* @since 2.1
|
54 |
+
* @var string
|
55 |
+
*/
|
56 |
+
var $module_rel_url;
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Stores the URL to the directory containing the module file, relative to the plugin directory. Has trailing slash.
|
60 |
+
*
|
61 |
+
* @since 2.1
|
62 |
+
* @var string
|
63 |
+
*/
|
64 |
+
var $module_dir_rel_url;
|
65 |
+
|
66 |
/**
|
67 |
* Stores the module's plugin page hook (the full hook with seo_page_ prefix).
|
68 |
* A reconstructed value of the get_plugin_page_hook() function, which is only available after admin init.
|
175 |
*
|
176 |
* @return int The number that should be displayed.
|
177 |
*/
|
178 |
+
function get_menu_count() {
|
179 |
+
$count = 0;
|
180 |
+
foreach ($this->modules as $key => $module) {
|
181 |
+
$count += $this->modules[$key]->get_menu_count();
|
182 |
+
}
|
183 |
+
return $count;
|
184 |
+
}
|
185 |
|
186 |
/**
|
187 |
* Whether or not the module will ever return a non-zero menu count.
|
297 |
*/
|
298 |
function activate() { }
|
299 |
|
300 |
+
/**
|
301 |
+
* Called when SEO Ultimate has just been upgraded to a new version.
|
302 |
+
*
|
303 |
+
* @since 2.1
|
304 |
+
*/
|
305 |
+
function upgrade() { }
|
306 |
+
|
307 |
/**
|
308 |
* Returns an array of default settings. The defaults will be saved in the database if the settings don't exist.
|
309 |
*
|
322 |
$this->children_admin_page_tabs_form();
|
323 |
}
|
324 |
|
325 |
+
/**
|
326 |
+
* Returns a list of possible admin table columns that should be registered in "Screen Options"
|
327 |
+
*
|
328 |
+
* @since 2.1
|
329 |
+
*
|
330 |
+
* @return array
|
331 |
+
*/
|
332 |
+
function get_admin_table_columns() {
|
333 |
+
return array();
|
334 |
+
}
|
335 |
+
|
336 |
/**
|
337 |
* Returns an array of custom contextual help dropdowns; internationalized titles are the array keys and contents are the array values.
|
338 |
*
|
349 |
$paths = array($this->plugin->get_translated_readme_path(), $this->plugin->get_readme_path());
|
350 |
|
351 |
foreach ($paths as $path) {
|
352 |
+
if (is_readable($path)) {
|
353 |
+
$readme = file_get_contents($path);
|
354 |
+
$sections = sumd::get_sections(sumd::get_section($readme, $this->get_module_title()));
|
355 |
+
if (count($sections)) {
|
356 |
+
|
357 |
+
if (sustr::has($path, '/translations/') && preg_match("|\nStable tag: ([a-zA-Z0-9. ]+)|i", $readme, $matches)) {
|
358 |
+
$version = $matches[1];
|
359 |
+
if (version_compare($version, SU_VERSION, '<'))
|
360 |
+
$sections = suarr::aprintf(false, '%s<p><em>'
|
361 |
+
. __('(Note: This translated documentation was designed for an older version of SEO Ultimate and may be outdated.)', 'seo-ultimate')
|
362 |
+
. '</em></p>'
|
363 |
+
, $sections);
|
364 |
+
}
|
365 |
+
|
366 |
+
return $sections;
|
367 |
}
|
|
|
|
|
368 |
}
|
369 |
}
|
370 |
|
418 |
die(str_rot13('Zbqhyr ybnqrq sebz na rkgreany fbhepr!'));
|
419 |
}
|
420 |
|
421 |
+
/**
|
422 |
+
* Returns the key of the parent module if there is one; if not, the key of the current module.
|
423 |
+
*
|
424 |
+
* @since 2.1
|
425 |
+
*
|
426 |
+
* @return string
|
427 |
+
*/
|
428 |
+
function get_module_or_parent_key() {
|
429 |
+
return strlen($p = $this->get_parent_module()) ? $p : $this->get_module_key();
|
430 |
+
}
|
431 |
+
|
432 |
/**
|
433 |
* Returns the absolute URL of the module's admin page.
|
434 |
*
|
486 |
function is_module_admin_page() {
|
487 |
if (is_admin()) {
|
488 |
global $plugin_page;
|
489 |
+
if (strcmp($plugin_page, $this->plugin->key_to_hook($this->get_module_or_parent_key())) == 0) return true;
|
490 |
}
|
491 |
|
492 |
return false;
|
549 |
foreach ($this->modules as $key => $x_module) {
|
550 |
$module =& $this->modules[$key];
|
551 |
$child_tabs = $module->get_admin_page_tabs();
|
552 |
+
|
553 |
if (empty($child_tabs))
|
554 |
$child_tabs[$module->get_module_subtitle()] = array(&$module, 'admin_page_contents');
|
555 |
+
|
556 |
+
foreach ($child_tabs as $title => $function) {
|
557 |
+
if (!is_array($function)) $function = array(&$module, $function);
|
558 |
+
$tabs[$title] = $function;
|
559 |
+
}
|
560 |
}
|
561 |
|
562 |
return $tabs;
|
582 |
if (count($tabs = $this->get_children_admin_page_tabs())) {
|
583 |
$this->admin_form_start(false, false);
|
584 |
$this->admin_page_tabs($tabs);
|
585 |
+
$this->admin_form_end(null, false);
|
586 |
}
|
587 |
}
|
588 |
|
703 |
$this->update_setting($key, 0);
|
704 |
}
|
705 |
|
706 |
+
/**
|
707 |
+
* Gets a setting's value, deletes the setting, and returns the value.
|
708 |
+
*
|
709 |
+
* @since 2.1
|
710 |
+
* @uses get_settings_key()
|
711 |
+
*
|
712 |
+
* @param string $key The name of the setting to retrieve/delete.
|
713 |
+
* @param mixed $default What should be returned if the setting does not exist. Optional.
|
714 |
+
* @param string|null $module The module to which the setting belongs. Defaults to the current module's settings key. Optional.
|
715 |
+
* @return mixed The value of the setting, or the $default variable.
|
716 |
+
*/
|
717 |
+
function flush_setting($key, $default=null, $module=null) {
|
718 |
+
$setting = $this->get_setting($key, $default, $module); //We need to retrieve the setting before deleting it
|
719 |
+
$this->delete_setting($key, $module);
|
720 |
+
return $setting;
|
721 |
+
}
|
722 |
+
|
723 |
+
/**
|
724 |
+
* Deletes a module setting.
|
725 |
+
*
|
726 |
+
* @since 2.1
|
727 |
+
* @uses get_settings_key()
|
728 |
+
*
|
729 |
+
* @param string $key The name of the setting to delete.
|
730 |
+
* @param string|null $module The module to which the setting belongs. Defaults to the current module's settings key. Optional.
|
731 |
+
*/
|
732 |
+
function delete_setting($key, $module=null) {
|
733 |
+
if (!$module) $module = $this->get_settings_key();
|
734 |
+
unset($this->plugin->dbdata['settings'][$module][$key]);
|
735 |
+
}
|
736 |
+
|
737 |
/**
|
738 |
* Updates the value of more than one setting at a time.
|
739 |
*
|
773 |
* @uses admin_page_end()
|
774 |
*/
|
775 |
function admin_page() {
|
776 |
+
if (!apply_filters('su_custom_admin_page-'.$this->get_module_key(), false)) {
|
777 |
+
$this->admin_page_start();
|
778 |
+
$this->admin_page_contents();
|
779 |
+
$this->admin_page_end();
|
780 |
+
}
|
781 |
}
|
782 |
|
783 |
/**
|
814 |
}
|
815 |
|
816 |
/**
|
817 |
+
* Outputs an administration page subheader (an <h4> tag).
|
818 |
*
|
819 |
* @since 0.1
|
820 |
*
|
821 |
* @param string $title The text to output.
|
822 |
*/
|
823 |
function admin_subheader($title) {
|
824 |
+
echo "<h4 class='su-subheader'>$title</h4>\n";
|
825 |
}
|
826 |
|
827 |
/**
|
865 |
|
866 |
if ($c > 1) {
|
867 |
$id = preg_replace('/[^a-z0-9]/', '', strtolower($title));
|
868 |
+
echo "<fieldset id='su-$id'>\n<h3>$title</h3>\n<div class='su-tab-contents'>\n";
|
869 |
}
|
870 |
|
871 |
if ($table) echo "<table class='form-table'>\n";
|
892 |
if ($table) echo "</table>";
|
893 |
|
894 |
if ($c > 1)
|
895 |
+
echo "</div>\n</fieldset>\n";
|
896 |
}
|
897 |
|
898 |
if ($c > 1) {
|
927 |
* Adds the module's custom screen meta, if present.
|
928 |
*
|
929 |
* @since 0.9
|
930 |
+
* @uses get_admin_dropdowns()
|
931 |
*/
|
932 |
function screen_meta_filter($screen_meta) {
|
933 |
|
940 |
$content = "<div class='su-help'>\n";
|
941 |
|
942 |
$header = sprintf(_c('%s %s|Dropdown Title', 'seo-ultimate'), $this->get_module_title(), $label);
|
943 |
+
$header = sustr::remove_double_words($header);
|
944 |
|
945 |
$text = wptexturize(Markdown($text));
|
946 |
$text = str_replace('<a ', '<a target="_blank" ', $text);
|
996 |
* @param mixed $header The text of the subheader that should go right before the form. Optional.
|
997 |
* @param boolean $table Whether or not to start a form table.
|
998 |
*/
|
999 |
+
function admin_form_start($header = false, $table = true, $form = true) {
|
1000 |
+
$hook = $this->plugin->key_to_hook($this->get_module_or_parent_key());
|
1001 |
if ($header) $this->admin_subheader($header);
|
1002 |
|
1003 |
+
if ($form) {
|
1004 |
if ($this->is_action('update')) $this->print_message('success', __('Settings updated.', 'seo-ultimate'));
|
1005 |
echo "<form id='su-admin-form' method='post' action='?page=$hook'>\n";
|
1006 |
settings_fields($hook);
|
1020 |
* @param string|false $button The label of the submit button.
|
1021 |
* @param boolean $table Whether or not a form table should be ended.
|
1022 |
*/
|
1023 |
+
function admin_form_end($button = null, $table = true) {
|
1024 |
+
if ($button === null) $button = __('Save Changes'); //This string is used in normal WP, so we don't need a textdomain
|
1025 |
if ($table) echo "</table>\n";
|
1026 |
|
1027 |
+
if ($button !== false) {
|
1028 |
?>
|
1029 |
<p class="submit">
|
1030 |
<input type="submit" class="button-primary" value="<?php echo $button ?>" />
|
1059 |
*
|
1060 |
* @param $headers Array of (CSS class => Internationalized column title)
|
1061 |
*/
|
1062 |
+
function admin_wftable_start($headers = false) {
|
1063 |
+
echo "\n<table class='widefat' cellspacing='0'>\n";
|
1064 |
+
if ($headers)
|
1065 |
+
$this->table_column_headers($headers);
|
1066 |
+
else {
|
1067 |
+
echo "\t<thead><tr>\n";
|
1068 |
+
print_column_headers($this->plugin_page_hook);
|
1069 |
+
echo "\t</tr></thead>\n";
|
1070 |
+
echo "\t<tfoot><tr>\n";
|
1071 |
+
print_column_headers($this->plugin_page_hook);
|
1072 |
+
echo "\t</tr></tfoot>\n";
|
1073 |
+
}
|
1074 |
+
echo "\t<tbody>\n";
|
1075 |
+
}
|
1076 |
+
|
1077 |
+
/**
|
1078 |
+
* Outputs a <tr> of <th scope="col"></th> tags based on an array of column headers.
|
1079 |
+
*
|
1080 |
+
* @since 2.1
|
1081 |
+
*
|
1082 |
+
* @param $headers Array of (CSS class => Internationalized column title)
|
1083 |
+
*/
|
1084 |
+
function table_column_headers($headers) {
|
1085 |
+
echo "\t<thead><tr>\n";
|
1086 |
+
$mk = $this->get_module_key();
|
1087 |
foreach ($headers as $class => $header) {
|
1088 |
+
$class = is_numeric($class) ? '' : " class='su-$mk-$class'";
|
1089 |
echo "\t\t<th scope='col'$class>$header</th>\n";
|
1090 |
}
|
1091 |
+
echo "\t</tr></thead>\n";
|
1092 |
+
}
|
1093 |
+
|
1094 |
+
/**
|
1095 |
+
* Outputs <td> tags based on an array of cell data.
|
1096 |
+
*
|
1097 |
+
* @since 2.1
|
1098 |
+
*
|
1099 |
+
* @param $headers Array of (CSS class => Cell data)
|
1100 |
+
*/
|
1101 |
+
function table_cells($cells) {
|
1102 |
|
1103 |
+
if (count($this->get_admin_table_columns())) {
|
1104 |
+
$columns = get_column_headers($this->plugin_page_hook);
|
1105 |
+
$hidden = get_hidden_columns($this->plugin_page_hook);
|
1106 |
+
foreach ( $columns as $column_name => $column_display_name ) {
|
1107 |
+
$class = "class=\"$column_name column-$column_name\"";
|
1108 |
+
$style = in_array($column_name, $hidden) ? ' style="display:none;"' : '';
|
1109 |
+
echo "\t\t<td $class$style>".$cells[$column_name]."</td>\n";
|
1110 |
+
}
|
1111 |
+
} elseif (is_array($cells) && count($cells)) {
|
1112 |
+
$mk = $this->get_module_key();
|
1113 |
+
foreach ($cells as $class => $content) {
|
1114 |
+
$class = is_numeric($class) ? '' : " class='su-$mk-$class'";
|
1115 |
+
echo "\t\t<td$class>$content</td>\n";
|
1116 |
+
}
|
1117 |
+
}
|
1118 |
}
|
1119 |
|
1120 |
+
/**
|
1121 |
+
* Ends a "widefat" WordPress table.
|
1122 |
+
*
|
1123 |
+
* @since 1.8
|
1124 |
+
*/
|
1125 |
function admin_wftable_end() {
|
1126 |
echo "\t</tbody>\n</table>\n";
|
1127 |
}
|
1290 |
register_setting($this->get_module_key(), $name);
|
1291 |
$name = su_esc_attr($name);
|
1292 |
|
1293 |
+
$first = true;
|
1294 |
foreach ($values as $value => $desc) {
|
1295 |
|
1296 |
$value = su_esc_attr($value);
|
1297 |
$id = "{$name}_{$value}";
|
1298 |
|
1299 |
+
$current = (strcmp($this->get_setting($name), $value) == 0);
|
1300 |
+
$class = $first ? 'first' : ''; $first = false;
|
1301 |
+
if ($current) $class .= ' current-setting';
|
1302 |
+
$class = trim($class);
|
1303 |
+
if ($class) $class = " class='$class'";
|
1304 |
+
echo "<label for='$id'$class><input name='$name' id='$id' type='radio' value='$value'";
|
1305 |
+
if ($current) echo " checked='checked'";
|
1306 |
+
echo " /> $desc";
|
1307 |
+
if (!sustr::has($desc, '</label>')) echo '</label><br />';
|
1308 |
+
echo "\n";
|
1309 |
}
|
1310 |
}
|
1311 |
|
1454 |
return (
|
1455 |
(
|
1456 |
( strcasecmp($_GET['page'], $this->plugin->key_to_hook($this->get_module_key())) == 0 ) //Is $this module being shown?
|
1457 |
+
|| ( strlen($this->get_parent_module()) && strcasecmp($_GET['page'], $this->plugin->key_to_hook($this->get_parent_module())) == 0) //Is the parent module being shown?
|
1458 |
)
|
1459 |
&& ($_GET['action'] == $action || $_POST['action'] == $action) //Is this $action being executed?
|
1460 |
&& $this->nonce_validates($action, $object) //Is the nonce valid?
|
1519 |
$action = urlencode($action);
|
1520 |
if ($object) $objectqs = '&object='.urlencode($object); else $objectqs = '';
|
1521 |
|
1522 |
+
$hook = $this->plugin->key_to_hook($this->get_module_or_parent_key());
|
1523 |
|
1524 |
//We don't need to escape ampersands since wp_nonce_url will do that for us
|
1525 |
return wp_nonce_url("?page=$hook&action=$action$objectqs",
|
1575 |
$this->messages = array();
|
1576 |
}
|
1577 |
|
1578 |
+
/**
|
1579 |
+
* Prints a mini-style message.
|
1580 |
+
*
|
1581 |
+
* @since 2.1
|
1582 |
+
*/
|
1583 |
+
function print_mini_message($type, $message) {
|
1584 |
+
$type = su_esc_attr($type);
|
1585 |
+
echo "<div class='su-status su-$type'>$message</div>";
|
1586 |
+
}
|
1587 |
+
|
1588 |
/********** ADMIN POST META BOX FUNCTIONS **********/
|
1589 |
|
1590 |
/**
|
1646 |
$title = str_replace(' ', ' ', $title);
|
1647 |
|
1648 |
$html .= "<tr class='textbox'>\n<th scope='row'><label for='$id'>$title</label></th>\n"
|
1649 |
+
."<td><input name='$id' id='$id' type='text' value='$value' class='regular-text' tabindex='2' /></td>\n</tr>\n";
|
1650 |
}
|
1651 |
|
1652 |
return $html;
|
1653 |
}
|
1654 |
+
|
1655 |
/**
|
1656 |
* Generates the HTML for a single post meta textbox.
|
1657 |
*
|
1687 |
$checked = ($this->get_postmeta($name) == 1);
|
1688 |
$name = "_su_".su_esc_attr($name);
|
1689 |
|
1690 |
+
$html .= "<label for='$name'><input name='$name' id='$name' type='checkbox' tabindex='2' value='1'";
|
1691 |
if ($checked) $html .= " checked='checked'";
|
1692 |
$html .= " /> $desc</label><br />\n";
|
1693 |
}
|
modules/competition-queries/competition-queries.js
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
function su_competition_queries_show_step2(type, showminimal) {
|
2 |
+
document.getElementById('methodtype').innerHTML=type;
|
3 |
+
|
4 |
+
if (showminimal)
|
5 |
+
document.getElementById('minimal-checkbox').style.visibility='visible';
|
6 |
+
else
|
7 |
+
document.getElementById('minimal-checkbox').style.visibility='hidden';
|
8 |
+
}
|
modules/competition-queries/competition-queries.php
CHANGED
@@ -2,7 +2,6 @@
|
|
2 |
/**
|
3 |
* Competition Researcher Module
|
4 |
*
|
5 |
-
* @version 1.0.2
|
6 |
* @since 1.2
|
7 |
*/
|
8 |
|
@@ -77,19 +76,5 @@ class SU_CompetitionQueries extends SU_Module {
|
|
77 |
}
|
78 |
}
|
79 |
|
80 |
-
} elseif (strcmp($_GET['js'], 'admin') == 0) {
|
81 |
-
header('Content-type: text/javascript');
|
82 |
-
?>
|
83 |
-
|
84 |
-
function su_competition_queries_show_step2(type, showminimal) {
|
85 |
-
document.getElementById('methodtype').innerHTML=type;
|
86 |
-
|
87 |
-
if (showminimal)
|
88 |
-
document.getElementById('minimal-checkbox').style.visibility='visible';
|
89 |
-
else
|
90 |
-
document.getElementById('minimal-checkbox').style.visibility='hidden';
|
91 |
-
}
|
92 |
-
|
93 |
-
<?php
|
94 |
}
|
95 |
?>
|
2 |
/**
|
3 |
* Competition Researcher Module
|
4 |
*
|
|
|
5 |
* @since 1.2
|
6 |
*/
|
7 |
|
76 |
}
|
77 |
}
|
78 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
}
|
80 |
?>
|
modules/competition-queries/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
header('Status: 403 Forbidden');
|
3 |
+
header('HTTP/1.1 403 Forbidden');
|
4 |
+
?>
|
modules/files/files.php
CHANGED
@@ -2,7 +2,6 @@
|
|
2 |
/**
|
3 |
* File Editor Module
|
4 |
*
|
5 |
-
* @version 1.0.3
|
6 |
* @since 0.8
|
7 |
*/
|
8 |
|
@@ -134,37 +133,6 @@ class SU_Files extends SU_Module {
|
|
134 |
));
|
135 |
}
|
136 |
}
|
137 |
-
|
138 |
-
function admin_dropdowns() {
|
139 |
-
return array(
|
140 |
-
'overview' => __('Overview', 'seo-ultimate')
|
141 |
-
, 'faq' => __('FAQ', 'seo-ultimate')
|
142 |
-
);
|
143 |
-
}
|
144 |
-
|
145 |
-
function admin_dropdown_overview() {
|
146 |
-
return '<p>'.__('The File Editor module lets you edit system files that are of SEO value. Edit the files as desired, then click Save Changes. If you create a custom robots.txt file, be sure to enable it with the checkbox.', 'seo-ultimate').'</p>';
|
147 |
-
}
|
148 |
-
|
149 |
-
function admin_dropdown_faq() {
|
150 |
-
return __("
|
151 |
-
<h6>Why do I get a “500 Server Error” after using the File Editor?</h6>
|
152 |
-
|
153 |
-
<p>You may have inserted code into your .htaccess file that your web server can't understand. As the File Editor warns, incorrectly editing your .htaccess file can disable your entire website in this way. To restore your site, you'll need to use an FTP client (or your web host's File Manager) to edit or rename your .htaccess file. If you need help, please contact your web host.</p>
|
154 |
-
|
155 |
-
<h6>Will my robots.txt edits remain if I disable the File Editor?</h6>
|
156 |
-
|
157 |
-
<p>No. On a WordPress blog, the robots.txt file is dynamically generated just like your posts and Pages. If you disable the File Editor module or the entire SEO Ultimate plugin, the File Editor won't be able to insert your custom code into the robots.txt file anymore.</p>
|
158 |
-
|
159 |
-
<h6>Will my .htaccess edits remain if I disable the File Editor?</h6>
|
160 |
-
|
161 |
-
<p>Yes. The .htaccess file is static. Your edits will remain even if you disable SEO Ultimate or its File Editor module.</p>
|
162 |
-
|
163 |
-
<h6>Where did my .htaccess edits go?</h6>
|
164 |
-
|
165 |
-
<p>The .htaccess file is static, so SEO Ultimate doesn't have total control over it. It's possible that WordPress, another plugin, or other software may overwrite your .htaccess file. If you have a backup of your blog's files, you can try recovering your edits from there.</p>
|
166 |
-
", 'seo-ultimate');
|
167 |
-
}
|
168 |
}
|
169 |
|
170 |
}
|
2 |
/**
|
3 |
* File Editor Module
|
4 |
*
|
|
|
5 |
* @since 0.8
|
6 |
*/
|
7 |
|
133 |
));
|
134 |
}
|
135 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
136 |
}
|
137 |
|
138 |
}
|
modules/files/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
header('Status: 403 Forbidden');
|
3 |
+
header('HTTP/1.1 403 Forbidden');
|
4 |
+
?>
|
modules/import-aiosp/import-aiosp.css
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#su-import-aiosp tr.su-admin-form-checkbox td,
|
2 |
+
#su-import-aiosp tr.su-admin-form-textblock td {
|
3 |
+
border-top: 3px solid #ccc;
|
4 |
+
padding-top: 1em;
|
5 |
+
}
|
6 |
+
|
7 |
+
#su-import-aiosp table.form-table {
|
8 |
+
border-bottom: 3px solid #ccc;
|
9 |
+
}
|
10 |
+
|
11 |
+
#su-import-aiosp td table tr.su-admin-form-checkbox td,
|
12 |
+
#su-import-aiosp td table tr.su-admin-form-textblock td {
|
13 |
+
border-top: 0 none;
|
14 |
+
padding-top: 0;
|
15 |
+
padding-bottom: 0;
|
16 |
+
}
|
modules/import-aiosp/import-aiosp.php
CHANGED
@@ -2,7 +2,6 @@
|
|
2 |
/**
|
3 |
* AISOP Import Module
|
4 |
*
|
5 |
-
* @version 1.0
|
6 |
* @since 1.6
|
7 |
*/
|
8 |
|
@@ -148,27 +147,5 @@ class SU_ImportAIOSP extends SU_ImportModule {
|
|
148 |
}
|
149 |
}
|
150 |
|
151 |
-
} elseif (strcmp($_GET['css'], 'admin') == 0) {
|
152 |
-
header('Content-type: text/css');
|
153 |
-
?>
|
154 |
-
|
155 |
-
#su-import-aiosp tr.su-admin-form-checkbox td,
|
156 |
-
#su-import-aiosp tr.su-admin-form-textblock td {
|
157 |
-
border-top: 3px solid #ccc;
|
158 |
-
padding-top: 1em;
|
159 |
-
}
|
160 |
-
|
161 |
-
#su-import-aiosp table.form-table {
|
162 |
-
border-bottom: 3px solid #ccc;
|
163 |
-
}
|
164 |
-
|
165 |
-
#su-import-aiosp td table tr.su-admin-form-checkbox td,
|
166 |
-
#su-import-aiosp td table tr.su-admin-form-textblock td {
|
167 |
-
border-top: 0 none;
|
168 |
-
padding-top: 0;
|
169 |
-
padding-bottom: 0;
|
170 |
-
}
|
171 |
-
|
172 |
-
<?php
|
173 |
}
|
174 |
?>
|
2 |
/**
|
3 |
* AISOP Import Module
|
4 |
*
|
|
|
5 |
* @since 1.6
|
6 |
*/
|
7 |
|
147 |
}
|
148 |
}
|
149 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
150 |
}
|
151 |
?>
|
modules/import-aiosp/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
header('Status: 403 Forbidden');
|
3 |
+
header('HTTP/1.1 403 Forbidden');
|
4 |
+
?>
|
modules/linkbox/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
header('Status: 403 Forbidden');
|
3 |
+
header('HTTP/1.1 403 Forbidden');
|
4 |
+
?>
|
modules/linkbox/linkbox.php
CHANGED
@@ -2,7 +2,6 @@
|
|
2 |
/**
|
3 |
* Linkbox Inserter Module
|
4 |
*
|
5 |
-
* @version 1.0.4
|
6 |
* @since 0.6
|
7 |
*/
|
8 |
|
2 |
/**
|
3 |
* Linkbox Inserter Module
|
4 |
*
|
|
|
5 |
* @since 0.6
|
6 |
*/
|
7 |
|
modules/meta/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
header('Status: 403 Forbidden');
|
3 |
+
header('HTTP/1.1 403 Forbidden');
|
4 |
+
?>
|
modules/meta/meta-settings.php
CHANGED
@@ -2,14 +2,13 @@
|
|
2 |
/**
|
3 |
* Meta Editor Settings Module
|
4 |
*
|
5 |
-
* @version 1.0
|
6 |
* @since 1.5
|
7 |
*/
|
8 |
|
9 |
if (class_exists('SU_Module')) {
|
10 |
|
11 |
class SU_MetaSettings extends SU_Module {
|
12 |
-
|
13 |
function get_parent_module() { return 'meta'; }
|
14 |
function is_independent_module() { return false; }
|
15 |
|
2 |
/**
|
3 |
* Meta Editor Settings Module
|
4 |
*
|
|
|
5 |
* @since 1.5
|
6 |
*/
|
7 |
|
8 |
if (class_exists('SU_Module')) {
|
9 |
|
10 |
class SU_MetaSettings extends SU_Module {
|
11 |
+
|
12 |
function get_parent_module() { return 'meta'; }
|
13 |
function is_independent_module() { return false; }
|
14 |
|
modules/meta/meta.php
CHANGED
@@ -2,7 +2,6 @@
|
|
2 |
/**
|
3 |
* Meta Editor Module
|
4 |
*
|
5 |
-
* @version 1.0.7
|
6 |
* @since 0.3
|
7 |
*/
|
8 |
|
@@ -13,8 +12,6 @@ class SU_Meta extends SU_Module {
|
|
13 |
function get_module_title() { return __('Meta Editor', 'seo-ultimate'); }
|
14 |
|
15 |
function init() {
|
16 |
-
$this->admin_page_tabs_init();
|
17 |
-
|
18 |
add_filter('su_meta_robots', array(&$this, 'meta_robots'));
|
19 |
add_action('su_head', array(&$this, 'head_tag_output'));
|
20 |
add_filter('su_postmeta_help', array(&$this, 'postmeta_help'), 20);
|
@@ -98,7 +95,7 @@ class SU_Meta extends SU_Module {
|
|
98 |
|
99 |
$fields['20|description|keywords'] =
|
100 |
"<tr class='textarea'>\n<th scope='row'><label for='$id'>".__("Description:", 'seo-ultimate')."</label></th>\n"
|
101 |
-
. "<td><textarea name='$id' id='$id' type='text' class='regular-text' cols='60' rows='3'"
|
102 |
. " onkeyup=\"javascript:document.getElementById('su_meta_description_charcount').innerHTML = document.getElementById('_su_description').value.length\">$value</textarea>"
|
103 |
. "<br />".sprintf(__("You’ve entered %s characters. Most search engines use up to 160.", 'seo-ultimate'), "<strong id='su_meta_description_charcount'>".strlen($value)."</strong>")
|
104 |
. "</td>\n</tr>\n"
|
2 |
/**
|
3 |
* Meta Editor Module
|
4 |
*
|
|
|
5 |
* @since 0.3
|
6 |
*/
|
7 |
|
12 |
function get_module_title() { return __('Meta Editor', 'seo-ultimate'); }
|
13 |
|
14 |
function init() {
|
|
|
|
|
15 |
add_filter('su_meta_robots', array(&$this, 'meta_robots'));
|
16 |
add_action('su_head', array(&$this, 'head_tag_output'));
|
17 |
add_filter('su_postmeta_help', array(&$this, 'postmeta_help'), 20);
|
95 |
|
96 |
$fields['20|description|keywords'] =
|
97 |
"<tr class='textarea'>\n<th scope='row'><label for='$id'>".__("Description:", 'seo-ultimate')."</label></th>\n"
|
98 |
+
. "<td><textarea name='$id' id='$id' type='text' class='regular-text' cols='60' rows='3' tabindex='2'"
|
99 |
. " onkeyup=\"javascript:document.getElementById('su_meta_description_charcount').innerHTML = document.getElementById('_su_description').value.length\">$value</textarea>"
|
100 |
. "<br />".sprintf(__("You’ve entered %s characters. Most search engines use up to 160.", 'seo-ultimate'), "<strong id='su_meta_description_charcount'>".strlen($value)."</strong>")
|
101 |
. "</td>\n</tr>\n"
|
modules/modules.css
CHANGED
@@ -4,7 +4,12 @@ div.su-module {
|
|
4 |
padding-bottom: 1em;
|
5 |
}
|
6 |
|
7 |
-
div.su-module
|
|
|
|
|
|
|
|
|
|
|
8 |
margin-top: 3em;
|
9 |
padding-top: 1em;
|
10 |
border-top: 3px solid #ccc;
|
@@ -25,8 +30,10 @@ div.su-module table.widefat td {
|
|
25 |
padding-right: 2em;
|
26 |
}
|
27 |
|
28 |
-
div.su-module table.widefat
|
29 |
-
|
|
|
|
|
30 |
}
|
31 |
|
32 |
div.su-module .form-table .regular-text {
|
@@ -102,7 +109,7 @@ div.su-module .su-tabs ul.ui-tabs-nav li a {
|
|
102 |
display: block;
|
103 |
float: left;
|
104 |
line-height: 28px;
|
105 |
-
padding: 1px
|
106 |
position: relative;
|
107 |
text-decoration: none;
|
108 |
}
|
@@ -118,7 +125,15 @@ div.su-module .su-tabs ul.ui-tabs-nav li.ui-tabs-selected a {
|
|
118 |
border-bottom-color: #f9f9f9;
|
119 |
color: #333333;
|
120 |
font-weight: normal;
|
121 |
-
padding: 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
122 |
}
|
123 |
|
124 |
/* IMPORT MODULES */
|
4 |
padding-bottom: 1em;
|
5 |
}
|
6 |
|
7 |
+
div.su-module h2 {
|
8 |
+
margin-bottom: 0.5em;
|
9 |
+
}
|
10 |
+
|
11 |
+
div.su-module h4.su-subheader {
|
12 |
+
font-size: 1.17em;
|
13 |
margin-top: 3em;
|
14 |
padding-top: 1em;
|
15 |
border-top: 3px solid #ccc;
|
30 |
padding-right: 2em;
|
31 |
}
|
32 |
|
33 |
+
div.su-module table.widefat td ul {
|
34 |
+
list-style-type: disc;
|
35 |
+
margin-left: 1em;
|
36 |
+
padding-left: 1em;
|
37 |
}
|
38 |
|
39 |
div.su-module .form-table .regular-text {
|
109 |
display: block;
|
110 |
float: left;
|
111 |
line-height: 28px;
|
112 |
+
padding: 1px 10px 0;
|
113 |
position: relative;
|
114 |
text-decoration: none;
|
115 |
}
|
125 |
border-bottom-color: #f9f9f9;
|
126 |
color: #333333;
|
127 |
font-weight: normal;
|
128 |
+
padding: 0 9px;
|
129 |
+
}
|
130 |
+
|
131 |
+
div.su-module .su-tabs fieldset {
|
132 |
+
clear: left;
|
133 |
+
}
|
134 |
+
|
135 |
+
div.su-module .su-tabs .su-tab-contents {
|
136 |
+
margin-top: 1em;
|
137 |
}
|
138 |
|
139 |
/* IMPORT MODULES */
|
modules/modules.js
CHANGED
@@ -10,4 +10,15 @@ function su_textbox_value_changed(e, d, l) {
|
|
10 |
document.getElementById(l).className='hidden';
|
11 |
else
|
12 |
document.getElementById(l).className='';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
}
|
10 |
document.getElementById(l).className='hidden';
|
11 |
else
|
12 |
document.getElementById(l).className='';
|
13 |
+
}
|
14 |
+
|
15 |
+
function su_toggle_blind(id) {
|
16 |
+
if (document.getElementById(id)) {
|
17 |
+
if (document.getElementById(id).style.display=='none')
|
18 |
+
Effect.BlindDown(id);
|
19 |
+
else
|
20 |
+
Effect.BlindUp(id);
|
21 |
+
}
|
22 |
+
|
23 |
+
return false;
|
24 |
}
|
modules/modules/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
header('Status: 403 Forbidden');
|
3 |
+
header('HTTP/1.1 403 Forbidden');
|
4 |
+
?>
|
modules/modules/modules.css
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#su-modules td.module-status {
|
2 |
+
padding-right: 2em;
|
3 |
+
}
|
4 |
+
|
5 |
+
#su-modules td.module-status input {
|
6 |
+
display: none;
|
7 |
+
}
|
8 |
+
|
9 |
+
#su-modules td.module-status a {
|
10 |
+
float: left;
|
11 |
+
display: block;
|
12 |
+
border: 1px solid white;
|
13 |
+
padding: 0.3em 0.5em;
|
14 |
+
color: #999;
|
15 |
+
margin-right: 0.2em;
|
16 |
+
}
|
17 |
+
|
18 |
+
#su-modules td.module-status a:hover {
|
19 |
+
border-color: #ccc #666 #666 #ccc;
|
20 |
+
}
|
21 |
+
|
22 |
+
#su-modules td.module-status a.current {
|
23 |
+
border-color: #666 #ccc #ccc #666;
|
24 |
+
}
|
25 |
+
|
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; }
|
modules/modules/modules.js
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
function set_module_status(key, input_value, a_obj) {
|
2 |
+
var td_id = "module-status-"+key;
|
3 |
+
var input_id = "su-"+key+"-module-status";
|
4 |
+
|
5 |
+
jQuery("td#"+td_id+" a").removeClass("current");
|
6 |
+
document.getElementById(input_id).value = input_value;
|
7 |
+
a_obj.className += " current";
|
8 |
+
}
|
modules/modules/modules.php
CHANGED
@@ -2,7 +2,6 @@
|
|
2 |
/**
|
3 |
* Module Manager Module
|
4 |
*
|
5 |
-
* @version 1.2.1
|
6 |
* @since 0.7
|
7 |
*/
|
8 |
|
@@ -135,58 +134,9 @@ STR;
|
|
135 |
|
136 |
echo "\t</tbody>\n</table>\n";
|
137 |
|
138 |
-
$this->admin_form_end(
|
139 |
}
|
140 |
}
|
141 |
|
142 |
-
} elseif ($_GET['css'] == 'admin') {
|
143 |
-
header('Content-type: text/css');
|
144 |
-
?>
|
145 |
-
|
146 |
-
#su-modules td.module-status {
|
147 |
-
padding-right: 2em;
|
148 |
-
}
|
149 |
-
|
150 |
-
#su-modules td.module-status input {
|
151 |
-
display: none;
|
152 |
-
}
|
153 |
-
|
154 |
-
#su-modules td.module-status a {
|
155 |
-
float: left;
|
156 |
-
display: block;
|
157 |
-
border: 1px solid white;
|
158 |
-
padding: 0.3em 0.5em;
|
159 |
-
color: #999;
|
160 |
-
margin-right: 0.2em;
|
161 |
-
}
|
162 |
-
|
163 |
-
#su-modules td.module-status a:hover {
|
164 |
-
border-color: #ccc #666 #666 #ccc;
|
165 |
-
}
|
166 |
-
|
167 |
-
#su-modules td.module-status a.current {
|
168 |
-
border-color: #666 #ccc #ccc #666;
|
169 |
-
}
|
170 |
-
|
171 |
-
#su-modules td.module-status .status-10 a.current { color: green; }
|
172 |
-
#su-modules td.module-status .status-5 a.current { color: black; }
|
173 |
-
#su-modules td.module-status .status-0 a.current { color: darkorange; }
|
174 |
-
#su-modules td.module-status .status-n10 a.current{ color: red; }
|
175 |
-
|
176 |
-
<?php
|
177 |
-
} elseif ($_GET['js'] == 'admin') {
|
178 |
-
header('Content-type: text/javascript');
|
179 |
-
?>
|
180 |
-
|
181 |
-
function set_module_status(key, input_value, a_obj) {
|
182 |
-
var td_id = "module-status-"+key;
|
183 |
-
var input_id = "su-"+key+"-module-status";
|
184 |
-
|
185 |
-
jQuery("td#"+td_id+" a").removeClass("current");
|
186 |
-
document.getElementById(input_id).value = input_value;
|
187 |
-
a_obj.className += " current";
|
188 |
-
}
|
189 |
-
|
190 |
-
<?php
|
191 |
}
|
192 |
?>
|
2 |
/**
|
3 |
* Module Manager Module
|
4 |
*
|
|
|
5 |
* @since 0.7
|
6 |
*/
|
7 |
|
134 |
|
135 |
echo "\t</tbody>\n</table>\n";
|
136 |
|
137 |
+
$this->admin_form_end(null, false);
|
138 |
}
|
139 |
}
|
140 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
141 |
}
|
142 |
?>
|
modules/more-links/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
header('Status: 403 Forbidden');
|
3 |
+
header('HTTP/1.1 403 Forbidden');
|
4 |
+
?>
|
modules/more-links/more-links.php
CHANGED
@@ -2,7 +2,6 @@
|
|
2 |
/**
|
3 |
* More Link Customizer Module
|
4 |
*
|
5 |
-
* @version 1.0.1
|
6 |
* @since 1.3
|
7 |
*/
|
8 |
|
2 |
/**
|
3 |
* More Link Customizer Module
|
4 |
*
|
|
|
5 |
* @since 1.3
|
6 |
*/
|
7 |
|
modules/noindex/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
header('Status: 403 Forbidden');
|
3 |
+
header('HTTP/1.1 403 Forbidden');
|
4 |
+
?>
|
modules/noindex/noindex.php
CHANGED
@@ -2,14 +2,13 @@
|
|
2 |
/**
|
3 |
* Noindex Manager Module
|
4 |
*
|
5 |
-
* @version 1.1.2
|
6 |
* @since 0.1
|
7 |
*/
|
8 |
|
9 |
if (class_exists('SU_Module')) {
|
10 |
|
11 |
class SU_Noindex extends SU_Module {
|
12 |
-
|
13 |
function get_module_title() { return __('Noindex Manager', 'seo-ultimate'); }
|
14 |
|
15 |
function init() {
|
2 |
/**
|
3 |
* Noindex Manager Module
|
4 |
*
|
|
|
5 |
* @since 0.1
|
6 |
*/
|
7 |
|
8 |
if (class_exists('SU_Module')) {
|
9 |
|
10 |
class SU_Noindex extends SU_Module {
|
11 |
+
|
12 |
function get_module_title() { return __('Noindex Manager', 'seo-ultimate'); }
|
13 |
|
14 |
function init() {
|
modules/sds-blog/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
header('Status: 403 Forbidden');
|
3 |
+
header('HTTP/1.1 403 Forbidden');
|
4 |
+
?>
|
modules/sds-blog/sds-blog.css
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#su-sds-blog .rss-widget {
|
2 |
+
background-color: white;
|
3 |
+
border: 1px solid black;
|
4 |
+
padding: 2em;
|
5 |
+
margin: 2em 0;
|
6 |
+
border-radius: 10px;
|
7 |
+
-moz-border-radius: 10px;
|
8 |
+
-webkit-border-radius: 10px;
|
9 |
+
}
|
10 |
+
|
11 |
+
#su-sds-blog a.rsswidget {
|
12 |
+
font-size: 13px;
|
13 |
+
font-family: Georgia,"Times New Roman","Bitstream Charter",Times,serif;
|
14 |
+
line-height: 1.7em;
|
15 |
+
}
|
16 |
+
|
17 |
+
#su-sds-blog li a:visited {
|
18 |
+
color: purple;
|
19 |
+
}
|
20 |
+
|
21 |
+
#su-sds-blog span.rss-date {
|
22 |
+
margin-left: 3px;
|
23 |
+
}
|
24 |
+
|
25 |
+
#su-sds-blog li {
|
26 |
+
padding-bottom: 1em;
|
27 |
+
}
|
28 |
+
|
29 |
+
#su-sds-blog img#sds-logo {
|
30 |
+
float: right;
|
31 |
+
border: 1px solid black;
|
32 |
+
padding: 1em;
|
33 |
+
background-color: white;
|
34 |
+
margin-left: 2em;
|
35 |
+
border-radius: 10px;
|
36 |
+
-moz-border-radius: 10px;
|
37 |
+
-webkit-border-radius: 10px;
|
38 |
+
}
|
modules/sds-blog/sds-blog.php
CHANGED
@@ -2,7 +2,6 @@
|
|
2 |
/**
|
3 |
* SEO Design Solutions Whitepapers Module
|
4 |
*
|
5 |
-
* @version 1.0.6
|
6 |
* @since 0.1
|
7 |
*/
|
8 |
|
@@ -23,52 +22,62 @@ class SU_SdsBlog extends SU_Module {
|
|
23 |
$this->cron('load_blog_rss', 'hourly');
|
24 |
}
|
25 |
|
|
|
|
|
|
|
|
|
26 |
function get_default_settings() {
|
27 |
//Don't notify about new items when the plugin is just installed
|
28 |
return array('lastread' => time());
|
29 |
}
|
30 |
|
31 |
function filter_export_array($settings) {
|
32 |
-
unset($settings[$this->get_module_key()]['
|
33 |
return $settings;
|
34 |
}
|
35 |
|
36 |
function load_blog_rss() {
|
37 |
$rss = suwp::load_rss('http://feeds.seodesignsolutions.com/SeoDesignSolutionsBlog', SU_USER_AGENT);
|
38 |
-
if ($rss
|
|
|
|
|
|
|
|
|
39 |
}
|
40 |
|
41 |
function admin_page_contents() {
|
42 |
-
|
43 |
-
echo "<
|
44 |
-
echo "<p>".__("Search engine optimization articles from the company behind the SEO Ultimate plugin.", 'seo-ultimate')."</p>\n";
|
45 |
echo "<div class='rss-widget'>\n";
|
46 |
|
47 |
add_filter('http_headers_useragent', 'su_get_user_agent');
|
|
|
48 |
wp_widget_rss_output( 'http://feeds.seodesignsolutions.com/SeoDesignSolutionsBlog', array('show_summary' => 1, 'show_date' => 1) );
|
|
|
49 |
remove_filter('http_headers_useragent', 'su_get_user_agent');
|
50 |
|
51 |
echo "</div>\n";
|
52 |
$this->update_setting('lastread', time());
|
53 |
}
|
54 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
function get_unread_count() {
|
56 |
|
57 |
-
$
|
58 |
-
|
59 |
-
if ($rss) {
|
60 |
$lastread = $this->get_setting('lastread');
|
61 |
-
|
62 |
-
$new = 0;
|
63 |
-
foreach ($rss as $item) {
|
64 |
-
if ($this->get_feed_item_date($item) > $lastread) $new++;
|
65 |
-
}
|
66 |
-
|
67 |
return $new;
|
68 |
-
|
69 |
-
} else {
|
70 |
-
return 0;
|
71 |
}
|
|
|
|
|
72 |
}
|
73 |
|
74 |
function get_feed_item_date($item) {
|
@@ -90,55 +99,7 @@ class SU_SdsBlog extends SU_Module {
|
|
90 |
//Return a UNIX timestamp.
|
91 |
if ($date) return $date; else return 0;
|
92 |
}
|
93 |
-
|
94 |
-
function admin_help() {
|
95 |
-
return "<p>".__("The articles below are loaded from the SEO Design Solutions website. Click on an article’s title to read it.", 'seo-ultimate')."</p>";
|
96 |
-
}
|
97 |
-
|
98 |
}
|
99 |
|
100 |
-
} elseif ($_GET['css'] == 'admin') {
|
101 |
-
header('Content-type: text/css');
|
102 |
-
?>
|
103 |
-
|
104 |
-
#su-sds-blog .rss-widget {
|
105 |
-
background-color: white;
|
106 |
-
border: 1px solid black;
|
107 |
-
padding: 2em;
|
108 |
-
margin: 2em 0;
|
109 |
-
border-radius: 10px;
|
110 |
-
-moz-border-radius: 10px;
|
111 |
-
-webkit-border-radius: 10px;
|
112 |
-
}
|
113 |
-
|
114 |
-
#su-sds-blog a.rsswidget {
|
115 |
-
font-size: 13px;
|
116 |
-
font-family: Georgia,"Times New Roman","Bitstream Charter",Times,serif;
|
117 |
-
line-height: 1.7em;
|
118 |
-
}
|
119 |
-
|
120 |
-
#su-sds-blog li a:visited {
|
121 |
-
color: purple;
|
122 |
-
}
|
123 |
-
|
124 |
-
#su-sds-blog span.rss-date {
|
125 |
-
margin-left: 3px;
|
126 |
-
}
|
127 |
-
|
128 |
-
#su-sds-blog li {
|
129 |
-
padding-bottom: 1em;
|
130 |
-
}
|
131 |
-
|
132 |
-
#su-sds-blog img#sds-logo {
|
133 |
-
float: right;
|
134 |
-
border: 1px solid black;
|
135 |
-
padding: 1em;
|
136 |
-
background-color: white;
|
137 |
-
border-radius: 10px;
|
138 |
-
-moz-border-radius: 10px;
|
139 |
-
-webkit-border-radius: 10px;
|
140 |
-
}
|
141 |
-
|
142 |
-
<?php
|
143 |
}
|
144 |
?>
|
2 |
/**
|
3 |
* SEO Design Solutions Whitepapers Module
|
4 |
*
|
|
|
5 |
* @since 0.1
|
6 |
*/
|
7 |
|
22 |
$this->cron('load_blog_rss', 'hourly');
|
23 |
}
|
24 |
|
25 |
+
function upgrade() {
|
26 |
+
$this->delete_setting('rssitems');
|
27 |
+
}
|
28 |
+
|
29 |
function get_default_settings() {
|
30 |
//Don't notify about new items when the plugin is just installed
|
31 |
return array('lastread' => time());
|
32 |
}
|
33 |
|
34 |
function filter_export_array($settings) {
|
35 |
+
unset($settings[$this->get_module_key()]['rss_item_times']);
|
36 |
return $settings;
|
37 |
}
|
38 |
|
39 |
function load_blog_rss() {
|
40 |
$rss = suwp::load_rss('http://feeds.seodesignsolutions.com/SeoDesignSolutionsBlog', SU_USER_AGENT);
|
41 |
+
if ($rss && $rss->items) {
|
42 |
+
$times = array();
|
43 |
+
foreach ($rss->items as $item) $times[] = $this->get_feed_item_date($item);
|
44 |
+
$this->update_setting('rss_item_times', $times);
|
45 |
+
}
|
46 |
}
|
47 |
|
48 |
function admin_page_contents() {
|
49 |
+
echo "<a href='http://www.seodesignsolutions.com'><img src='{$this->plugin->plugin_dir_url}plugin/images/sds-logo.png' alt='".__("SEO Design Solutions", 'seo-ultimate')."' id='sds-logo' /></a>";
|
50 |
+
echo "<p>".__("The search engine optimization articles below are loaded from the website of SEO Design Solutions, the company behind the SEO Ultimate plugin. Click on an article’s title to read it.", 'seo-ultimate')."</p>\n";
|
|
|
51 |
echo "<div class='rss-widget'>\n";
|
52 |
|
53 |
add_filter('http_headers_useragent', 'su_get_user_agent');
|
54 |
+
add_filter('esc_html', array(&$this, 'truncate_at_ellipsis'));
|
55 |
wp_widget_rss_output( 'http://feeds.seodesignsolutions.com/SeoDesignSolutionsBlog', array('show_summary' => 1, 'show_date' => 1) );
|
56 |
+
remove_filter('esc_html', array(&$this, 'truncate_at_ellipsis'));
|
57 |
remove_filter('http_headers_useragent', 'su_get_user_agent');
|
58 |
|
59 |
echo "</div>\n";
|
60 |
$this->update_setting('lastread', time());
|
61 |
}
|
62 |
|
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, '[…]');
|
70 |
+
}
|
71 |
+
|
72 |
function get_unread_count() {
|
73 |
|
74 |
+
if (count($times = $this->get_setting('rss_item_times', array()))) {
|
|
|
|
|
75 |
$lastread = $this->get_setting('lastread');
|
76 |
+
$new = 0; foreach ($times as $time) if ($time > $lastread) $new++;
|
|
|
|
|
|
|
|
|
|
|
77 |
return $new;
|
|
|
|
|
|
|
78 |
}
|
79 |
+
|
80 |
+
return 0;
|
81 |
}
|
82 |
|
83 |
function get_feed_item_date($item) {
|
99 |
//Return a UNIX timestamp.
|
100 |
if ($date) return $date; else return 0;
|
101 |
}
|
|
|
|
|
|
|
|
|
|
|
102 |
}
|
103 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
}
|
105 |
?>
|
modules/settings/global-settings.php
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Global Settings Module
|
4 |
+
*
|
5 |
+
* @since 2.1
|
6 |
+
*/
|
7 |
+
|
8 |
+
if (class_exists('SU_Module')) {
|
9 |
+
|
10 |
+
class SU_GlobalSettings extends SU_Module {
|
11 |
+
|
12 |
+
var $wp_meta_called = false;
|
13 |
+
|
14 |
+
function get_parent_module() { return 'settings'; }
|
15 |
+
function get_child_order() { return 10; }
|
16 |
+
function is_independent_module() { return false; }
|
17 |
+
|
18 |
+
function get_module_title() { return __('Global Settings', 'seo-ultimate'); }
|
19 |
+
|
20 |
+
function get_default_settings() {
|
21 |
+
return array(
|
22 |
+
'attribution_link' => false
|
23 |
+
, 'plugin_notices' => true
|
24 |
+
);
|
25 |
+
}
|
26 |
+
|
27 |
+
function init() {
|
28 |
+
//Hook to add attribution link
|
29 |
+
if ($this->get_setting('attribution_link')) {
|
30 |
+
add_action('wp_meta', array(&$this, 'meta_link'));
|
31 |
+
add_action('wp_footer', array(&$this, 'footer_link'));
|
32 |
+
}
|
33 |
+
}
|
34 |
+
|
35 |
+
function admin_page_contents() {
|
36 |
+
|
37 |
+
//Plugin Settings
|
38 |
+
$this->admin_form_start();
|
39 |
+
$this->checkboxes(array(
|
40 |
+
'attribution_link' => __("Enable nofollow’d attribution link", 'seo-ultimate')
|
41 |
+
, 'attribution_link_css' => __("Enable attribution link CSS styling", 'seo-ultimate')
|
42 |
+
, 'plugin_notices' => __("Notify me about unnecessary active plugins", 'seo-ultimate')
|
43 |
+
, 'mark_code' => __("Insert comments around HTML code insertions", 'seo-ultimate')
|
44 |
+
));
|
45 |
+
$this->admin_form_end();
|
46 |
+
}
|
47 |
+
|
48 |
+
function meta_link() {
|
49 |
+
echo "<li><a href='http://www.seodesignsolutions.com/' title='Search engine optimization technology by SEO Design Solutions' rel='nofollow'>SEO</a></li>\n";
|
50 |
+
$this->wp_meta_called = true;
|
51 |
+
}
|
52 |
+
|
53 |
+
function footer_link() {
|
54 |
+
if (!$this->wp_meta_called) {
|
55 |
+
if ($this->get_setting('attribution_link_css')) {
|
56 |
+
$pstyle = " style='text-align: center; font-size: smaller;'";
|
57 |
+
$astyle = " style='color: inherit;'";
|
58 |
+
} else $pstyle = $astyle = '';
|
59 |
+
|
60 |
+
echo "\n<p id='suattr'$pstyle><a href='http://www.seodesignsolutions.com/' rel='nofollow'$astyle>Optimized by SEO Ultimate</a></p>\n";
|
61 |
+
}
|
62 |
+
}
|
63 |
+
}
|
64 |
+
|
65 |
+
}
|
66 |
+
?>
|
modules/settings/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
header('Status: 403 Forbidden');
|
3 |
+
header('HTTP/1.1 403 Forbidden');
|
4 |
+
?>
|
modules/settings/settings-data.css
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#su-settings table#manage-settings {
|
2 |
+
border-collapse: collapse;
|
3 |
+
margin-top: 2em;
|
4 |
+
}
|
5 |
+
|
6 |
+
#su-settings table#manage-settings td {
|
7 |
+
width: 100%;
|
8 |
+
}
|
9 |
+
|
10 |
+
#su-settings table#manage-settings th {
|
11 |
+
font-weight: bold;
|
12 |
+
padding-right: 2em;
|
13 |
+
}
|
14 |
+
|
15 |
+
#su-settings table#manage-settings td,
|
16 |
+
#su-settings table#manage-settings th {
|
17 |
+
padding-top: 2em;
|
18 |
+
padding-bottom: 2em;
|
19 |
+
border-top: 1px solid #ccc;
|
20 |
+
}
|
modules/settings/settings-data.php
ADDED
@@ -0,0 +1,225 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Settings Data Manager Module
|
4 |
+
*
|
5 |
+
* @since 2.1
|
6 |
+
*/
|
7 |
+
|
8 |
+
if (class_exists('SU_Module')) {
|
9 |
+
|
10 |
+
class SU_SettingsData extends SU_Module {
|
11 |
+
|
12 |
+
function get_parent_module() { return 'settings'; }
|
13 |
+
function get_child_order() { return 20; }
|
14 |
+
function is_independent_module() { return false; }
|
15 |
+
|
16 |
+
function get_module_title() { return __('Settings Data Manager', 'seo-ultimate'); }
|
17 |
+
function get_module_subtitle() { return __('Manage Settings Data', 'seo-ultimate'); }
|
18 |
+
|
19 |
+
function get_admin_page_tabs() {
|
20 |
+
return array(
|
21 |
+
__('Import', 'seo-ultimate') => 'import_tab'
|
22 |
+
, __('Export', 'seo-ultimate') => 'export_tab'
|
23 |
+
, __('Reset', 'seo-ultimate') => 'reset_tab'
|
24 |
+
);
|
25 |
+
}
|
26 |
+
|
27 |
+
function portable_options() {
|
28 |
+
return array('settings', 'modules');
|
29 |
+
}
|
30 |
+
|
31 |
+
function init() {
|
32 |
+
|
33 |
+
if ($this->is_action('su-export')) {
|
34 |
+
header('Content-Type: application/octet-stream');
|
35 |
+
header('Content-Disposition: attachment; filename="SEO Ultimate Settings ('.date('Y-m-d').').dat"');
|
36 |
+
|
37 |
+
$options = $this->portable_options();
|
38 |
+
$export = array();
|
39 |
+
foreach ($options as $option) {
|
40 |
+
$data = $this->plugin->dbdata[$option];
|
41 |
+
$data = apply_filters("su_{$option}_export_array", $data);
|
42 |
+
$export[$option] = $data;
|
43 |
+
}
|
44 |
+
$export = base64_encode(serialize($export));
|
45 |
+
|
46 |
+
echo $export;
|
47 |
+
die();
|
48 |
+
|
49 |
+
} elseif ($this->is_action('su-import')) {
|
50 |
+
|
51 |
+
if (strlen($_FILES['settingsfile']['name'])) {
|
52 |
+
|
53 |
+
$file = $_FILES['settingsfile']['tmp_name'];
|
54 |
+
if (is_uploaded_file($file)) {
|
55 |
+
$import = base64_decode(file_get_contents($file));
|
56 |
+
if (is_serialized($import)) {
|
57 |
+
$import = unserialize($import);
|
58 |
+
|
59 |
+
$options = $this->portable_options();
|
60 |
+
foreach ($options as $option) {
|
61 |
+
$this->plugin->dbdata[$option] = array_merge($this->plugin->dbdata[$option], $import[$option]);
|
62 |
+
}
|
63 |
+
|
64 |
+
$this->queue_message('success', __("Settings successfully imported.", 'seo-ultimate'));
|
65 |
+
} else
|
66 |
+
$this->queue_message('error', __("The uploaded file is not in the proper format. Settings could not be imported.", 'seo-ultimate'));
|
67 |
+
} else
|
68 |
+
$this->queue_message('error', __("The settings file could not be uploaded successfully.", 'seo-ultimate'));
|
69 |
+
|
70 |
+
} else
|
71 |
+
$this->queue_message('warning', __("Settings could not be imported because no settings file was selected. Please click the “Browse” button and select a file to import.", 'seo-ultimate'));
|
72 |
+
|
73 |
+
} elseif ($this->is_action('su-reset')) {
|
74 |
+
|
75 |
+
$this->plugin->dbdata['settings'] = array();
|
76 |
+
unset($this->plugin->dbdata['modules']);
|
77 |
+
$this->load_default_settings();
|
78 |
+
|
79 |
+
$this->queue_message('success', __("All settings have been erased and defaults have been restored.", 'seo-ultimate'));
|
80 |
+
}
|
81 |
+
}
|
82 |
+
|
83 |
+
function import_tab() {
|
84 |
+
$this->admin_subheader(__('Import SEO Ultimate Settings File', 'seo-ultimate'));
|
85 |
+
$hook = $this->plugin->key_to_hook($this->get_module_or_parent_key());
|
86 |
+
echo "\n<p>";
|
87 |
+
_e("You can use this form to upload and import an SEO Ultimate settings file stored on your computer. (Settings files can be created using the Export tool.)", 'seo-ultimate');
|
88 |
+
echo "</p>\n";
|
89 |
+
echo "<form enctype='multipart/form-data' method='post' action='?page=$hook&action=import#su-import'>\n";
|
90 |
+
echo "\t<input name='settingsfile' type='file' /> ";
|
91 |
+
$confirm = __("Are you sure you want to import this settings file? This will overwrite your current settings and cannot be undone.", 'seo-ultimate');
|
92 |
+
echo "<input type='submit' class='button-primary' value='".__("Import", 'seo-ultimate')."' onclick=\"javascript:return confirm('$confirm')\" />\n";
|
93 |
+
wp_nonce_field($this->get_nonce_handle('su-import'));
|
94 |
+
echo "</form>\n";
|
95 |
+
|
96 |
+
//Import from other plugins
|
97 |
+
$importmodules = array();
|
98 |
+
foreach ($this->plugin->modules as $key => $x_module) {
|
99 |
+
$module =& $this->plugin->modules[$key];
|
100 |
+
if (is_a($module, 'SU_ImportModule')) {
|
101 |
+
$importmodules[$key] =& $module;
|
102 |
+
}
|
103 |
+
}
|
104 |
+
|
105 |
+
if (count($importmodules)) {
|
106 |
+
$this->admin_subheader(__("Import from Other Plugins", 'seo-ultimate'));
|
107 |
+
echo "\n<p>";
|
108 |
+
_e("You can import settings and data from these plugins. Clicking a plugin’s name will take you to the importer page, where you can customize parameters and start the import.", 'seo-ultimate');
|
109 |
+
echo "</p>\n";
|
110 |
+
echo "<table class='widefat'>\n";
|
111 |
+
|
112 |
+
$class = '';
|
113 |
+
foreach ($importmodules as $key => $x_module) {
|
114 |
+
$module =& $importmodules[$key];
|
115 |
+
$title = $module->get_op_title();
|
116 |
+
$desc = $module->get_import_desc();
|
117 |
+
$url = $module->get_admin_url();
|
118 |
+
$class = ($class) ? '' : 'alternate';
|
119 |
+
echo "\t<tr class='$class'><td><a href='$url'>$title</a></td><td>$desc</td></tr>\n";
|
120 |
+
}
|
121 |
+
|
122 |
+
echo "</table>\n";
|
123 |
+
}
|
124 |
+
}
|
125 |
+
|
126 |
+
function export_tab() {
|
127 |
+
echo "\n<p>";
|
128 |
+
_e("You can use the export tool to download an SEO Ultimate settings file to your computer.", 'seo-ultimate');
|
129 |
+
echo "</p>\n<p>";
|
130 |
+
_e("A settings file includes the data of every checkbox and textbox of every installed module. It does NOT include site-specific data like logged 404s or post/page title/meta data (this data would be included in a standard database backup, however).", 'seo-ultimate');
|
131 |
+
echo "</p>\n<p>";
|
132 |
+
$url = $this->get_nonce_url('su-export');
|
133 |
+
echo "<a href='$url' class='button-primary'>".__("Download Settings File", 'seo-ultimate')."</a>";
|
134 |
+
echo "</p>\n";
|
135 |
+
}
|
136 |
+
|
137 |
+
function reset_tab() {
|
138 |
+
echo "\n<p>";
|
139 |
+
_e("You can erase all your SEO Ultimate settings and restore them to “factory defaults” by clicking the button below.", 'seo-ultimate');
|
140 |
+
echo "</p>\n<p>";
|
141 |
+
$url = $this->get_nonce_url('su-reset');
|
142 |
+
$confirm = __("Are you sure you want to erase all module settings? This cannot be undone.", 'seo-ultimate');
|
143 |
+
echo "<a href='$url#su-reset' class='button-primary' onclick=\"javascript:return confirm('$confirm')\">".__("Restore Default Settings", 'seo-ultimate')."</a>";
|
144 |
+
echo "</p>\n";
|
145 |
+
}
|
146 |
+
|
147 |
+
/*
|
148 |
+
function admin_page_contents() {
|
149 |
+
|
150 |
+
echo "<p>";
|
151 |
+
_e("Here you can export, import, and reset the settings of the plugin and all its modules.", 'seo-ultimate');
|
152 |
+
echo "</p><p>";
|
153 |
+
_e("A settings file includes the data of every checkbox and textbox of every installed module, as well as the “Plugin Settings” section above. It does NOT include site-specific data like logged 404s or post/page title/meta data (this data would be included in a standard database backup, however).", 'seo-ultimate');
|
154 |
+
echo "</p>";
|
155 |
+
|
156 |
+
//Begin table
|
157 |
+
echo "<table id='manage-settings'>\n";
|
158 |
+
|
159 |
+
//Export
|
160 |
+
echo "<tr><th scope='row'>";
|
161 |
+
_e("Export:", 'seo-ultimate');
|
162 |
+
echo "</th><td>";
|
163 |
+
$url = $this->get_nonce_url('su-export');
|
164 |
+
echo "<a href='$url' class='button-secondary'>".__("Download Settings File", 'seo-ultimate')."</a>";
|
165 |
+
echo "</td></tr>";
|
166 |
+
|
167 |
+
//Import
|
168 |
+
echo "<tr><th scope='row'>";
|
169 |
+
_e("Import:", 'seo-ultimate');
|
170 |
+
echo "</th><td>";
|
171 |
+
$hook = $this->plugin->key_to_hook($this->get_module_key());
|
172 |
+
echo "<form enctype='multipart/form-data' method='post' action='?page=$hook&action=import'>\n";
|
173 |
+
echo "\t<input name='settingsfile' type='file' /> ";
|
174 |
+
$confirm = __("Are you sure you want to import this settings file? This will overwrite your current settings and cannot be undone.", 'seo-ultimate');
|
175 |
+
echo "<input type='submit' class='button-secondary' value='".__("Import This Settings File", 'seo-ultimate')."' onclick=\"javascript:return confirm('$confirm')\" />\n";
|
176 |
+
wp_nonce_field($this->get_nonce_handle('su-import'));
|
177 |
+
echo "</form>\n";
|
178 |
+
echo "</td></tr>";
|
179 |
+
|
180 |
+
//Reset
|
181 |
+
echo "<tr><th scope='row'>";
|
182 |
+
_e("Reset:", 'seo-ultimate');
|
183 |
+
echo "</th><td>";
|
184 |
+
$url = $this->get_nonce_url('su-reset');
|
185 |
+
$confirm = __("Are you sure you want to erase all module settings? This cannot be undone.", 'seo-ultimate');
|
186 |
+
echo "<a href='$url' class='button-secondary' onclick=\"javascript:return confirm('$confirm')\">".__("Restore Default Settings", 'seo-ultimate')."</a>";
|
187 |
+
echo "</td></tr>";
|
188 |
+
|
189 |
+
//End table
|
190 |
+
echo "</table>";
|
191 |
+
|
192 |
+
//Import from other plugins
|
193 |
+
$importmodules = array();
|
194 |
+
foreach ($this->plugin->modules as $key => $x_module) {
|
195 |
+
$module =& $this->plugin->modules[$key];
|
196 |
+
if (is_a($module, 'SU_ImportModule')) {
|
197 |
+
$importmodules[$key] =& $module;
|
198 |
+
}
|
199 |
+
}
|
200 |
+
|
201 |
+
if (count($importmodules)) {
|
202 |
+
$this->admin_subheader(__("Import from Other Plugins", 'seo-ultimate'));
|
203 |
+
echo "\n<p>";
|
204 |
+
_e("You can import settings and data from these plugins. Clicking a plugin’s name will take you to the importer page, where you can customize parameters and start the import.", 'seo-ultimate');
|
205 |
+
echo "</p>\n";
|
206 |
+
echo "<table class='widefat'>\n";
|
207 |
+
|
208 |
+
$class = '';
|
209 |
+
foreach ($importmodules as $key => $x_module) {
|
210 |
+
$module =& $importmodules[$key];
|
211 |
+
$title = $module->get_op_title();
|
212 |
+
$desc = $module->get_import_desc();
|
213 |
+
$url = $module->get_admin_url();
|
214 |
+
$class = ($class) ? '' : 'alternate';
|
215 |
+
echo "\t<tr class='$class'><td><a href='$url'>$title</a></td><td>$desc</td></tr>\n";
|
216 |
+
}
|
217 |
+
|
218 |
+
echo "</table>\n";
|
219 |
+
}
|
220 |
+
}*/
|
221 |
+
}
|
222 |
+
|
223 |
+
}
|
224 |
+
|
225 |
+
?>
|
modules/settings/settings.php
CHANGED
@@ -2,7 +2,6 @@
|
|
2 |
/**
|
3 |
* SEO Ultimate Plugin Settings Module
|
4 |
*
|
5 |
-
* @version 2.3.3
|
6 |
* @since 0.2
|
7 |
*/
|
8 |
|
@@ -10,220 +9,12 @@ if (class_exists('SU_Module')) {
|
|
10 |
|
11 |
class SU_Settings extends SU_Module {
|
12 |
|
13 |
-
var $wp_meta_called = false;
|
14 |
-
|
15 |
function get_module_title() { return __('Plugin Settings', 'seo-ultimate'); }
|
16 |
function get_page_title() { return __('SEO Ultimate Plugin Settings', 'seo-ultimate'); }
|
17 |
function get_menu_title() { return __('SEO Ultimate', 'seo-ultimate'); }
|
18 |
-
function get_menu_parent(){ return 'options-general.php'; }
|
19 |
-
|
20 |
-
function get_default_settings() {
|
21 |
-
return array(
|
22 |
-
'attribution_link' => false
|
23 |
-
, 'plugin_notices' => true
|
24 |
-
, 'log_hits' => true
|
25 |
-
, 'delete_old_hits_value' => 30
|
26 |
-
);
|
27 |
-
}
|
28 |
-
|
29 |
-
function portable_options() {
|
30 |
-
return array('settings', 'modules');
|
31 |
-
}
|
32 |
-
|
33 |
-
function init() {
|
34 |
-
|
35 |
-
if ($this->is_action('su-export')) {
|
36 |
-
header('Content-Type: application/octet-stream');
|
37 |
-
header('Content-Disposition: attachment; filename="SEO Ultimate Settings ('.date('Y-m-d').').dat"');
|
38 |
-
|
39 |
-
$options = $this->portable_options();
|
40 |
-
$export = array();
|
41 |
-
foreach ($options as $option) {
|
42 |
-
$data = $this->plugin->dbdata[$option];
|
43 |
-
$data = apply_filters("su_{$option}_export_array", $data);
|
44 |
-
$export[$option] = $data;
|
45 |
-
}
|
46 |
-
$export = base64_encode(serialize($export));
|
47 |
-
|
48 |
-
echo $export;
|
49 |
-
die();
|
50 |
-
|
51 |
-
} elseif ($this->is_action('su-import')) {
|
52 |
-
|
53 |
-
if (strlen($_FILES['settingsfile']['name'])) {
|
54 |
-
|
55 |
-
$file = $_FILES['settingsfile']['tmp_name'];
|
56 |
-
if (is_uploaded_file($file)) {
|
57 |
-
$import = base64_decode(file_get_contents($file));
|
58 |
-
if (is_serialized($import)) {
|
59 |
-
$import = unserialize($import);
|
60 |
-
|
61 |
-
$options = $this->portable_options();
|
62 |
-
foreach ($options as $option) {
|
63 |
-
$this->plugin->dbdata[$option] = array_merge($this->plugin->dbdata[$option], $import[$option]);
|
64 |
-
}
|
65 |
-
|
66 |
-
$this->queue_message('success', __("Settings successfully imported.", 'seo-ultimate'));
|
67 |
-
} else
|
68 |
-
$this->queue_message('error', __("The uploaded file is not in the proper format. Settings could not be imported.", 'seo-ultimate'));
|
69 |
-
} else
|
70 |
-
$this->queue_message('error', __("The settings file could not be uploaded successfully.", 'seo-ultimate'));
|
71 |
-
|
72 |
-
} else
|
73 |
-
$this->queue_message('warning', __("Settings could not be imported because no settings file was selected. Please click the “Browse” button and select a file to import.", 'seo-ultimate'));
|
74 |
-
|
75 |
-
} elseif ($this->is_action('su-reset')) {
|
76 |
-
|
77 |
-
$this->plugin->dbdata['settings'] = array();
|
78 |
-
unset($this->plugin->dbdata['modules']);
|
79 |
-
$this->load_default_settings();
|
80 |
-
|
81 |
-
$this->queue_message('success', __("All settings have been erased and defaults have been restored.", 'seo-ultimate'));
|
82 |
-
}
|
83 |
-
|
84 |
-
|
85 |
-
//Hook to add attribution link
|
86 |
-
if ($this->get_setting('attribution_link')) {
|
87 |
-
add_action('wp_meta', array(&$this, 'meta_link'));
|
88 |
-
add_action('wp_footer', array(&$this, 'footer_link'));
|
89 |
-
}
|
90 |
-
}
|
91 |
-
|
92 |
-
function admin_page_contents() {
|
93 |
-
|
94 |
-
//Plugin Settings
|
95 |
-
$this->admin_form_start(__("Plugin Settings", 'seo-ultimate'));
|
96 |
-
$this->checkboxes(array(
|
97 |
-
'attribution_link' => __("Enable nofollow’d attribution link", 'seo-ultimate')
|
98 |
-
, 'attribution_link_css' => __("Enable attribution link CSS styling", 'seo-ultimate')
|
99 |
-
, 'plugin_notices' => __("Notify me about unnecessary active plugins", 'seo-ultimate')
|
100 |
-
//, 'debug_mode' => __("Enable debug-mode logging", 'seo-ultimate')
|
101 |
-
, 'mark_code' => __("Insert comments around HTML code insertions", 'seo-ultimate')
|
102 |
-
, 'log_hits' => __("Allow modules to save visitor information to the database", 'seo-ultimate')
|
103 |
-
, 'delete_old_hits' => __("Delete logged visitor information after %d days", 'seo-ultimate')
|
104 |
-
));
|
105 |
-
$this->admin_form_end();
|
106 |
-
|
107 |
-
//Manage Settings
|
108 |
-
$this->admin_subheader(__("Manage Settings Data", 'seo-ultimate'));
|
109 |
-
$this->print_messages();
|
110 |
-
|
111 |
-
echo "<p>";
|
112 |
-
_e("This section allows you to export, import, and reset the settings of the plugin and all its modules.", 'seo-ultimate');
|
113 |
-
echo "</p><p>";
|
114 |
-
_e("A settings file includes the data of every checkbox and textbox of every installed module, as well as the “Plugin Settings” section above. ".
|
115 |
-
"It does NOT include site-specific data like logged 404s or post/page title/meta data (this data would be included in a standard database backup, however).", 'seo-ultimate');
|
116 |
-
echo "</p>";
|
117 |
-
|
118 |
-
//Begin table
|
119 |
-
echo "<table id='manage-settings'>\n";
|
120 |
-
|
121 |
-
//Export
|
122 |
-
echo "<tr><th scope='row'>";
|
123 |
-
_e("Export:", 'seo-ultimate');
|
124 |
-
echo "</th><td>";
|
125 |
-
$url = $this->get_nonce_url('su-export');
|
126 |
-
echo "<a href='$url' class='button-secondary'>".__("Download Settings File", 'seo-ultimate')."</a>";
|
127 |
-
echo "</td></tr>";
|
128 |
-
|
129 |
-
//Import
|
130 |
-
echo "<tr><th scope='row'>";
|
131 |
-
_e("Import:", 'seo-ultimate');
|
132 |
-
echo "</th><td>";
|
133 |
-
$hook = $this->plugin->key_to_hook($this->get_module_key());
|
134 |
-
echo "<form enctype='multipart/form-data' method='post' action='?page=$hook&action=import'>\n";
|
135 |
-
echo "\t<input name='settingsfile' type='file' /> ";
|
136 |
-
$confirm = __("Are you sure you want to import this settings file? This will overwrite your current settings and cannot be undone.", 'seo-ultimate');
|
137 |
-
echo "<input type='submit' class='button-secondary' value='".__("Import This Settings File", 'seo-ultimate')."' onclick=\"javascript:return confirm('$confirm')\" />\n";
|
138 |
-
wp_nonce_field($this->get_nonce_handle('su-import'));
|
139 |
-
echo "</form>\n";
|
140 |
-
echo "</td></tr>";
|
141 |
-
|
142 |
-
//Reset
|
143 |
-
echo "<tr><th scope='row'>";
|
144 |
-
_e("Reset:", 'seo-ultimate');
|
145 |
-
echo "</th><td>";
|
146 |
-
$url = $this->get_nonce_url('su-reset');
|
147 |
-
$confirm = __("Are you sure you want to erase all module settings? This cannot be undone.", 'seo-ultimate');
|
148 |
-
echo "<a href='$url' class='button-secondary' onclick=\"javascript:return confirm('$confirm')\">".__("Restore Default Settings", 'seo-ultimate')."</a>";
|
149 |
-
echo "</td></tr>";
|
150 |
-
|
151 |
-
//End table
|
152 |
-
echo "</table>";
|
153 |
-
|
154 |
-
//Import from other plugins
|
155 |
-
$importmodules = array();
|
156 |
-
foreach ($this->plugin->modules as $key => $x_module) {
|
157 |
-
$module =& $this->plugin->modules[$key];
|
158 |
-
if (is_a($module, 'SU_ImportModule')) {
|
159 |
-
$importmodules[$key] =& $module;
|
160 |
-
}
|
161 |
-
}
|
162 |
-
|
163 |
-
if (count($importmodules)) {
|
164 |
-
$this->admin_subheader(__("Import from Other Plugins", 'seo-ultimate'));
|
165 |
-
echo "\n<p>";
|
166 |
-
_e("You can import settings and data from these plugins. Clicking a plugin’s name will take you to the importer page, where you can customize parameters and start the import.", 'seo-ultimate');
|
167 |
-
echo "</p>\n";
|
168 |
-
echo "<table class='widefat'>\n";
|
169 |
-
|
170 |
-
$class = '';
|
171 |
-
foreach ($importmodules as $key => $x_module) {
|
172 |
-
$module =& $importmodules[$key];
|
173 |
-
$title = $module->get_op_title();
|
174 |
-
$desc = $module->get_import_desc();
|
175 |
-
$url = $module->get_admin_url();
|
176 |
-
$class = ($class) ? '' : 'alternate';
|
177 |
-
echo "\t<tr class='$class'><td><a href='$url'>$title</a></td><td>$desc</td></tr>\n";
|
178 |
-
}
|
179 |
-
|
180 |
-
echo "</table>\n";
|
181 |
-
}
|
182 |
-
}
|
183 |
-
|
184 |
-
function meta_link() {
|
185 |
-
echo "<li><a href='http://www.seodesignsolutions.com/' title='Search engine optimization technology by SEO Design Solutions' rel='nofollow'>SEO</a></li>\n";
|
186 |
-
$this->wp_meta_called = true;
|
187 |
-
}
|
188 |
-
|
189 |
-
function footer_link() {
|
190 |
-
if (!$this->wp_meta_called) {
|
191 |
-
if ($this->get_setting('attribution_link_css')) {
|
192 |
-
$pstyle = " style='text-align: center; font-size: smaller;'";
|
193 |
-
$astyle = " style='color: inherit;'";
|
194 |
-
} else $pstyle = $astyle = '';
|
195 |
-
|
196 |
-
echo "\n<p id='suattr'$pstyle>Search engine optimization by <a href='http://www.seodesignsolutions.com/' rel='nofollow'$astyle>SEO Design Solutions</a></a></p>\n";
|
197 |
-
}
|
198 |
-
}
|
199 |
-
|
200 |
-
}
|
201 |
-
|
202 |
-
} elseif ($_GET['css'] == 'admin') {
|
203 |
-
header('Content-type: text/css');
|
204 |
-
?>
|
205 |
-
|
206 |
-
#su-settings table#manage-settings {
|
207 |
-
border-collapse: collapse;
|
208 |
-
margin-top: 2em;
|
209 |
}
|
210 |
|
211 |
-
#su-settings table#manage-settings td {
|
212 |
-
width: 100%;
|
213 |
-
}
|
214 |
-
|
215 |
-
#su-settings table#manage-settings th {
|
216 |
-
font-weight: bold;
|
217 |
-
padding-right: 2em;
|
218 |
-
}
|
219 |
-
|
220 |
-
#su-settings table#manage-settings td,
|
221 |
-
#su-settings table#manage-settings th {
|
222 |
-
padding-top: 2em;
|
223 |
-
padding-bottom: 2em;
|
224 |
-
border-top: 1px solid #ccc;
|
225 |
-
}
|
226 |
-
|
227 |
-
<?php
|
228 |
}
|
229 |
?>
|
2 |
/**
|
3 |
* SEO Ultimate Plugin Settings Module
|
4 |
*
|
|
|
5 |
* @since 0.2
|
6 |
*/
|
7 |
|
9 |
|
10 |
class SU_Settings extends SU_Module {
|
11 |
|
|
|
|
|
12 |
function get_module_title() { return __('Plugin Settings', 'seo-ultimate'); }
|
13 |
function get_page_title() { return __('SEO Ultimate Plugin Settings', 'seo-ultimate'); }
|
14 |
function get_menu_title() { return __('SEO Ultimate', 'seo-ultimate'); }
|
15 |
+
function get_menu_parent(){ return 'options-general.php'; }
|
16 |
+
function admin_page_contents() { $this->children_admin_page_tabs(); }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
}
|
18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
}
|
20 |
?>
|
modules/settings/uninstall.php
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Uninstaller Module
|
4 |
+
*
|
5 |
+
* @since 2.1
|
6 |
+
*/
|
7 |
+
|
8 |
+
if (class_exists('SU_Module')) {
|
9 |
+
|
10 |
+
class SU_Uninstall extends SU_Module {
|
11 |
+
|
12 |
+
function get_parent_module() { return 'settings'; }
|
13 |
+
function get_child_order() { return 40; }
|
14 |
+
function is_independent_module() { return false; }
|
15 |
+
function get_settings_key() { return $this->get_module_key(); }
|
16 |
+
|
17 |
+
function get_module_title() { return __('Uninstaller', 'seo-ultimate'); }
|
18 |
+
function get_module_subtitle() { return __('Uninstall', 'seo-ultimate'); }
|
19 |
+
|
20 |
+
function init() {
|
21 |
+
if ($this->is_action('su-uninstall'))
|
22 |
+
add_filter('su_custom_admin_page-settings', array(&$this, 'do_uninstall'));
|
23 |
+
}
|
24 |
+
|
25 |
+
function admin_page_contents() {
|
26 |
+
echo "\n<p>";
|
27 |
+
_e("Uninstalling SEO Ultimate will delete your settings and the plugin’s files.", 'seo-ultimate');
|
28 |
+
echo "</p>\n";
|
29 |
+
$url = $this->get_nonce_url('su-uninstall');
|
30 |
+
$confirm = __("Are you sure you want to uninstall SEO Ultimate? This will permanently erase your SEO Ultimate settings and cannot be undone.", 'seo-ultimate');
|
31 |
+
echo "<a href='$url' class='button-primary' onclick=\"javascript:return confirm('$confirm')\">".__("Uninstall Now", 'seo-ultimate')."</a>";
|
32 |
+
}
|
33 |
+
|
34 |
+
function enable_post_uninstall_page() {
|
35 |
+
add_submenu_page('su-hidden-modules', __('Uninstall SEO Ultimate', 'seo-ultimate'), 'Uninstall',
|
36 |
+
'manage_options', 'seo-ultimate', array(&$this->parent_module, 'admin_page_contents'));
|
37 |
+
}
|
38 |
+
|
39 |
+
function do_uninstall() {
|
40 |
+
echo "<script type='text/javascript'>jQuery('#adminmenu .current').hide(); jQuery('#toplevel_page_seo').hide();</script>";
|
41 |
+
echo "<div class=\"wrap\">\n";
|
42 |
+
echo "\n<h2>".__("Uninstall SEO Ultimate", 'seo-ultimate')."</h2>\n";
|
43 |
+
|
44 |
+
//Delete settings and do miscellaneous clean up
|
45 |
+
$this->plugin->uninstall();
|
46 |
+
$this->print_mini_message('success', __("Deleted settings.", 'seo-ultimate'));
|
47 |
+
|
48 |
+
//Deactivate the plugin
|
49 |
+
deactivate_plugins(array($this->plugin->plugin_basename), true);
|
50 |
+
|
51 |
+
//Attempt to delete the plugin's files and output result
|
52 |
+
if (is_wp_error($error = delete_plugins(array($this->plugin->plugin_basename))))
|
53 |
+
$this->print_mini_message('error', __("An error occurred while deleting files.", 'seo-ultimate').'<br />'.$error->get_error_message());
|
54 |
+
else {
|
55 |
+
$this->print_mini_message('success', __("Deleted files.", 'seo-ultimate'));
|
56 |
+
$this->print_mini_message('success', __("Uninstallation complete. Thanks for trying SEO Ultimate.", 'seo-ultimate'));
|
57 |
+
}
|
58 |
+
|
59 |
+
echo "\n</div>\n";
|
60 |
+
|
61 |
+
return true;
|
62 |
+
}
|
63 |
+
}
|
64 |
+
|
65 |
+
}
|
66 |
+
?>
|
modules/site-keyword-queries/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
header('Status: 403 Forbidden');
|
3 |
+
header('HTTP/1.1 403 Forbidden');
|
4 |
+
?>
|
modules/site-keyword-queries/site-keyword-queries.php
CHANGED
@@ -2,7 +2,6 @@
|
|
2 |
/**
|
3 |
* Internal Relevance Researcher Module
|
4 |
*
|
5 |
-
* @version 1.0.1
|
6 |
* @since 1.4
|
7 |
*/
|
8 |
|
2 |
/**
|
3 |
* Internal Relevance Researcher Module
|
4 |
*
|
|
|
5 |
* @since 1.4
|
6 |
*/
|
7 |
|
modules/slugs/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
header('Status: 403 Forbidden');
|
3 |
+
header('HTTP/1.1 403 Forbidden');
|
4 |
+
?>
|
modules/slugs/slugs.php
CHANGED
@@ -2,7 +2,6 @@
|
|
2 |
/**
|
3 |
* Slug Optimizer Module
|
4 |
*
|
5 |
-
* @version 1.0.3
|
6 |
* @since 0.9
|
7 |
*/
|
8 |
|
2 |
/**
|
3 |
* Slug Optimizer Module
|
4 |
*
|
|
|
5 |
* @since 0.9
|
6 |
*/
|
7 |
|
modules/titles/index.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
header('Status: 403 Forbidden');
|
3 |
+
header('HTTP/1.1 403 Forbidden');
|
4 |
+
?>
|
modules/titles/titles-formats.php
CHANGED
@@ -1,4 +1,10 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
class SU_TitlesFormats extends SU_Module {
|
3 |
|
4 |
function get_parent_module() { return 'titles'; }
|
1 |
<?php
|
2 |
+
/**
|
3 |
+
* Title Rewriter Formats Module
|
4 |
+
*
|
5 |
+
* @since 1.5
|
6 |
+
*/
|
7 |
+
|
8 |
class SU_TitlesFormats extends SU_Module {
|
9 |
|
10 |
function get_parent_module() { return 'titles'; }
|
modules/titles/titles-posts.php
CHANGED
@@ -2,7 +2,6 @@
|
|
2 |
/**
|
3 |
* Post Title Editor Module
|
4 |
*
|
5 |
-
* @version 1.0
|
6 |
* @since 1.5
|
7 |
*/
|
8 |
|
2 |
/**
|
3 |
* Post Title Editor Module
|
4 |
*
|
|
|
5 |
* @since 1.5
|
6 |
*/
|
7 |
|
modules/titles/titles-taxonomies.php
CHANGED
@@ -2,7 +2,6 @@
|
|
2 |
/**
|
3 |
* Taxonomy Title Editor Module
|
4 |
*
|
5 |
-
* @version 1.1
|
6 |
* @since 1.9
|
7 |
*/
|
8 |
|
2 |
/**
|
3 |
* Taxonomy Title Editor Module
|
4 |
*
|
|
|
5 |
* @since 1.9
|
6 |
*/
|
7 |
|
modules/titles/titles.css
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#su-titles table.widefat {
|
2 |
+
width: auto;
|
3 |
+
}
|
4 |
+
|
5 |
+
#su-titles table.widefat td input.regular-text {
|
6 |
+
width: 400px;
|
7 |
+
}
|
modules/titles/titles.php
CHANGED
@@ -2,7 +2,6 @@
|
|
2 |
/**
|
3 |
* Title Rewriter Module
|
4 |
*
|
5 |
-
* @version 2.0.2
|
6 |
* @since 0.1
|
7 |
*/
|
8 |
|
@@ -16,7 +15,6 @@ class SU_Titles extends SU_Module {
|
|
16 |
add_action('template_redirect', array(&$this, 'before_header'), 0);
|
17 |
add_action('wp_head', array(&$this, 'after_header'), 1000);
|
18 |
add_filter('su_postmeta_help', array(&$this, 'postmeta_help'), 10);
|
19 |
-
$this->admin_page_tabs_init();
|
20 |
}
|
21 |
|
22 |
function get_default_settings() {
|
@@ -61,11 +59,6 @@ class SU_Titles extends SU_Module {
|
|
61 |
echo "</table>";
|
62 |
}
|
63 |
|
64 |
-
function postmeta_fields($fields) {
|
65 |
-
$fields['10|title'] = $this->get_postmeta_textbox('title', __('Title Tag:', 'seo-ultimate'));
|
66 |
-
return $fields;
|
67 |
-
}
|
68 |
-
|
69 |
function get_title_format() {
|
70 |
if ($key = $this->get_current_page_type())
|
71 |
return $this->get_setting("title_$key");
|
@@ -420,36 +413,17 @@ STR;
|
|
420 |
return $tabs;
|
421 |
}
|
422 |
|
|
|
|
|
|
|
|
|
|
|
423 |
function postmeta_help($help) {
|
424 |
$help[] = __("<strong>Title Tag</strong> — The exact contents of the <title> tag. The title appears in visitors' title bars and in search engine result titles. ".
|
425 |
"If this box is left blank, then the <a href='admin.php?page=su-titles' target='_blank'>default post/page titles</a> are used.", 'seo-ultimate');
|
426 |
return $help;
|
427 |
}
|
428 |
-
|
429 |
-
//Imports title tag data from other plugins
|
430 |
-
function import_op_titles($value) {
|
431 |
-
if (!strlen($value))
|
432 |
-
return $this->import_postmeta(array(
|
433 |
-
SU_AIOSP_PATH => array('_aioseop_title', 'title')
|
434 |
-
));
|
435 |
-
|
436 |
-
return $value;
|
437 |
-
}
|
438 |
-
|
439 |
-
}
|
440 |
-
|
441 |
-
} elseif ($_GET['css'] == 'admin') {
|
442 |
-
header('Content-type: text/css');
|
443 |
-
?>
|
444 |
-
|
445 |
-
#su-titles table.widefat {
|
446 |
-
width: auto;
|
447 |
}
|
448 |
|
449 |
-
#su-titles table.widefat td input.regular-text {
|
450 |
-
width: 400px;
|
451 |
-
}
|
452 |
-
|
453 |
-
<?php
|
454 |
}
|
455 |
?>
|
2 |
/**
|
3 |
* Title Rewriter Module
|
4 |
*
|
|
|
5 |
* @since 0.1
|
6 |
*/
|
7 |
|
15 |
add_action('template_redirect', array(&$this, 'before_header'), 0);
|
16 |
add_action('wp_head', array(&$this, 'after_header'), 1000);
|
17 |
add_filter('su_postmeta_help', array(&$this, 'postmeta_help'), 10);
|
|
|
18 |
}
|
19 |
|
20 |
function get_default_settings() {
|
59 |
echo "</table>";
|
60 |
}
|
61 |
|
|
|
|
|
|
|
|
|
|
|
62 |
function get_title_format() {
|
63 |
if ($key = $this->get_current_page_type())
|
64 |
return $this->get_setting("title_$key");
|
413 |
return $tabs;
|
414 |
}
|
415 |
|
416 |
+
function postmeta_fields($fields) {
|
417 |
+
$fields['10|title'] = $this->get_postmeta_textbox('title', __('Title Tag:', 'seo-ultimate'));
|
418 |
+
return $fields;
|
419 |
+
}
|
420 |
+
|
421 |
function postmeta_help($help) {
|
422 |
$help[] = __("<strong>Title Tag</strong> — The exact contents of the <title> tag. The title appears in visitors' title bars and in search engine result titles. ".
|
423 |
"If this box is left blank, then the <a href='admin.php?page=su-titles' target='_blank'>default post/page titles</a> are used.", 'seo-ultimate');
|
424 |
return $help;
|
425 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
426 |
}
|
427 |
|
|
|
|
|
|
|
|
|
|
|
428 |
}
|
429 |
?>
|
plugin/class.seo-ultimate.php
CHANGED
@@ -80,6 +80,14 @@ class SEO_Ultimate {
|
|
80 |
*/
|
81 |
var $plugin_dir_url;
|
82 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
/**
|
84 |
* The array to be inserted into the hits table.
|
85 |
*
|
@@ -133,8 +141,8 @@ class SEO_Ultimate {
|
|
133 |
$this->upgrade_to_08();
|
134 |
|
135 |
//Save
|
136 |
-
add_action('shutdown', array(&$this, 'save_dbdata'));
|
137 |
add_action('shutdown', array(&$this, 'save_hit'));
|
|
|
138 |
|
139 |
/********** CLASS CONSTRUCTION **********/
|
140 |
|
@@ -181,9 +189,6 @@ class SEO_Ultimate {
|
|
181 |
//If we're deactivating the plugin, then call the deactivation function
|
182 |
register_deactivation_hook($this->plugin_file_path, array(&$this, 'deactivate'));
|
183 |
|
184 |
-
//If we're uninstalling the plugin, then call the uninstallation function
|
185 |
-
register_uninstall_hook($this->plugin_file_path, 'su_uninstall');
|
186 |
-
|
187 |
|
188 |
/********** ACTION & FILTER HOOKS **********/
|
189 |
|
@@ -193,45 +198,56 @@ class SEO_Ultimate {
|
|
193 |
//Hook to output all <head> code
|
194 |
add_action('wp_head', array(&$this, 'template_head'), 1);
|
195 |
|
196 |
-
//Hook to include JavaScript and CSS
|
197 |
-
add_action('admin_head', array(&$this, 'admin_includes'));
|
198 |
-
|
199 |
-
//Hook to add plugin notice actions
|
200 |
-
add_action('admin_head', array(&$this, 'plugin_page_notices'));
|
201 |
-
|
202 |
-
//Hook to remove other plugins' notices from our admin pages
|
203 |
-
add_action('admin_head', array(&$this, 'remove_admin_notices'));
|
204 |
-
|
205 |
-
if (!get_option('blog_public')) {
|
206 |
-
//Add admin-wide notice
|
207 |
-
add_action('admin_notices', array(&$this, 'private_blog_admin_notice'));
|
208 |
-
|
209 |
-
//Remove duplicate Robots Meta notice
|
210 |
-
suwp::remove_instance_action('admin_footer', 'RobotsMeta_Admin', 'blog_public_warning');
|
211 |
-
}
|
212 |
-
|
213 |
-
//When loading the admin menu, call on our menu constructor function.
|
214 |
-
//For future-proofing purposes, we specifically state the default priority of 10,
|
215 |
-
//since some modules set a priority of 9 with the specific intention of running
|
216 |
-
//before this main plugin's hook.
|
217 |
-
add_action('admin_menu', array(&$this, 'add_menus'), 10);
|
218 |
-
|
219 |
-
//Hook to customize contextual help
|
220 |
-
add_filter('contextual_help', array(&$this, 'admin_help'), 10, 2);
|
221 |
-
|
222 |
-
//Postmeta box hooks
|
223 |
-
add_action('admin_menu', array(&$this, 'add_postmeta_box'));
|
224 |
-
add_action('save_post', array(&$this, 'save_postmeta_box'), 10, 2);
|
225 |
-
|
226 |
-
//Display info on new versions
|
227 |
-
add_action('in_plugin_update_message-'.plugin_basename($this->plugin_file_path), array(&$this, 'plugin_update_info'), 10, 2);
|
228 |
-
|
229 |
//Log this visitor!
|
230 |
if ($this->get_setting('log_hits', true, 'settings')) {
|
231 |
add_filter('redirect_canonical', array(&$this, 'log_redirect_canonical'));
|
232 |
add_filter('wp_redirect', array(&$this, 'log_redirect'), 10, 2);
|
233 |
add_filter('status_header', array(&$this, 'log_hit'), 10, 2);
|
234 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
235 |
}
|
236 |
|
237 |
/**
|
@@ -255,9 +271,6 @@ class SEO_Ultimate {
|
|
255 |
*/
|
256 |
function install() {
|
257 |
|
258 |
-
//Add the database table
|
259 |
-
$this->db_setup();
|
260 |
-
|
261 |
//Load settings file if present
|
262 |
if (!isset($this->dbdata['settings']) && is_readable($settingsfile = $this->plugin_dir_path.'settings.txt')) {
|
263 |
$import = base64_decode(file_get_contents($settingsfile));
|
@@ -273,9 +286,7 @@ class SEO_Ultimate {
|
|
273 |
* @param string $oldversion The version that was last installed.
|
274 |
*/
|
275 |
function upgrade($oldversion) {
|
276 |
-
|
277 |
-
//Upgrade database schemas if needed
|
278 |
-
$this->db_setup();
|
279 |
}
|
280 |
|
281 |
/**
|
@@ -348,9 +359,6 @@ class SEO_Ultimate {
|
|
348 |
|
349 |
//Stop the database data from being re-saved
|
350 |
remove_action('shutdown', array(&$this, 'save_dbdata'));
|
351 |
-
|
352 |
-
//Delete the hits table
|
353 |
-
mysql_query("DROP TABLE IF EXISTS ".$this->get_table_name('hits'));
|
354 |
}
|
355 |
|
356 |
|
@@ -370,11 +378,11 @@ class SEO_Ultimate {
|
|
370 |
function load_plugin_data($plugin_path) {
|
371 |
|
372 |
//Load plugin path/URL information
|
373 |
-
$
|
374 |
-
$this->plugin_dir_path = trailingslashit(dirname(trailingslashit(WP_PLUGIN_DIR)
|
375 |
-
$this->plugin_file_path =
|
376 |
-
$this->plugin_dir_url = trailingslashit(plugins_url(dirname(plugin_basename
|
377 |
-
$this->plugin_file_url = $this->
|
378 |
}
|
379 |
|
380 |
/**
|
@@ -457,7 +465,9 @@ class SEO_Ultimate {
|
|
457 |
$this->modules[$module]->module_key = $module;
|
458 |
|
459 |
//Tell the module what its URL is
|
460 |
-
$this->modules[$module]->
|
|
|
|
|
461 |
$this->modules[$module]->module_url = $mdirurl . $file;
|
462 |
|
463 |
/*
|
@@ -508,9 +518,9 @@ class SEO_Ultimate {
|
|
508 |
$this->remove_cron_jobs();
|
509 |
|
510 |
//Tell the modules what their plugin page hooks are
|
511 |
-
foreach ($this->modules as $key => $module)
|
512 |
$this->modules[$key]->plugin_page_hook =
|
513 |
-
$this->modules[$key]->get_menu_parent_hook().'_page_'.$this->key_to_hook($key);
|
514 |
|
515 |
if (!$this->module_exists($this->default_menu_module)) {
|
516 |
foreach ($this->modules as $key => $module) {
|
@@ -545,55 +555,14 @@ class SEO_Ultimate {
|
|
545 |
|
546 |
//Only run init tasks after all other init functions are completed for all modules
|
547 |
foreach ($this->modules as $key => $module) {
|
|
|
|
|
|
|
|
|
548 |
$this->modules[$key]->init();
|
549 |
}
|
550 |
}
|
551 |
|
552 |
-
|
553 |
-
/********** DATABASE FUNCTIONS **********/
|
554 |
-
|
555 |
-
/**
|
556 |
-
* Will create or update the database table.
|
557 |
-
*
|
558 |
-
* @since 0.1
|
559 |
-
* @uses get_table_name()
|
560 |
-
*/
|
561 |
-
function db_setup() {
|
562 |
-
|
563 |
-
$sql = "CREATE TABLE " . $this->get_table_name('hits') . " (
|
564 |
-
id BIGINT NOT NULL AUTO_INCREMENT,
|
565 |
-
time INT NOT NULL ,
|
566 |
-
ip_address VARCHAR(255) NOT NULL,
|
567 |
-
user_agent VARCHAR(255) NOT NULL,
|
568 |
-
url TEXT NOT NULL,
|
569 |
-
redirect_url TEXT NOT NULL,
|
570 |
-
redirect_trigger VARCHAR(255) NOT NULL,
|
571 |
-
referer TEXT NOT NULL,
|
572 |
-
status_code SMALLINT(3) NOT NULL,
|
573 |
-
is_new BOOL NOT NULL,
|
574 |
-
PRIMARY KEY (id)
|
575 |
-
);";
|
576 |
-
|
577 |
-
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
578 |
-
dbDelta($sql);
|
579 |
-
}
|
580 |
-
|
581 |
-
/**
|
582 |
-
* Returns a full, prefixed MySQL table name.
|
583 |
-
*
|
584 |
-
* @since 0.1
|
585 |
-
*
|
586 |
-
* @param string $shortname The non-prefixed table name.
|
587 |
-
* @return string The full, prefixed table name.
|
588 |
-
*/
|
589 |
-
function get_table_name($shortname) {
|
590 |
-
global $wpdb;
|
591 |
-
if ($shortname == 'hits')
|
592 |
-
return $wpdb->prefix . "sds_hits";
|
593 |
-
else
|
594 |
-
return '';
|
595 |
-
}
|
596 |
-
|
597 |
/**
|
598 |
* Gets the value of a module setting.
|
599 |
*
|
@@ -650,9 +619,9 @@ class SEO_Ultimate {
|
|
650 |
* @uses $hit
|
651 |
*/
|
652 |
function save_hit() {
|
653 |
-
|
654 |
-
if (!empty($this->hit) && $this->get_setting('log_hits', true, 'settings')
|
655 |
-
|
656 |
}
|
657 |
|
658 |
/**
|
@@ -671,15 +640,10 @@ class SEO_Ultimate {
|
|
671 |
|
672 |
//Only log hits from non-logged-in users
|
673 |
if (!is_user_logged_in()) {
|
674 |
-
global $wpdb;
|
675 |
|
676 |
//Get the current URL
|
677 |
$url = suurl::current();
|
678 |
|
679 |
-
//Have we seen this URL before?
|
680 |
-
$table = $this->get_table_name('hits');
|
681 |
-
$is_new = (count($wpdb->get_results($wpdb->prepare("SELECT url FROM $table WHERE url = %s AND is_new = 0", $url))) == 0);
|
682 |
-
|
683 |
//Put it all into an array
|
684 |
$data = array(
|
685 |
'time' => time()
|
@@ -690,7 +654,6 @@ class SEO_Ultimate {
|
|
690 |
, 'redirect_trigger' => $this->hit_redirect_trigger
|
691 |
, 'referer' => $_SERVER['HTTP_REFERER']
|
692 |
, 'status_code' => $status_code
|
693 |
-
, 'is_new' => $is_new
|
694 |
);
|
695 |
|
696 |
//We don't want to overwrite a redirect URL if it's already been logged
|
@@ -779,7 +742,7 @@ class SEO_Ultimate {
|
|
779 |
//Show a module on the menu only if it provides a menu title and it doesn't have a parent module
|
780 |
if ($module->get_menu_title() && !$module->get_parent_module()) {
|
781 |
|
782 |
-
//If the module is hidden, put the module under a non-
|
783 |
//(this will let the module's admin page be loaded, but it won't show up on the menu)
|
784 |
if ($this->dbdata['modules'][$key] > SU_MODULE_HIDDEN || !count($this->dbdata['modules']))
|
785 |
$parent = $module->get_menu_parent();
|
@@ -931,31 +894,89 @@ class SEO_Ultimate {
|
|
931 |
function admin_includes() {
|
932 |
|
933 |
//Global CSS
|
934 |
-
|
935 |
|
936 |
//Figure out what plugin admin page we're on
|
937 |
global $plugin_page;
|
938 |
$pp = $this->hook_to_key($plugin_page);
|
939 |
|
940 |
-
|
|
|
941 |
|
942 |
-
|
943 |
-
if (strcmp($key, $pp) == 0) {
|
944 |
-
|
945 |
-
//We're viewing a module page, so print links to the CSS/JavaScript files loaded for all modules
|
946 |
-
echo "\n<link rel='stylesheet' type='text/css' href='".$this->plugin_dir_url."modules/modules.css?v=".SU_VERSION."' />\n";
|
947 |
-
echo "\n<script type='text/javascript' src='".$this->plugin_dir_url."modules/modules.js?v=".SU_VERSION."'></script>\n";
|
948 |
|
949 |
-
//
|
950 |
-
|
951 |
-
|
|
|
952 |
|
953 |
-
//
|
954 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
955 |
}
|
956 |
}
|
957 |
}
|
958 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
959 |
/**
|
960 |
* Replaces WordPress's default contextual help with postmeta help when appropriate.
|
961 |
*
|
@@ -1059,14 +1080,113 @@ class SEO_Ultimate {
|
|
1059 |
* @param obejct $r The response object from the WordPress Plugin Directory.
|
1060 |
*/
|
1061 |
function plugin_update_info($plugin_data, $r) {
|
1062 |
-
|
1063 |
-
|
1064 |
-
|
1065 |
-
|
1066 |
-
|
1067 |
echo "<span class='su-plugin-update-info'><br />$info</span>";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1068 |
}
|
1069 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1070 |
}
|
1071 |
|
1072 |
/**
|
80 |
*/
|
81 |
var $plugin_dir_url;
|
82 |
|
83 |
+
/**
|
84 |
+
* The plugin file relative to the /wp-content/plugins/ directory.
|
85 |
+
* Should be "seo-ultimate/seo-ultimate.php"
|
86 |
+
*
|
87 |
+
* @since 2.1
|
88 |
+
*/
|
89 |
+
var $plugin_basename = '';
|
90 |
+
|
91 |
/**
|
92 |
* The array to be inserted into the hits table.
|
93 |
*
|
141 |
$this->upgrade_to_08();
|
142 |
|
143 |
//Save
|
|
|
144 |
add_action('shutdown', array(&$this, 'save_hit'));
|
145 |
+
add_action('shutdown', array(&$this, 'save_dbdata'));
|
146 |
|
147 |
/********** CLASS CONSTRUCTION **********/
|
148 |
|
189 |
//If we're deactivating the plugin, then call the deactivation function
|
190 |
register_deactivation_hook($this->plugin_file_path, array(&$this, 'deactivate'));
|
191 |
|
|
|
|
|
|
|
192 |
|
193 |
/********** ACTION & FILTER HOOKS **********/
|
194 |
|
198 |
//Hook to output all <head> code
|
199 |
add_action('wp_head', array(&$this, 'template_head'), 1);
|
200 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
201 |
//Log this visitor!
|
202 |
if ($this->get_setting('log_hits', true, 'settings')) {
|
203 |
add_filter('redirect_canonical', array(&$this, 'log_redirect_canonical'));
|
204 |
add_filter('wp_redirect', array(&$this, 'log_redirect'), 10, 2);
|
205 |
add_filter('status_header', array(&$this, 'log_hit'), 10, 2);
|
206 |
}
|
207 |
+
|
208 |
+
//Admin-only hooks
|
209 |
+
if (is_admin()) {
|
210 |
+
|
211 |
+
//Hook to include JavaScript and CSS
|
212 |
+
add_action('admin_enqueue_scripts', array(&$this, 'admin_includes'));
|
213 |
+
|
214 |
+
//Hook to add plugin notice actions
|
215 |
+
add_action('admin_head', array(&$this, 'plugin_page_notices'));
|
216 |
+
|
217 |
+
//Hook to remove other plugins' notices from our admin pages
|
218 |
+
add_action('admin_head', array(&$this, 'remove_admin_notices'));
|
219 |
+
|
220 |
+
if (!get_option('blog_public')) {
|
221 |
+
//Add admin-wide notice
|
222 |
+
add_action('admin_notices', array(&$this, 'private_blog_admin_notice'));
|
223 |
+
|
224 |
+
//Remove duplicate Robots Meta notice
|
225 |
+
suwp::remove_instance_action('admin_footer', 'RobotsMeta_Admin', 'blog_public_warning');
|
226 |
+
}
|
227 |
+
|
228 |
+
//When loading the admin menu, call on our menu constructor function.
|
229 |
+
//For future-proofing purposes, we specifically state the default priority of 10,
|
230 |
+
//since some modules set a priority of 9 with the specific intention of running
|
231 |
+
//before this main plugin's hook.
|
232 |
+
add_action('admin_menu', array(&$this, 'add_menus'), 10);
|
233 |
+
|
234 |
+
//Hook to customize contextual help
|
235 |
+
add_filter('contextual_help', array(&$this, 'admin_help'), 10, 2);
|
236 |
+
|
237 |
+
//Postmeta box hooks
|
238 |
+
add_action('admin_menu', array(&$this, 'add_postmeta_box'));
|
239 |
+
add_action('save_post', array(&$this, 'save_postmeta_box'), 10, 2);
|
240 |
+
|
241 |
+
//Display info on new versions
|
242 |
+
add_action("in_plugin_update_message-{$this->plugin_basename}", array(&$this, 'plugin_update_info'), 10, 2);
|
243 |
+
add_filter('transient_update_plugins', array(&$this, 'add_plugin_upgrade_notice'));
|
244 |
+
|
245 |
+
//Add plugin action links
|
246 |
+
add_filter("plugin_action_links_{$this->plugin_basename}", array(&$this, 'plugin_action_links'));
|
247 |
+
|
248 |
+
//Add module links to plugin listing
|
249 |
+
add_filter('plugin_row_meta', array(&$this, 'plugin_row_meta_filter'), 10, 2);
|
250 |
+
}
|
251 |
}
|
252 |
|
253 |
/**
|
271 |
*/
|
272 |
function install() {
|
273 |
|
|
|
|
|
|
|
274 |
//Load settings file if present
|
275 |
if (!isset($this->dbdata['settings']) && is_readable($settingsfile = $this->plugin_dir_path.'settings.txt')) {
|
276 |
$import = base64_decode(file_get_contents($settingsfile));
|
286 |
* @param string $oldversion The version that was last installed.
|
287 |
*/
|
288 |
function upgrade($oldversion) {
|
289 |
+
define('SU_UPGRADE', true);
|
|
|
|
|
290 |
}
|
291 |
|
292 |
/**
|
359 |
|
360 |
//Stop the database data from being re-saved
|
361 |
remove_action('shutdown', array(&$this, 'save_dbdata'));
|
|
|
|
|
|
|
362 |
}
|
363 |
|
364 |
|
378 |
function load_plugin_data($plugin_path) {
|
379 |
|
380 |
//Load plugin path/URL information
|
381 |
+
$this->plugin_basename = plugin_basename($plugin_path);
|
382 |
+
$this->plugin_dir_path = trailingslashit(dirname(trailingslashit(WP_PLUGIN_DIR).$this->plugin_basename));
|
383 |
+
$this->plugin_file_path = trailingslashit(WP_PLUGIN_DIR).$this->plugin_basename;
|
384 |
+
$this->plugin_dir_url = trailingslashit(plugins_url(dirname($this->plugin_basename)));
|
385 |
+
$this->plugin_file_url = trailingslashit(plugins_url($this->plugin_basename));
|
386 |
}
|
387 |
|
388 |
/**
|
465 |
$this->modules[$module]->module_key = $module;
|
466 |
|
467 |
//Tell the module what its URL is
|
468 |
+
$this->modules[$module]->module_dir_rel_url = $mdirrelurl = "modules/$folder/";
|
469 |
+
$this->modules[$module]->module_rel_url = $mdirrelurl . $file;
|
470 |
+
$this->modules[$module]->module_dir_url = $mdirurl = $this->plugin_dir_url . $mdirrelurl;
|
471 |
$this->modules[$module]->module_url = $mdirurl . $file;
|
472 |
|
473 |
/*
|
518 |
$this->remove_cron_jobs();
|
519 |
|
520 |
//Tell the modules what their plugin page hooks are
|
521 |
+
foreach ($this->modules as $key => $module)
|
522 |
$this->modules[$key]->plugin_page_hook =
|
523 |
+
$this->modules[$key]->get_menu_parent_hook().'_page_'.$this->key_to_hook($this->modules[$key]->get_module_or_parent_key());
|
524 |
|
525 |
if (!$this->module_exists($this->default_menu_module)) {
|
526 |
foreach ($this->modules as $key => $module) {
|
555 |
|
556 |
//Only run init tasks after all other init functions are completed for all modules
|
557 |
foreach ($this->modules as $key => $module) {
|
558 |
+
if (count($this->modules[$key]->get_children_admin_page_tabs()))
|
559 |
+
$this->modules[$key]->admin_page_tabs_init();
|
560 |
+
if (defined('SU_UPGRADE'))
|
561 |
+
$this->modules[$key]->upgrade();
|
562 |
$this->modules[$key]->init();
|
563 |
}
|
564 |
}
|
565 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
566 |
/**
|
567 |
* Gets the value of a module setting.
|
568 |
*
|
619 |
* @uses $hit
|
620 |
*/
|
621 |
function save_hit() {
|
622 |
+
|
623 |
+
if (!empty($this->hit) && $this->get_setting('log_hits', true, 'settings'))
|
624 |
+
do_action('su_save_hit', $this->hit);
|
625 |
}
|
626 |
|
627 |
/**
|
640 |
|
641 |
//Only log hits from non-logged-in users
|
642 |
if (!is_user_logged_in()) {
|
|
|
643 |
|
644 |
//Get the current URL
|
645 |
$url = suurl::current();
|
646 |
|
|
|
|
|
|
|
|
|
647 |
//Put it all into an array
|
648 |
$data = array(
|
649 |
'time' => time()
|
654 |
, 'redirect_trigger' => $this->hit_redirect_trigger
|
655 |
, 'referer' => $_SERVER['HTTP_REFERER']
|
656 |
, 'status_code' => $status_code
|
|
|
657 |
);
|
658 |
|
659 |
//We don't want to overwrite a redirect URL if it's already been logged
|
742 |
//Show a module on the menu only if it provides a menu title and it doesn't have a parent module
|
743 |
if ($module->get_menu_title() && !$module->get_parent_module()) {
|
744 |
|
745 |
+
//If the module is hidden, put the module under a non-existent menu parent
|
746 |
//(this will let the module's admin page be loaded, but it won't show up on the menu)
|
747 |
if ($this->dbdata['modules'][$key] > SU_MODULE_HIDDEN || !count($this->dbdata['modules']))
|
748 |
$parent = $module->get_menu_parent();
|
894 |
function admin_includes() {
|
895 |
|
896 |
//Global CSS
|
897 |
+
$this->queue_css('plugin', 'global');
|
898 |
|
899 |
//Figure out what plugin admin page we're on
|
900 |
global $plugin_page;
|
901 |
$pp = $this->hook_to_key($plugin_page);
|
902 |
|
903 |
+
if (strlen($pp)) {
|
904 |
+
$outputted_module_files = false;
|
905 |
|
906 |
+
foreach ($this->modules as $key => $module) {
|
|
|
|
|
|
|
|
|
|
|
907 |
|
908 |
+
//Does the current admin page belong to this module?
|
909 |
+
if (strcmp($key, $pp) == 0)
|
910 |
+
//Output AJAX page var fix
|
911 |
+
echo "\n<script type='text/javascript'>pagenow = '".su_esc_attr($module->plugin_page_hook)."';</script>\n";
|
912 |
|
913 |
+
//Does the current admin page belong to this module or its parent?
|
914 |
+
if (strcmp($key, $pp) == 0 || strcmp($module->get_parent_module(), $pp) == 0) {
|
915 |
+
|
916 |
+
//We're viewing a module page, so print links to the CSS/JavaScript files loaded for all modules
|
917 |
+
if (!$outputted_module_files) {
|
918 |
+
$this->queue_css('modules', 'modules');
|
919 |
+
$this->queue_js ('modules', 'modules');
|
920 |
+
$outputted_module_files = true;
|
921 |
+
}
|
922 |
+
|
923 |
+
//Print links to the module's CSS and JavaScript.
|
924 |
+
$this->queue_css($module->module_dir_rel_url, $module->get_module_key());
|
925 |
+
$this->queue_js ($module->module_dir_rel_url, $module->get_module_key());
|
926 |
+
|
927 |
+
//Queue up the module's columns, if any
|
928 |
+
if (count($columns = $module->get_admin_table_columns()))
|
929 |
+
register_column_headers($module->plugin_page_hook, $columns);
|
930 |
+
}
|
931 |
}
|
932 |
}
|
933 |
}
|
934 |
|
935 |
+
/**
|
936 |
+
* Output an HTML <link> to a CSS file if the CSS file exists.
|
937 |
+
* Includes a version-based query string parameter to prevent caching old versions.
|
938 |
+
*
|
939 |
+
* @since 2.1
|
940 |
+
* @uses $plugin_dir_path
|
941 |
+
* @uses $plugin_dir_url
|
942 |
+
* @uses SU_VERSION
|
943 |
+
*
|
944 |
+
* @param string $relurl The URL to the CSS file, relative to the plugin directory.
|
945 |
+
*/
|
946 |
+
function queue_css($reldir, $filename) {
|
947 |
+
$this->queue_file($reldir, $filename, '.css', 'wp_enqueue_style');
|
948 |
+
}
|
949 |
+
|
950 |
+
/**
|
951 |
+
* Output an HTML <script> tag if the corresponding JavaScript file exists.
|
952 |
+
* Includes a version-based query string parameter to prevent caching old versions.
|
953 |
+
*
|
954 |
+
* @since 2.1
|
955 |
+
* @uses $plugin_dir_path
|
956 |
+
* @uses $plugin_dir_url
|
957 |
+
* @uses SU_VERSION
|
958 |
+
*
|
959 |
+
* @param string $relurl The URL to the JavaScript file, relative to the plugin directory.
|
960 |
+
*/
|
961 |
+
function queue_js($reldir, $filename) {
|
962 |
+
$this->queue_file($reldir, $filename, '.js', 'wp_enqueue_script');
|
963 |
+
}
|
964 |
+
|
965 |
+
/**
|
966 |
+
* Queues a CSS/JS file with WordPress if the file exists.
|
967 |
+
*
|
968 |
+
* @since 2.1
|
969 |
+
*/
|
970 |
+
function queue_file($reldir, $filename, $ext, $func) {
|
971 |
+
if (!function_exists($func)) return;
|
972 |
+
$reldir = untrailingslashit($reldir);
|
973 |
+
$dirid = str_replace('/', '-', $reldir);
|
974 |
+
$relurl = $reldir . '/';
|
975 |
+
$file = sustr::endwith($filename, $ext);
|
976 |
+
if (file_exists($this->plugin_dir_path.$relurl.$file))
|
977 |
+
$func("su-$dirid-$filename", $this->plugin_dir_url.$relurl.$file, array(), SU_VERSION);
|
978 |
+
}
|
979 |
+
|
980 |
/**
|
981 |
* Replaces WordPress's default contextual help with postmeta help when appropriate.
|
982 |
*
|
1080 |
* @param obejct $r The response object from the WordPress Plugin Directory.
|
1081 |
*/
|
1082 |
function plugin_update_info($plugin_data, $r) {
|
1083 |
+
//If a new version is available...
|
1084 |
+
if ($r && $r->new_version && !is_plugin_active('changelogger/changelogger.php'))
|
1085 |
+
//If info on the new version is available...
|
1086 |
+
if ($info = $this->get_plugin_update_info($r->new_version))
|
1087 |
+
//Output the new-version info
|
1088 |
echo "<span class='su-plugin-update-info'><br />$info</span>";
|
1089 |
+
}
|
1090 |
+
|
1091 |
+
/**
|
1092 |
+
* Loads new-version info and returns it as a string.
|
1093 |
+
*
|
1094 |
+
* @since 2.1
|
1095 |
+
*
|
1096 |
+
* @return string
|
1097 |
+
*/
|
1098 |
+
function get_plugin_update_info($nv) {
|
1099 |
+
|
1100 |
+
$info = suwp::load_webpage("http://www.seodesignsolutions.com/apis/su/update-info/?ov=".urlencode(SU_VERSION)."&nv=".urlencode($nv), SU_USER_AGENT);
|
1101 |
+
if ($info) {
|
1102 |
+
$info = strip_tags($info, "<br><a><b><i><span>");
|
1103 |
+
$info = str_replace('backup your database', '<a href="'.suwp::get_backup_url().'">backup your database</a>', $info);
|
1104 |
+
return $info;
|
1105 |
+
}
|
1106 |
+
|
1107 |
+
return '';
|
1108 |
+
}
|
1109 |
+
|
1110 |
+
/**
|
1111 |
+
* Provides WordPress with SEO Ultimate's custom update info notices.
|
1112 |
+
*
|
1113 |
+
* @since 2.1
|
1114 |
+
*/
|
1115 |
+
function add_plugin_upgrade_notice($current) {
|
1116 |
+
if (isset($current->response[$this->plugin_basename]))
|
1117 |
+
if (!strlen($current->response[$this->plugin_basename]->upgrade_notice))
|
1118 |
+
$current->response[$this->plugin_basename]->upgrade_notice = $this->get_plugin_update_info($current->response[$this->plugin_basename]->new_version);
|
1119 |
+
return $current;
|
1120 |
+
}
|
1121 |
+
|
1122 |
+
/**
|
1123 |
+
* Filters the list of plugin action links for SEO Ultimate and adds links to certain modules if those modules are enabled.
|
1124 |
+
*
|
1125 |
+
* @since 2.1
|
1126 |
+
*
|
1127 |
+
* @param array $actions The array of <a> links.
|
1128 |
+
* @return array The $actions array with additional links.
|
1129 |
+
*/
|
1130 |
+
function plugin_action_links($actions) {
|
1131 |
+
$su_actions = array(
|
1132 |
+
'uninstall' => __("Uninstall", 'seo-ultimate')
|
1133 |
+
);
|
1134 |
+
|
1135 |
+
foreach ($su_actions as $module => $anchor) {
|
1136 |
+
if ($this->module_exists($module)) {
|
1137 |
+
$url = $this->modules[$module]->get_admin_url();
|
1138 |
+
$actions[] = "<a href='$url'>$anchor</a>";
|
1139 |
}
|
1140 |
}
|
1141 |
+
|
1142 |
+
return $actions;
|
1143 |
+
}
|
1144 |
+
|
1145 |
+
/**
|
1146 |
+
* Outputs a list of active modules on SEO Ultimate's plugin page listing.
|
1147 |
+
*
|
1148 |
+
* @since 2.1
|
1149 |
+
*/
|
1150 |
+
function plugin_row_meta_filter($plugin_meta, $plugin_file) {
|
1151 |
+
if ($plugin_file == $this->plugin_basename)
|
1152 |
+
echo $this->get_module_links_list('<p id="su-active-modules-list">'.__('Active Modules: ', 'seo-ultimate'), ' | ', '</p>');
|
1153 |
+
|
1154 |
+
return $plugin_meta;
|
1155 |
+
}
|
1156 |
+
|
1157 |
+
/**
|
1158 |
+
* Returns a list of links to active, independent modules.
|
1159 |
+
*
|
1160 |
+
* @since 2.1
|
1161 |
+
*/
|
1162 |
+
function get_module_links_list($before = '', $between = ' | ', $after = '') {
|
1163 |
+
|
1164 |
+
$list = '';
|
1165 |
+
|
1166 |
+
if (count($this->modules)) {
|
1167 |
+
|
1168 |
+
$modules = array();
|
1169 |
+
foreach ($this->modules as $key => $x_module) {
|
1170 |
+
$module =& $this->modules[$key];
|
1171 |
+
if (strcasecmp(get_parent_class($module), 'SU_Module') == 0 && $module->is_independent_module()) {
|
1172 |
+
$modules[$module->get_module_title()] = $module->get_admin_url();
|
1173 |
+
}
|
1174 |
+
}
|
1175 |
+
|
1176 |
+
ksort($modules);
|
1177 |
+
|
1178 |
+
$list = $before;
|
1179 |
+
$first = true;
|
1180 |
+
foreach ($modules as $title => $url) {
|
1181 |
+
$url = su_esc_attr($url);
|
1182 |
+
$title = str_replace(' ', ' ', su_esc_html($title));
|
1183 |
+
if ($first) $first = false; else $list .= $between;
|
1184 |
+
$list .= "<a href='$url'>$title</a>";
|
1185 |
+
}
|
1186 |
+
$list .= $after;
|
1187 |
+
}
|
1188 |
+
|
1189 |
+
return $list;
|
1190 |
}
|
1191 |
|
1192 |
/**
|
plugin/class.su-hitset.php
DELETED
@@ -1,112 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* A class that stores the results of a query to to the hits table.
|
4 |
-
*
|
5 |
-
* @version 1.1.2
|
6 |
-
*/
|
7 |
-
class SU_HitSet {
|
8 |
-
|
9 |
-
var $result;
|
10 |
-
var $where;
|
11 |
-
var $module_key;
|
12 |
-
|
13 |
-
function SU_HitSet($mk, $where = false) {
|
14 |
-
$this->module_key = $mk;
|
15 |
-
if ($where) $where = " WHERE $where";
|
16 |
-
$this->where = $where;
|
17 |
-
$this->query_db();
|
18 |
-
}
|
19 |
-
|
20 |
-
function query_db() {
|
21 |
-
global $wpdb;
|
22 |
-
$table = SEO_Ultimate::get_table_name('hits');
|
23 |
-
$this->result = $wpdb->get_results("SELECT * FROM {$table}{$this->where} ORDER BY id DESC", ARRAY_A);
|
24 |
-
}
|
25 |
-
|
26 |
-
function have_hits() {
|
27 |
-
return (is_array($this->result) && count($this->result) > 0);
|
28 |
-
}
|
29 |
-
|
30 |
-
function hits_count() {
|
31 |
-
return count($this->result);
|
32 |
-
}
|
33 |
-
|
34 |
-
function admin_table($actions_callback = false, $highlight_new = true) {
|
35 |
-
|
36 |
-
if (!$this->result || !$this->where) return;
|
37 |
-
|
38 |
-
//Initialize variables
|
39 |
-
global $wpdb;
|
40 |
-
|
41 |
-
$table = SEO_Ultimate::get_table_name('hits');
|
42 |
-
|
43 |
-
$allfields = array(
|
44 |
-
'time' => __("Date", 'seo-ultimate')
|
45 |
-
, 'ip_address' => __("IP Address", 'seo-ultimate')
|
46 |
-
, 'user_agent' => __("User Agent", 'seo-ultimate')
|
47 |
-
, 'url' => __("URL Requested", 'seo-ultimate')
|
48 |
-
, 'redirect_url' => __("Redirected To", 'seo-ultimate')
|
49 |
-
, 'status_code' => __("Status Code", 'seo-ultimate')
|
50 |
-
, 'referer' => __("Referring URL", 'seo-ultimate')
|
51 |
-
);
|
52 |
-
|
53 |
-
$fields = array();
|
54 |
-
|
55 |
-
foreach ($allfields as $col => $title) {
|
56 |
-
if (strpos($this->where, " $col=") === false) $fields[$col] = $title;
|
57 |
-
}
|
58 |
-
|
59 |
-
$fields = apply_filters("su_{$this->module_key}_hits_table_columns", $fields);
|
60 |
-
|
61 |
-
echo "<table class='widefat' cellspacing='0'>\n\t<thead><tr>\n";
|
62 |
-
|
63 |
-
foreach ($fields as $title) {
|
64 |
-
$class = str_replace(' ', '-', strtolower($title));
|
65 |
-
echo "\t\t<th scope='col' class='hit-$class'>$title</th>\n";
|
66 |
-
}
|
67 |
-
|
68 |
-
echo "\t</tr></thead>\n\t<tbody>\n";
|
69 |
-
|
70 |
-
foreach ($this->result as $row) {
|
71 |
-
|
72 |
-
if ($highlight_new && $row['is_new']) $class = ' class="new-hit"'; else $class='';
|
73 |
-
echo "\t\t<tr$class>\n";
|
74 |
-
|
75 |
-
foreach ($fields as $col => $title) {
|
76 |
-
$cell = htmlspecialchars($row[$col]);
|
77 |
-
|
78 |
-
switch ($col) {
|
79 |
-
case 'time':
|
80 |
-
$date = date_i18n(get_option('date_format'), $cell);
|
81 |
-
$time = date_i18n(get_option('time_format'), $cell);
|
82 |
-
$cell = sprintf(__('%1$s<br />%2$s', 'seo-ultimate'), $date, $time);
|
83 |
-
break;
|
84 |
-
case 'user_agent':
|
85 |
-
$text = sustr::truncate($cell, 50);
|
86 |
-
$ua = su_esc_attr($cell);
|
87 |
-
$cell = "<abbr title='$ua'>$text</abbr>";
|
88 |
-
break;
|
89 |
-
case 'url':
|
90 |
-
if (is_array($actions_callback)) {
|
91 |
-
$actions = call_user_func($actions_callback, $row);
|
92 |
-
$actions = apply_filters("su_{$this->module_key}_hits_table_actions", $actions, $row);
|
93 |
-
$cell = SU_Module::hover_row($cell, $actions);
|
94 |
-
}
|
95 |
-
break;
|
96 |
-
}
|
97 |
-
|
98 |
-
$cell = apply_filters("su_{$this->module_key}_hits_table_{$col}_cell", $cell, $row);
|
99 |
-
|
100 |
-
$class = str_replace(' ', '-', strtolower($title));
|
101 |
-
echo "\t\t\t<td class='hit-$class'>$cell</td>\n";
|
102 |
-
}
|
103 |
-
echo "\t\t</tr>\n";
|
104 |
-
|
105 |
-
$wpdb->update($table, array('is_new' => 0), array('id' => $row['id']));
|
106 |
-
}
|
107 |
-
|
108 |
-
echo "\t</tbody>\n</table>\n";
|
109 |
-
}
|
110 |
-
|
111 |
-
}
|
112 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
plugin/su-functions.php
CHANGED
@@ -102,10 +102,19 @@ function su_esc_attr($str) {
|
|
102 |
return $str;
|
103 |
}
|
104 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
105 |
/**
|
106 |
* Escapes HTML. Double-encodes existing entities (ideal for editable HTML).
|
107 |
*
|
108 |
-
* @
|
109 |
*
|
110 |
* @param string $str The string that potentially contains HTML.
|
111 |
* @return string The filtered string.
|
@@ -114,21 +123,4 @@ function su_esc_editable_html($str) {
|
|
114 |
return wp_specialchars($str, ENT_QUOTES, false, true);
|
115 |
}
|
116 |
|
117 |
-
|
118 |
-
/********** CLASS FUNCTION ALIASES **********/
|
119 |
-
|
120 |
-
/**
|
121 |
-
* Launches the uninstallation process.
|
122 |
-
* WordPress will call this when the plugin is uninstalled, as instructed by the register_uninstall_hook() call in {@link SEO_Ultimate::__construct()}.
|
123 |
-
*
|
124 |
-
* @since 0.1
|
125 |
-
* @uses $seo_ultimate
|
126 |
-
* @uses SEO_Ultimate::uninstall()
|
127 |
-
*/
|
128 |
-
function su_uninstall() {
|
129 |
-
global $seo_ultimate;
|
130 |
-
if (!$seo_ultimate) $seo_ultimate =& new SEO_Ultimate(__FILE__);
|
131 |
-
$seo_ultimate->uninstall();
|
132 |
-
}
|
133 |
-
|
134 |
?>
|
102 |
return $str;
|
103 |
}
|
104 |
|
105 |
+
/**
|
106 |
+
* Escapes HTML.
|
107 |
+
*
|
108 |
+
* @since 2.1
|
109 |
+
*/
|
110 |
+
function su_esc_html($str) {
|
111 |
+
return wp_specialchars($str); //Yes, this is deprecated... will switch to esc_html later...
|
112 |
+
}
|
113 |
+
|
114 |
/**
|
115 |
* Escapes HTML. Double-encodes existing entities (ideal for editable HTML).
|
116 |
*
|
117 |
+
* @since 1.5
|
118 |
*
|
119 |
* @param string $str The string that potentially contains HTML.
|
120 |
* @return string The filtered string.
|
123 |
return wp_specialchars($str, ENT_QUOTES, false, true);
|
124 |
}
|
125 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
126 |
?>
|
readme.txt
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
=== SEO Ultimate ===
|
2 |
Contributors: SEO Design Solutions
|
3 |
-
Tags: seo, google, yahoo, bing, search engines, admin, post, page, modules, title, meta, noindex, canonical, 404, robots.txt, htaccess, slugs, url, anchor, more, link, excerpt, permalink, links, autolinks, categories
|
4 |
Requires at least: 2.8
|
5 |
Tested up to: 2.9
|
6 |
-
Stable tag: 2.
|
7 |
|
8 |
This all-in-one SEO plugin gives you control over titles, noindex, meta data, slugs, canonical tags, "more" links, 404 error tracking, and more.
|
9 |
|
@@ -11,9 +11,9 @@ This all-in-one SEO plugin gives you control over titles, noindex, meta data, sl
|
|
11 |
|
12 |
= Recent Releases =
|
13 |
|
|
|
14 |
* Version 2.0 adds title tag editing for post tags
|
15 |
* Version 1.9 adds title tag editing for categories
|
16 |
-
* Version 1.8 adds basic auto-linking functionality
|
17 |
|
18 |
= Features =
|
19 |
|
@@ -38,10 +38,11 @@ SEO Ultimate is an all-in-one [SEO](http://www.seodesignsolutions.com/) plugin w
|
|
38 |
* **Canonicalizer**
|
39 |
* Point search engines to preferred content access points with `<link rel="canonical" />` tags.
|
40 |
* Go beyond the basic canonical tag functionality of WordPress 2.9+ with SEO Ultimate's support for category/tag/date/author archives.
|
41 |
-
* Redirect requests for non-
|
42 |
|
43 |
* **404 Monitor**
|
44 |
* 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.)
|
|
|
45 |
|
46 |
* **Linkbox Inserter**
|
47 |
* Encourage natural linkbuilding activity by adding textboxes to the end of your posts/pages that contain automatically-generated link HTML.
|
@@ -123,7 +124,7 @@ To install the plugin manually:
|
|
123 |
|
124 |
= Overview =
|
125 |
|
126 |
-
* **What it does:** The 404 Monitor keeps track of non-
|
127 |
|
128 |
* **Why it helps:** The 404 Monitor helps you spot 404 errors; then you can take steps to correct them to reduce link-juice loss from broken links.
|
129 |
|
@@ -131,22 +132,21 @@ To install the plugin manually:
|
|
131 |
|
132 |
If there are no 404 errors in the log, this is good and means there's no action required on your part.
|
133 |
|
134 |
-
=
|
135 |
|
136 |
-
|
137 |
|
138 |
-
* The "View"
|
139 |
-
* The "Google Cache"
|
140 |
-
* Once you've taken care of a 404 error, you can click the "
|
141 |
|
142 |
= Troubleshooting =
|
143 |
|
144 |
404 Monitor doesn't appear to work? Take these notes into consideration:
|
145 |
|
146 |
-
*
|
147 |
* In order for the 404 Monitor to track 404 errors, you must have "Pretty Permalinks" enabled under `Settings > Permalinks`.
|
148 |
* Some parts of your website may not be under WordPress's control; the 404 Monitor can't track 404 errors on non-WordPress website areas.
|
149 |
-
* The 404 Monitor doesn't record 404 errors generated by logged-in users.
|
150 |
|
151 |
|
152 |
|
@@ -177,7 +177,7 @@ On the 404 Monitor page, hover over a table row to access these options:
|
|
177 |
* The incoming links profile of competing websites.
|
178 |
* The external websites that your competitors are linking to.
|
179 |
|
180 |
-
* **Why it helps:** The Competition Researcher gives you quick access to specially-constructed search queries. You can study the search results to glean information about the general competition for specific keywords or information about specific competitors' websites.
|
181 |
|
182 |
* **How to use it:** Choose a tool based on the information you'd like to obtain, enter the keywords or competitors' domain names that you'd like to research, select options if desired, and then click Submit. The results will open in a new window.
|
183 |
|
@@ -336,7 +336,7 @@ The Module Manager lets you customize the visibility and accessibility of each m
|
|
336 |
|
337 |
* **Why it helps:** On the typical WordPress setup, the "more link" always has the same anchor text (e.g. "Read more of this entry"). Since internal anchor text conveys web page topicality to search engines, the "read more" phrase isn't a desirable anchor phrase. More Link Customizer lets you replace the boilerplate text with a new anchor that, by default, integrates your post titles (which will ideally be keyword-oriented).
|
338 |
|
339 |
-
* **How to use it:** On this page you can set the anchor text you'd like to use by default. The `{post}` variable will be replaced with the post's title. HTML and encoded entities are supported. If instead you decide that you'd like to use the default anchor text specified by your currently-active theme, just erase the contents of the textbox. The anchor text can be
|
340 |
|
341 |
= FAQ =
|
342 |
|
@@ -506,17 +506,15 @@ Here's information on each of the settings and its supported variables:
|
|
506 |
|
507 |
The Settings module lets you manage settings related to the SEO Ultimate plugin as a whole.
|
508 |
|
509 |
-
= Settings =
|
510 |
|
511 |
Here's information on some of the settings:
|
512 |
|
513 |
-
* **Enable attribution link** -- If enabled, the plugin will display an attribution link on your site.
|
514 |
-
|
515 |
-
* **Insert comments around HTML code insertions** -- If enabled, SEO Ultimate will use HTML comments to identify all code it inserts into your `<head>` tag. This is useful if you’re trying to figure out whether or not SEO Ultimate is inserting a certain piece of header code.
|
516 |
|
517 |
-
* **
|
518 |
|
519 |
-
* **
|
520 |
|
521 |
= FAQ =
|
522 |
|
@@ -536,16 +534,12 @@ Here's information on some of the settings:
|
|
536 |
SEO Ultimate's documentation is built into the plugin itself. Whenever you're viewing an SEO Ultimate page in your WordPress admin, you can click the "Help" tab in the upper-right-hand corner to view documentation for the area you're viewing.
|
537 |
|
538 |
* **How do I uninstall SEO Ultimate?**
|
539 |
-
1. Go to the `
|
540 |
-
2.
|
541 |
-
3. Click the
|
542 |
-
4. Click the "Yes, Delete these files" button. SEO Ultimate's files and database entries will be deleted.
|
543 |
|
544 |
* **Will all my settings be deleted if I delete SEO Ultimate in the Plugins manager?**
|
545 |
-
|
546 |
-
|
547 |
-
* **How do I remove the attribution link?**
|
548 |
-
Because of the tremendous effort put into this plugin, we ask that you please leave the link enabled. If you must disable it, you can do so under `Settings > SEO Ultimate`.
|
549 |
|
550 |
* **Where is the Plugin Settings page?**
|
551 |
The plugin settings page is located under `Settings > SEO Ultimate`.
|
@@ -570,17 +564,45 @@ Frequently asked questions, documentation, and troubleshooting tips for SEO Ulti
|
|
570 |
|
571 |
== Screenshots ==
|
572 |
|
573 |
-
1. The
|
574 |
-
2. The
|
575 |
-
3. The
|
576 |
-
4. The
|
577 |
-
5. The
|
578 |
-
6. The File Editor module
|
579 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
580 |
|
581 |
|
582 |
== Changelog ==
|
583 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
584 |
= Version 2.0 (April 29, 2010) =
|
585 |
* Feature: Title Rewriter can now edit the title tags of post tag archives
|
586 |
|
@@ -608,7 +630,7 @@ Frequently asked questions, documentation, and troubleshooting tips for SEO Ulti
|
|
608 |
= Version 1.7.1 (February 27, 2010) =
|
609 |
* Bugfix: Fixed conflict with Flexibility theme
|
610 |
* Bugfix: Comment administration no longer alters SEO Ultimate menu bubble counters
|
611 |
-
* Bugfix: SEO Ultimate menu icon is no longer
|
612 |
* Bugfix: Disabling visitor logging now disables all related code as well
|
613 |
* Bugfix: Module Manager: Fixed invalid HTML IDs
|
614 |
* Bugfix: Module Manager: Module titles are now consistent between enabled and disabled states
|
1 |
=== SEO Ultimate ===
|
2 |
Contributors: SEO Design Solutions
|
3 |
+
Tags: seo, google, yahoo, bing, search engines, admin, post, page, modules, title, meta, noindex, canonical, 404, robots.txt, htaccess, slugs, url, anchor, more, link, excerpt, permalink, links, autolinks, categories, uninstallable
|
4 |
Requires at least: 2.8
|
5 |
Tested up to: 2.9
|
6 |
+
Stable tag: 2.1
|
7 |
|
8 |
This all-in-one SEO plugin gives you control over titles, noindex, meta data, slugs, canonical tags, "more" links, 404 error tracking, and more.
|
9 |
|
11 |
|
12 |
= Recent Releases =
|
13 |
|
14 |
+
* Version 2.1 adds many 404 Monitor improvements
|
15 |
* Version 2.0 adds title tag editing for post tags
|
16 |
* Version 1.9 adds title tag editing for categories
|
|
|
17 |
|
18 |
= Features =
|
19 |
|
38 |
* **Canonicalizer**
|
39 |
* Point search engines to preferred content access points with `<link rel="canonical" />` tags.
|
40 |
* Go beyond the basic canonical tag functionality of WordPress 2.9+ with SEO Ultimate's support for category/tag/date/author archives.
|
41 |
+
* Redirect requests for non-existent pagination with a simple checkbox.
|
42 |
|
43 |
* **404 Monitor**
|
44 |
* 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.)
|
45 |
+
* Find out what URLs are referring visitors to 404 errors.
|
46 |
|
47 |
* **Linkbox Inserter**
|
48 |
* Encourage natural linkbuilding activity by adding textboxes to the end of your posts/pages that contain automatically-generated link HTML.
|
124 |
|
125 |
= Overview =
|
126 |
|
127 |
+
* **What it does:** The 404 Monitor keeps track of non-existent URLs that generated 404 errors. 404 errors are when a search engine or visitor comes to a URL on your site but nothing exists at that URL.
|
128 |
|
129 |
* **Why it helps:** The 404 Monitor helps you spot 404 errors; then you can take steps to correct them to reduce link-juice loss from broken links.
|
130 |
|
132 |
|
133 |
If there are no 404 errors in the log, this is good and means there's no action required on your part.
|
134 |
|
135 |
+
= Actions Help =
|
136 |
|
137 |
+
You can perform the following actions on each entry in the log:
|
138 |
|
139 |
+
* The "View" button will open the URL in a new window. This is useful for testing whether or not a redirect is working.
|
140 |
+
* The "Google Cache" 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.
|
141 |
+
* Once you've taken care of a 404 error, you can click the "Remove" button to remove it from the list. The URL will reappear on the list if it triggers a 404 error in the future.
|
142 |
|
143 |
= Troubleshooting =
|
144 |
|
145 |
404 Monitor doesn't appear to work? Take these notes into consideration:
|
146 |
|
147 |
+
* The 404 Monitor doesn't record 404 errors generated by logged-in users.
|
148 |
* In order for the 404 Monitor to track 404 errors, you must have "Pretty Permalinks" enabled under `Settings > Permalinks`.
|
149 |
* Some parts of your website may not be under WordPress's control; the 404 Monitor can't track 404 errors on non-WordPress website areas.
|
|
|
150 |
|
151 |
|
152 |
|
177 |
* The incoming links profile of competing websites.
|
178 |
* The external websites that your competitors are linking to.
|
179 |
|
180 |
+
* **Why it helps:** The Competition Researcher gives you quick access to specially-constructed search queries. You can study the search results to glean information about the general competition for specific keywords or information about specific competitors' websites. Knowledge of the competition is an essential component of any SEO strategy.
|
181 |
|
182 |
* **How to use it:** Choose a tool based on the information you'd like to obtain, enter the keywords or competitors' domain names that you'd like to research, select options if desired, and then click Submit. The results will open in a new window.
|
183 |
|
336 |
|
337 |
* **Why it helps:** On the typical WordPress setup, the "more link" always has the same anchor text (e.g. "Read more of this entry"). Since internal anchor text conveys web page topicality to search engines, the "read more" phrase isn't a desirable anchor phrase. More Link Customizer lets you replace the boilerplate text with a new anchor that, by default, integrates your post titles (which will ideally be keyword-oriented).
|
338 |
|
339 |
+
* **How to use it:** On this page you can set the anchor text you'd like to use by default. The `{post}` variable will be replaced with the post's title. HTML and encoded entities are supported. If instead you decide that you'd like to use the default anchor text specified by your currently-active theme, just erase the contents of the textbox. The anchor text can be overridden on a per-post basis via the "More Link Text" box in the "SEO Settings" section of the WordPress post editor.
|
340 |
|
341 |
= FAQ =
|
342 |
|
506 |
|
507 |
The Settings module lets you manage settings related to the SEO Ultimate plugin as a whole.
|
508 |
|
509 |
+
= Global Settings Help =
|
510 |
|
511 |
Here's information on some of the settings:
|
512 |
|
513 |
+
* **Enable nofollow'd attribution link** -- If enabled, the plugin will display an attribution link on your site.
|
|
|
|
|
514 |
|
515 |
+
* **Notify me about unnecessary active plugins** -- If enabled, SEO Ultimate will add notices to your "Plugins" administration page if you have any other plugins installed whose functionality SEO Ultimate replaces.
|
516 |
|
517 |
+
* **Insert comments around HTML code insertions** -- If enabled, SEO Ultimate will use HTML comments to identify all code it inserts into your `<head>` tag. This is useful if you’re trying to figure out whether or not SEO Ultimate is inserting a certain piece of header code.
|
518 |
|
519 |
= FAQ =
|
520 |
|
534 |
SEO Ultimate's documentation is built into the plugin itself. Whenever you're viewing an SEO Ultimate page in your WordPress admin, you can click the "Help" tab in the upper-right-hand corner to view documentation for the area you're viewing.
|
535 |
|
536 |
* **How do I uninstall SEO Ultimate?**
|
537 |
+
1. Go to the `Settings > SEO Ultimate` admin page.
|
538 |
+
2. Click the "Uninstall" tab.
|
539 |
+
3. Click the "Uninstall" button and click "Yes" to confirm. SEO Ultimate's files and database entries will be deleted.
|
|
|
540 |
|
541 |
* **Will all my settings be deleted if I delete SEO Ultimate in the Plugins manager?**
|
542 |
+
No. Your settings will be retained unless you uninstall SEO Ultimate under `Settings > SEO Ultimate > Uninstall`.
|
|
|
|
|
|
|
543 |
|
544 |
* **Where is the Plugin Settings page?**
|
545 |
The plugin settings page is located under `Settings > SEO Ultimate`.
|
564 |
|
565 |
== Screenshots ==
|
566 |
|
567 |
+
1. The Module Manager lets you enable/disable SEO Ultimate features
|
568 |
+
2. The 404 Monitor log with "Screen Options" dropdown visible
|
569 |
+
3. The Canonicalizer module helps avoid duplicate content issues
|
570 |
+
4. The Competition Researcher module
|
571 |
+
5. The Deeplink Juggernaut module
|
572 |
+
6. The File Editor module lets you edit your robots.txt and .htaccess files
|
573 |
+
7. The Internal Relevance Researcher module
|
574 |
+
8. The Linkbox Inserter module encourages natural linkbuilding activity
|
575 |
+
9. The Meta Editor module
|
576 |
+
10. The Noindex Manager module
|
577 |
+
11. The "Default Formats" tab of the Title Rewriter module
|
578 |
+
12. The "Pages" tab of the Title Rewriter module lets you edit Pages' <title> tags
|
579 |
+
13. The "Categories" tab of the Title Rewriter module lets you edit categories' <title> tags
|
580 |
+
14. The "SEO Settings" box, which is visible on post & page editors
|
581 |
+
15. The SEO Ultimate menu
|
582 |
|
583 |
|
584 |
== Changelog ==
|
585 |
|
586 |
+
= Version 2.1 (May 18, 2010) =
|
587 |
+
* Improvement: Major 404 Monitor upgrade, featuring a new space-saving interface redesign
|
588 |
+
* Improvement: 404 Monitor now stores its 404 log in wp_options instead of its own database table
|
589 |
+
* Improvement: 404 Monitor now ignores apple-touch-icon.png 404s
|
590 |
+
* Improvement: Plugin now silently ignores a missing readme.txt instead of giving error
|
591 |
+
* Improvement: CSS and JavaScript now exist in separate, static files instead of being outputted by PHP files
|
592 |
+
* Improvement: SEO Ultimate settings now remain when plugin files are deleted; settings can now be deleted through new "Uninstall" function under `Settings > SEO Ultimate > Uninstall`
|
593 |
+
* Improvement: Database usage for the Whitepapers module reduced more than 90%
|
594 |
+
* Improvement: Users can now tab from a post's HTML editor directly into the "SEO Settings" fields
|
595 |
+
* Improvement: Removed blank admin CSS/JS file references
|
596 |
+
* Improvement: Added list of active modules to SEO Ultimate's plugin page listing
|
597 |
+
* Improvement: Added an "Uninstall" link to SEO Ultimate's plugin page listing
|
598 |
+
* Improvement: Update info notices now also visible under `Tools > Upgrade`
|
599 |
+
* Improvement: Added some missing documentation
|
600 |
+
* Improvement: Added/updated screenshots
|
601 |
+
* Improvement: Removed unused code
|
602 |
+
* Improvement: Added blank index.php files to module directories to prevent indexing/snooping of directory listings
|
603 |
+
* Feature: You can now hide 404 Monitor columns with the new "Screen Options" dropdown
|
604 |
+
* Bugfix: Removed duplicate excerpt ellipses from Whitepapers module
|
605 |
+
|
606 |
= Version 2.0 (April 29, 2010) =
|
607 |
* Feature: Title Rewriter can now edit the title tags of post tag archives
|
608 |
|
630 |
= Version 1.7.1 (February 27, 2010) =
|
631 |
* Bugfix: Fixed conflict with Flexibility theme
|
632 |
* Bugfix: Comment administration no longer alters SEO Ultimate menu bubble counters
|
633 |
+
* Bugfix: SEO Ultimate menu icon is no longer accidentally added to other plugins' menus
|
634 |
* Bugfix: Disabling visitor logging now disables all related code as well
|
635 |
* Bugfix: Module Manager: Fixed invalid HTML IDs
|
636 |
* Bugfix: Module Manager: Module titles are now consistent between enabled and disabled states
|
screenshot-1.png
CHANGED
Binary file
|
screenshot-10.png
ADDED
Binary file
|
screenshot-11.png
ADDED
Binary file
|
screenshot-12.png
ADDED
Binary file
|
screenshot-13.png
ADDED
Binary file
|
screenshot-14.png
ADDED
Binary file
|
screenshot-15.png
ADDED
Binary file
|
screenshot-2.png
CHANGED
Binary file
|
screenshot-3.png
CHANGED
Binary file
|
screenshot-4.png
CHANGED
Binary file
|
screenshot-5.png
CHANGED
Binary file
|
screenshot-6.png
CHANGED
Binary file
|
screenshot-7.png
ADDED
Binary file
|
screenshot-8.png
ADDED
Binary file
|
screenshot-9.png
ADDED
Binary file
|
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 titles, noindex, meta data, slugs, canonical tags, "more" links, 404 error tracking, and more.
|
6 |
-
Version: 2.
|
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 2.
|
16 |
* @link http://www.seodesignsolutions.com/wordpress-seo/ SEO Ultimate Homepage
|
17 |
*/
|
18 |
|
@@ -38,10 +38,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
38 |
//Reading plugin info from constants is faster than trying to parse it from the header above.
|
39 |
define("SU_PLUGIN_NAME", "SEO Ultimate");
|
40 |
define("SU_PLUGIN_URI", "http://www.seodesignsolutions.com/wordpress-seo/");
|
41 |
-
define("SU_VERSION", "2.
|
42 |
define("SU_AUTHOR", "SEO Design Solutions");
|
43 |
define("SU_AUTHOR_URI", "http://www.seodesignsolutions.com/");
|
44 |
-
define("SU_USER_AGENT", "SeoUltimate/2.
|
45 |
|
46 |
/********** INCLUDES **********/
|
47 |
|
@@ -55,7 +55,6 @@ if (!class_exists('Markdown'))
|
|
55 |
include 'plugin/su-constants.php';
|
56 |
include 'plugin/su-functions.php';
|
57 |
include 'plugin/class.seo-ultimate.php';
|
58 |
-
include 'plugin/class.su-hitset.php';
|
59 |
|
60 |
//Module files
|
61 |
include 'modules/class.su-module.php';
|
3 |
Plugin Name: SEO Ultimate
|
4 |
Plugin URI: http://www.seodesignsolutions.com/wordpress-seo/
|
5 |
Description: This all-in-one SEO plugin gives you control over titles, noindex, meta data, slugs, canonical tags, "more" links, 404 error tracking, and more.
|
6 |
+
Version: 2.1
|
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 2.1
|
16 |
* @link http://www.seodesignsolutions.com/wordpress-seo/ SEO Ultimate Homepage
|
17 |
*/
|
18 |
|
38 |
//Reading plugin info from constants is faster than trying to parse it from the header above.
|
39 |
define("SU_PLUGIN_NAME", "SEO Ultimate");
|
40 |
define("SU_PLUGIN_URI", "http://www.seodesignsolutions.com/wordpress-seo/");
|
41 |
+
define("SU_VERSION", "2.1");
|
42 |
define("SU_AUTHOR", "SEO Design Solutions");
|
43 |
define("SU_AUTHOR_URI", "http://www.seodesignsolutions.com/");
|
44 |
+
define("SU_USER_AGENT", "SeoUltimate/2.1");
|
45 |
|
46 |
/********** INCLUDES **********/
|
47 |
|
55 |
include 'plugin/su-constants.php';
|
56 |
include 'plugin/su-functions.php';
|
57 |
include 'plugin/class.seo-ultimate.php';
|
|
|
58 |
|
59 |
//Module files
|
60 |
include 'modules/class.su-module.php';
|
seo-ultimate.pot
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
# Translation of the WordPress plugin SEO Ultimate 1
|
2 |
# Copyright (C) 2010 SEO Design Solutions
|
3 |
# This file is distributed under the same license as the SEO Ultimate package.
|
4 |
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
|
@@ -6,9 +6,9 @@
|
|
6 |
#, fuzzy
|
7 |
msgid ""
|
8 |
msgstr ""
|
9 |
-
"Project-Id-Version: SEO Ultimate 1
|
10 |
"Report-Msgid-Bugs-To: http://wordpress.org/tag/seo-ultimate\n"
|
11 |
-
"POT-Creation-Date: 2010-
|
12 |
"PO-Revision-Date: 2010-MO-DA HO:MI+ZONE\n"
|
13 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
14 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
@@ -17,420 +17,432 @@ msgstr ""
|
|
17 |
"Content-Transfer-Encoding: 8bit\n"
|
18 |
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
19 |
|
20 |
-
#: includes/jlfunctions/str.php:
|
21 |
#, php-format
|
22 |
msgid "%s and %s"
|
23 |
msgstr ""
|
24 |
|
25 |
-
#: includes/jlfunctions/str.php:
|
26 |
msgid ", "
|
27 |
msgstr ""
|
28 |
|
29 |
-
#: includes/jlfunctions/str.php:
|
30 |
#, php-format
|
31 |
msgid "%s, and %s"
|
32 |
msgstr ""
|
33 |
|
34 |
-
#: modules/404s/
|
35 |
-
msgid "404 Monitor"
|
36 |
msgstr ""
|
37 |
|
38 |
-
#: modules/404s/
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
msgstr ""
|
44 |
|
45 |
-
#: modules/404s/
|
46 |
-
msgid "
|
|
|
|
|
47 |
msgstr ""
|
48 |
|
49 |
-
#: modules/404s/
|
50 |
msgid "The log entry was successfully deleted."
|
51 |
msgstr ""
|
52 |
|
53 |
-
#: modules/404s/
|
54 |
msgid "This log entry has already been deleted."
|
55 |
msgstr ""
|
56 |
|
57 |
-
#: modules/404s/
|
58 |
msgid "The log was successfully cleared."
|
59 |
msgstr ""
|
60 |
|
61 |
-
#: modules/404s/
|
62 |
msgid "No 404 errors in the log."
|
63 |
msgstr ""
|
64 |
|
65 |
-
#: modules/404s/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
msgid "Are you sure you want to delete all 404 log entries?"
|
67 |
msgstr ""
|
68 |
|
69 |
-
#: modules/404s/
|
70 |
msgid "Clear Log"
|
71 |
msgstr ""
|
72 |
|
73 |
-
#: modules/404s/
|
74 |
-
msgid "
|
75 |
msgstr ""
|
76 |
|
77 |
-
#: modules/404s/
|
78 |
-
msgid "
|
79 |
msgstr ""
|
80 |
|
81 |
-
#: modules/404s/
|
82 |
-
msgid "
|
83 |
msgstr ""
|
84 |
|
85 |
-
#: modules/
|
|
|
|
|
|
|
|
|
86 |
msgid "Deeplink Juggernaut"
|
87 |
msgstr ""
|
88 |
|
89 |
-
#: modules/autolinks/autolinks.php:
|
90 |
msgid "Deeplink Juggernaut (Beta)"
|
91 |
msgstr ""
|
92 |
|
93 |
-
#: modules/autolinks/autolinks.php:
|
94 |
msgid ""
|
95 |
"The Deeplink Juggernaut can automatically link post/page anchor text to "
|
96 |
"given URLs. This is a preview beta version. More functionality will be added "
|
97 |
"in future releases of SEO Ultimate."
|
98 |
msgstr ""
|
99 |
|
100 |
-
#: modules/autolinks/autolinks.php:
|
101 |
msgid "Anchor Text"
|
102 |
msgstr ""
|
103 |
|
104 |
-
#: modules/autolinks/autolinks.php:
|
105 |
msgid "URL"
|
106 |
msgstr ""
|
107 |
|
108 |
-
#: modules/canonical/canonical.php:
|
109 |
msgid "Canonicalizer"
|
110 |
msgstr ""
|
111 |
|
112 |
-
#: modules/canonical/canonical.php:
|
113 |
msgid "Generate <code><link rel="canonical" /></code> tags."
|
114 |
msgstr ""
|
115 |
|
116 |
-
#: modules/canonical/canonical.php:
|
117 |
msgid "Redirect requests for nonexistent pagination."
|
118 |
msgstr ""
|
119 |
|
120 |
-
#: modules/class.su-importmodule.php:
|
121 |
msgid "Import Now"
|
122 |
msgstr ""
|
123 |
|
124 |
-
#: modules/class.su-importmodule.php:
|
125 |
#, php-format
|
126 |
msgid ""
|
127 |
"The import cannot be undone. It is your responsibility to <a href=\"%s\" "
|
128 |
"target=\"_blank\">backup your database</a> before proceeding!"
|
129 |
msgstr ""
|
130 |
|
131 |
-
#: modules/class.su-importmodule.php:
|
132 |
msgid "Import complete."
|
133 |
msgstr ""
|
134 |
|
135 |
-
#: modules/class.su-importmodule.php:
|
136 |
msgid "Return to import page"
|
137 |
msgstr ""
|
138 |
|
139 |
-
#: modules/class.su-importmodule.php:
|
140 |
msgid "Return to settings page"
|
141 |
msgstr ""
|
142 |
|
143 |
-
#: modules/class.su-importmodule.php:
|
144 |
msgid "Return to SEO page"
|
145 |
msgstr ""
|
146 |
|
147 |
-
#: modules/class.su-module.php:
|
148 |
msgid ""
|
149 |
"(Note: This translated documentation was designed for an older version of "
|
150 |
"SEO Ultimate and may be outdated.)"
|
151 |
msgstr ""
|
152 |
|
153 |
-
#: modules/class.su-module.php:
|
154 |
#, php-format
|
155 |
msgid "%s %s|Dropdown Title"
|
156 |
msgstr ""
|
157 |
|
158 |
-
#: modules/class.su-module.php:
|
159 |
#, php-format
|
160 |
msgid "%1$s | %2$s %3$s by %4$s"
|
161 |
msgstr ""
|
162 |
|
163 |
-
#: modules/class.su-module.php:
|
164 |
msgid "Settings updated."
|
165 |
msgstr ""
|
166 |
|
167 |
-
#: modules/class.su-module.php:
|
168 |
msgid "Save Changes"
|
169 |
msgstr ""
|
170 |
|
171 |
-
#: modules/class.su-module.php:
|
172 |
msgid ""
|
173 |
"Are you sure you want to replace the textbox contents with this default "
|
174 |
"value?"
|
175 |
msgstr ""
|
176 |
|
177 |
-
#: modules/class.su-module.php:
|
178 |
msgid "Reset"
|
179 |
msgstr ""
|
180 |
|
181 |
-
#: modules/competition-queries/competition-queries.php:
|
182 |
msgid "Competition Researcher"
|
183 |
msgstr ""
|
184 |
|
185 |
-
#: modules/competition-queries/competition-queries.php:
|
186 |
msgid "Comp. Researcher"
|
187 |
msgstr ""
|
188 |
|
189 |
-
#: modules/competition-queries/competition-queries.php:
|
190 |
msgid ""
|
191 |
"The Competition Researcher provides you with easy access to various search "
|
192 |
"engine tools which you can use to research multiple search queries or URLs."
|
193 |
msgstr ""
|
194 |
|
195 |
-
#: modules/competition-queries/competition-queries.php:
|
196 |
msgid "Step 1: Choose Your Research Tool"
|
197 |
msgstr ""
|
198 |
|
199 |
-
#: modules/competition-queries/competition-queries.php:
|
200 |
msgid "Keywords"
|
201 |
msgstr ""
|
202 |
|
203 |
-
#: modules/competition-queries/competition-queries.php:
|
204 |
msgid "Normal Search"
|
205 |
msgstr ""
|
206 |
|
207 |
-
#: modules/competition-queries/competition-queries.php:
|
208 |
msgid "Find out how many pages contain the words in each query"
|
209 |
msgstr ""
|
210 |
|
211 |
-
#: modules/competition-queries/competition-queries.php:
|
212 |
msgid "Phrase Match"
|
213 |
msgstr ""
|
214 |
|
215 |
-
#: modules/competition-queries/competition-queries.php:
|
216 |
msgid ""
|
217 |
"Find out how many “actual” pages are competing for each query"
|
218 |
msgstr ""
|
219 |
|
220 |
-
#: modules/competition-queries/competition-queries.php:
|
221 |
msgid "Allinanchor"
|
222 |
msgstr ""
|
223 |
|
224 |
-
#: modules/competition-queries/competition-queries.php:
|
225 |
msgid "Find out which sites have the most links for each query"
|
226 |
msgstr ""
|
227 |
|
228 |
-
#: modules/competition-queries/competition-queries.php:
|
229 |
msgid "Allintitle"
|
230 |
msgstr ""
|
231 |
|
232 |
-
#: modules/competition-queries/competition-queries.php:
|
233 |
msgid ""
|
234 |
"Find out which sites have the highest relevance in the title for each query"
|
235 |
msgstr ""
|
236 |
|
237 |
-
#: modules/competition-queries/competition-queries.php:
|
238 |
msgid "Allintext"
|
239 |
msgstr ""
|
240 |
|
241 |
-
#: modules/competition-queries/competition-queries.php:
|
242 |
msgid "Find out which sites have the most relevant content/text on their pages"
|
243 |
msgstr ""
|
244 |
|
245 |
-
#: modules/competition-queries/competition-queries.php:
|
246 |
msgid "Allinurl"
|
247 |
msgstr ""
|
248 |
|
249 |
-
#: modules/competition-queries/competition-queries.php:
|
250 |
msgid ""
|
251 |
"Find out which sites have the most relevant naming conventions for each "
|
252 |
"keyword"
|
253 |
msgstr ""
|
254 |
|
255 |
-
#: modules/competition-queries/competition-queries.php:
|
256 |
msgid "URLs"
|
257 |
msgstr ""
|
258 |
|
259 |
-
#: modules/competition-queries/competition-queries.php:
|
260 |
msgid "Site"
|
261 |
msgstr ""
|
262 |
|
263 |
-
#: modules/competition-queries/competition-queries.php:
|
264 |
msgid "Find out how many pages are indexed for each domain"
|
265 |
msgstr ""
|
266 |
|
267 |
-
#: modules/competition-queries/competition-queries.php:
|
268 |
-
#: modules/competition-queries/competition-queries.php:
|
269 |
msgid "Inbound Links"
|
270 |
msgstr ""
|
271 |
|
272 |
-
#: modules/competition-queries/competition-queries.php:
|
273 |
msgid "Find out how many sites link to the domains"
|
274 |
msgstr ""
|
275 |
|
276 |
-
#: modules/competition-queries/competition-queries.php:
|
277 |
-
#: modules/competition-queries/competition-queries.php:
|
278 |
msgid "Outbound Links"
|
279 |
msgstr ""
|
280 |
|
281 |
-
#: modules/competition-queries/competition-queries.php:
|
282 |
msgid "Find out how many sites the domains link to"
|
283 |
msgstr ""
|
284 |
|
285 |
-
#: modules/competition-queries/competition-queries.php:
|
286 |
msgid "Step 2: Enter the <span id='methodtype'>Keywords</span> To Research"
|
287 |
msgstr ""
|
288 |
|
289 |
-
#: modules/competition-queries/competition-queries.php:
|
290 |
msgid "(Type in one per line)"
|
291 |
msgstr ""
|
292 |
|
293 |
-
#: modules/competition-queries/competition-queries.php:
|
294 |
msgid "Step 3: Set Options and Submit"
|
295 |
msgstr ""
|
296 |
|
297 |
-
#: modules/competition-queries/competition-queries.php:
|
298 |
-
#: modules/site-keyword-queries/site-keyword-queries.php:
|
299 |
msgid "Show 100 results per page"
|
300 |
msgstr ""
|
301 |
|
302 |
-
#: modules/competition-queries/competition-queries.php:
|
303 |
-
#: modules/site-keyword-queries/site-keyword-queries.php:
|
304 |
msgid "Use Google's minimal mode"
|
305 |
msgstr ""
|
306 |
|
307 |
-
#: modules/competition-queries/competition-queries.php:
|
308 |
-
#: modules/site-keyword-queries/site-keyword-queries.php:
|
309 |
msgid "Submit"
|
310 |
msgstr ""
|
311 |
|
312 |
-
#: modules/files/files.php:
|
313 |
msgid "File Editor"
|
314 |
msgstr ""
|
315 |
|
316 |
-
#: modules/files/files.php:
|
317 |
msgid ""
|
318 |
"A .htaccess file exists, but it’s not writable. You can edit it here "
|
319 |
"once the file permissions are corrected."
|
320 |
msgstr ""
|
321 |
|
322 |
-
#: modules/files/files.php:
|
323 |
msgid ""
|
324 |
"WordPress won’t be able to display your robots.txt file because the "
|
325 |
"default <a href=\"options-permalink.php\" target=\"_blank\">permalink "
|
326 |
"structure</a> is in use."
|
327 |
msgstr ""
|
328 |
|
329 |
-
#: modules/files/files.php:
|
330 |
#, php-format
|
331 |
msgid "robots.txt [<a href=\"%s\" target=\"_blank\">Open</a>]"
|
332 |
msgstr ""
|
333 |
|
334 |
-
#: modules/files/files.php:
|
335 |
msgid "Enable this custom robots.txt file and disable the default file"
|
336 |
msgstr ""
|
337 |
|
338 |
-
#: modules/files/files.php:
|
339 |
msgid "Let other plugins add rules to my custom robots.txt file"
|
340 |
msgstr ""
|
341 |
|
342 |
-
#: modules/files/files.php:
|
343 |
msgid "robots.txt Settings"
|
344 |
msgstr ""
|
345 |
|
346 |
-
#: modules/files/files.php:
|
347 |
msgid ""
|
348 |
"Please realize that incorrectly editing your robots.txt file could block "
|
349 |
"search engines from your site."
|
350 |
msgstr ""
|
351 |
|
352 |
-
#: modules/files/files.php:
|
353 |
msgid ".htaccess"
|
354 |
msgstr ""
|
355 |
|
356 |
-
#: modules/files/files.php:
|
357 |
msgid ""
|
358 |
"Also, incorrectly editing your .htaccess file could disable your entire "
|
359 |
"website. Edit with caution!"
|
360 |
msgstr ""
|
361 |
|
362 |
-
#: modules/files/files.php:
|
363 |
#, php-format
|
364 |
msgid ""
|
365 |
"Please note that your privacy settings won’t have any effect on your "
|
366 |
"robots.txt file, since you’re using <a href=\"%s\">a custom one</a>."
|
367 |
msgstr ""
|
368 |
|
369 |
-
#: modules/
|
370 |
-
msgid "Overview"
|
371 |
-
msgstr ""
|
372 |
-
|
373 |
-
#: modules/files/files.php:141
|
374 |
-
msgid "FAQ"
|
375 |
-
msgstr ""
|
376 |
-
|
377 |
-
#: modules/files/files.php:146
|
378 |
-
msgid ""
|
379 |
-
"The File Editor module lets you edit system files that are of SEO value. "
|
380 |
-
"Edit the files as desired, then click Save Changes. If you create a custom "
|
381 |
-
"robots.txt file, be sure to enable it with the checkbox."
|
382 |
-
msgstr ""
|
383 |
-
|
384 |
-
#: modules/files/files.php:150
|
385 |
-
msgid ""
|
386 |
-
"\r\n"
|
387 |
-
"<h6>Why do I get a “500 Server Error” after using the File "
|
388 |
-
"Editor?</h6>\r\n"
|
389 |
-
"\r\n"
|
390 |
-
"<p>You may have inserted code into your .htaccess file that your web server "
|
391 |
-
"can't understand. As the File Editor warns, incorrectly editing your ."
|
392 |
-
"htaccess file can disable your entire website in this way. To restore your "
|
393 |
-
"site, you'll need to use an FTP client (or your web host's File Manager) to "
|
394 |
-
"edit or rename your .htaccess file. If you need help, please contact your "
|
395 |
-
"web host.</p>\r\n"
|
396 |
-
"\r\n"
|
397 |
-
"<h6>Will my robots.txt edits remain if I disable the File Editor?</h6>\r\n"
|
398 |
-
"\r\n"
|
399 |
-
"<p>No. On a WordPress blog, the robots.txt file is dynamically generated "
|
400 |
-
"just like your posts and Pages. If you disable the File Editor module or the "
|
401 |
-
"entire SEO Ultimate plugin, the File Editor won't be able to insert your "
|
402 |
-
"custom code into the robots.txt file anymore.</p>\r\n"
|
403 |
-
"\r\n"
|
404 |
-
"<h6>Will my .htaccess edits remain if I disable the File Editor?</h6>\r\n"
|
405 |
-
"\r\n"
|
406 |
-
"<p>Yes. The .htaccess file is static. Your edits will remain even if you "
|
407 |
-
"disable SEO Ultimate or its File Editor module.</p>\r\n"
|
408 |
-
"\r\n"
|
409 |
-
"<h6>Where did my .htaccess edits go?</h6>\r\n"
|
410 |
-
"\r\n"
|
411 |
-
"<p>The .htaccess file is static, so SEO Ultimate doesn't have total control "
|
412 |
-
"over it. It's possible that WordPress, another plugin, or other software may "
|
413 |
-
"overwrite your .htaccess file. If you have a backup of your blog's files, "
|
414 |
-
"you can try recovering your edits from there.</p>\r\n"
|
415 |
-
msgstr ""
|
416 |
-
|
417 |
-
#: modules/import-aiosp/import-aiosp.php:13
|
418 |
msgid "Import from All in One SEO Pack"
|
419 |
msgstr ""
|
420 |
|
421 |
-
#: modules/import-aiosp/import-aiosp.php:
|
422 |
msgid "AIOSP Import"
|
423 |
msgstr ""
|
424 |
|
425 |
-
#: modules/import-aiosp/import-aiosp.php:
|
426 |
msgid "All in One SEO Pack"
|
427 |
msgstr ""
|
428 |
|
429 |
-
#: modules/import-aiosp/import-aiosp.php:
|
430 |
msgid "Import post data (custom title tags and meta tags)."
|
431 |
msgstr ""
|
432 |
|
433 |
-
#: modules/import-aiosp/import-aiosp.php:
|
434 |
msgid ""
|
435 |
"Here you can move post fields from the All in One SEO Pack (AIOSP) plugin to "
|
436 |
"SEO Ultimate. AIOSP’s data remains in your WordPress database after "
|
@@ -439,18 +451,18 @@ msgid ""
|
|
439 |
"to be currently installed or activated for the import to take place."
|
440 |
msgstr ""
|
441 |
|
442 |
-
#: modules/import-aiosp/import-aiosp.php:
|
443 |
msgid ""
|
444 |
"The import tool can only move over data from AIOSP version 1.6 or above. If "
|
445 |
"you use an older version of AIOSP, you should update to the latest version "
|
446 |
"first and run AIOSP’s upgrade process."
|
447 |
msgstr ""
|
448 |
|
449 |
-
#: modules/import-aiosp/import-aiosp.php:
|
450 |
msgid "Import Post Fields"
|
451 |
msgstr ""
|
452 |
|
453 |
-
#: modules/import-aiosp/import-aiosp.php:
|
454 |
msgid ""
|
455 |
"Post fields store the SEO data for your posts/pages (i.e. your custom title "
|
456 |
"tags, meta descriptions, and meta keywords). If you provided custom titles/"
|
@@ -458,66 +470,66 @@ msgid ""
|
|
458 |
"data over to SEO Ultimate."
|
459 |
msgstr ""
|
460 |
|
461 |
-
#: modules/import-aiosp/import-aiosp.php:
|
462 |
msgid "Conflict Resolution Mode"
|
463 |
msgstr ""
|
464 |
|
465 |
-
#: modules/import-aiosp/import-aiosp.php:
|
466 |
msgid ""
|
467 |
"What should the import tool do if it tries to move over a post’s AIOSP "
|
468 |
"data, but different data already exists in the corresponding SEO Ultimate "
|
469 |
"fields?"
|
470 |
msgstr ""
|
471 |
|
472 |
-
#: modules/import-aiosp/import-aiosp.php:
|
473 |
msgid "Skip that post and leave all data as-is (default)."
|
474 |
msgstr ""
|
475 |
|
476 |
-
#: modules/import-aiosp/import-aiosp.php:
|
477 |
msgid "Delete the SEO Ultimate data and replace it with the AIOSP data."
|
478 |
msgstr ""
|
479 |
|
480 |
-
#: modules/import-aiosp/import-aiosp.php:
|
481 |
msgid "Keep the SEO Ultimate data and delete the AIOSP data."
|
482 |
msgstr ""
|
483 |
|
484 |
-
#: modules/import-aiosp/import-aiosp.php:
|
485 |
msgid "Deletion Preference"
|
486 |
msgstr ""
|
487 |
|
488 |
-
#: modules/import-aiosp/import-aiosp.php:
|
489 |
msgid ""
|
490 |
"When the migration tool successfully copies a post’s AIOSP data over "
|
491 |
"to SEO Ultimate, what should it do with the old AIOSP data?"
|
492 |
msgstr ""
|
493 |
|
494 |
-
#: modules/import-aiosp/import-aiosp.php:
|
495 |
msgid "Delete the AIOSP data."
|
496 |
msgstr ""
|
497 |
|
498 |
-
#: modules/import-aiosp/import-aiosp.php:
|
499 |
msgid "Leave behind the duplicate AIOSP data (default)."
|
500 |
msgstr ""
|
501 |
|
502 |
-
#: modules/import-aiosp/import-aiosp.php:
|
503 |
msgid "Deactivated All in One SEO Pack."
|
504 |
msgstr ""
|
505 |
|
506 |
-
#: modules/import-aiosp/import-aiosp.php:
|
507 |
#, php-format
|
508 |
msgid "Imported a total of %d fields for one post/page/revision."
|
509 |
msgid_plural "Imported a total of %1$d fields for %2$d posts/pages/revisions."
|
510 |
msgstr[0] ""
|
511 |
msgstr[1] ""
|
512 |
|
513 |
-
#: modules/import-aiosp/import-aiosp.php:
|
514 |
#, php-format
|
515 |
msgid "Skipped one post with disabled AIOSP data."
|
516 |
msgid_plural "Skipped %d posts with disabled AIOSP data."
|
517 |
msgstr[0] ""
|
518 |
msgstr[1] ""
|
519 |
|
520 |
-
#: modules/import-aiosp/import-aiosp.php:
|
521 |
#, php-format
|
522 |
msgid ""
|
523 |
"Overwrote one SEO Ultimate field with AIOSP data, as instructed by the "
|
@@ -528,7 +540,7 @@ msgid_plural ""
|
|
528 |
msgstr[0] ""
|
529 |
msgstr[1] ""
|
530 |
|
531 |
-
#: modules/import-aiosp/import-aiosp.php:
|
532 |
#, php-format
|
533 |
msgid "Deleted one AIOSP field, as instructed by the settings you chose."
|
534 |
msgid_plural ""
|
@@ -536,141 +548,137 @@ msgid_plural ""
|
|
536 |
msgstr[0] ""
|
537 |
msgstr[1] ""
|
538 |
|
539 |
-
#: modules/linkbox/linkbox.php:
|
540 |
msgid "Linkbox Inserter"
|
541 |
msgstr ""
|
542 |
|
543 |
-
#: modules/linkbox/linkbox.php:
|
544 |
msgid "Link to this post!"
|
545 |
msgstr ""
|
546 |
|
547 |
-
#: modules/linkbox/linkbox.php:
|
548 |
msgid "At the end of posts"
|
549 |
msgstr ""
|
550 |
|
551 |
-
#: modules/linkbox/linkbox.php:
|
552 |
msgid "At the end of pages"
|
553 |
msgstr ""
|
554 |
|
555 |
-
#: modules/linkbox/linkbox.php:
|
556 |
msgid "When called by the su_linkbox hook"
|
557 |
msgstr ""
|
558 |
|
559 |
-
#: modules/linkbox/linkbox.php:
|
560 |
msgid "Display linkboxes..."
|
561 |
msgstr ""
|
562 |
|
563 |
-
#: modules/linkbox/linkbox.php:
|
564 |
msgid "Linkbox HTML"
|
565 |
msgstr ""
|
566 |
|
567 |
-
#: modules/meta/meta-settings.php:
|
568 |
msgid "Meta Editor Settings"
|
569 |
msgstr ""
|
570 |
|
571 |
-
#: modules/meta/meta-settings.php:
|
572 |
-
msgid "Settings"
|
573 |
-
msgstr ""
|
574 |
-
|
575 |
-
#: modules/meta/meta-settings.php:28
|
576 |
msgid "Blog Homepage Meta Description"
|
577 |
msgstr ""
|
578 |
|
579 |
-
#: modules/meta/meta-settings.php:
|
580 |
msgid "Blog Homepage Meta Keywords"
|
581 |
msgstr ""
|
582 |
|
583 |
-
#: modules/meta/meta-settings.php:
|
584 |
msgid "Use this blog’s tagline as the default homepage description."
|
585 |
msgstr ""
|
586 |
|
587 |
-
#: modules/meta/meta-settings.php:
|
588 |
msgid "Default Values"
|
589 |
msgstr ""
|
590 |
|
591 |
-
#: modules/meta/meta-settings.php:
|
592 |
msgid ""
|
593 |
"Don’t use this site’s Open Directory description in search results."
|
594 |
msgstr ""
|
595 |
|
596 |
-
#: modules/meta/meta-settings.php:
|
597 |
msgid ""
|
598 |
"Don’t use this site’s Yahoo! Directory description in search "
|
599 |
"results."
|
600 |
msgstr ""
|
601 |
|
602 |
-
#: modules/meta/meta-settings.php:
|
603 |
msgid "Don’t cache or archive this site."
|
604 |
msgstr ""
|
605 |
|
606 |
-
#: modules/meta/meta-settings.php:
|
607 |
msgid "Spider Instructions"
|
608 |
msgstr ""
|
609 |
|
610 |
-
#: modules/meta/meta-settings.php:
|
611 |
msgid "Google Webmaster Tools:"
|
612 |
msgstr ""
|
613 |
|
614 |
-
#: modules/meta/meta-settings.php:
|
615 |
msgid "Yahoo! Site Explorer:"
|
616 |
msgstr ""
|
617 |
|
618 |
-
#: modules/meta/meta-settings.php:
|
619 |
msgid "Bing Webmaster Center:"
|
620 |
msgstr ""
|
621 |
|
622 |
-
#: modules/meta/meta-settings.php:
|
623 |
msgid "Verification Codes"
|
624 |
msgstr ""
|
625 |
|
626 |
-
#: modules/meta/meta-settings.php:
|
627 |
msgid "Custom <head> HTML"
|
628 |
msgstr ""
|
629 |
|
630 |
-
#: modules/meta/meta.php:
|
631 |
msgid "Meta Editor"
|
632 |
msgstr ""
|
633 |
|
634 |
-
#: modules/meta/meta.php:
|
635 |
msgid "Custom Header Code"
|
636 |
msgstr ""
|
637 |
|
638 |
-
#: modules/meta/meta.php:
|
639 |
msgid "Description:"
|
640 |
msgstr ""
|
641 |
|
642 |
-
#: modules/meta/meta.php:
|
643 |
#, php-format
|
644 |
msgid "You’ve entered %s characters. Most search engines use up to 160."
|
645 |
msgstr ""
|
646 |
|
647 |
-
#: modules/meta/meta.php:
|
648 |
msgid "Keywords:<br /><em>(separate with commas)</em>"
|
649 |
msgstr ""
|
650 |
|
651 |
-
#: modules/meta/meta.php:
|
652 |
msgid ""
|
653 |
"<strong>Description:</strong> — The value of the meta description tag. "
|
654 |
"The description will often appear underneath the title in search engine "
|
655 |
"results. "
|
656 |
msgstr ""
|
657 |
|
658 |
-
#: modules/meta/meta.php:
|
659 |
msgid ""
|
660 |
"<strong>Keywords:</strong> — The value of the meta keywords tag. The "
|
661 |
"keywords list gives search engines a hint as to what this post/page is "
|
662 |
"about. "
|
663 |
msgstr ""
|
664 |
|
665 |
-
#: modules/modules/modules.php:
|
666 |
msgid "Module Manager"
|
667 |
msgstr ""
|
668 |
|
669 |
-
#: modules/modules/modules.php:
|
670 |
msgid "Modules"
|
671 |
msgstr ""
|
672 |
|
673 |
-
#: modules/modules/modules.php:
|
674 |
msgid ""
|
675 |
"SEO Ultimate’s features are located in groups called “modules."
|
676 |
"” By default, most of these modules are listed in the “"
|
@@ -679,477 +687,529 @@ msgid ""
|
|
679 |
"corner of your administration screen."
|
680 |
msgstr ""
|
681 |
|
682 |
-
#: modules/modules/modules.php:
|
683 |
msgid ""
|
684 |
"The Module Manager lets you disable or hide modules you don’t use. "
|
685 |
"You can also silence modules from displaying bubble alerts on the menu."
|
686 |
msgstr ""
|
687 |
|
688 |
-
#: modules/modules/modules.php:
|
689 |
msgid "Status"
|
690 |
msgstr ""
|
691 |
|
692 |
-
#: modules/modules/modules.php:
|
693 |
msgid "Module"
|
694 |
msgstr ""
|
695 |
|
696 |
-
#: modules/modules/modules.php:
|
697 |
msgid "Enabled"
|
698 |
msgstr ""
|
699 |
|
700 |
-
#: modules/modules/modules.php:
|
701 |
msgid "Silenced"
|
702 |
msgstr ""
|
703 |
|
704 |
-
#: modules/modules/modules.php:
|
705 |
msgid "Hidden"
|
706 |
msgstr ""
|
707 |
|
708 |
-
#: modules/modules/modules.php:
|
709 |
msgid "Disabled"
|
710 |
msgstr ""
|
711 |
|
712 |
-
#: modules/more-links/more-links.php:
|
713 |
msgid "More Link Customizer"
|
714 |
msgstr ""
|
715 |
|
716 |
-
#: modules/more-links/more-links.php:
|
717 |
msgid "Default More Link Text"
|
718 |
msgstr ""
|
719 |
|
720 |
-
#: modules/more-links/more-links.php:
|
721 |
msgid "More Link Text:"
|
722 |
msgstr ""
|
723 |
|
724 |
-
#: modules/noindex/noindex.php:
|
725 |
msgid "Noindex Manager"
|
726 |
msgstr ""
|
727 |
|
728 |
-
#: modules/noindex/noindex.php:
|
729 |
msgid ""
|
730 |
"Note: The current <a href='options-privacy.php'>privacy settings</a> will "
|
731 |
"block indexing of the entire site, regardless of which options are set below."
|
732 |
msgstr ""
|
733 |
|
734 |
-
#: modules/noindex/noindex.php:
|
735 |
msgid "Prevent indexing of..."
|
736 |
msgstr ""
|
737 |
|
738 |
-
#: modules/noindex/noindex.php:
|
739 |
msgid "Administration back-end pages"
|
740 |
msgstr ""
|
741 |
|
742 |
-
#: modules/noindex/noindex.php:
|
743 |
msgid "Author archives"
|
744 |
msgstr ""
|
745 |
|
746 |
-
#: modules/noindex/noindex.php:
|
747 |
msgid "Blog search pages"
|
748 |
msgstr ""
|
749 |
|
750 |
-
#: modules/noindex/noindex.php:
|
751 |
msgid "Category archives"
|
752 |
msgstr ""
|
753 |
|
754 |
-
#: modules/noindex/noindex.php:
|
755 |
msgid "Comment feeds"
|
756 |
msgstr ""
|
757 |
|
758 |
-
#: modules/noindex/noindex.php:
|
759 |
msgid "Comment subpages"
|
760 |
msgstr ""
|
761 |
|
762 |
-
#: modules/noindex/noindex.php:
|
763 |
msgid "Date-based archives"
|
764 |
msgstr ""
|
765 |
|
766 |
-
#: modules/noindex/noindex.php:
|
767 |
msgid "Subpages of the homepage"
|
768 |
msgstr ""
|
769 |
|
770 |
-
#: modules/noindex/noindex.php:
|
771 |
msgid "Tag archives"
|
772 |
msgstr ""
|
773 |
|
774 |
-
#: modules/noindex/noindex.php:
|
775 |
msgid "User login/registration pages"
|
776 |
msgstr ""
|
777 |
|
778 |
-
#: modules/sds-blog/sds-blog.php:
|
779 |
msgid "Whitepapers"
|
780 |
msgstr ""
|
781 |
|
782 |
-
#: modules/sds-blog/sds-blog.php:
|
783 |
msgid "SEO Design Solutions Whitepapers"
|
784 |
msgstr ""
|
785 |
|
786 |
-
#. #-#-#-#-# plugin.pot (SEO Ultimate 1
|
787 |
#. Author of the plugin/theme
|
788 |
-
#: modules/sds-blog/sds-blog.php:
|
789 |
msgid "SEO Design Solutions"
|
790 |
msgstr ""
|
791 |
|
792 |
-
#: modules/sds-blog/sds-blog.php:
|
793 |
msgid ""
|
794 |
-
"
|
795 |
-
"plugin."
|
|
|
796 |
msgstr ""
|
797 |
|
798 |
-
#: modules/
|
799 |
-
msgid ""
|
800 |
-
"The articles below are loaded from the SEO Design Solutions website. Click "
|
801 |
-
"on an article’s title to read it."
|
802 |
msgstr ""
|
803 |
|
804 |
-
#: modules/settings/settings.php:
|
805 |
-
msgid "
|
806 |
msgstr ""
|
807 |
|
808 |
-
#: modules/settings/settings.php:
|
809 |
-
msgid "
|
810 |
msgstr ""
|
811 |
|
812 |
-
|
813 |
-
|
814 |
-
|
815 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
816 |
msgstr ""
|
817 |
|
818 |
-
#: modules/settings/settings.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
819 |
msgid "Settings successfully imported."
|
820 |
msgstr ""
|
821 |
|
822 |
-
#: modules/settings/settings.php:
|
823 |
msgid ""
|
824 |
"The uploaded file is not in the proper format. Settings could not be "
|
825 |
"imported."
|
826 |
msgstr ""
|
827 |
|
828 |
-
#: modules/settings/settings.php:
|
829 |
msgid "The settings file could not be uploaded successfully."
|
830 |
msgstr ""
|
831 |
|
832 |
-
#: modules/settings/settings.php:
|
833 |
msgid ""
|
834 |
"Settings could not be imported because no settings file was selected. Please "
|
835 |
"click the “Browse” button and select a file to import."
|
836 |
msgstr ""
|
837 |
|
838 |
-
#: modules/settings/settings.php:
|
839 |
msgid "All settings have been erased and defaults have been restored."
|
840 |
msgstr ""
|
841 |
|
842 |
-
#: modules/settings/settings.php:
|
843 |
-
msgid "
|
844 |
msgstr ""
|
845 |
|
846 |
-
#: modules/settings/settings.php:
|
847 |
-
msgid "
|
|
|
|
|
|
|
848 |
msgstr ""
|
849 |
|
850 |
-
#: modules/settings/settings.php:
|
851 |
-
msgid "
|
|
|
|
|
852 |
msgstr ""
|
853 |
|
854 |
-
#: modules/settings/settings.php:
|
855 |
-
msgid "
|
856 |
msgstr ""
|
857 |
|
858 |
-
#: modules/settings/settings.php:
|
859 |
-
msgid "
|
|
|
|
|
|
|
860 |
msgstr ""
|
861 |
|
862 |
-
#: modules/settings/settings.php:
|
863 |
-
|
864 |
-
|
|
|
865 |
msgstr ""
|
866 |
|
867 |
-
#: modules/settings/settings.php:
|
868 |
-
msgid "
|
|
|
|
|
|
|
|
|
869 |
msgstr ""
|
870 |
|
871 |
-
#: modules/settings/settings.php:
|
|
|
|
|
|
|
|
|
872 |
msgid ""
|
873 |
-
"
|
874 |
-
"
|
875 |
msgstr ""
|
876 |
|
877 |
-
#: modules/settings/settings.php:
|
878 |
msgid ""
|
879 |
-
"
|
880 |
-
"installed module, as well as the “Plugin Settings” section "
|
881 |
-
"above. "
|
882 |
msgstr ""
|
883 |
|
884 |
-
#: modules/settings/settings.php:
|
885 |
-
msgid "
|
886 |
msgstr ""
|
887 |
|
888 |
-
#: modules/settings/settings.php:
|
889 |
-
msgid "
|
890 |
msgstr ""
|
891 |
|
892 |
-
#: modules/settings/settings.php:
|
893 |
-
msgid "
|
894 |
msgstr ""
|
895 |
|
896 |
-
|
897 |
-
|
898 |
-
|
899 |
-
"
|
900 |
msgstr ""
|
901 |
|
902 |
-
#: modules/settings/
|
903 |
-
msgid "
|
904 |
msgstr ""
|
905 |
|
906 |
-
#: modules/settings/
|
907 |
-
msgid "
|
908 |
msgstr ""
|
909 |
|
910 |
-
#: modules/settings/
|
911 |
msgid ""
|
912 |
-
"
|
|
|
913 |
msgstr ""
|
914 |
|
915 |
-
#: modules/settings/
|
916 |
-
msgid "
|
|
|
|
|
917 |
msgstr ""
|
918 |
|
919 |
-
#: modules/settings/
|
920 |
-
msgid "
|
921 |
msgstr ""
|
922 |
|
923 |
-
#: modules/settings/settings.php:
|
924 |
-
msgid ""
|
925 |
-
"You can import settings and data from these plugins. Clicking a plugin’"
|
926 |
-
"s name will take you to the importer page, where you can customize "
|
927 |
-
"parameters and start the import."
|
928 |
msgstr ""
|
929 |
|
930 |
-
#: modules/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
931 |
msgid "Internal Relevance Researcher"
|
932 |
msgstr ""
|
933 |
|
934 |
-
#: modules/site-keyword-queries/site-keyword-queries.php:
|
935 |
msgid "Int. Rel. Researcher"
|
936 |
msgstr ""
|
937 |
|
938 |
-
#: modules/site-keyword-queries/site-keyword-queries.php:
|
939 |
msgid "Step 1: Enter Keywords"
|
940 |
msgstr ""
|
941 |
|
942 |
-
#: modules/site-keyword-queries/site-keyword-queries.php:
|
943 |
msgid "(Type one keyword per line)"
|
944 |
msgstr ""
|
945 |
|
946 |
-
#: modules/site-keyword-queries/site-keyword-queries.php:
|
947 |
msgid "Step 2: Set Options and Submit"
|
948 |
msgstr ""
|
949 |
|
950 |
-
#: modules/site-keyword-queries/site-keyword-queries.php:
|
951 |
msgid "Put keywords in quotes"
|
952 |
msgstr ""
|
953 |
|
954 |
-
#: modules/slugs/slugs.php:
|
955 |
msgid "Slug Optimizer"
|
956 |
msgstr ""
|
957 |
|
958 |
-
#: modules/slugs/slugs.php:
|
959 |
msgid "Words to Remove"
|
960 |
msgstr ""
|
961 |
|
962 |
-
#: modules/titles/titles-formats.php:
|
963 |
msgid "Title Rewriter Formats"
|
964 |
msgstr ""
|
965 |
|
966 |
-
#: modules/titles/titles-formats.php:
|
967 |
msgid "Default Formats"
|
968 |
msgstr ""
|
969 |
|
970 |
-
#: modules/titles/titles-posts.php:
|
971 |
msgid "Post Title Editor"
|
972 |
msgstr ""
|
973 |
|
974 |
-
#: modules/titles/titles-posts.php:
|
975 |
msgid "Posts"
|
976 |
msgstr ""
|
977 |
|
978 |
-
#: modules/titles/titles-posts.php:
|
979 |
msgid "Pages"
|
980 |
msgstr ""
|
981 |
|
982 |
-
#: modules/titles/titles-posts.php:
|
983 |
msgid "Attachments"
|
984 |
msgstr ""
|
985 |
|
986 |
-
#: modules/titles/titles-taxonomies.php:
|
987 |
msgid "Taxonomy Title Editor"
|
988 |
msgstr ""
|
989 |
|
990 |
-
#: modules/titles/titles-taxonomies.php:
|
991 |
msgid "Categories"
|
992 |
msgstr ""
|
993 |
|
994 |
-
#: modules/titles/titles-taxonomies.php:
|
995 |
msgid "Post Tags"
|
996 |
msgstr ""
|
997 |
|
998 |
-
#: modules/titles/titles.php:
|
999 |
msgid "Title Rewriter"
|
1000 |
msgstr ""
|
1001 |
|
1002 |
-
#: modules/titles/titles.php:
|
1003 |
msgid "{blog}"
|
1004 |
msgstr ""
|
1005 |
|
1006 |
-
#: modules/titles/titles.php:
|
1007 |
msgid "{post} | {blog}"
|
1008 |
msgstr ""
|
1009 |
|
1010 |
-
#: modules/titles/titles.php:
|
1011 |
msgid "{page} | {blog}"
|
1012 |
msgstr ""
|
1013 |
|
1014 |
-
#: modules/titles/titles.php:
|
1015 |
msgid "{category} | {blog}"
|
1016 |
msgstr ""
|
1017 |
|
1018 |
-
#: modules/titles/titles.php:
|
1019 |
msgid "{tag} | {blog}"
|
1020 |
msgstr ""
|
1021 |
|
1022 |
-
#: modules/titles/titles.php:
|
1023 |
msgid "Archives for {month} {day}, {year} | {blog}"
|
1024 |
msgstr ""
|
1025 |
|
1026 |
-
#: modules/titles/titles.php:
|
1027 |
msgid "Archives for {month} {year} | {blog}"
|
1028 |
msgstr ""
|
1029 |
|
1030 |
-
#: modules/titles/titles.php:
|
1031 |
msgid "Archives for {year} | {blog}"
|
1032 |
msgstr ""
|
1033 |
|
1034 |
-
#: modules/titles/titles.php:
|
1035 |
msgid "Posts by {author} | {blog}"
|
1036 |
msgstr ""
|
1037 |
|
1038 |
-
#: modules/titles/titles.php:
|
1039 |
msgid "Search Results for {query} | {blog}"
|
1040 |
msgstr ""
|
1041 |
|
1042 |
-
#: modules/titles/titles.php:
|
1043 |
msgid "404 Not Found | {blog}"
|
1044 |
msgstr ""
|
1045 |
|
1046 |
-
#: modules/titles/titles.php:
|
1047 |
msgid "{title} - Page {num}"
|
1048 |
msgstr ""
|
1049 |
|
1050 |
-
#: modules/titles/titles.php:
|
1051 |
msgid "Blog Homepage Title"
|
1052 |
msgstr ""
|
1053 |
|
1054 |
-
#: modules/titles/titles.php:
|
1055 |
msgid "Post Title Format"
|
1056 |
msgstr ""
|
1057 |
|
1058 |
-
#: modules/titles/titles.php:
|
1059 |
msgid "Page Title Format"
|
1060 |
msgstr ""
|
1061 |
|
1062 |
-
#: modules/titles/titles.php:
|
1063 |
msgid "Category Title Format"
|
1064 |
msgstr ""
|
1065 |
|
1066 |
-
#: modules/titles/titles.php:
|
1067 |
msgid "Tag Title Format"
|
1068 |
msgstr ""
|
1069 |
|
1070 |
-
#: modules/titles/titles.php:
|
1071 |
msgid "Day Archive Title Format"
|
1072 |
msgstr ""
|
1073 |
|
1074 |
-
#: modules/titles/titles.php:
|
1075 |
msgid "Month Archive Title Format"
|
1076 |
msgstr ""
|
1077 |
|
1078 |
-
#: modules/titles/titles.php:
|
1079 |
msgid "Year Archive Title Format"
|
1080 |
msgstr ""
|
1081 |
|
1082 |
-
#: modules/titles/titles.php:
|
1083 |
msgid "Author Archive Title Format"
|
1084 |
msgstr ""
|
1085 |
|
1086 |
-
#: modules/titles/titles.php:
|
1087 |
msgid "Search Title Format"
|
1088 |
msgstr ""
|
1089 |
|
1090 |
-
#: modules/titles/titles.php:
|
1091 |
msgid "404 Title Format"
|
1092 |
msgstr ""
|
1093 |
|
1094 |
-
#: modules/titles/titles.php:
|
1095 |
msgid "Pagination Title Format"
|
1096 |
msgstr ""
|
1097 |
|
1098 |
-
#: modules/titles/titles.php:
|
1099 |
-
msgid "Title Tag:"
|
1100 |
-
msgstr ""
|
1101 |
-
|
1102 |
-
#: modules/titles/titles.php:275
|
1103 |
msgid "Post"
|
1104 |
msgstr ""
|
1105 |
|
1106 |
-
#: modules/titles/titles.php:
|
1107 |
msgid "Page"
|
1108 |
msgstr ""
|
1109 |
|
1110 |
-
#: modules/titles/titles.php:
|
1111 |
msgid "ID"
|
1112 |
msgstr ""
|
1113 |
|
1114 |
-
#: modules/titles/titles.php:
|
1115 |
msgid "Name"
|
1116 |
msgstr ""
|
1117 |
|
1118 |
-
#: modules/titles/titles.php:
|
1119 |
msgid "Title Tag"
|
1120 |
msgstr ""
|
1121 |
|
1122 |
-
#: modules/titles/titles.php:
|
|
|
|
|
|
|
|
|
1123 |
msgid ""
|
1124 |
"<strong>Title Tag</strong> — The exact contents of the <title> "
|
1125 |
"tag. The title appears in visitors' title bars and in search engine result "
|
1126 |
"titles. "
|
1127 |
msgstr ""
|
1128 |
|
1129 |
-
#: plugin/class.seo-ultimate.php:
|
1130 |
msgid "SEO"
|
1131 |
msgstr ""
|
1132 |
|
1133 |
-
#: plugin/class.seo-ultimate.php:
|
1134 |
msgid "SEO Settings Help"
|
1135 |
msgstr ""
|
1136 |
|
1137 |
-
#: plugin/class.seo-ultimate.php:
|
1138 |
msgid "The SEO Settings box lets you customize these settings:"
|
1139 |
msgstr ""
|
1140 |
|
1141 |
-
#: plugin/class.seo-ultimate.php:
|
1142 |
msgid "(The SEO Settings box is part of the SEO Ultimate plugin.)"
|
1143 |
msgstr ""
|
1144 |
|
1145 |
-
#: plugin/class.seo-ultimate.php:
|
1146 |
#, php-format
|
1147 |
msgid ""
|
1148 |
"SEO Ultimate includes the functionality of %1$s. You may want to deactivate %"
|
1149 |
"1$s to avoid plugin conflicts."
|
1150 |
msgstr ""
|
1151 |
|
1152 |
-
#: plugin/class.seo-ultimate.php:
|
|
|
|
|
|
|
|
|
1153 |
msgid ""
|
1154 |
"<strong>SEO Ultimate Notice:</strong> Your blog is configured to block "
|
1155 |
"search engine spiders. To resolve this, <a href='options-privacy.php' "
|
@@ -1157,43 +1217,10 @@ msgid ""
|
|
1157 |
"everyone."
|
1158 |
msgstr ""
|
1159 |
|
1160 |
-
#: plugin/class.seo-ultimate.php:
|
1161 |
msgid "SEO Settings"
|
1162 |
msgstr ""
|
1163 |
|
1164 |
-
#: plugin/class.su-hitset.php:44
|
1165 |
-
msgid "Date"
|
1166 |
-
msgstr ""
|
1167 |
-
|
1168 |
-
#: plugin/class.su-hitset.php:45
|
1169 |
-
msgid "IP Address"
|
1170 |
-
msgstr ""
|
1171 |
-
|
1172 |
-
#: plugin/class.su-hitset.php:46
|
1173 |
-
msgid "User Agent"
|
1174 |
-
msgstr ""
|
1175 |
-
|
1176 |
-
#: plugin/class.su-hitset.php:47
|
1177 |
-
msgid "URL Requested"
|
1178 |
-
msgstr ""
|
1179 |
-
|
1180 |
-
#: plugin/class.su-hitset.php:48
|
1181 |
-
msgid "Redirected To"
|
1182 |
-
msgstr ""
|
1183 |
-
|
1184 |
-
#: plugin/class.su-hitset.php:49
|
1185 |
-
msgid "Status Code"
|
1186 |
-
msgstr ""
|
1187 |
-
|
1188 |
-
#: plugin/class.su-hitset.php:50
|
1189 |
-
msgid "Referring URL"
|
1190 |
-
msgstr ""
|
1191 |
-
|
1192 |
-
#: plugin/class.su-hitset.php:82
|
1193 |
-
#, php-format
|
1194 |
-
msgid "%1$s<br />%2$s"
|
1195 |
-
msgstr ""
|
1196 |
-
|
1197 |
#. Plugin URI of the plugin/theme
|
1198 |
msgid "http://www.seodesignsolutions.com/wordpress-seo/"
|
1199 |
msgstr ""
|
1 |
+
# Translation of the WordPress plugin SEO Ultimate 2.1 by SEO Design Solutions.
|
2 |
# Copyright (C) 2010 SEO Design Solutions
|
3 |
# This file is distributed under the same license as the SEO Ultimate package.
|
4 |
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
|
6 |
#, fuzzy
|
7 |
msgid ""
|
8 |
msgstr ""
|
9 |
+
"Project-Id-Version: SEO Ultimate 2.1\n"
|
10 |
"Report-Msgid-Bugs-To: http://wordpress.org/tag/seo-ultimate\n"
|
11 |
+
"POT-Creation-Date: 2010-05-18 20:19+0000\n"
|
12 |
"PO-Revision-Date: 2010-MO-DA HO:MI+ZONE\n"
|
13 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
14 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
17 |
"Content-Transfer-Encoding: 8bit\n"
|
18 |
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
19 |
|
20 |
+
#: includes/jlfunctions/str.php:88 plugin/su-functions.php:77
|
21 |
#, php-format
|
22 |
msgid "%s and %s"
|
23 |
msgstr ""
|
24 |
|
25 |
+
#: includes/jlfunctions/str.php:91 plugin/su-functions.php:80
|
26 |
msgid ", "
|
27 |
msgstr ""
|
28 |
|
29 |
+
#: includes/jlfunctions/str.php:92 plugin/su-functions.php:81
|
30 |
#, php-format
|
31 |
msgid "%s, and %s"
|
32 |
msgstr ""
|
33 |
|
34 |
+
#: modules/404s/fofs-log.php:16
|
35 |
+
msgid "404 Monitor Log"
|
36 |
msgstr ""
|
37 |
|
38 |
+
#: modules/404s/fofs-log.php:17
|
39 |
+
msgid "Log"
|
40 |
+
msgstr ""
|
41 |
+
|
42 |
+
#: modules/404s/fofs-log.php:115
|
43 |
+
msgid "Actions"
|
44 |
+
msgstr ""
|
45 |
+
|
46 |
+
#: modules/404s/fofs-log.php:116
|
47 |
+
msgid "Hits"
|
48 |
+
msgstr ""
|
49 |
+
|
50 |
+
#: modules/404s/fofs-log.php:117
|
51 |
+
msgid "URL with 404 Error"
|
52 |
+
msgstr ""
|
53 |
+
|
54 |
+
#: modules/404s/fofs-log.php:118
|
55 |
+
msgid "Date of Most Recent Hit"
|
56 |
+
msgstr ""
|
57 |
+
|
58 |
+
#: modules/404s/fofs-log.php:119
|
59 |
+
msgid "Referers"
|
60 |
+
msgstr ""
|
61 |
+
|
62 |
+
#: modules/404s/fofs-log.php:120 modules/404s/fofs-log.php:223
|
63 |
+
msgid "User Agents"
|
64 |
msgstr ""
|
65 |
|
66 |
+
#: modules/404s/fofs-log.php:136
|
67 |
+
msgid ""
|
68 |
+
"New 404 errors will not be recorded because 404 logging is disabled on the "
|
69 |
+
"Settings tab."
|
70 |
msgstr ""
|
71 |
|
72 |
+
#: modules/404s/fofs-log.php:143
|
73 |
msgid "The log entry was successfully deleted."
|
74 |
msgstr ""
|
75 |
|
76 |
+
#: modules/404s/fofs-log.php:145
|
77 |
msgid "This log entry has already been deleted."
|
78 |
msgstr ""
|
79 |
|
80 |
+
#: modules/404s/fofs-log.php:154
|
81 |
msgid "The log was successfully cleared."
|
82 |
msgstr ""
|
83 |
|
84 |
+
#: modules/404s/fofs-log.php:158
|
85 |
msgid "No 404 errors in the log."
|
86 |
msgstr ""
|
87 |
|
88 |
+
#: modules/404s/fofs-log.php:182
|
89 |
+
msgid "Open URL in new window (will not be logged)"
|
90 |
+
msgstr ""
|
91 |
+
|
92 |
+
#: modules/404s/fofs-log.php:183
|
93 |
+
msgid "Query Google for cached version of URL (opens in new window)"
|
94 |
+
msgstr ""
|
95 |
+
|
96 |
+
#: modules/404s/fofs-log.php:184
|
97 |
+
msgid "Remove this URL from the log"
|
98 |
+
msgstr ""
|
99 |
+
|
100 |
+
#: modules/404s/fofs-log.php:187
|
101 |
+
#, php-format
|
102 |
+
msgid "%s at %s"
|
103 |
+
msgstr ""
|
104 |
+
|
105 |
+
#: modules/404s/fofs-log.php:191
|
106 |
+
msgid "View list of referring URLs"
|
107 |
+
msgstr ""
|
108 |
+
|
109 |
+
#: modules/404s/fofs-log.php:192
|
110 |
+
msgid "View list of user agents"
|
111 |
+
msgstr ""
|
112 |
+
|
113 |
+
#: modules/404s/fofs-log.php:202
|
114 |
+
msgid "Referring URLs"
|
115 |
+
msgstr ""
|
116 |
+
|
117 |
+
#: modules/404s/fofs-log.php:203 modules/404s/fofs-log.php:224
|
118 |
+
msgid "Hide list"
|
119 |
+
msgstr ""
|
120 |
+
|
121 |
+
#: modules/404s/fofs-log.php:254
|
122 |
msgid "Are you sure you want to delete all 404 log entries?"
|
123 |
msgstr ""
|
124 |
|
125 |
+
#: modules/404s/fofs-log.php:256
|
126 |
msgid "Clear Log"
|
127 |
msgstr ""
|
128 |
|
129 |
+
#: modules/404s/fofs-settings.php:16
|
130 |
+
msgid "404 Monitor Settings"
|
131 |
msgstr ""
|
132 |
|
133 |
+
#: modules/404s/fofs-settings.php:17 modules/meta/meta-settings.php:16
|
134 |
+
msgid "Settings"
|
135 |
msgstr ""
|
136 |
|
137 |
+
#: modules/404s/fofs-settings.php:22
|
138 |
+
msgid "Continue monitoring for new 404 errors"
|
139 |
msgstr ""
|
140 |
|
141 |
+
#: modules/404s/fofs.php:11
|
142 |
+
msgid "404 Monitor"
|
143 |
+
msgstr ""
|
144 |
+
|
145 |
+
#: modules/autolinks/autolinks.php:12
|
146 |
msgid "Deeplink Juggernaut"
|
147 |
msgstr ""
|
148 |
|
149 |
+
#: modules/autolinks/autolinks.php:13
|
150 |
msgid "Deeplink Juggernaut (Beta)"
|
151 |
msgstr ""
|
152 |
|
153 |
+
#: modules/autolinks/autolinks.php:46
|
154 |
msgid ""
|
155 |
"The Deeplink Juggernaut can automatically link post/page anchor text to "
|
156 |
"given URLs. This is a preview beta version. More functionality will be added "
|
157 |
"in future releases of SEO Ultimate."
|
158 |
msgstr ""
|
159 |
|
160 |
+
#: modules/autolinks/autolinks.php:67
|
161 |
msgid "Anchor Text"
|
162 |
msgstr ""
|
163 |
|
164 |
+
#: modules/autolinks/autolinks.php:68
|
165 |
msgid "URL"
|
166 |
msgstr ""
|
167 |
|
168 |
+
#: modules/canonical/canonical.php:12
|
169 |
msgid "Canonicalizer"
|
170 |
msgstr ""
|
171 |
|
172 |
+
#: modules/canonical/canonical.php:33
|
173 |
msgid "Generate <code><link rel="canonical" /></code> tags."
|
174 |
msgstr ""
|
175 |
|
176 |
+
#: modules/canonical/canonical.php:34
|
177 |
msgid "Redirect requests for nonexistent pagination."
|
178 |
msgstr ""
|
179 |
|
180 |
+
#: modules/class.su-importmodule.php:36
|
181 |
msgid "Import Now"
|
182 |
msgstr ""
|
183 |
|
184 |
+
#: modules/class.su-importmodule.php:39
|
185 |
#, php-format
|
186 |
msgid ""
|
187 |
"The import cannot be undone. It is your responsibility to <a href=\"%s\" "
|
188 |
"target=\"_blank\">backup your database</a> before proceeding!"
|
189 |
msgstr ""
|
190 |
|
191 |
+
#: modules/class.su-importmodule.php:49
|
192 |
msgid "Import complete."
|
193 |
msgstr ""
|
194 |
|
195 |
+
#: modules/class.su-importmodule.php:56
|
196 |
msgid "Return to import page"
|
197 |
msgstr ""
|
198 |
|
199 |
+
#: modules/class.su-importmodule.php:59
|
200 |
msgid "Return to settings page"
|
201 |
msgstr ""
|
202 |
|
203 |
+
#: modules/class.su-importmodule.php:62
|
204 |
msgid "Return to SEO page"
|
205 |
msgstr ""
|
206 |
|
207 |
+
#: modules/class.su-module.php:361
|
208 |
msgid ""
|
209 |
"(Note: This translated documentation was designed for an older version of "
|
210 |
"SEO Ultimate and may be outdated.)"
|
211 |
msgstr ""
|
212 |
|
213 |
+
#: modules/class.su-module.php:942
|
214 |
#, php-format
|
215 |
msgid "%s %s|Dropdown Title"
|
216 |
msgstr ""
|
217 |
|
218 |
+
#: modules/class.su-module.php:970
|
219 |
#, php-format
|
220 |
msgid "%1$s | %2$s %3$s by %4$s"
|
221 |
msgstr ""
|
222 |
|
223 |
+
#: modules/class.su-module.php:1004
|
224 |
msgid "Settings updated."
|
225 |
msgstr ""
|
226 |
|
227 |
+
#: modules/class.su-module.php:1024
|
228 |
msgid "Save Changes"
|
229 |
msgstr ""
|
230 |
|
231 |
+
#: modules/class.su-module.php:1345
|
232 |
msgid ""
|
233 |
"Are you sure you want to replace the textbox contents with this default "
|
234 |
"value?"
|
235 |
msgstr ""
|
236 |
|
237 |
+
#: modules/class.su-module.php:1360 modules/settings/settings-data.php:23
|
238 |
msgid "Reset"
|
239 |
msgstr ""
|
240 |
|
241 |
+
#: modules/competition-queries/competition-queries.php:12
|
242 |
msgid "Competition Researcher"
|
243 |
msgstr ""
|
244 |
|
245 |
+
#: modules/competition-queries/competition-queries.php:13
|
246 |
msgid "Comp. Researcher"
|
247 |
msgstr ""
|
248 |
|
249 |
+
#: modules/competition-queries/competition-queries.php:17
|
250 |
msgid ""
|
251 |
"The Competition Researcher provides you with easy access to various search "
|
252 |
"engine tools which you can use to research multiple search queries or URLs."
|
253 |
msgstr ""
|
254 |
|
255 |
+
#: modules/competition-queries/competition-queries.php:21
|
256 |
msgid "Step 1: Choose Your Research Tool"
|
257 |
msgstr ""
|
258 |
|
259 |
+
#: modules/competition-queries/competition-queries.php:25
|
260 |
msgid "Keywords"
|
261 |
msgstr ""
|
262 |
|
263 |
+
#: modules/competition-queries/competition-queries.php:25
|
264 |
msgid "Normal Search"
|
265 |
msgstr ""
|
266 |
|
267 |
+
#: modules/competition-queries/competition-queries.php:25
|
268 |
msgid "Find out how many pages contain the words in each query"
|
269 |
msgstr ""
|
270 |
|
271 |
+
#: modules/competition-queries/competition-queries.php:26
|
272 |
msgid "Phrase Match"
|
273 |
msgstr ""
|
274 |
|
275 |
+
#: modules/competition-queries/competition-queries.php:26
|
276 |
msgid ""
|
277 |
"Find out how many “actual” pages are competing for each query"
|
278 |
msgstr ""
|
279 |
|
280 |
+
#: modules/competition-queries/competition-queries.php:27
|
281 |
msgid "Allinanchor"
|
282 |
msgstr ""
|
283 |
|
284 |
+
#: modules/competition-queries/competition-queries.php:27
|
285 |
msgid "Find out which sites have the most links for each query"
|
286 |
msgstr ""
|
287 |
|
288 |
+
#: modules/competition-queries/competition-queries.php:28
|
289 |
msgid "Allintitle"
|
290 |
msgstr ""
|
291 |
|
292 |
+
#: modules/competition-queries/competition-queries.php:28
|
293 |
msgid ""
|
294 |
"Find out which sites have the highest relevance in the title for each query"
|
295 |
msgstr ""
|
296 |
|
297 |
+
#: modules/competition-queries/competition-queries.php:29
|
298 |
msgid "Allintext"
|
299 |
msgstr ""
|
300 |
|
301 |
+
#: modules/competition-queries/competition-queries.php:29
|
302 |
msgid "Find out which sites have the most relevant content/text on their pages"
|
303 |
msgstr ""
|
304 |
|
305 |
+
#: modules/competition-queries/competition-queries.php:30
|
306 |
msgid "Allinurl"
|
307 |
msgstr ""
|
308 |
|
309 |
+
#: modules/competition-queries/competition-queries.php:30
|
310 |
msgid ""
|
311 |
"Find out which sites have the most relevant naming conventions for each "
|
312 |
"keyword"
|
313 |
msgstr ""
|
314 |
|
315 |
+
#: modules/competition-queries/competition-queries.php:32
|
316 |
msgid "URLs"
|
317 |
msgstr ""
|
318 |
|
319 |
+
#: modules/competition-queries/competition-queries.php:32
|
320 |
msgid "Site"
|
321 |
msgstr ""
|
322 |
|
323 |
+
#: modules/competition-queries/competition-queries.php:32
|
324 |
msgid "Find out how many pages are indexed for each domain"
|
325 |
msgstr ""
|
326 |
|
327 |
+
#: modules/competition-queries/competition-queries.php:33
|
328 |
+
#: modules/competition-queries/competition-queries.php:38
|
329 |
msgid "Inbound Links"
|
330 |
msgstr ""
|
331 |
|
332 |
+
#: modules/competition-queries/competition-queries.php:33
|
333 |
msgid "Find out how many sites link to the domains"
|
334 |
msgstr ""
|
335 |
|
336 |
+
#: modules/competition-queries/competition-queries.php:34
|
337 |
+
#: modules/competition-queries/competition-queries.php:38
|
338 |
msgid "Outbound Links"
|
339 |
msgstr ""
|
340 |
|
341 |
+
#: modules/competition-queries/competition-queries.php:34
|
342 |
msgid "Find out how many sites the domains link to"
|
343 |
msgstr ""
|
344 |
|
345 |
+
#: modules/competition-queries/competition-queries.php:56
|
346 |
msgid "Step 2: Enter the <span id='methodtype'>Keywords</span> To Research"
|
347 |
msgstr ""
|
348 |
|
349 |
+
#: modules/competition-queries/competition-queries.php:58
|
350 |
msgid "(Type in one per line)"
|
351 |
msgstr ""
|
352 |
|
353 |
+
#: modules/competition-queries/competition-queries.php:60
|
354 |
msgid "Step 3: Set Options and Submit"
|
355 |
msgstr ""
|
356 |
|
357 |
+
#: modules/competition-queries/competition-queries.php:62
|
358 |
+
#: modules/site-keyword-queries/site-keyword-queries.php:28
|
359 |
msgid "Show 100 results per page"
|
360 |
msgstr ""
|
361 |
|
362 |
+
#: modules/competition-queries/competition-queries.php:64
|
363 |
+
#: modules/site-keyword-queries/site-keyword-queries.php:30
|
364 |
msgid "Use Google's minimal mode"
|
365 |
msgstr ""
|
366 |
|
367 |
+
#: modules/competition-queries/competition-queries.php:70
|
368 |
+
#: modules/site-keyword-queries/site-keyword-queries.php:33
|
369 |
msgid "Submit"
|
370 |
msgstr ""
|
371 |
|
372 |
+
#: modules/files/files.php:14
|
373 |
msgid "File Editor"
|
374 |
msgstr ""
|
375 |
|
376 |
+
#: modules/files/files.php:52
|
377 |
msgid ""
|
378 |
"A .htaccess file exists, but it’s not writable. You can edit it here "
|
379 |
"once the file permissions are corrected."
|
380 |
msgstr ""
|
381 |
|
382 |
+
#: modules/files/files.php:58
|
383 |
msgid ""
|
384 |
"WordPress won’t be able to display your robots.txt file because the "
|
385 |
"default <a href=\"options-permalink.php\" target=\"_blank\">permalink "
|
386 |
"structure</a> is in use."
|
387 |
msgstr ""
|
388 |
|
389 |
+
#: modules/files/files.php:65
|
390 |
#, php-format
|
391 |
msgid "robots.txt [<a href=\"%s\" target=\"_blank\">Open</a>]"
|
392 |
msgstr ""
|
393 |
|
394 |
+
#: modules/files/files.php:69
|
395 |
msgid "Enable this custom robots.txt file and disable the default file"
|
396 |
msgstr ""
|
397 |
|
398 |
+
#: modules/files/files.php:70
|
399 |
msgid "Let other plugins add rules to my custom robots.txt file"
|
400 |
msgstr ""
|
401 |
|
402 |
+
#: modules/files/files.php:71
|
403 |
msgid "robots.txt Settings"
|
404 |
msgstr ""
|
405 |
|
406 |
+
#: modules/files/files.php:74
|
407 |
msgid ""
|
408 |
"Please realize that incorrectly editing your robots.txt file could block "
|
409 |
"search engines from your site."
|
410 |
msgstr ""
|
411 |
|
412 |
+
#: modules/files/files.php:78
|
413 |
msgid ".htaccess"
|
414 |
msgstr ""
|
415 |
|
416 |
+
#: modules/files/files.php:81
|
417 |
msgid ""
|
418 |
"Also, incorrectly editing your .htaccess file could disable your entire "
|
419 |
"website. Edit with caution!"
|
420 |
msgstr ""
|
421 |
|
422 |
+
#: modules/files/files.php:131
|
423 |
#, php-format
|
424 |
msgid ""
|
425 |
"Please note that your privacy settings won’t have any effect on your "
|
426 |
"robots.txt file, since you’re using <a href=\"%s\">a custom one</a>."
|
427 |
msgstr ""
|
428 |
|
429 |
+
#: modules/import-aiosp/import-aiosp.php:12
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
430 |
msgid "Import from All in One SEO Pack"
|
431 |
msgstr ""
|
432 |
|
433 |
+
#: modules/import-aiosp/import-aiosp.php:13
|
434 |
msgid "AIOSP Import"
|
435 |
msgstr ""
|
436 |
|
437 |
+
#: modules/import-aiosp/import-aiosp.php:15
|
438 |
msgid "All in One SEO Pack"
|
439 |
msgstr ""
|
440 |
|
441 |
+
#: modules/import-aiosp/import-aiosp.php:16
|
442 |
msgid "Import post data (custom title tags and meta tags)."
|
443 |
msgstr ""
|
444 |
|
445 |
+
#: modules/import-aiosp/import-aiosp.php:28
|
446 |
msgid ""
|
447 |
"Here you can move post fields from the All in One SEO Pack (AIOSP) plugin to "
|
448 |
"SEO Ultimate. AIOSP’s data remains in your WordPress database after "
|
451 |
"to be currently installed or activated for the import to take place."
|
452 |
msgstr ""
|
453 |
|
454 |
+
#: modules/import-aiosp/import-aiosp.php:30
|
455 |
msgid ""
|
456 |
"The import tool can only move over data from AIOSP version 1.6 or above. If "
|
457 |
"you use an older version of AIOSP, you should update to the latest version "
|
458 |
"first and run AIOSP’s upgrade process."
|
459 |
msgstr ""
|
460 |
|
461 |
+
#: modules/import-aiosp/import-aiosp.php:35
|
462 |
msgid "Import Post Fields"
|
463 |
msgstr ""
|
464 |
|
465 |
+
#: modules/import-aiosp/import-aiosp.php:36
|
466 |
msgid ""
|
467 |
"Post fields store the SEO data for your posts/pages (i.e. your custom title "
|
468 |
"tags, meta descriptions, and meta keywords). If you provided custom titles/"
|
470 |
"data over to SEO Ultimate."
|
471 |
msgstr ""
|
472 |
|
473 |
+
#: modules/import-aiosp/import-aiosp.php:39
|
474 |
msgid "Conflict Resolution Mode"
|
475 |
msgstr ""
|
476 |
|
477 |
+
#: modules/import-aiosp/import-aiosp.php:40
|
478 |
msgid ""
|
479 |
"What should the import tool do if it tries to move over a post’s AIOSP "
|
480 |
"data, but different data already exists in the corresponding SEO Ultimate "
|
481 |
"fields?"
|
482 |
msgstr ""
|
483 |
|
484 |
+
#: modules/import-aiosp/import-aiosp.php:42
|
485 |
msgid "Skip that post and leave all data as-is (default)."
|
486 |
msgstr ""
|
487 |
|
488 |
+
#: modules/import-aiosp/import-aiosp.php:43
|
489 |
msgid "Delete the SEO Ultimate data and replace it with the AIOSP data."
|
490 |
msgstr ""
|
491 |
|
492 |
+
#: modules/import-aiosp/import-aiosp.php:44
|
493 |
msgid "Keep the SEO Ultimate data and delete the AIOSP data."
|
494 |
msgstr ""
|
495 |
|
496 |
+
#: modules/import-aiosp/import-aiosp.php:47
|
497 |
msgid "Deletion Preference"
|
498 |
msgstr ""
|
499 |
|
500 |
+
#: modules/import-aiosp/import-aiosp.php:48
|
501 |
msgid ""
|
502 |
"When the migration tool successfully copies a post’s AIOSP data over "
|
503 |
"to SEO Ultimate, what should it do with the old AIOSP data?"
|
504 |
msgstr ""
|
505 |
|
506 |
+
#: modules/import-aiosp/import-aiosp.php:50
|
507 |
msgid "Delete the AIOSP data."
|
508 |
msgstr ""
|
509 |
|
510 |
+
#: modules/import-aiosp/import-aiosp.php:51
|
511 |
msgid "Leave behind the duplicate AIOSP data (default)."
|
512 |
msgstr ""
|
513 |
|
514 |
+
#: modules/import-aiosp/import-aiosp.php:63
|
515 |
msgid "Deactivated All in One SEO Pack."
|
516 |
msgstr ""
|
517 |
|
518 |
+
#: modules/import-aiosp/import-aiosp.php:125
|
519 |
#, php-format
|
520 |
msgid "Imported a total of %d fields for one post/page/revision."
|
521 |
msgid_plural "Imported a total of %1$d fields for %2$d posts/pages/revisions."
|
522 |
msgstr[0] ""
|
523 |
msgstr[1] ""
|
524 |
|
525 |
+
#: modules/import-aiosp/import-aiosp.php:131
|
526 |
#, php-format
|
527 |
msgid "Skipped one post with disabled AIOSP data."
|
528 |
msgid_plural "Skipped %d posts with disabled AIOSP data."
|
529 |
msgstr[0] ""
|
530 |
msgstr[1] ""
|
531 |
|
532 |
+
#: modules/import-aiosp/import-aiosp.php:137
|
533 |
#, php-format
|
534 |
msgid ""
|
535 |
"Overwrote one SEO Ultimate field with AIOSP data, as instructed by the "
|
540 |
msgstr[0] ""
|
541 |
msgstr[1] ""
|
542 |
|
543 |
+
#: modules/import-aiosp/import-aiosp.php:143
|
544 |
#, php-format
|
545 |
msgid "Deleted one AIOSP field, as instructed by the settings you chose."
|
546 |
msgid_plural ""
|
548 |
msgstr[0] ""
|
549 |
msgstr[1] ""
|
550 |
|
551 |
+
#: modules/linkbox/linkbox.php:12
|
552 |
msgid "Linkbox Inserter"
|
553 |
msgstr ""
|
554 |
|
555 |
+
#: modules/linkbox/linkbox.php:18
|
556 |
msgid "Link to this post!"
|
557 |
msgstr ""
|
558 |
|
559 |
+
#: modules/linkbox/linkbox.php:45
|
560 |
msgid "At the end of posts"
|
561 |
msgstr ""
|
562 |
|
563 |
+
#: modules/linkbox/linkbox.php:46
|
564 |
msgid "At the end of pages"
|
565 |
msgstr ""
|
566 |
|
567 |
+
#: modules/linkbox/linkbox.php:47
|
568 |
msgid "When called by the su_linkbox hook"
|
569 |
msgstr ""
|
570 |
|
571 |
+
#: modules/linkbox/linkbox.php:48
|
572 |
msgid "Display linkboxes..."
|
573 |
msgstr ""
|
574 |
|
575 |
+
#: modules/linkbox/linkbox.php:49
|
576 |
msgid "Linkbox HTML"
|
577 |
msgstr ""
|
578 |
|
579 |
+
#: modules/meta/meta-settings.php:15
|
580 |
msgid "Meta Editor Settings"
|
581 |
msgstr ""
|
582 |
|
583 |
+
#: modules/meta/meta-settings.php:27
|
|
|
|
|
|
|
|
|
584 |
msgid "Blog Homepage Meta Description"
|
585 |
msgstr ""
|
586 |
|
587 |
+
#: modules/meta/meta-settings.php:28
|
588 |
msgid "Blog Homepage Meta Keywords"
|
589 |
msgstr ""
|
590 |
|
591 |
+
#: modules/meta/meta-settings.php:31
|
592 |
msgid "Use this blog’s tagline as the default homepage description."
|
593 |
msgstr ""
|
594 |
|
595 |
+
#: modules/meta/meta-settings.php:32
|
596 |
msgid "Default Values"
|
597 |
msgstr ""
|
598 |
|
599 |
+
#: modules/meta/meta-settings.php:34
|
600 |
msgid ""
|
601 |
"Don’t use this site’s Open Directory description in search results."
|
602 |
msgstr ""
|
603 |
|
604 |
+
#: modules/meta/meta-settings.php:35
|
605 |
msgid ""
|
606 |
"Don’t use this site’s Yahoo! Directory description in search "
|
607 |
"results."
|
608 |
msgstr ""
|
609 |
|
610 |
+
#: modules/meta/meta-settings.php:36
|
611 |
msgid "Don’t cache or archive this site."
|
612 |
msgstr ""
|
613 |
|
614 |
+
#: modules/meta/meta-settings.php:37
|
615 |
msgid "Spider Instructions"
|
616 |
msgstr ""
|
617 |
|
618 |
+
#: modules/meta/meta-settings.php:39
|
619 |
msgid "Google Webmaster Tools:"
|
620 |
msgstr ""
|
621 |
|
622 |
+
#: modules/meta/meta-settings.php:40
|
623 |
msgid "Yahoo! Site Explorer:"
|
624 |
msgstr ""
|
625 |
|
626 |
+
#: modules/meta/meta-settings.php:41
|
627 |
msgid "Bing Webmaster Center:"
|
628 |
msgstr ""
|
629 |
|
630 |
+
#: modules/meta/meta-settings.php:42
|
631 |
msgid "Verification Codes"
|
632 |
msgstr ""
|
633 |
|
634 |
+
#: modules/meta/meta-settings.php:43
|
635 |
msgid "Custom <head> HTML"
|
636 |
msgstr ""
|
637 |
|
638 |
+
#: modules/meta/meta.php:12
|
639 |
msgid "Meta Editor"
|
640 |
msgstr ""
|
641 |
|
642 |
+
#: modules/meta/meta.php:81
|
643 |
msgid "Custom Header Code"
|
644 |
msgstr ""
|
645 |
|
646 |
+
#: modules/meta/meta.php:97
|
647 |
msgid "Description:"
|
648 |
msgstr ""
|
649 |
|
650 |
+
#: modules/meta/meta.php:100
|
651 |
#, php-format
|
652 |
msgid "You’ve entered %s characters. Most search engines use up to 160."
|
653 |
msgstr ""
|
654 |
|
655 |
+
#: modules/meta/meta.php:102
|
656 |
msgid "Keywords:<br /><em>(separate with commas)</em>"
|
657 |
msgstr ""
|
658 |
|
659 |
+
#: modules/meta/meta.php:109
|
660 |
msgid ""
|
661 |
"<strong>Description:</strong> — The value of the meta description tag. "
|
662 |
"The description will often appear underneath the title in search engine "
|
663 |
"results. "
|
664 |
msgstr ""
|
665 |
|
666 |
+
#: modules/meta/meta.php:111
|
667 |
msgid ""
|
668 |
"<strong>Keywords:</strong> — The value of the meta keywords tag. The "
|
669 |
"keywords list gives search engines a hint as to what this post/page is "
|
670 |
"about. "
|
671 |
msgstr ""
|
672 |
|
673 |
+
#: modules/modules/modules.php:12
|
674 |
msgid "Module Manager"
|
675 |
msgstr ""
|
676 |
|
677 |
+
#: modules/modules/modules.php:13
|
678 |
msgid "Modules"
|
679 |
msgstr ""
|
680 |
|
681 |
+
#: modules/modules/modules.php:33
|
682 |
msgid ""
|
683 |
"SEO Ultimate’s features are located in groups called “modules."
|
684 |
"” By default, most of these modules are listed in the “"
|
687 |
"corner of your administration screen."
|
688 |
msgstr ""
|
689 |
|
690 |
+
#: modules/modules/modules.php:35
|
691 |
msgid ""
|
692 |
"The Module Manager lets you disable or hide modules you don’t use. "
|
693 |
"You can also silence modules from displaying bubble alerts on the menu."
|
694 |
msgstr ""
|
695 |
|
696 |
+
#: modules/modules/modules.php:41
|
697 |
msgid "Status"
|
698 |
msgstr ""
|
699 |
|
700 |
+
#: modules/modules/modules.php:42
|
701 |
msgid "Module"
|
702 |
msgstr ""
|
703 |
|
704 |
+
#: modules/modules/modules.php:55
|
705 |
msgid "Enabled"
|
706 |
msgstr ""
|
707 |
|
708 |
+
#: modules/modules/modules.php:56
|
709 |
msgid "Silenced"
|
710 |
msgstr ""
|
711 |
|
712 |
+
#: modules/modules/modules.php:57
|
713 |
msgid "Hidden"
|
714 |
msgstr ""
|
715 |
|
716 |
+
#: modules/modules/modules.php:58
|
717 |
msgid "Disabled"
|
718 |
msgstr ""
|
719 |
|
720 |
+
#: modules/more-links/more-links.php:12
|
721 |
msgid "More Link Customizer"
|
722 |
msgstr ""
|
723 |
|
724 |
+
#: modules/more-links/more-links.php:27
|
725 |
msgid "Default More Link Text"
|
726 |
msgstr ""
|
727 |
|
728 |
+
#: modules/more-links/more-links.php:45
|
729 |
msgid "More Link Text:"
|
730 |
msgstr ""
|
731 |
|
732 |
+
#: modules/noindex/noindex.php:12
|
733 |
msgid "Noindex Manager"
|
734 |
msgstr ""
|
735 |
|
736 |
+
#: modules/noindex/noindex.php:39
|
737 |
msgid ""
|
738 |
"Note: The current <a href='options-privacy.php'>privacy settings</a> will "
|
739 |
"block indexing of the entire site, regardless of which options are set below."
|
740 |
msgstr ""
|
741 |
|
742 |
+
#: modules/noindex/noindex.php:42
|
743 |
msgid "Prevent indexing of..."
|
744 |
msgstr ""
|
745 |
|
746 |
+
#: modules/noindex/noindex.php:43
|
747 |
msgid "Administration back-end pages"
|
748 |
msgstr ""
|
749 |
|
750 |
+
#: modules/noindex/noindex.php:44
|
751 |
msgid "Author archives"
|
752 |
msgstr ""
|
753 |
|
754 |
+
#: modules/noindex/noindex.php:45
|
755 |
msgid "Blog search pages"
|
756 |
msgstr ""
|
757 |
|
758 |
+
#: modules/noindex/noindex.php:46
|
759 |
msgid "Category archives"
|
760 |
msgstr ""
|
761 |
|
762 |
+
#: modules/noindex/noindex.php:47
|
763 |
msgid "Comment feeds"
|
764 |
msgstr ""
|
765 |
|
766 |
+
#: modules/noindex/noindex.php:48
|
767 |
msgid "Comment subpages"
|
768 |
msgstr ""
|
769 |
|
770 |
+
#: modules/noindex/noindex.php:49
|
771 |
msgid "Date-based archives"
|
772 |
msgstr ""
|
773 |
|
774 |
+
#: modules/noindex/noindex.php:50
|
775 |
msgid "Subpages of the homepage"
|
776 |
msgstr ""
|
777 |
|
778 |
+
#: modules/noindex/noindex.php:51
|
779 |
msgid "Tag archives"
|
780 |
msgstr ""
|
781 |
|
782 |
+
#: modules/noindex/noindex.php:52
|
783 |
msgid "User login/registration pages"
|
784 |
msgstr ""
|
785 |
|
786 |
+
#: modules/sds-blog/sds-blog.php:12
|
787 |
msgid "Whitepapers"
|
788 |
msgstr ""
|
789 |
|
790 |
+
#: modules/sds-blog/sds-blog.php:13
|
791 |
msgid "SEO Design Solutions Whitepapers"
|
792 |
msgstr ""
|
793 |
|
794 |
+
#. #-#-#-#-# plugin.pot (SEO Ultimate 2.1) #-#-#-#-#
|
795 |
#. Author of the plugin/theme
|
796 |
+
#: modules/sds-blog/sds-blog.php:49
|
797 |
msgid "SEO Design Solutions"
|
798 |
msgstr ""
|
799 |
|
800 |
+
#: modules/sds-blog/sds-blog.php:50
|
801 |
msgid ""
|
802 |
+
"The search engine optimization articles below are loaded from the website of "
|
803 |
+
"SEO Design Solutions, the company behind the SEO Ultimate plugin. Click on "
|
804 |
+
"an article’s title to read it."
|
805 |
msgstr ""
|
806 |
|
807 |
+
#: modules/settings/global-settings.php:18
|
808 |
+
msgid "Global Settings"
|
|
|
|
|
809 |
msgstr ""
|
810 |
|
811 |
+
#: modules/settings/global-settings.php:40
|
812 |
+
msgid "Enable nofollow’d attribution link"
|
813 |
msgstr ""
|
814 |
|
815 |
+
#: modules/settings/global-settings.php:41
|
816 |
+
msgid "Enable attribution link CSS styling"
|
817 |
msgstr ""
|
818 |
|
819 |
+
#: modules/settings/global-settings.php:42
|
820 |
+
msgid "Notify me about unnecessary active plugins"
|
821 |
+
msgstr ""
|
822 |
+
|
823 |
+
#: modules/settings/global-settings.php:43
|
824 |
+
msgid "Insert comments around HTML code insertions"
|
825 |
+
msgstr ""
|
826 |
+
|
827 |
+
#: modules/settings/settings-data.php:16
|
828 |
+
msgid "Settings Data Manager"
|
829 |
msgstr ""
|
830 |
|
831 |
+
#: modules/settings/settings-data.php:17
|
832 |
+
msgid "Manage Settings Data"
|
833 |
+
msgstr ""
|
834 |
+
|
835 |
+
#: modules/settings/settings-data.php:21 modules/settings/settings-data.php:92
|
836 |
+
msgid "Import"
|
837 |
+
msgstr ""
|
838 |
+
|
839 |
+
#: modules/settings/settings-data.php:22
|
840 |
+
msgid "Export"
|
841 |
+
msgstr ""
|
842 |
+
|
843 |
+
#: modules/settings/settings-data.php:64
|
844 |
msgid "Settings successfully imported."
|
845 |
msgstr ""
|
846 |
|
847 |
+
#: modules/settings/settings-data.php:66
|
848 |
msgid ""
|
849 |
"The uploaded file is not in the proper format. Settings could not be "
|
850 |
"imported."
|
851 |
msgstr ""
|
852 |
|
853 |
+
#: modules/settings/settings-data.php:68
|
854 |
msgid "The settings file could not be uploaded successfully."
|
855 |
msgstr ""
|
856 |
|
857 |
+
#: modules/settings/settings-data.php:71
|
858 |
msgid ""
|
859 |
"Settings could not be imported because no settings file was selected. Please "
|
860 |
"click the “Browse” button and select a file to import."
|
861 |
msgstr ""
|
862 |
|
863 |
+
#: modules/settings/settings-data.php:79
|
864 |
msgid "All settings have been erased and defaults have been restored."
|
865 |
msgstr ""
|
866 |
|
867 |
+
#: modules/settings/settings-data.php:84
|
868 |
+
msgid "Import SEO Ultimate Settings File"
|
869 |
msgstr ""
|
870 |
|
871 |
+
#: modules/settings/settings-data.php:87
|
872 |
+
msgid ""
|
873 |
+
"You can use this form to upload and import an SEO Ultimate settings file "
|
874 |
+
"stored on your computer. (Settings files can be created using the Export "
|
875 |
+
"tool.)"
|
876 |
msgstr ""
|
877 |
|
878 |
+
#: modules/settings/settings-data.php:91
|
879 |
+
msgid ""
|
880 |
+
"Are you sure you want to import this settings file? This will overwrite your "
|
881 |
+
"current settings and cannot be undone."
|
882 |
msgstr ""
|
883 |
|
884 |
+
#: modules/settings/settings-data.php:106
|
885 |
+
msgid "Import from Other Plugins"
|
886 |
msgstr ""
|
887 |
|
888 |
+
#: modules/settings/settings-data.php:108
|
889 |
+
msgid ""
|
890 |
+
"You can import settings and data from these plugins. Clicking a plugin’"
|
891 |
+
"s name will take you to the importer page, where you can customize "
|
892 |
+
"parameters and start the import."
|
893 |
msgstr ""
|
894 |
|
895 |
+
#: modules/settings/settings-data.php:128
|
896 |
+
msgid ""
|
897 |
+
"You can use the export tool to download an SEO Ultimate settings file to "
|
898 |
+
"your computer."
|
899 |
msgstr ""
|
900 |
|
901 |
+
#: modules/settings/settings-data.php:130
|
902 |
+
msgid ""
|
903 |
+
"A settings file includes the data of every checkbox and textbox of every "
|
904 |
+
"installed module. It does NOT include site-specific data like logged 404s or "
|
905 |
+
"post/page title/meta data (this data would be included in a standard "
|
906 |
+
"database backup, however)."
|
907 |
msgstr ""
|
908 |
|
909 |
+
#: modules/settings/settings-data.php:133
|
910 |
+
msgid "Download Settings File"
|
911 |
+
msgstr ""
|
912 |
+
|
913 |
+
#: modules/settings/settings-data.php:139
|
914 |
msgid ""
|
915 |
+
"You can erase all your SEO Ultimate settings and restore them to “"
|
916 |
+
"factory defaults” by clicking the button below."
|
917 |
msgstr ""
|
918 |
|
919 |
+
#: modules/settings/settings-data.php:142
|
920 |
msgid ""
|
921 |
+
"Are you sure you want to erase all module settings? This cannot be undone."
|
|
|
|
|
922 |
msgstr ""
|
923 |
|
924 |
+
#: modules/settings/settings-data.php:143
|
925 |
+
msgid "Restore Default Settings"
|
926 |
msgstr ""
|
927 |
|
928 |
+
#: modules/settings/settings.php:12
|
929 |
+
msgid "Plugin Settings"
|
930 |
msgstr ""
|
931 |
|
932 |
+
#: modules/settings/settings.php:13
|
933 |
+
msgid "SEO Ultimate Plugin Settings"
|
934 |
msgstr ""
|
935 |
|
936 |
+
#. #-#-#-#-# plugin.pot (SEO Ultimate 2.1) #-#-#-#-#
|
937 |
+
#. Plugin Name of the plugin/theme
|
938 |
+
#: modules/settings/settings.php:14 plugin/class.seo-ultimate.php:732
|
939 |
+
msgid "SEO Ultimate"
|
940 |
msgstr ""
|
941 |
|
942 |
+
#: modules/settings/uninstall.php:17
|
943 |
+
msgid "Uninstaller"
|
944 |
msgstr ""
|
945 |
|
946 |
+
#: modules/settings/uninstall.php:18 plugin/class.seo-ultimate.php:1132
|
947 |
+
msgid "Uninstall"
|
948 |
msgstr ""
|
949 |
|
950 |
+
#: modules/settings/uninstall.php:27
|
951 |
msgid ""
|
952 |
+
"Uninstalling SEO Ultimate will delete your settings and the plugin’s "
|
953 |
+
"files."
|
954 |
msgstr ""
|
955 |
|
956 |
+
#: modules/settings/uninstall.php:30
|
957 |
+
msgid ""
|
958 |
+
"Are you sure you want to uninstall SEO Ultimate? This will permanently erase "
|
959 |
+
"your SEO Ultimate settings and cannot be undone."
|
960 |
msgstr ""
|
961 |
|
962 |
+
#: modules/settings/uninstall.php:31
|
963 |
+
msgid "Uninstall Now"
|
964 |
msgstr ""
|
965 |
|
966 |
+
#: modules/settings/uninstall.php:35 modules/settings/uninstall.php:42
|
967 |
+
msgid "Uninstall SEO Ultimate"
|
|
|
|
|
|
|
968 |
msgstr ""
|
969 |
|
970 |
+
#: modules/settings/uninstall.php:46
|
971 |
+
msgid "Deleted settings."
|
972 |
+
msgstr ""
|
973 |
+
|
974 |
+
#: modules/settings/uninstall.php:53
|
975 |
+
msgid "An error occurred while deleting files."
|
976 |
+
msgstr ""
|
977 |
+
|
978 |
+
#: modules/settings/uninstall.php:55
|
979 |
+
msgid "Deleted files."
|
980 |
+
msgstr ""
|
981 |
+
|
982 |
+
#: modules/settings/uninstall.php:56
|
983 |
+
msgid "Uninstallation complete. Thanks for trying SEO Ultimate."
|
984 |
+
msgstr ""
|
985 |
+
|
986 |
+
#: modules/site-keyword-queries/site-keyword-queries.php:12
|
987 |
msgid "Internal Relevance Researcher"
|
988 |
msgstr ""
|
989 |
|
990 |
+
#: modules/site-keyword-queries/site-keyword-queries.php:13
|
991 |
msgid "Int. Rel. Researcher"
|
992 |
msgstr ""
|
993 |
|
994 |
+
#: modules/site-keyword-queries/site-keyword-queries.php:21
|
995 |
msgid "Step 1: Enter Keywords"
|
996 |
msgstr ""
|
997 |
|
998 |
+
#: modules/site-keyword-queries/site-keyword-queries.php:23
|
999 |
msgid "(Type one keyword per line)"
|
1000 |
msgstr ""
|
1001 |
|
1002 |
+
#: modules/site-keyword-queries/site-keyword-queries.php:25
|
1003 |
msgid "Step 2: Set Options and Submit"
|
1004 |
msgstr ""
|
1005 |
|
1006 |
+
#: modules/site-keyword-queries/site-keyword-queries.php:27
|
1007 |
msgid "Put keywords in quotes"
|
1008 |
msgstr ""
|
1009 |
|
1010 |
+
#: modules/slugs/slugs.php:12
|
1011 |
msgid "Slug Optimizer"
|
1012 |
msgstr ""
|
1013 |
|
1014 |
+
#: modules/slugs/slugs.php:16
|
1015 |
msgid "Words to Remove"
|
1016 |
msgstr ""
|
1017 |
|
1018 |
+
#: modules/titles/titles-formats.php:14
|
1019 |
msgid "Title Rewriter Formats"
|
1020 |
msgstr ""
|
1021 |
|
1022 |
+
#: modules/titles/titles-formats.php:15
|
1023 |
msgid "Default Formats"
|
1024 |
msgstr ""
|
1025 |
|
1026 |
+
#: modules/titles/titles-posts.php:16
|
1027 |
msgid "Post Title Editor"
|
1028 |
msgstr ""
|
1029 |
|
1030 |
+
#: modules/titles/titles-posts.php:23
|
1031 |
msgid "Posts"
|
1032 |
msgstr ""
|
1033 |
|
1034 |
+
#: modules/titles/titles-posts.php:24
|
1035 |
msgid "Pages"
|
1036 |
msgstr ""
|
1037 |
|
1038 |
+
#: modules/titles/titles-posts.php:25
|
1039 |
msgid "Attachments"
|
1040 |
msgstr ""
|
1041 |
|
1042 |
+
#: modules/titles/titles-taxonomies.php:16
|
1043 |
msgid "Taxonomy Title Editor"
|
1044 |
msgstr ""
|
1045 |
|
1046 |
+
#: modules/titles/titles-taxonomies.php:23
|
1047 |
msgid "Categories"
|
1048 |
msgstr ""
|
1049 |
|
1050 |
+
#: modules/titles/titles-taxonomies.php:24
|
1051 |
msgid "Post Tags"
|
1052 |
msgstr ""
|
1053 |
|
1054 |
+
#: modules/titles/titles.php:12
|
1055 |
msgid "Title Rewriter"
|
1056 |
msgstr ""
|
1057 |
|
1058 |
+
#: modules/titles/titles.php:24
|
1059 |
msgid "{blog}"
|
1060 |
msgstr ""
|
1061 |
|
1062 |
+
#: modules/titles/titles.php:25
|
1063 |
msgid "{post} | {blog}"
|
1064 |
msgstr ""
|
1065 |
|
1066 |
+
#: modules/titles/titles.php:26
|
1067 |
msgid "{page} | {blog}"
|
1068 |
msgstr ""
|
1069 |
|
1070 |
+
#: modules/titles/titles.php:27
|
1071 |
msgid "{category} | {blog}"
|
1072 |
msgstr ""
|
1073 |
|
1074 |
+
#: modules/titles/titles.php:28
|
1075 |
msgid "{tag} | {blog}"
|
1076 |
msgstr ""
|
1077 |
|
1078 |
+
#: modules/titles/titles.php:29
|
1079 |
msgid "Archives for {month} {day}, {year} | {blog}"
|
1080 |
msgstr ""
|
1081 |
|
1082 |
+
#: modules/titles/titles.php:30
|
1083 |
msgid "Archives for {month} {year} | {blog}"
|
1084 |
msgstr ""
|
1085 |
|
1086 |
+
#: modules/titles/titles.php:31
|
1087 |
msgid "Archives for {year} | {blog}"
|
1088 |
msgstr ""
|
1089 |
|
1090 |
+
#: modules/titles/titles.php:32
|
1091 |
msgid "Posts by {author} | {blog}"
|
1092 |
msgstr ""
|
1093 |
|
1094 |
+
#: modules/titles/titles.php:33
|
1095 |
msgid "Search Results for {query} | {blog}"
|
1096 |
msgstr ""
|
1097 |
|
1098 |
+
#: modules/titles/titles.php:34
|
1099 |
msgid "404 Not Found | {blog}"
|
1100 |
msgstr ""
|
1101 |
|
1102 |
+
#: modules/titles/titles.php:35
|
1103 |
msgid "{title} - Page {num}"
|
1104 |
msgstr ""
|
1105 |
|
1106 |
+
#: modules/titles/titles.php:41
|
1107 |
msgid "Blog Homepage Title"
|
1108 |
msgstr ""
|
1109 |
|
1110 |
+
#: modules/titles/titles.php:42
|
1111 |
msgid "Post Title Format"
|
1112 |
msgstr ""
|
1113 |
|
1114 |
+
#: modules/titles/titles.php:43
|
1115 |
msgid "Page Title Format"
|
1116 |
msgstr ""
|
1117 |
|
1118 |
+
#: modules/titles/titles.php:44
|
1119 |
msgid "Category Title Format"
|
1120 |
msgstr ""
|
1121 |
|
1122 |
+
#: modules/titles/titles.php:45
|
1123 |
msgid "Tag Title Format"
|
1124 |
msgstr ""
|
1125 |
|
1126 |
+
#: modules/titles/titles.php:46
|
1127 |
msgid "Day Archive Title Format"
|
1128 |
msgstr ""
|
1129 |
|
1130 |
+
#: modules/titles/titles.php:47
|
1131 |
msgid "Month Archive Title Format"
|
1132 |
msgstr ""
|
1133 |
|
1134 |
+
#: modules/titles/titles.php:48
|
1135 |
msgid "Year Archive Title Format"
|
1136 |
msgstr ""
|
1137 |
|
1138 |
+
#: modules/titles/titles.php:49
|
1139 |
msgid "Author Archive Title Format"
|
1140 |
msgstr ""
|
1141 |
|
1142 |
+
#: modules/titles/titles.php:50
|
1143 |
msgid "Search Title Format"
|
1144 |
msgstr ""
|
1145 |
|
1146 |
+
#: modules/titles/titles.php:51
|
1147 |
msgid "404 Title Format"
|
1148 |
msgstr ""
|
1149 |
|
1150 |
+
#: modules/titles/titles.php:52
|
1151 |
msgid "Pagination Title Format"
|
1152 |
msgstr ""
|
1153 |
|
1154 |
+
#: modules/titles/titles.php:268
|
|
|
|
|
|
|
|
|
1155 |
msgid "Post"
|
1156 |
msgstr ""
|
1157 |
|
1158 |
+
#: modules/titles/titles.php:272
|
1159 |
msgid "Page"
|
1160 |
msgstr ""
|
1161 |
|
1162 |
+
#: modules/titles/titles.php:344
|
1163 |
msgid "ID"
|
1164 |
msgstr ""
|
1165 |
|
1166 |
+
#: modules/titles/titles.php:344
|
1167 |
msgid "Name"
|
1168 |
msgstr ""
|
1169 |
|
1170 |
+
#: modules/titles/titles.php:344
|
1171 |
msgid "Title Tag"
|
1172 |
msgstr ""
|
1173 |
|
1174 |
+
#: modules/titles/titles.php:417
|
1175 |
+
msgid "Title Tag:"
|
1176 |
+
msgstr ""
|
1177 |
+
|
1178 |
+
#: modules/titles/titles.php:422
|
1179 |
msgid ""
|
1180 |
"<strong>Title Tag</strong> — The exact contents of the <title> "
|
1181 |
"tag. The title appears in visitors' title bars and in search engine result "
|
1182 |
"titles. "
|
1183 |
msgstr ""
|
1184 |
|
1185 |
+
#: plugin/class.seo-ultimate.php:732
|
1186 |
msgid "SEO"
|
1187 |
msgstr ""
|
1188 |
|
1189 |
+
#: plugin/class.seo-ultimate.php:1009
|
1190 |
msgid "SEO Settings Help"
|
1191 |
msgstr ""
|
1192 |
|
1193 |
+
#: plugin/class.seo-ultimate.php:1011
|
1194 |
msgid "The SEO Settings box lets you customize these settings:"
|
1195 |
msgstr ""
|
1196 |
|
1197 |
+
#: plugin/class.seo-ultimate.php:1013
|
1198 |
msgid "(The SEO Settings box is part of the SEO Ultimate plugin.)"
|
1199 |
msgstr ""
|
1200 |
|
1201 |
+
#: plugin/class.seo-ultimate.php:1068
|
1202 |
#, php-format
|
1203 |
msgid ""
|
1204 |
"SEO Ultimate includes the functionality of %1$s. You may want to deactivate %"
|
1205 |
"1$s to avoid plugin conflicts."
|
1206 |
msgstr ""
|
1207 |
|
1208 |
+
#: plugin/class.seo-ultimate.php:1152
|
1209 |
+
msgid "Active Modules: "
|
1210 |
+
msgstr ""
|
1211 |
+
|
1212 |
+
#: plugin/class.seo-ultimate.php:1213
|
1213 |
msgid ""
|
1214 |
"<strong>SEO Ultimate Notice:</strong> Your blog is configured to block "
|
1215 |
"search engine spiders. To resolve this, <a href='options-privacy.php' "
|
1217 |
"everyone."
|
1218 |
msgstr ""
|
1219 |
|
1220 |
+
#: plugin/class.seo-ultimate.php:1321
|
1221 |
msgid "SEO Settings"
|
1222 |
msgstr ""
|
1223 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1224 |
#. Plugin URI of the plugin/theme
|
1225 |
msgid "http://www.seodesignsolutions.com/wordpress-seo/"
|
1226 |
msgstr ""
|