Version Description
Download this release
Release Info
Developer | SEO Design Solutions |
Plugin | SEO Ultimate |
Version | 0.9 |
Comparing to | |
See all releases |
Code changes from version 0.8 to 0.9
- class.seo-ultimate.php +70 -63
- class.su-hitset.php +2 -1
- class.su-importmodule.php +0 -69
- class.su-module.php +67 -56
- class.su-parentmodule.php +0 -52
- class.su-widget.php +0 -17
- functions.php +117 -0
- global.css +136 -0
- modules.css +110 -0
- modules.js +13 -0
- modules/404s.php +70 -34
- modules/canonical.php +34 -19
- modules/files.php +60 -12
- modules/linkbox.php +34 -19
- modules/meta.php +34 -9
- modules/modules.php +6 -5
- modules/noindex.php +42 -11
- modules/settings.php +7 -8
- modules/slugs.php +102 -0
- modules/titles.php +28 -15
- readme.txt +49 -5
- seo-ultimate.css +0 -237
- seo-ultimate.js +0 -17
- seo-ultimate.php +6 -9
- seo-ultimate.pot +1169 -680
- tabs.js +42 -0
class.seo-ultimate.php
CHANGED
@@ -2,7 +2,6 @@
|
|
2 |
/**
|
3 |
* The main class. Provides plugin-level functionality.
|
4 |
*
|
5 |
-
* @version 1.5
|
6 |
* @since 0.1
|
7 |
*/
|
8 |
class SEO_Ultimate {
|
@@ -34,7 +33,7 @@ class SEO_Ultimate {
|
|
34 |
var $dbdata = array();
|
35 |
|
36 |
/**
|
37 |
-
* The server path of
|
38 |
* Example: /home/user/public_html/wp-content/plugins/seo-ultimate/seo-ultimate.php
|
39 |
*
|
40 |
* @since 0.1
|
@@ -43,7 +42,7 @@ class SEO_Ultimate {
|
|
43 |
var $plugin_file_path;
|
44 |
|
45 |
/**
|
46 |
-
* The public URL of
|
47 |
* Example: http://www.example.com/wp-content/plugins/seo-ultimate/seo-ultimate.php
|
48 |
*
|
49 |
* @since 0.1
|
@@ -70,12 +69,12 @@ class SEO_Ultimate {
|
|
70 |
var $plugin_dir_url;
|
71 |
|
72 |
/**
|
73 |
-
* The
|
74 |
*
|
75 |
-
* @since 0.
|
76 |
-
* @var
|
77 |
*/
|
78 |
-
var $
|
79 |
|
80 |
/**
|
81 |
* The name of the function/mechanism that triggered the current redirect.
|
@@ -83,7 +82,7 @@ class SEO_Ultimate {
|
|
83 |
* @since 0.3
|
84 |
* @var string
|
85 |
*/
|
86 |
-
var $hit_redirect_trigger;
|
87 |
|
88 |
|
89 |
/********** CLASS CONSTRUCTORS **********/
|
@@ -94,7 +93,8 @@ class SEO_Ultimate {
|
|
94 |
*
|
95 |
* @since 0.1
|
96 |
* @uses $dbdata
|
97 |
-
* @uses save_dbdata()
|
|
|
98 |
* @uses load_plugin_data()
|
99 |
* @uses SU_VERSION
|
100 |
* @uses install()
|
@@ -123,6 +123,7 @@ class SEO_Ultimate {
|
|
123 |
|
124 |
//Save
|
125 |
add_action('shutdown', array($this, 'save_dbdata'));
|
|
|
126 |
|
127 |
/********** CLASS CONSTRUCTION **********/
|
128 |
|
@@ -255,6 +256,7 @@ class SEO_Ultimate {
|
|
255 |
|
256 |
/**
|
257 |
* Upgrades SEO Ultimate to version 0.8.
|
|
|
258 |
*
|
259 |
* @since 0.8
|
260 |
* @uses $dbdata
|
@@ -353,12 +355,17 @@ class SEO_Ultimate {
|
|
353 |
* Finds and loads all modules. Runs the activation functions of newly-uploaded modules.
|
354 |
* Updates the modules list and saves it in the database. Removes the cron jobs of deleted modules.
|
355 |
*
|
|
|
|
|
356 |
* @since 0.1
|
357 |
* @uses $plugin_dir_path
|
|
|
358 |
* @uses $modules Stores module classes in this array.
|
|
|
359 |
* @uses module_sort_callback() Passes this function to uasort() to sort the $modules array.
|
360 |
* @uses SU_MODULE_ENABLED
|
361 |
* @uses SU_MODULE_DISABLED
|
|
|
362 |
*/
|
363 |
function load_modules() {
|
364 |
|
@@ -440,6 +447,7 @@ class SEO_Ultimate {
|
|
440 |
}
|
441 |
}
|
442 |
|
|
|
443 |
foreach ($this->disabled_modules as $key => $name) {
|
444 |
$newmodules[$key] = SU_MODULE_DISABLED;
|
445 |
}
|
@@ -465,7 +473,7 @@ class SEO_Ultimate {
|
|
465 |
//Allow translation of this plugin
|
466 |
load_plugin_textdomain('seo-ultimate', '', plugin_basename($this->plugin_file_path));
|
467 |
|
468 |
-
//
|
469 |
foreach ($this->modules as $module) {
|
470 |
$module->load_default_settings();
|
471 |
$module->init();
|
@@ -518,7 +526,7 @@ class SEO_Ultimate {
|
|
518 |
}
|
519 |
|
520 |
/**
|
521 |
-
* Saves data to the database.
|
522 |
*
|
523 |
* @since 0.8
|
524 |
* @uses $dbdata
|
@@ -538,7 +546,19 @@ class SEO_Ultimate {
|
|
538 |
}
|
539 |
|
540 |
/**
|
541 |
-
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
542 |
*
|
543 |
* @since 0.1
|
544 |
* @uses get_current_url()
|
@@ -551,13 +571,18 @@ class SEO_Ultimate {
|
|
551 |
*/
|
552 |
function log_hit($status_header, $status_code, $redirect_url = '') {
|
553 |
|
|
|
554 |
if (!is_user_logged_in()) {
|
555 |
global $wpdb;
|
556 |
|
557 |
-
|
558 |
$url = $this->get_current_url();
|
|
|
|
|
|
|
559 |
$is_new = (count($wpdb->get_results($wpdb->prepare("SELECT url FROM $table WHERE url = %s AND is_new = 0", $url))) == 0);
|
560 |
|
|
|
561 |
$data = array(
|
562 |
'time' => time()
|
563 |
, 'ip_address' => $_SERVER['REMOTE_ADDR']
|
@@ -570,24 +595,22 @@ class SEO_Ultimate {
|
|
570 |
, 'is_new' => $is_new
|
571 |
);
|
572 |
|
573 |
-
if
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
$wpdb->insert($table, $data);
|
582 |
-
$this->hit_id = $wpdb->insert_id;
|
583 |
-
}
|
584 |
}
|
585 |
|
|
|
586 |
return $status_header;
|
587 |
}
|
588 |
|
589 |
/**
|
590 |
-
* A wp_redirect WordPress filter that logs the
|
591 |
*
|
592 |
* @since 0.2
|
593 |
* @uses log_hit()
|
@@ -597,13 +620,13 @@ class SEO_Ultimate {
|
|
597 |
* @return string The unchanged $redirect_url parameter.
|
598 |
*/
|
599 |
function log_redirect($redirect_url, $status_code) {
|
600 |
-
if (
|
601 |
-
$this->log_hit(null, $status_code, $redirect_url);
|
602 |
return $redirect_url;
|
603 |
}
|
604 |
|
605 |
/**
|
606 |
-
* A redirect_canonical WordPress filter that logs the
|
607 |
*
|
608 |
* @since 0.3
|
609 |
* @uses log_hit()
|
@@ -612,8 +635,7 @@ class SEO_Ultimate {
|
|
612 |
* @return string The unchanged $redirect_url parameter.
|
613 |
*/
|
614 |
function log_redirect_canonical($redirect_url) {
|
615 |
-
if (
|
616 |
-
//$this->log_hit(null, 301, $redirect_url, 'redirect_canonical');
|
617 |
return $redirect_url;
|
618 |
}
|
619 |
|
@@ -761,7 +783,7 @@ class SEO_Ultimate {
|
|
761 |
global $plugin_page;
|
762 |
|
763 |
foreach ($this->modules as $key => $module) {
|
764 |
-
if ($plugin_page
|
765 |
}
|
766 |
}
|
767 |
|
@@ -781,10 +803,9 @@ class SEO_Ultimate {
|
|
781 |
* @uses hook_to_key()
|
782 |
*/
|
783 |
function admin_includes() {
|
784 |
-
|
785 |
-
//Global
|
786 |
-
echo "\n<link rel='stylesheet' type='text/css' href='".$this->plugin_dir_url."
|
787 |
-
echo "\n<script type='text/javascript' src='".$this->plugin_dir_url."seo-ultimate.js?version=".SU_VERSION."'></script>\n";
|
788 |
|
789 |
//Figure out what plugin admin page we're on
|
790 |
global $plugin_page;
|
@@ -792,17 +813,25 @@ class SEO_Ultimate {
|
|
792 |
|
793 |
foreach ($this->modules as $key => $module) {
|
794 |
|
795 |
-
//
|
796 |
if (strcmp($key, $pp) == 0) {
|
797 |
-
|
798 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
799 |
return;
|
800 |
}
|
801 |
}
|
802 |
}
|
803 |
|
804 |
/**
|
805 |
-
* Replaces WordPress's default contextual help with
|
806 |
*
|
807 |
* @since 0.1
|
808 |
* @uses $modules
|
@@ -812,31 +841,9 @@ class SEO_Ultimate {
|
|
812 |
* @return string The contextual help content that should be shown.
|
813 |
*/
|
814 |
function admin_help($text, $screen) {
|
815 |
-
//If $screen begins with a recognized prefix...
|
816 |
-
if ($screen == 'toplevel_page_seo' || substr($screen, 0, 9) == 'seo_page_' || substr($screen, 0, 14) == 'settings_page_') {
|
817 |
|
818 |
-
|
819 |
-
|
820 |
-
|
821 |
-
//If $key refers to a module...
|
822 |
-
if (isset($this->modules[$key])) {
|
823 |
-
|
824 |
-
//Ask the module for custom help content
|
825 |
-
$customhelp = $this->modules[$key]->admin_help();
|
826 |
-
|
827 |
-
//If we have custom help to display...
|
828 |
-
if ($customhelp !== false) {
|
829 |
-
|
830 |
-
//Return the help content with an <h5> title
|
831 |
-
$help = "<div class='su-help'>\n";
|
832 |
-
$help .= '<h5>'.sprintf(__('%s Help', 'seo-ultimate'),
|
833 |
-
$this->modules[$key]->get_page_title())."</h5>\n";
|
834 |
-
$help .= "<div class='metabox-prefs'>\n".$customhelp."\n</div>\n";
|
835 |
-
$help .= "</div>\n";
|
836 |
-
return $help;
|
837 |
-
}
|
838 |
-
}
|
839 |
-
} elseif (strcmp($screen, 'post') == 0 || strcmp($screen, 'page') == 0) {
|
840 |
|
841 |
//Gather post meta help content
|
842 |
$helparray = apply_filters('su_postmeta_help', array());
|
2 |
/**
|
3 |
* The main class. Provides plugin-level functionality.
|
4 |
*
|
|
|
5 |
* @since 0.1
|
6 |
*/
|
7 |
class SEO_Ultimate {
|
33 |
var $dbdata = array();
|
34 |
|
35 |
/**
|
36 |
+
* The server path of the main plugin file.
|
37 |
* Example: /home/user/public_html/wp-content/plugins/seo-ultimate/seo-ultimate.php
|
38 |
*
|
39 |
* @since 0.1
|
42 |
var $plugin_file_path;
|
43 |
|
44 |
/**
|
45 |
+
* The public URL of the main plugin file.
|
46 |
* Example: http://www.example.com/wp-content/plugins/seo-ultimate/seo-ultimate.php
|
47 |
*
|
48 |
* @since 0.1
|
69 |
var $plugin_dir_url;
|
70 |
|
71 |
/**
|
72 |
+
* The array to be inserted into the hits table.
|
73 |
*
|
74 |
+
* @since 0.9
|
75 |
+
* @var array
|
76 |
*/
|
77 |
+
var $hit = array();
|
78 |
|
79 |
/**
|
80 |
* The name of the function/mechanism that triggered the current redirect.
|
82 |
* @since 0.3
|
83 |
* @var string
|
84 |
*/
|
85 |
+
var $hit_redirect_trigger = '';
|
86 |
|
87 |
|
88 |
/********** CLASS CONSTRUCTORS **********/
|
93 |
*
|
94 |
* @since 0.1
|
95 |
* @uses $dbdata
|
96 |
+
* @uses save_dbdata() Hooked into WordPress's "shutdown" action.
|
97 |
+
* @uses save_hit() Hooked into WordPress's "shutdown" action.
|
98 |
* @uses load_plugin_data()
|
99 |
* @uses SU_VERSION
|
100 |
* @uses install()
|
123 |
|
124 |
//Save
|
125 |
add_action('shutdown', array($this, 'save_dbdata'));
|
126 |
+
add_action('shutdown', array($this, 'save_hit'));
|
127 |
|
128 |
/********** CLASS CONSTRUCTION **********/
|
129 |
|
256 |
|
257 |
/**
|
258 |
* Upgrades SEO Ultimate to version 0.8.
|
259 |
+
* Version 0.8 uses 1 wp_options entry instead of 4.
|
260 |
*
|
261 |
* @since 0.8
|
262 |
* @uses $dbdata
|
355 |
* Finds and loads all modules. Runs the activation functions of newly-uploaded modules.
|
356 |
* Updates the modules list and saves it in the database. Removes the cron jobs of deleted modules.
|
357 |
*
|
358 |
+
* SEO Ultimate uses a modular system that allows functionality to be added and removed on-the-fly.
|
359 |
+
*
|
360 |
* @since 0.1
|
361 |
* @uses $plugin_dir_path
|
362 |
+
* @uses $dbdata
|
363 |
* @uses $modules Stores module classes in this array.
|
364 |
+
* @uses $disabled_modules
|
365 |
* @uses module_sort_callback() Passes this function to uasort() to sort the $modules array.
|
366 |
* @uses SU_MODULE_ENABLED
|
367 |
* @uses SU_MODULE_DISABLED
|
368 |
+
* @uses remove_cron_jobs()
|
369 |
*/
|
370 |
function load_modules() {
|
371 |
|
447 |
}
|
448 |
}
|
449 |
|
450 |
+
//Register disabled modules as such
|
451 |
foreach ($this->disabled_modules as $key => $name) {
|
452 |
$newmodules[$key] = SU_MODULE_DISABLED;
|
453 |
}
|
473 |
//Allow translation of this plugin
|
474 |
load_plugin_textdomain('seo-ultimate', '', plugin_basename($this->plugin_file_path));
|
475 |
|
476 |
+
//Load default module settings and run modules' init tasks
|
477 |
foreach ($this->modules as $module) {
|
478 |
$module->load_default_settings();
|
479 |
$module->init();
|
526 |
}
|
527 |
|
528 |
/**
|
529 |
+
* Saves settings data to the database.
|
530 |
*
|
531 |
* @since 0.8
|
532 |
* @uses $dbdata
|
546 |
}
|
547 |
|
548 |
/**
|
549 |
+
* Saves the hit data to the database.
|
550 |
+
*
|
551 |
+
* @since 0.9
|
552 |
+
* @uses $hit
|
553 |
+
*/
|
554 |
+
function save_hit() {
|
555 |
+
global $wpdb;
|
556 |
+
if (!empty($this->hit))
|
557 |
+
$wpdb->insert($this->get_table_name('hits'), $this->hit);
|
558 |
+
}
|
559 |
+
|
560 |
+
/**
|
561 |
+
* Saves information about the current hit into an array, which is later saved to the database.
|
562 |
*
|
563 |
* @since 0.1
|
564 |
* @uses get_current_url()
|
571 |
*/
|
572 |
function log_hit($status_header, $status_code, $redirect_url = '') {
|
573 |
|
574 |
+
//Only log hits from non-logged-in users
|
575 |
if (!is_user_logged_in()) {
|
576 |
global $wpdb;
|
577 |
|
578 |
+
//Get the current URL
|
579 |
$url = $this->get_current_url();
|
580 |
+
|
581 |
+
//Have we seen this URL before?
|
582 |
+
$table = $this->get_table_name('hits');
|
583 |
$is_new = (count($wpdb->get_results($wpdb->prepare("SELECT url FROM $table WHERE url = %s AND is_new = 0", $url))) == 0);
|
584 |
|
585 |
+
//Put it all into an array
|
586 |
$data = array(
|
587 |
'time' => time()
|
588 |
, 'ip_address' => $_SERVER['REMOTE_ADDR']
|
595 |
, 'is_new' => $is_new
|
596 |
);
|
597 |
|
598 |
+
//We don't want to overwrite a redirect URL if it's already been logged
|
599 |
+
if (strlen($this->hit['redirect_url']))
|
600 |
+
$data['redirect_url'] = $this->hit['redirect_url'];
|
601 |
+
|
602 |
+
//Put the hit data into our variable.
|
603 |
+
//We'll save it to the database later, since the hit data may change as we gather further information
|
604 |
+
//(e.g. when the redirect URL is discovered).
|
605 |
+
$this->hit = $data;
|
|
|
|
|
|
|
606 |
}
|
607 |
|
608 |
+
//This function can be used as a WordPress filter, so we return the needed variable.
|
609 |
return $status_header;
|
610 |
}
|
611 |
|
612 |
/**
|
613 |
+
* A wp_redirect WordPress filter that logs the URL to which the visitor is being redirected.
|
614 |
*
|
615 |
* @since 0.2
|
616 |
* @uses log_hit()
|
620 |
* @return string The unchanged $redirect_url parameter.
|
621 |
*/
|
622 |
function log_redirect($redirect_url, $status_code) {
|
623 |
+
if (empty($this->hit_redirect_trigger)) $this->hit_redirect_trigger = 'wp_redirect';
|
624 |
+
$this->log_hit(null, $status_code, $redirect_url); //We call log_hit() again so we can pass along the redirect URL
|
625 |
return $redirect_url;
|
626 |
}
|
627 |
|
628 |
/**
|
629 |
+
* A redirect_canonical WordPress filter that logs the fact that a canonical redirect is being issued.
|
630 |
*
|
631 |
* @since 0.3
|
632 |
* @uses log_hit()
|
635 |
* @return string The unchanged $redirect_url parameter.
|
636 |
*/
|
637 |
function log_redirect_canonical($redirect_url) {
|
638 |
+
if (empty($this->hit_redirect_trigger)) $this->hit_redirect_trigger = 'redirect_canonical';
|
|
|
639 |
return $redirect_url;
|
640 |
}
|
641 |
|
783 |
global $plugin_page;
|
784 |
|
785 |
foreach ($this->modules as $key => $module) {
|
786 |
+
if (strcmp($plugin_page, $this->key_to_hook($key)) == 0) return true;
|
787 |
}
|
788 |
}
|
789 |
|
803 |
* @uses hook_to_key()
|
804 |
*/
|
805 |
function admin_includes() {
|
806 |
+
|
807 |
+
//Global CSS
|
808 |
+
echo "\n<link rel='stylesheet' type='text/css' href='".$this->plugin_dir_url."global.css?v=".SU_VERSION."' />\n";
|
|
|
809 |
|
810 |
//Figure out what plugin admin page we're on
|
811 |
global $plugin_page;
|
813 |
|
814 |
foreach ($this->modules as $key => $module) {
|
815 |
|
816 |
+
//Does the current admin page belong to this module?
|
817 |
if (strcmp($key, $pp) == 0) {
|
818 |
+
|
819 |
+
//We're viewing a module page, so print links to the CSS/JavaScript files loaded for all modules
|
820 |
+
echo "\n<link rel='stylesheet' type='text/css' href='".$this->plugin_dir_url."modules.css?v=".SU_VERSION."' />\n";
|
821 |
+
echo "\n<script type='text/javascript' src='".$this->plugin_dir_url."modules.js?v=".SU_VERSION."'></script>\n";
|
822 |
+
|
823 |
+
//Print links to the module's CSS and JavaScript.
|
824 |
+
echo "\n<link rel='stylesheet' type='text/css' href='".$module->module_url."?css=admin&v=".SU_VERSION."' />\n";
|
825 |
+
echo "\n<script type='text/javascript' src='".$module->module_url."?js=admin&v=".SU_VERSION."'></script>\n";
|
826 |
+
|
827 |
+
//The module has been found; mission accomplished.
|
828 |
return;
|
829 |
}
|
830 |
}
|
831 |
}
|
832 |
|
833 |
/**
|
834 |
+
* Replaces WordPress's default contextual help with postmeta help when appropriate.
|
835 |
*
|
836 |
* @since 0.1
|
837 |
* @uses $modules
|
841 |
* @return string The contextual help content that should be shown.
|
842 |
*/
|
843 |
function admin_help($text, $screen) {
|
|
|
|
|
844 |
|
845 |
+
//If we're on the post or page editor...
|
846 |
+
if (strcmp($screen, 'post') == 0 || strcmp($screen, 'page') == 0) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
847 |
|
848 |
//Gather post meta help content
|
849 |
$helparray = apply_filters('su_postmeta_help', array());
|
class.su-hitset.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* A class that stores the results of a query to to the hits table.
|
4 |
*
|
5 |
-
* @version 1.1
|
6 |
*/
|
7 |
class SU_HitSet {
|
8 |
|
@@ -47,6 +47,7 @@ class SU_HitSet {
|
|
47 |
, 'url' => __("URL Requested", 'seo-ultimate')
|
48 |
, 'redirect_url' => __("Redirected To", 'seo-ultimate')
|
49 |
, 'status_code' => __("Status Code", 'seo-ultimate')
|
|
|
50 |
);
|
51 |
|
52 |
$fields = array();
|
2 |
/**
|
3 |
* A class that stores the results of a query to to the hits table.
|
4 |
*
|
5 |
+
* @version 1.1.1
|
6 |
*/
|
7 |
class SU_HitSet {
|
8 |
|
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();
|
class.su-importmodule.php
DELETED
@@ -1,69 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Import Module
|
4 |
-
*
|
5 |
-
* @abstract
|
6 |
-
* @version 1.0.1
|
7 |
-
* @since 0.6
|
8 |
-
*/
|
9 |
-
|
10 |
-
if (class_exists('SU_Module')) {
|
11 |
-
|
12 |
-
class SU_ImportModule extends SU_Module {
|
13 |
-
|
14 |
-
var $import_status_image;
|
15 |
-
|
16 |
-
function get_menu_parent() { return 'su-import-modules'; }
|
17 |
-
|
18 |
-
function admin_page() {
|
19 |
-
$this->admin_page_start('tools');
|
20 |
-
|
21 |
-
if ($this->is_action('update')) {
|
22 |
-
ob_start();
|
23 |
-
$this->admin_page_contents();
|
24 |
-
ob_end_clean();
|
25 |
-
|
26 |
-
global $seo_ultimate;
|
27 |
-
$this->import_status_image = $seo_ultimate->plugin_dir_url.'images/success.png';
|
28 |
-
|
29 |
-
$this->import_page_contents();
|
30 |
-
} else
|
31 |
-
$this->admin_page_contents();
|
32 |
-
|
33 |
-
$this->admin_page_end();
|
34 |
-
}
|
35 |
-
|
36 |
-
function admin_form_end($button = false, $table = true) {
|
37 |
-
if (!$button) $button = __("Import Now", 'seo-ultimate');
|
38 |
-
parent::admin_form_end($button, $table);
|
39 |
-
}
|
40 |
-
|
41 |
-
function import_page_contents() {
|
42 |
-
|
43 |
-
echo "<table id='import-status'>\n";
|
44 |
-
$this->do_import();
|
45 |
-
echo "</table>\n";
|
46 |
-
if ($this->module_exists('settings')) {
|
47 |
-
echo '<a href="options-general.php?page=seo-ultimate" class="button-secondary">';
|
48 |
-
_e('Return to settings page', 'seo-ultimate');
|
49 |
-
} else {
|
50 |
-
echo '<a href="admin.php?page=seo" class="button-secondary">';
|
51 |
-
_e('Return to SEO page', 'seo-ultimate');
|
52 |
-
}
|
53 |
-
echo "</a>\n";
|
54 |
-
}
|
55 |
-
|
56 |
-
function import_status($message) {
|
57 |
-
echo "<tr><td class='image'><img src='{$this->import_status_image}' alt='' /></td><td class='message'>$message</td></tr>";
|
58 |
-
}
|
59 |
-
|
60 |
-
function import_option($module, $key, $option) {
|
61 |
-
if (!isset($this->settings[$module][$key]) || $this->get_setting('overwrite_su')) {
|
62 |
-
$this->settings[$module][$key] = get_option($option);
|
63 |
-
if ($this->get_setting('delete_import')) delete_option($option);
|
64 |
-
}
|
65 |
-
}
|
66 |
-
}
|
67 |
-
|
68 |
-
}
|
69 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class.su-module.php
CHANGED
@@ -3,7 +3,6 @@
|
|
3 |
* The pseudo-abstract class upon which all modules are based.
|
4 |
*
|
5 |
* @abstract
|
6 |
-
* @version 1.5
|
7 |
* @since 0.1
|
8 |
*/
|
9 |
class SU_Module {
|
@@ -168,6 +167,15 @@ class SU_Module {
|
|
168 |
*/
|
169 |
function admin_page_contents() { }
|
170 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
171 |
/**
|
172 |
* Returns the module's custom help content that should go in the "Help" dropdown of WordPress 2.7 and above.
|
173 |
*
|
@@ -372,6 +380,7 @@ class SU_Module {
|
|
372 |
*
|
373 |
* @since 0.1
|
374 |
* @uses admin_footer() Hooked into WordPress's in_admin_footer action.
|
|
|
375 |
* @uses get_module_key()
|
376 |
* @uses get_page_title()
|
377 |
*
|
@@ -380,6 +389,7 @@ class SU_Module {
|
|
380 |
function admin_page_start($icon = 'options-general') {
|
381 |
|
382 |
add_action('in_admin_footer', array($this, 'admin_footer'));
|
|
|
383 |
|
384 |
echo "<div class=\"wrap\">\n";
|
385 |
echo "<div id=\"su-".attribute_escape($this->get_module_key())."\" class=\"su-module\">\n";
|
@@ -422,69 +432,26 @@ class SU_Module {
|
|
422 |
* Outputs a tab control and loads the current tab.
|
423 |
*
|
424 |
* @since 0.7
|
|
|
425 |
* @uses get_admin_url()
|
|
|
426 |
*
|
427 |
-
* @param array $tabs The
|
428 |
*/
|
429 |
-
function admin_page_tabs($tabs = array()
|
|
|
|
|
430 |
|
431 |
-
echo "\n\n<div id='
|
432 |
|
433 |
-
foreach ($tabs as $
|
434 |
echo "<fieldset id='$function'>\n<h3>$title</h3>\n";
|
435 |
if (is_callable($call = array($this, $function))) call_user_func($call);
|
436 |
echo "</fieldset>\n";
|
437 |
}
|
438 |
echo "</div>\n";
|
439 |
-
?>
|
440 |
-
|
441 |
-
<script type="text/javascript">
|
442 |
-
/* <![CDATA[ */
|
443 |
-
jQuery(function()
|
444 |
-
{
|
445 |
-
su_init_tabs();
|
446 |
-
});
|
447 |
-
|
448 |
-
function su_init_tabs()
|
449 |
-
{
|
450 |
-
/* if this is not the breadcrumb admin page, quit */
|
451 |
-
if (!jQuery("#<?php echo $tabset; ?>").length) return;
|
452 |
-
|
453 |
-
/* init markup for tabs */
|
454 |
-
jQuery('#<?php echo $tabset; ?>').prepend("<ul><\/ul>");
|
455 |
-
jQuery('#<?php echo $tabset; ?> > fieldset').each(function(i)
|
456 |
-
{
|
457 |
-
id = jQuery(this).attr('id');
|
458 |
-
caption = jQuery(this).find('h3').text();
|
459 |
-
jQuery('#<?php echo $tabset; ?> > ul').append('<li><a href="#'+id+'"><span>'+caption+"<\/span><\/a><\/li>");
|
460 |
-
jQuery(this).find('h3').hide();
|
461 |
-
});
|
462 |
|
463 |
-
|
464 |
-
var jquiver = undefined == jQuery.ui ? [0,0,0] : undefined == jQuery.ui.version ? [0,1,0] : jQuery.ui.version.split('.');
|
465 |
-
switch(true) {
|
466 |
-
// tabs plugin has been fixed to work on the parent element again.
|
467 |
-
case jquiver[0] >= 1 && jquiver[1] >= 7:
|
468 |
-
jQuery("#<?php echo $tabset; ?>").tabs();
|
469 |
-
break;
|
470 |
-
// tabs plugin has bug and needs to work on ul directly.
|
471 |
-
default:
|
472 |
-
jQuery("#<?php echo $tabset; ?> > ul").tabs();
|
473 |
-
}
|
474 |
-
|
475 |
-
/* handler for openeing the last tab after submit (compability version) */
|
476 |
-
jQuery('#<?php echo $tabset; ?> ul a').click(function(i){
|
477 |
-
var form = jQuery('#bcn_admin_options');
|
478 |
-
var action = form.attr("action").split('#', 1) + jQuery(this).attr('href');
|
479 |
-
// an older bug pops up with some jQuery version(s), which makes it
|
480 |
-
// necessary to set the form's action attribute by standard javascript
|
481 |
-
// node access:
|
482 |
-
form.get(0).setAttribute("action", action);
|
483 |
-
});
|
484 |
-
}
|
485 |
-
</script>
|
486 |
-
|
487 |
-
<?php
|
488 |
}
|
489 |
|
490 |
/**
|
@@ -493,7 +460,7 @@ class SU_Module {
|
|
493 |
* @since 0.8
|
494 |
*/
|
495 |
function admin_page_tabs_init() {
|
496 |
-
add_action('
|
497 |
}
|
498 |
|
499 |
/**
|
@@ -505,6 +472,50 @@ class SU_Module {
|
|
505 |
wp_enqueue_script('jquery-ui-tabs');
|
506 |
}
|
507 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
508 |
/**
|
509 |
* Adds plugin/module information to the admin footer.
|
510 |
*
|
@@ -674,8 +685,8 @@ class SU_Module {
|
|
674 |
|
675 |
echo "<input name='$id' id='$id' type='text' value='$value' class='regular-text' ";
|
676 |
if (isset($defaults[$id])) {
|
677 |
-
echo "onkeyup=\"javascript:
|
678 |
-
echo " <a href=\"javascript:void(0)\" id=\"{$id}_reset\" onclick=\"javascript:
|
679 |
if ($default == $value) echo ' class="hidden"';
|
680 |
echo ">";
|
681 |
_e('Reset', 'seo-ultimate');
|
3 |
* The pseudo-abstract class upon which all modules are based.
|
4 |
*
|
5 |
* @abstract
|
|
|
6 |
* @since 0.1
|
7 |
*/
|
8 |
class SU_Module {
|
167 |
*/
|
168 |
function admin_page_contents() { }
|
169 |
|
170 |
+
/**
|
171 |
+
* Returns an array of arrays, each of which includes the key, title, and content of a custom module dropdown.
|
172 |
+
*
|
173 |
+
* @since 0.9
|
174 |
+
*
|
175 |
+
* @return array
|
176 |
+
*/
|
177 |
+
function admin_dropdowns() { return array(); }
|
178 |
+
|
179 |
/**
|
180 |
* Returns the module's custom help content that should go in the "Help" dropdown of WordPress 2.7 and above.
|
181 |
*
|
380 |
*
|
381 |
* @since 0.1
|
382 |
* @uses admin_footer() Hooked into WordPress's in_admin_footer action.
|
383 |
+
* @uses screen_meta_filter() Hooked into our screen_meta filter
|
384 |
* @uses get_module_key()
|
385 |
* @uses get_page_title()
|
386 |
*
|
389 |
function admin_page_start($icon = 'options-general') {
|
390 |
|
391 |
add_action('in_admin_footer', array($this, 'admin_footer'));
|
392 |
+
add_filter('screen_meta', array($this, 'screen_meta_filter'));
|
393 |
|
394 |
echo "<div class=\"wrap\">\n";
|
395 |
echo "<div id=\"su-".attribute_escape($this->get_module_key())."\" class=\"su-module\">\n";
|
432 |
* Outputs a tab control and loads the current tab.
|
433 |
*
|
434 |
* @since 0.7
|
435 |
+
* @uses $seo_ultimate
|
436 |
* @uses get_admin_url()
|
437 |
+
* @uses SEO_Ultimate::plugin_dir_url
|
438 |
*
|
439 |
+
* @param array $tabs The internationalized tab titles are the array keys, and the references to the functions that display the tab contents are the array values.
|
440 |
*/
|
441 |
+
function admin_page_tabs($tabs = array()) {
|
442 |
+
|
443 |
+
global $seo_ultimate;
|
444 |
|
445 |
+
echo "\n\n<div id='su-tabset' class='su-tabs'>\n";
|
446 |
|
447 |
+
foreach ($tabs as $title => $function) {
|
448 |
echo "<fieldset id='$function'>\n<h3>$title</h3>\n";
|
449 |
if (is_callable($call = array($this, $function))) call_user_func($call);
|
450 |
echo "</fieldset>\n";
|
451 |
}
|
452 |
echo "</div>\n";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
453 |
|
454 |
+
echo '<script type="text/javascript" src="'.$seo_ultimate->plugin_dir_url.'tabs.js?v='.SU_VERSION.'"></script>';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
455 |
}
|
456 |
|
457 |
/**
|
460 |
* @since 0.8
|
461 |
*/
|
462 |
function admin_page_tabs_init() {
|
463 |
+
add_action('admin_print_scripts', array($this, 'admin_page_tabs_js'));
|
464 |
}
|
465 |
|
466 |
/**
|
472 |
wp_enqueue_script('jquery-ui-tabs');
|
473 |
}
|
474 |
|
475 |
+
/**
|
476 |
+
* Adds the module's custom screen meta, if present.
|
477 |
+
*
|
478 |
+
* @since 0.9
|
479 |
+
* @uses admin_dropdowns()
|
480 |
+
*/
|
481 |
+
function screen_meta_filter($screen_meta) {
|
482 |
+
|
483 |
+
$dropdowns = array_reverse($this->admin_dropdowns());
|
484 |
+
|
485 |
+
$script = "<script type='text/javascript'>jQuery(function($) { $('#contextual-help-link').css('display', 'none'); });</script>";
|
486 |
+
|
487 |
+
if (is_array($dropdowns) && count($dropdowns)) {
|
488 |
+
foreach ($dropdowns as $key => $label) {
|
489 |
+
|
490 |
+
$label = htmlspecialchars($label);
|
491 |
+
|
492 |
+
$function = array($this, "admin_dropdown_$key");
|
493 |
+
if (is_callable($function)) {
|
494 |
+
$content = "<div class='su-help'>\n";
|
495 |
+
$content .= '<h5>'.sprintf(_c('%s %s|Dropdown Title', 'seo-ultimate'), $this->get_page_title(), $label)."</h5>\n\n";
|
496 |
+
$content .= call_user_func($function);
|
497 |
+
$content .= "\n</div>\n";
|
498 |
+
$screen_meta[] = compact('key', 'label', 'content');
|
499 |
+
}
|
500 |
+
}
|
501 |
+
|
502 |
+
echo $script;
|
503 |
+
|
504 |
+
} elseif ($this->admin_help() !== false) {
|
505 |
+
|
506 |
+
$content = "<div class='su-help'>\n";
|
507 |
+
$content .= '<h5>'.sprintf(_c('%s Documentation', 'seo-ultimate'), $this->get_page_title())."</h5>\n\n";
|
508 |
+
$content .= $this->admin_help();
|
509 |
+
$content .= "\n</div>\n";
|
510 |
+
|
511 |
+
$screen_meta[] = array('key' => 'documentation', 'label' => __('Documentation', 'seo-ultimate'), 'content' => $content);
|
512 |
+
|
513 |
+
echo $script;
|
514 |
+
}
|
515 |
+
|
516 |
+
return $screen_meta;
|
517 |
+
}
|
518 |
+
|
519 |
/**
|
520 |
* Adds plugin/module information to the admin footer.
|
521 |
*
|
685 |
|
686 |
echo "<input name='$id' id='$id' type='text' value='$value' class='regular-text' ";
|
687 |
if (isset($defaults[$id])) {
|
688 |
+
echo "onkeyup=\"javascript:su_textbox_value_changed(this, '$default', '{$id}_reset')\" />";
|
689 |
+
echo " <a href=\"javascript:void(0)\" id=\"{$id}_reset\" onclick=\"javascript:su_reset_textbox('$id', '$default', '$resetmessage', this)\"";
|
690 |
if ($default == $value) echo ' class="hidden"';
|
691 |
echo ">";
|
692 |
_e('Reset', 'seo-ultimate');
|
class.su-parentmodule.php
DELETED
@@ -1,52 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Parent Module
|
4 |
-
*
|
5 |
-
* @abstract
|
6 |
-
* @version 1.0
|
7 |
-
* @since 0.7
|
8 |
-
*/
|
9 |
-
|
10 |
-
if (class_exists('SU_Module')) {
|
11 |
-
|
12 |
-
class SU_ParentModule extends SU_Module {
|
13 |
-
|
14 |
-
var $modules = array();
|
15 |
-
|
16 |
-
function init() {
|
17 |
-
global $seo_ultimate;
|
18 |
-
foreach ($seo_ultimate->modules as $key => $module) {
|
19 |
-
if ($module->get_parent_module() == $this->get_module_key()) {
|
20 |
-
$this->modules[$key] = $module;
|
21 |
-
}
|
22 |
-
}
|
23 |
-
}
|
24 |
-
|
25 |
-
function admin_page_contents() {
|
26 |
-
$this->admin_form_start(false, false);
|
27 |
-
|
28 |
-
foreach ($this->modules as $key => $module) {
|
29 |
-
echo "\n<div id='".SEO_Ultimate::key_to_hook($key)."'>\n";
|
30 |
-
$this->admin_subheader($module->get_page_title());
|
31 |
-
$module->admin_page_contents();
|
32 |
-
echo "</div>\n\n";
|
33 |
-
}
|
34 |
-
|
35 |
-
$this->admin_form_end(false, false);
|
36 |
-
}
|
37 |
-
|
38 |
-
function admin_help() {
|
39 |
-
$help = '';
|
40 |
-
|
41 |
-
foreach ($this->modules as $key => $module) {
|
42 |
-
if ($childhelp = $module->admin_help())
|
43 |
-
$help .= "\n<h6>".$module->get_page_title()."</h6>\n$childhelp\n";
|
44 |
-
}
|
45 |
-
|
46 |
-
if (strlen($help)) return $help; else return false;
|
47 |
-
}
|
48 |
-
|
49 |
-
}
|
50 |
-
|
51 |
-
}
|
52 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class.su-widget.php
DELETED
@@ -1,17 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The pseudo-abstract class upon which all widgets are based.
|
4 |
-
*
|
5 |
-
* @abstract
|
6 |
-
* @version 1.0
|
7 |
-
* @since 0.1
|
8 |
-
*/
|
9 |
-
class SU_Widget {
|
10 |
-
|
11 |
-
function get_title() { return ''; }
|
12 |
-
function get_section() { return 'normal'; }
|
13 |
-
function get_priority(){ return 'core'; }
|
14 |
-
|
15 |
-
function content() { }
|
16 |
-
}
|
17 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
functions.php
CHANGED
@@ -104,4 +104,121 @@ function su_uninstall() {
|
|
104 |
global $seo_ultimate;
|
105 |
$seo_ultimate->uninstall();
|
106 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
107 |
?>
|
104 |
global $seo_ultimate;
|
105 |
$seo_ultimate->uninstall();
|
106 |
}
|
107 |
+
|
108 |
+
/********** DROPDOWN CODE **********/
|
109 |
+
|
110 |
+
//Special thanks to the Drafts Dropdown plugin for the abstracted code
|
111 |
+
//http://alexking.org/projects/wordpress
|
112 |
+
|
113 |
+
if (!function_exists('screen_meta_html')) {
|
114 |
+
|
115 |
+
function screen_meta_html($meta) {
|
116 |
+
extract($meta);
|
117 |
+
if (function_exists($content)) {
|
118 |
+
$content = $content();
|
119 |
+
}
|
120 |
+
echo '
|
121 |
+
<div id="screen-meta-'.$key.'-wrap" class="screen-meta-wrap hidden">
|
122 |
+
<div class="screen-meta-content">'.$content.'</div>
|
123 |
+
</div>
|
124 |
+
<div id="screen-meta-'.$key.'-link-wrap" class="hide-if-no-js screen-meta-toggle cf">
|
125 |
+
<a href="#screen-meta-'.$key.'-wrap" id="screen-meta-'.$key.'-link" class="show-settings">'.$label.'</a>
|
126 |
+
</div>
|
127 |
+
';
|
128 |
+
}
|
129 |
+
|
130 |
+
}
|
131 |
+
|
132 |
+
if (!function_exists('screen_meta_output')) {
|
133 |
+
|
134 |
+
function screen_meta_output() {
|
135 |
+
global $screen_meta;
|
136 |
+
/*
|
137 |
+
expected format:
|
138 |
+
$screen_meta = array(
|
139 |
+
array(
|
140 |
+
'key' => 'drafts',
|
141 |
+
'label' => 'Drafts',
|
142 |
+
'content' => 'screen_meta_drafts_content' // can be content or function name
|
143 |
+
)
|
144 |
+
);
|
145 |
+
*/
|
146 |
+
if (!$screen_meta) $screen_meta = array();
|
147 |
+
$screen_meta = apply_filters('screen_meta', $screen_meta);
|
148 |
+
echo '<div id="screen-meta-extra-content">';
|
149 |
+
foreach ($screen_meta as $meta) {
|
150 |
+
screen_meta_html($meta);
|
151 |
+
}
|
152 |
+
echo '</div>';
|
153 |
+
?>
|
154 |
+
<style type="text/css">
|
155 |
+
.screen-meta-toggle {
|
156 |
+
float: right;
|
157 |
+
background: transparent url( <?php bloginfo('wpurl'); ?>/wp-admin/images/screen-options-left.gif ) no-repeat 0 0;
|
158 |
+
font-family: "Lucida Grande", Verdana, Arial, "Bitstream Vera Sans", sans-serif;
|
159 |
+
height: 22px;
|
160 |
+
padding: 0;
|
161 |
+
margin: 0 6px 0 0;
|
162 |
+
}
|
163 |
+
.screen-meta-wrap h5 {
|
164 |
+
margin: 8px 0;
|
165 |
+
font-size: 13px;
|
166 |
+
}
|
167 |
+
.screen-meta-wrap {
|
168 |
+
border-style: none solid solid;
|
169 |
+
border-top: 0 none;
|
170 |
+
border-width: 0 1px 1px;
|
171 |
+
margin: 0 15px;
|
172 |
+
padding: 8px 12px 12px;
|
173 |
+
-moz-border-radius: 0 0 0 4px;
|
174 |
+
-webkit-border-bottom-left-radius: 4px;
|
175 |
+
-khtml-border-bottom-left-radius: 4px;
|
176 |
+
border-bottom-left-radius: 4px;
|
177 |
+
}
|
178 |
+
</style>
|
179 |
+
<script type="text/javascript">
|
180 |
+
jQuery(function($) {
|
181 |
+
|
182 |
+
// These hacks not needed if adopted into core
|
183 |
+
// move tabs into place
|
184 |
+
$('#screen-meta-extra-content .screen-meta-toggle.cf').each(function() {
|
185 |
+
$('#screen-meta-links').append($(this));
|
186 |
+
});
|
187 |
+
// Move content into place
|
188 |
+
$('#screen-meta-extra-content .screen-meta-wrap').each(function() {
|
189 |
+
$('#screen-meta-links').before($(this));
|
190 |
+
});
|
191 |
+
// end hacks
|
192 |
+
|
193 |
+
// simplified generic code to handle all screen meta tabs
|
194 |
+
$('#screen-meta-links a.show-settings').unbind().click(function() {
|
195 |
+
var link = $(this);
|
196 |
+
$(link.attr('href')).slideToggle('fast', function() {
|
197 |
+
if (link.hasClass('screen-meta-shown')) {
|
198 |
+
link.css({'backgroundImage':'url("images/screen-options-right.gif")'}).removeClass('screen-meta-shown');
|
199 |
+
$('.screen-meta-toggle').css('visibility', 'visible');
|
200 |
+
}
|
201 |
+
else {
|
202 |
+
$('.screen-meta-toggle').css('visibility', 'hidden');
|
203 |
+
link.css({'backgroundImage':'url("images/screen-options-right-up.gif")'}).addClass('screen-meta-shown').parent().css('visibility', 'visible');
|
204 |
+
}
|
205 |
+
});
|
206 |
+
return false;
|
207 |
+
});
|
208 |
+
|
209 |
+
var copy = $('#contextual-help-wrap');
|
210 |
+
$('.screen-meta-wrap').css({
|
211 |
+
'background-color': copy.css('background-color'),
|
212 |
+
'border-color': copy.css('border-bottom-color')
|
213 |
+
});
|
214 |
+
|
215 |
+
});
|
216 |
+
</script>
|
217 |
+
|
218 |
+
<?php
|
219 |
+
}
|
220 |
+
add_action('admin_footer', 'screen_meta_output');
|
221 |
+
|
222 |
+
}
|
223 |
+
|
224 |
?>
|
global.css
ADDED
@@ -0,0 +1,136 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
SEO Ultimate CSS
|
3 |
+
These styles are sometimes or always referenced outside of SEO Ultimate's admin pages, so we include this file throughout the WordPress admin.
|
4 |
+
*/
|
5 |
+
|
6 |
+
/* MENU */
|
7 |
+
|
8 |
+
#adminmenu #toplevel_page_seo div.wp-menu-image {
|
9 |
+
background-image: url(images/icon.png);
|
10 |
+
background-position: -1px -33px;
|
11 |
+
}
|
12 |
+
|
13 |
+
#adminmenu #toplevel_page_seo:hover div.wp-menu-image,
|
14 |
+
#adminmenu #toplevel_page_seo.wp-has-current-submenu div.wp-menu-image {
|
15 |
+
background-position: -1px -1px;
|
16 |
+
}
|
17 |
+
|
18 |
+
/* MESSAGES */
|
19 |
+
|
20 |
+
.su-success, .su-error,
|
21 |
+
.su-warning, .su-info {
|
22 |
+
padding-left: 21px;
|
23 |
+
background-repeat: no-repeat;
|
24 |
+
background-position: 0px center;
|
25 |
+
}
|
26 |
+
|
27 |
+
.su-success {
|
28 |
+
background-image: url(images/success.png);
|
29 |
+
color: #008000;
|
30 |
+
}
|
31 |
+
|
32 |
+
.su-error {
|
33 |
+
background-image: url(images/error.png);
|
34 |
+
color: #FF0000;
|
35 |
+
}
|
36 |
+
|
37 |
+
.su-warning {
|
38 |
+
background-image: url(images/warning.png);
|
39 |
+
color: #FF8C00;
|
40 |
+
}
|
41 |
+
|
42 |
+
.su-info {
|
43 |
+
background-image: url(images/info.png);
|
44 |
+
color: #0000FF;
|
45 |
+
}
|
46 |
+
|
47 |
+
#wpcontent .su-message p {
|
48 |
+
background-position: 10px center;
|
49 |
+
padding: 10px 10px 10px 36px;
|
50 |
+
margin: 1em 0;
|
51 |
+
color: black;
|
52 |
+
border-width: 1px;
|
53 |
+
border-style: solid;
|
54 |
+
}
|
55 |
+
|
56 |
+
.su-message .su-success {
|
57 |
+
background-color: #DFFFE3;
|
58 |
+
border-color: #61DF6F;
|
59 |
+
}
|
60 |
+
|
61 |
+
.su-message .su-error {
|
62 |
+
background-color: #FFBFBF;
|
63 |
+
border-color: #FF0000;
|
64 |
+
}
|
65 |
+
|
66 |
+
.su-message .su-warning {
|
67 |
+
background-color: #FFFFE0;
|
68 |
+
border-color: orange;
|
69 |
+
}
|
70 |
+
|
71 |
+
.su-message .su-info {
|
72 |
+
background-color: #DFEEFF;
|
73 |
+
border-color: #8F93FF;
|
74 |
+
}
|
75 |
+
|
76 |
+
/* CONTEXTUAL HELP */
|
77 |
+
|
78 |
+
div.su-help div.metabox-prefs {
|
79 |
+
margin-bottom: 2em;
|
80 |
+
}
|
81 |
+
|
82 |
+
div.su-help ul {
|
83 |
+
list-style-type: disc;
|
84 |
+
padding-left: 1em;
|
85 |
+
margin-left: 1em;
|
86 |
+
}
|
87 |
+
|
88 |
+
div.su-help h6 {
|
89 |
+
font-size: 0.9em;
|
90 |
+
font-weight: bold;
|
91 |
+
margin: 2em 0 0 0;
|
92 |
+
padding: 0;
|
93 |
+
}
|
94 |
+
|
95 |
+
/* POSTMETA BOX */
|
96 |
+
|
97 |
+
#su-postmeta-box table tr {
|
98 |
+
vertical-align: middle;
|
99 |
+
}
|
100 |
+
|
101 |
+
#su-postmeta-box table th,
|
102 |
+
#su-postmeta-box table td {
|
103 |
+
padding: 0.5em 0;
|
104 |
+
}
|
105 |
+
|
106 |
+
#su-postmeta-box table th {
|
107 |
+
text-align: right;
|
108 |
+
font-weight: bold;
|
109 |
+
padding-right: 0.5em;
|
110 |
+
}
|
111 |
+
|
112 |
+
#su-postmeta-box table tr.textarea {
|
113 |
+
vertical-align: top;
|
114 |
+
}
|
115 |
+
|
116 |
+
#su-postmeta-box table tr.textarea th label {
|
117 |
+
display: block;
|
118 |
+
margin-top: 5px;
|
119 |
+
}
|
120 |
+
|
121 |
+
#su-postmeta-box table th em {
|
122 |
+
font-weight: normal;
|
123 |
+
}
|
124 |
+
|
125 |
+
#su-postmeta-box table,
|
126 |
+
#su-postmeta-box table td,
|
127 |
+
#su-postmeta-box table td input.regular-text,
|
128 |
+
#su-postmeta-box table td textarea {
|
129 |
+
width: 100%;
|
130 |
+
}
|
131 |
+
|
132 |
+
/* PLUGIN NOTICES */
|
133 |
+
|
134 |
+
#wpwrap .su-plugin-notice .update-message {
|
135 |
+
font-weight: normal;
|
136 |
+
}
|
modules.css
ADDED
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* ADMIN PAGES */
|
2 |
+
|
3 |
+
div.su-module {
|
4 |
+
padding-bottom: 1em;
|
5 |
+
}
|
6 |
+
|
7 |
+
div.su-module h3.su-subheader {
|
8 |
+
margin-top: 3em;
|
9 |
+
padding-top: 1em;
|
10 |
+
border-top: 3px solid #ccc;
|
11 |
+
}
|
12 |
+
|
13 |
+
div.su-module table.widefat {
|
14 |
+
width: auto;
|
15 |
+
margin: 2em 0;
|
16 |
+
}
|
17 |
+
|
18 |
+
div.su-module table.widefat th,
|
19 |
+
div.su-module table.widefat td {
|
20 |
+
padding-right: 2em;
|
21 |
+
}
|
22 |
+
|
23 |
+
div.su-module table.widefat tr.new-hit td {
|
24 |
+
background-color: #DFFFE3;
|
25 |
+
}
|
26 |
+
|
27 |
+
div.su-module .form-table .regular-text {
|
28 |
+
width: 325px;
|
29 |
+
}
|
30 |
+
|
31 |
+
div.su-module .form-table td div.field {
|
32 |
+
padding-bottom: 1em;
|
33 |
+
}
|
34 |
+
|
35 |
+
div.su-module table.report {
|
36 |
+
border-collapse: collapse;
|
37 |
+
border-top: 1px solid #ccc;
|
38 |
+
}
|
39 |
+
|
40 |
+
div.su-module table.report th {
|
41 |
+
font-weight: normal;
|
42 |
+
}
|
43 |
+
|
44 |
+
div.su-module table.report th, div.su-module table.report td {
|
45 |
+
padding: 1em 3em 1em 0;
|
46 |
+
border-bottom: 1px solid #ccc;
|
47 |
+
text-align: left;
|
48 |
+
}
|
49 |
+
|
50 |
+
/* TABS (Heavily based on CSS from the Breadcrumbs NavXT plugin) */
|
51 |
+
|
52 |
+
div.su-module .su-tabs ul.ui-tabs-nav {
|
53 |
+
border-bottom: 1px solid #dfdfdf;
|
54 |
+
font-size: 12px;
|
55 |
+
height: 29px;
|
56 |
+
list-style: none;
|
57 |
+
margin: 13px 0 0;
|
58 |
+
overflow: visible;
|
59 |
+
padding: 0 0 0 8px;
|
60 |
+
}
|
61 |
+
|
62 |
+
div.su-module .su-tabs ul.ui-tabs-nav li {
|
63 |
+
display: block;
|
64 |
+
float: left;
|
65 |
+
line-height: 200%;
|
66 |
+
list-style: none;
|
67 |
+
margin: 0;
|
68 |
+
padding: 0;
|
69 |
+
position: relative;
|
70 |
+
text-align: center;
|
71 |
+
white-space: nowrap;
|
72 |
+
width: auto;
|
73 |
+
}
|
74 |
+
|
75 |
+
|
76 |
+
div.su-module .su-tabs ul.ui-tabs-nav li a {
|
77 |
+
border-bottom: 1px solid #dfdfdf;
|
78 |
+
display: block;
|
79 |
+
float: left;
|
80 |
+
line-height: 28px;
|
81 |
+
padding: 1px 13px 0;
|
82 |
+
position: relative;
|
83 |
+
text-decoration: none;
|
84 |
+
}
|
85 |
+
|
86 |
+
div.su-module .su-tabs ul.ui-tabs-nav li.ui-tabs-selected a {
|
87 |
+
-moz-border-radius-topleft: 4px;
|
88 |
+
-moz-border-radius-topright: 4px;
|
89 |
+
-webkit-border-top-left-radius: 4px;
|
90 |
+
-webkit-border-top-right-radius: 4px;
|
91 |
+
border-top-left-radius: 4px;
|
92 |
+
border-top-right-radius: 4px;
|
93 |
+
border: 1px solid #dfdfdf;
|
94 |
+
border-bottom-color: #f9f9f9;
|
95 |
+
color: #333333;
|
96 |
+
font-weight: normal;
|
97 |
+
padding: 0 12px;
|
98 |
+
}
|
99 |
+
|
100 |
+
/* IMPORT MODULES */
|
101 |
+
|
102 |
+
.su-module table#import-status {
|
103 |
+
border: 0;
|
104 |
+
width: auto;
|
105 |
+
margin: 2em 0;
|
106 |
+
}
|
107 |
+
|
108 |
+
.su-module table#import-status td {
|
109 |
+
padding: 0 0.5em 1em 0;
|
110 |
+
}
|
modules.js
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
function su_reset_textbox(id, d, m, e) {
|
2 |
+
if (confirm(m+"\n\n"+d)) {
|
3 |
+
document.getElementById(id).value=d;
|
4 |
+
e.className='hidden';
|
5 |
+
}
|
6 |
+
}
|
7 |
+
|
8 |
+
function su_textbox_value_changed(e, d, l) {
|
9 |
+
if (e.value==d)
|
10 |
+
document.getElementById(l).className='hidden';
|
11 |
+
else
|
12 |
+
document.getElementById(l).className='';
|
13 |
+
}
|
modules/404s.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* 404 Monitor Module
|
4 |
*
|
5 |
-
* @version 1.0.
|
6 |
* @since 0.4
|
7 |
*/
|
8 |
|
@@ -13,30 +13,42 @@ class SU_404s extends SU_Module {
|
|
13 |
var $hitset;
|
14 |
|
15 |
function __construct() {
|
|
|
16 |
$this->hitset = new SU_HitSet('404s', "status_code=404 AND redirect_url='' AND url NOT LIKE '%/favicon.ico'");
|
17 |
}
|
18 |
|
19 |
function get_menu_title() { return __('404 Monitor', 'seo-ultimate'); }
|
20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
|
22 |
function admin_page_contents() {
|
23 |
|
24 |
global $wpdb;
|
25 |
$table = SEO_Ultimate::get_table_name('hits');
|
26 |
|
|
|
27 |
if ($this->is_action('delete')) {
|
28 |
|
29 |
-
if ($wpdb->query($wpdb->prepare("DELETE FROM $table WHERE id = %d LIMIT 1", $_GET['object'])))
|
30 |
$this->queue_message('success', __('The log entry was successfully deleted.', 'seo-ultimate'));
|
31 |
else
|
32 |
$this->queue_message('error', __('This log entry has already been deleted.', 'seo-ultimate'));
|
33 |
|
|
|
34 |
$this->hitset->query_db();
|
35 |
|
|
|
36 |
} elseif ($this->is_action('clear')) {
|
37 |
|
38 |
if ($wpdb->query("DELETE FROM $table WHERE status_code=404")) {
|
39 |
$this->queue_message('success', __('The log was successfully cleared.', 'seo-ultimate'));
|
|
|
|
|
40 |
$this->hitset->query_db();
|
41 |
}
|
42 |
}
|
@@ -48,8 +60,10 @@ class SU_404s extends SU_Module {
|
|
48 |
|
49 |
if ($this->hitset->have_hits()) {
|
50 |
|
|
|
51 |
$this->hitset->admin_table(array($this, 'hits_table_action_links'));
|
52 |
|
|
|
53 |
$clearurl = $this->get_nonce_url('clear');
|
54 |
$confirm = __("Are you sure you want to delete all 404 log entries?", 'seo-ultimate');
|
55 |
echo "<a href=\"$clearurl\" class=\"button-secondary\" onclick=\"javascript:return confirm('$confirm')\">";
|
@@ -58,6 +72,7 @@ class SU_404s extends SU_Module {
|
|
58 |
}
|
59 |
}
|
60 |
|
|
|
61 |
function hits_table_action_links($row) {
|
62 |
$url = $row['url'];
|
63 |
|
@@ -79,45 +94,66 @@ class SU_404s extends SU_Module {
|
|
79 |
STR;
|
80 |
}
|
81 |
|
82 |
-
function
|
|
|
83 |
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
<ul>
|
93 |
-
<li>
|
94 |
-
|
95 |
-
<li>
|
|
|
|
|
|
|
|
|
|
|
|
|
96 |
</ul>
|
97 |
-
|
98 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
99 |
<ul>
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
</ul>
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
} else {
|
108 |
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
<p>Notes:</p>
|
113 |
<ul>
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
</ul>
|
118 |
-
|
119 |
-
, 'seo-ultimate');
|
120 |
-
}
|
121 |
}
|
122 |
}
|
123 |
|
2 |
/**
|
3 |
* 404 Monitor Module
|
4 |
*
|
5 |
+
* @version 1.0.4
|
6 |
* @since 0.4
|
7 |
*/
|
8 |
|
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 |
|
20 |
function get_menu_title() { return __('404 Monitor', 'seo-ultimate'); }
|
21 |
+
|
22 |
+
function get_menu_count() {
|
23 |
+
//Find out how many *new* 404s there are
|
24 |
+
global $wpdb;
|
25 |
+
$table = SEO_Ultimate::get_table_name('hits');
|
26 |
+
return $wpdb->query("SELECT id FROM $table WHERE status_code=404 AND is_new=1");
|
27 |
+
}
|
28 |
|
29 |
function admin_page_contents() {
|
30 |
|
31 |
global $wpdb;
|
32 |
$table = SEO_Ultimate::get_table_name('hits');
|
33 |
|
34 |
+
//Are we deleting a 404 entry?
|
35 |
if ($this->is_action('delete')) {
|
36 |
|
37 |
+
if ($wpdb->query($wpdb->prepare("DELETE FROM $table WHERE id = %d LIMIT 1", intval($_GET['object']))))
|
38 |
$this->queue_message('success', __('The log entry was successfully deleted.', 'seo-ultimate'));
|
39 |
else
|
40 |
$this->queue_message('error', __('This log entry has already been deleted.', 'seo-ultimate'));
|
41 |
|
42 |
+
//The database has changed, so reload our data from it
|
43 |
$this->hitset->query_db();
|
44 |
|
45 |
+
//Are we clearing the whole 404 log?
|
46 |
} elseif ($this->is_action('clear')) {
|
47 |
|
48 |
if ($wpdb->query("DELETE FROM $table WHERE status_code=404")) {
|
49 |
$this->queue_message('success', __('The log was successfully cleared.', 'seo-ultimate'));
|
50 |
+
|
51 |
+
//The database has changed, so reload our data from it
|
52 |
$this->hitset->query_db();
|
53 |
}
|
54 |
}
|
60 |
|
61 |
if ($this->hitset->have_hits()) {
|
62 |
|
63 |
+
//Display the 404 table
|
64 |
$this->hitset->admin_table(array($this, 'hits_table_action_links'));
|
65 |
|
66 |
+
//Create the "Clear Log" button
|
67 |
$clearurl = $this->get_nonce_url('clear');
|
68 |
$confirm = __("Are you sure you want to delete all 404 log entries?", 'seo-ultimate');
|
69 |
echo "<a href=\"$clearurl\" class=\"button-secondary\" onclick=\"javascript:return confirm('$confirm')\">";
|
72 |
}
|
73 |
}
|
74 |
|
75 |
+
//Returns the HTML that should appear when the user hovers over a row of the 404s table
|
76 |
function hits_table_action_links($row) {
|
77 |
$url = $row['url'];
|
78 |
|
94 |
STR;
|
95 |
}
|
96 |
|
97 |
+
function admin_dropdowns() {
|
98 |
+
$dropdowns = array();
|
99 |
|
100 |
+
//Overview dropdown
|
101 |
+
$dropdowns['overview'] = __('Overview', 'seo-ultimate');
|
102 |
+
|
103 |
+
//Only show the "Options Help" dropdown if the options in questions are showing
|
104 |
+
if ($this->hitset->have_hits()) $dropdowns['options'] = __('Options Help', 'seo-ultimate');
|
105 |
+
|
106 |
+
//Troubleshooting dropdown
|
107 |
+
$dropdowns['troubleshooting'] = __('Troubleshooting', 'seo-ultimate');
|
108 |
+
|
109 |
+
return $dropdowns;
|
110 |
+
}
|
111 |
+
|
112 |
+
function admin_dropdown_overview() {
|
113 |
+
$help = __("
|
114 |
<ul>
|
115 |
+
<li><p><strong>What it does:</strong> The 404 Monitor keeps track of non-existant URLs that generated 404 errors.
|
116 |
+
404 errors are when a search engine or visitor comes to a URL on your site but nothing exists at that URL.</p></li>
|
117 |
+
<li><p><strong>Why it helps:</strong> The 404 Monitor helps you spot 404 errors;
|
118 |
+
then you can take steps to correct them to reduce linkjuice loss from broken links.</p></li>
|
119 |
+
<li><p><strong>How to use it:</strong> Check the 404 Monitor occasionally for errors.
|
120 |
+
(A numeric bubble will appear next to the “404 Monitor” item on the menu if there are any newly-logged URLs that you haven’t seen yet.
|
121 |
+
These new URLs will also be highlighted green in the table.)
|
122 |
+
If a 404 error’s referring URL is located on your site, try locating and fixing the broken URL.
|
123 |
+
If moved content was previously located at the requested URL, try using a redirection plugin to point the old URL to the new one.</p></li>
|
124 |
</ul>
|
125 |
+
", 'seo-ultimate');
|
126 |
+
|
127 |
+
if (!$this->hitset->have_hits()) {
|
128 |
+
|
129 |
+
//Only show this if we don't have 404s in the log
|
130 |
+
$help .= '<p>'.__('Currently, the 404 Monitor doesn’t have any 404 errors in its log. This is good, and means there’s no action required on your part. If the 404 Monitor logs any 404 errors in the future, you’ll see them on this page.', 'seo-ultimate').'</p>';
|
131 |
+
|
132 |
+
}
|
133 |
+
|
134 |
+
return $help;
|
135 |
+
}
|
136 |
+
|
137 |
+
function admin_dropdown_options() {
|
138 |
+
return __("
|
139 |
+
<p>Hover over a table row to access these options:</p>
|
140 |
<ul>
|
141 |
+
<li>The “View” link will open the URL in a new window. This is useful for testing whether or not a redirect is working.</li>
|
142 |
+
<li>The “Google Cache” link will open Google’s archived version of the URL in a new window. This is useful for determining what content, if any, used to be located at that URL.</li>
|
143 |
+
<li>Once you've taken care of a 404 error, you can click the “Delete Log Entry” link to remove it from the list. The URL will reappear on the list if it triggers a 404 error in the future.</li>
|
144 |
</ul>
|
145 |
+
", 'seo-ultimate');
|
146 |
+
}
|
|
|
|
|
147 |
|
148 |
+
function admin_dropdown_troubleshooting() {
|
149 |
+
return __("
|
150 |
+
<p>404 Monitor doesn’t appear to work? Take these notes into consideration:</p>
|
|
|
151 |
<ul>
|
152 |
+
<li>In order for the 404 Monitor to track 404 errors, you must have “Pretty Permalinks” enabled in your <a href="options-permalink.php">permalink options</a>.</li>
|
153 |
+
<li>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.</li>
|
154 |
+
<li>The 404 Monitor doesn’t record 404 errors generated by logged-in users.</li>
|
155 |
</ul>
|
156 |
+
", 'seo-ultimate');
|
|
|
|
|
157 |
}
|
158 |
}
|
159 |
|
modules/canonical.php
CHANGED
@@ -13,6 +13,7 @@ class SU_Canonical extends SU_Module {
|
|
13 |
function get_menu_title() { return __('Canonicalizer', 'seo-ultimate'); }
|
14 |
|
15 |
function init() {
|
|
|
16 |
if ($this->get_setting('link_rel_canonical'))
|
17 |
add_action('su_head', array($this, 'link_rel_canonical_tag'));
|
18 |
}
|
@@ -27,6 +28,7 @@ class SU_Canonical extends SU_Module {
|
|
27 |
}
|
28 |
|
29 |
function link_rel_canonical_tag() {
|
|
|
30 |
if ($url = $this->get_canonical_url()) {
|
31 |
$url = attribute_escape($url);
|
32 |
echo "\t<link rel=\"canonical\" href=\"$url\" />\n";
|
@@ -42,14 +44,14 @@ class SU_Canonical extends SU_Module {
|
|
42 |
function get_canonical_url() {
|
43 |
global $wp_query, $wp_rewrite;
|
44 |
|
|
|
45 |
if ($wp_query->is_404 || $wp_query->is_search) return false;
|
46 |
|
|
|
47 |
$haspost = count($wp_query->posts) > 0;
|
48 |
|
|
|
49 |
if (get_query_var('m')) {
|
50 |
-
// Handling special case with '?m=yyyymmddHHMMSS'
|
51 |
-
// Since there is no code for producing the archive links for
|
52 |
-
// is_time, we will give up and not try to produce a link.
|
53 |
$m = preg_replace('/[^0-9]/', '', get_query_var('m'));
|
54 |
switch (strlen($m)) {
|
55 |
case 4: // Yearly
|
@@ -63,49 +65,54 @@ class SU_Canonical extends SU_Module {
|
|
63 |
substr($m, 6, 2));
|
64 |
break;
|
65 |
default:
|
|
|
66 |
return false;
|
67 |
}
|
68 |
|
|
|
69 |
} elseif (($wp_query->is_single || $wp_query->is_page) && $haspost) {
|
70 |
$post = $wp_query->posts[0];
|
71 |
$link = get_permalink($post->ID);
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
$post->ID == get_option('page_on_front'))
|
76 |
-
$link = trailingslashit($link);
|
77 |
-
|
78 |
} elseif ($wp_query->is_author && $haspost) {
|
79 |
$author = get_userdata(get_query_var('author'));
|
80 |
if ($author === false) return false;
|
81 |
$link = get_author_link(false, $author->ID, $author->user_nicename);
|
82 |
|
|
|
83 |
} elseif ($wp_query->is_category && $haspost) {
|
84 |
$link = get_category_link(get_query_var('cat'));
|
85 |
|
|
|
86 |
} else if ($wp_query->is_tag && $haspost) {
|
87 |
$tag = get_term_by('slug',get_query_var('tag'),'post_tag');
|
88 |
if (!empty($tag->term_id)) $link = get_tag_link($tag->term_id);
|
89 |
|
|
|
90 |
} elseif ($wp_query->is_day && $haspost) {
|
91 |
$link = get_day_link(get_query_var('year'),
|
92 |
get_query_var('monthnum'),
|
93 |
get_query_var('day'));
|
94 |
|
|
|
95 |
} elseif ($wp_query->is_month && $haspost) {
|
96 |
$link = get_month_link(get_query_var('year'),
|
97 |
get_query_var('monthnum'));
|
98 |
|
|
|
99 |
} elseif ($wp_query->is_year && $haspost) {
|
100 |
$link = get_year_link(get_query_var('year'));
|
101 |
|
|
|
102 |
} elseif ($wp_query->is_home) {
|
103 |
if ((get_option('show_on_front') == 'page') && ($pageid = get_option('page_for_posts')))
|
104 |
$link = trailingslashit(get_permalink($pageid));
|
105 |
else
|
106 |
$link = trailingslashit(get_option('home'));
|
107 |
-
|
108 |
-
|
109 |
} else
|
110 |
return false;
|
111 |
|
@@ -120,18 +127,26 @@ class SU_Canonical extends SU_Module {
|
|
120 |
}
|
121 |
}
|
122 |
|
|
|
123 |
return $link;
|
124 |
}
|
125 |
|
126 |
-
function
|
127 |
-
return
|
128 |
-
|
129 |
-
|
130 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
That way, if Google comes across an alternate URL by which one of those items can be accessed, it will be able to find the correct URL
|
132 |
-
and won’t penalize you for having two identical pages on your site.</p>
|
133 |
-
|
134 |
-
|
|
|
135 |
}
|
136 |
}
|
137 |
|
13 |
function get_menu_title() { return __('Canonicalizer', 'seo-ultimate'); }
|
14 |
|
15 |
function init() {
|
16 |
+
//If the canonical tags are enabled, then hook them into the front-end header.
|
17 |
if ($this->get_setting('link_rel_canonical'))
|
18 |
add_action('su_head', array($this, 'link_rel_canonical_tag'));
|
19 |
}
|
28 |
}
|
29 |
|
30 |
function link_rel_canonical_tag() {
|
31 |
+
//Display the canonical tag if a canonical URL is available
|
32 |
if ($url = $this->get_canonical_url()) {
|
33 |
$url = attribute_escape($url);
|
34 |
echo "\t<link rel=\"canonical\" href=\"$url\" />\n";
|
44 |
function get_canonical_url() {
|
45 |
global $wp_query, $wp_rewrite;
|
46 |
|
47 |
+
//404s and search results don't have canonical URLs
|
48 |
if ($wp_query->is_404 || $wp_query->is_search) return false;
|
49 |
|
50 |
+
//Are there posts in the current Loop?
|
51 |
$haspost = count($wp_query->posts) > 0;
|
52 |
|
53 |
+
//Handling special case with '?m=yyyymmddHHMMSS'.
|
54 |
if (get_query_var('m')) {
|
|
|
|
|
|
|
55 |
$m = preg_replace('/[^0-9]/', '', get_query_var('m'));
|
56 |
switch (strlen($m)) {
|
57 |
case 4: // Yearly
|
65 |
substr($m, 6, 2));
|
66 |
break;
|
67 |
default:
|
68 |
+
//Since there is no code for producing canonical archive links for is_time, we will give up and not try to produce a link.
|
69 |
return false;
|
70 |
}
|
71 |
|
72 |
+
//Posts and pages
|
73 |
} elseif (($wp_query->is_single || $wp_query->is_page) && $haspost) {
|
74 |
$post = $wp_query->posts[0];
|
75 |
$link = get_permalink($post->ID);
|
76 |
+
if (is_front_page()) $link = trailingslashit($link);
|
77 |
+
|
78 |
+
//Author archives
|
|
|
|
|
|
|
79 |
} elseif ($wp_query->is_author && $haspost) {
|
80 |
$author = get_userdata(get_query_var('author'));
|
81 |
if ($author === false) return false;
|
82 |
$link = get_author_link(false, $author->ID, $author->user_nicename);
|
83 |
|
84 |
+
//Category archives
|
85 |
} elseif ($wp_query->is_category && $haspost) {
|
86 |
$link = get_category_link(get_query_var('cat'));
|
87 |
|
88 |
+
//Tag archives
|
89 |
} else if ($wp_query->is_tag && $haspost) {
|
90 |
$tag = get_term_by('slug',get_query_var('tag'),'post_tag');
|
91 |
if (!empty($tag->term_id)) $link = get_tag_link($tag->term_id);
|
92 |
|
93 |
+
//Day archives
|
94 |
} elseif ($wp_query->is_day && $haspost) {
|
95 |
$link = get_day_link(get_query_var('year'),
|
96 |
get_query_var('monthnum'),
|
97 |
get_query_var('day'));
|
98 |
|
99 |
+
//Month archives
|
100 |
} elseif ($wp_query->is_month && $haspost) {
|
101 |
$link = get_month_link(get_query_var('year'),
|
102 |
get_query_var('monthnum'));
|
103 |
|
104 |
+
//Year archives
|
105 |
} elseif ($wp_query->is_year && $haspost) {
|
106 |
$link = get_year_link(get_query_var('year'));
|
107 |
|
108 |
+
//Homepage
|
109 |
} elseif ($wp_query->is_home) {
|
110 |
if ((get_option('show_on_front') == 'page') && ($pageid = get_option('page_for_posts')))
|
111 |
$link = trailingslashit(get_permalink($pageid));
|
112 |
else
|
113 |
$link = trailingslashit(get_option('home'));
|
114 |
+
|
115 |
+
//Other
|
116 |
} else
|
117 |
return false;
|
118 |
|
127 |
}
|
128 |
}
|
129 |
|
130 |
+
//Return the canonical URL
|
131 |
return $link;
|
132 |
}
|
133 |
|
134 |
+
function admin_dropdowns() {
|
135 |
+
return array(
|
136 |
+
'overview' => __('Overview', 'seo-ultimate')
|
137 |
+
);
|
138 |
+
}
|
139 |
+
|
140 |
+
function admin_dropdown_overview() {
|
141 |
+
return __("
|
142 |
+
<ul>
|
143 |
+
<li><p><strong>What it does:</strong> Canonicalizer inserts <code><link rel="canonical" /></code> tags to minimize possible exact-content duplication penalties.</p></li>
|
144 |
+
<li><p><strong>Why it helps:</strong> These tags will point Google to the correct URL for your homepage and each of your posts, Pages, categories, tags, date archives, and author archives.
|
145 |
That way, if Google comes across an alternate URL by which one of those items can be accessed, it will be able to find the correct URL
|
146 |
+
and won’t penalize you for having two identical pages on your site.</p></li>
|
147 |
+
<li><p><strong>How to use it:</strong> Just check the checkbox and click Save Changes. SEO Ultimate will do the rest.</p></li>
|
148 |
+
</ul>
|
149 |
+
", 'seo-ultimate');
|
150 |
}
|
151 |
}
|
152 |
|
modules/files.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* File Editor Module
|
4 |
*
|
5 |
-
* @version 1.0
|
6 |
* @since 2.0
|
7 |
*/
|
8 |
|
@@ -16,13 +16,18 @@ class SU_Files extends SU_Module {
|
|
16 |
|
17 |
function init() {
|
18 |
|
|
|
19 |
if ($this->get_setting('enable_custom_robotstxt')) {
|
|
|
|
|
20 |
remove_action('do_robots', 'do_robots');
|
21 |
add_action('do_robots', array($this, 'do_robots'));
|
|
|
|
|
|
|
22 |
}
|
23 |
|
24 |
-
|
25 |
-
|
26 |
add_filter('su_get_setting-files-htaccess', array($this, 'get_htaccess'));
|
27 |
add_filter('su_custom_update_setting-files-htaccess', array($this, 'update_htaccess'), 10, 2);
|
28 |
}
|
@@ -31,16 +36,25 @@ class SU_Files extends SU_Module {
|
|
31 |
|
32 |
global $is_apache;
|
33 |
|
|
|
|
|
|
|
|
|
34 |
if ($is_apache) {
|
35 |
|
|
|
36 |
$htaccess = get_home_path().'.htaccess';
|
|
|
|
|
37 |
$exists = file_exists($htaccess);
|
38 |
$writable = is_writable($htaccess);
|
39 |
|
40 |
if ($exists && !$writable) $this->queue_message('warning',
|
41 |
-
__('A .htaccess file exists, but it’s not writable. You can edit it here once the file permissions are corrected.', 'seo-ultimate'));
|
42 |
}
|
43 |
|
|
|
|
|
44 |
if (!strlen(get_option('permalink_structure'))) $this->queue_message('error',
|
45 |
__('WordPress won’t be able to display your robots.txt file because the default <a href="options-permalink.php" target="_blank">permalink structure</a> is in use.', 'seo-ultimate'));
|
46 |
|
@@ -48,7 +62,10 @@ class SU_Files extends SU_Module {
|
|
48 |
|
49 |
$this->admin_form_start();
|
50 |
|
|
|
51 |
$this->textarea('robotstxt', sprintf(__('robots.txt [<a href="%s" target="_blank">Open</a>]', 'seo-ultimate'), trailingslashit(get_bloginfo('url')).'robots.txt'));
|
|
|
|
|
52 |
$this->checkboxes(array(
|
53 |
'enable_custom_robotstxt' => __('Enable this custom robots.txt file and disable the default file', 'seo-ultimate')
|
54 |
, 'enable_do_robotstxt_action' => __('Let other plugins add rules to my custom robots.txt file', 'seo-ultimate')
|
@@ -57,6 +74,7 @@ class SU_Files extends SU_Module {
|
|
57 |
$this->queue_message('warning',
|
58 |
__('Please realize that incorrectly editing your robots.txt file could block search engines from your site.', 'seo-ultimate'));
|
59 |
|
|
|
60 |
if ($is_apache && ($writable || !$exists)) {
|
61 |
$this->textarea('htaccess', __('.htaccess', 'seo-ultimate'));
|
62 |
|
@@ -65,15 +83,21 @@ class SU_Files extends SU_Module {
|
|
65 |
}
|
66 |
|
67 |
$this->admin_form_end();
|
|
|
|
|
68 |
$this->print_messages();
|
69 |
}
|
70 |
|
71 |
function do_robots() {
|
|
|
|
|
72 |
header( 'Content-Type: text/plain; charset=utf-8' );
|
73 |
|
|
|
74 |
if ($this->get_setting('enable_do_robotstxt_action'))
|
75 |
do_action('do_robotstxt');
|
76 |
|
|
|
77 |
echo $this->get_setting('robotstxt');
|
78 |
}
|
79 |
|
@@ -89,8 +113,10 @@ class SU_Files extends SU_Module {
|
|
89 |
|
90 |
function update_htaccess($unused, $value) {
|
91 |
|
|
|
92 |
$this->htaccess_recovery = $value;
|
93 |
|
|
|
94 |
$htaccess = get_home_path().'.htaccess';
|
95 |
$fp = fopen($htaccess, 'w');
|
96 |
fwrite($fp, $value);
|
@@ -101,21 +127,43 @@ class SU_Files extends SU_Module {
|
|
101 |
|
102 |
function privacy_options_notice() {
|
103 |
global $pagenow;
|
104 |
-
if ($
|
105 |
-
echo '<div class="su-module">';
|
106 |
$this->print_message('info', sprintf(
|
107 |
__('Please note that your privacy settings won’t have any effect on your robots.txt file, since you’re using <a href="%s">a custom one</a>.', 'seo-ultimate'),
|
108 |
admin_url('admin.php?page='.SEO_Ultimate::key_to_hook($this->get_module_key()))
|
109 |
));
|
110 |
-
echo '</div>';
|
111 |
}
|
112 |
}
|
113 |
|
114 |
-
function
|
115 |
-
return
|
116 |
-
|
117 |
-
|
118 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
119 |
}
|
120 |
}
|
121 |
|
2 |
/**
|
3 |
* File Editor Module
|
4 |
*
|
5 |
+
* @version 1.0.1
|
6 |
* @since 2.0
|
7 |
*/
|
8 |
|
16 |
|
17 |
function init() {
|
18 |
|
19 |
+
//If the custom robots.txt file is enabled...
|
20 |
if ($this->get_setting('enable_custom_robotstxt')) {
|
21 |
+
|
22 |
+
//...Remove WordPress's robots.txt handler and replace it with ours.
|
23 |
remove_action('do_robots', 'do_robots');
|
24 |
add_action('do_robots', array($this, 'do_robots'));
|
25 |
+
|
26 |
+
//...And put a notice on the Privacy options page that the privacy settings won't take effect.
|
27 |
+
add_action('admin_notices', array($this, 'privacy_options_notice'));
|
28 |
}
|
29 |
|
30 |
+
//We override the default behavior of saving the custom htaccess contents to the database and instead save the contents to the file
|
|
|
31 |
add_filter('su_get_setting-files-htaccess', array($this, 'get_htaccess'));
|
32 |
add_filter('su_custom_update_setting-files-htaccess', array($this, 'update_htaccess'), 10, 2);
|
33 |
}
|
36 |
|
37 |
global $is_apache;
|
38 |
|
39 |
+
//Initialize variables
|
40 |
+
$exists = $writable = false;
|
41 |
+
|
42 |
+
//Does the server run Apache?
|
43 |
if ($is_apache) {
|
44 |
|
45 |
+
//The get_home_path() function is what WordPress uses to locate the htaccess file
|
46 |
$htaccess = get_home_path().'.htaccess';
|
47 |
+
|
48 |
+
//Does htaccess exist? Is it writable?
|
49 |
$exists = file_exists($htaccess);
|
50 |
$writable = is_writable($htaccess);
|
51 |
|
52 |
if ($exists && !$writable) $this->queue_message('warning',
|
53 |
+
__('A .htaccess file exists, but it’s not writable. You can edit it here once the file permissions are corrected.', 'seo-ultimate'));
|
54 |
}
|
55 |
|
56 |
+
//WordPress's robots.txt file is dynamically generated, so we need URL rewriting for this to work
|
57 |
+
//In the future, I'll likely add support for writing to a static robots.txt file
|
58 |
if (!strlen(get_option('permalink_structure'))) $this->queue_message('error',
|
59 |
__('WordPress won’t be able to display your robots.txt file because the default <a href="options-permalink.php" target="_blank">permalink structure</a> is in use.', 'seo-ultimate'));
|
60 |
|
62 |
|
63 |
$this->admin_form_start();
|
64 |
|
65 |
+
//Show robots.txt textarea
|
66 |
$this->textarea('robotstxt', sprintf(__('robots.txt [<a href="%s" target="_blank">Open</a>]', 'seo-ultimate'), trailingslashit(get_bloginfo('url')).'robots.txt'));
|
67 |
+
|
68 |
+
//Show robots.txt settings checkboxes
|
69 |
$this->checkboxes(array(
|
70 |
'enable_custom_robotstxt' => __('Enable this custom robots.txt file and disable the default file', 'seo-ultimate')
|
71 |
, 'enable_do_robotstxt_action' => __('Let other plugins add rules to my custom robots.txt file', 'seo-ultimate')
|
74 |
$this->queue_message('warning',
|
75 |
__('Please realize that incorrectly editing your robots.txt file could block search engines from your site.', 'seo-ultimate'));
|
76 |
|
77 |
+
//Of course, only bother with htaccess if we're running Apache.
|
78 |
if ($is_apache && ($writable || !$exists)) {
|
79 |
$this->textarea('htaccess', __('.htaccess', 'seo-ultimate'));
|
80 |
|
83 |
}
|
84 |
|
85 |
$this->admin_form_end();
|
86 |
+
|
87 |
+
//Print the caution message(s) at the end
|
88 |
$this->print_messages();
|
89 |
}
|
90 |
|
91 |
function do_robots() {
|
92 |
+
|
93 |
+
//Announce that this is a text file
|
94 |
header( 'Content-Type: text/plain; charset=utf-8' );
|
95 |
|
96 |
+
//Should we allow plugins to add custom rules?
|
97 |
if ($this->get_setting('enable_do_robotstxt_action'))
|
98 |
do_action('do_robotstxt');
|
99 |
|
100 |
+
//Print the custom robots.txt file
|
101 |
echo $this->get_setting('robotstxt');
|
102 |
}
|
103 |
|
113 |
|
114 |
function update_htaccess($unused, $value) {
|
115 |
|
116 |
+
//If the write fails, we don't want the user to lose their changes; we save the user's data to a variable so it can be displayed in the textarea
|
117 |
$this->htaccess_recovery = $value;
|
118 |
|
119 |
+
//Overwrite the file
|
120 |
$htaccess = get_home_path().'.htaccess';
|
121 |
$fp = fopen($htaccess, 'w');
|
122 |
fwrite($fp, $value);
|
127 |
|
128 |
function privacy_options_notice() {
|
129 |
global $pagenow;
|
130 |
+
if ($pagenow == 'options-privacy.php') { //Shows on the "Settings > Privacy" page
|
|
|
131 |
$this->print_message('info', sprintf(
|
132 |
__('Please note that your privacy settings won’t have any effect on your robots.txt file, since you’re using <a href="%s">a custom one</a>.', 'seo-ultimate'),
|
133 |
admin_url('admin.php?page='.SEO_Ultimate::key_to_hook($this->get_module_key()))
|
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 |
|
modules/linkbox.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Linkbox Inserter Module
|
4 |
*
|
5 |
-
* @version 1.0
|
6 |
* @since 0.6
|
7 |
*/
|
8 |
|
@@ -13,6 +13,7 @@ class SU_Linkbox extends SU_Module {
|
|
13 |
function get_menu_title() { return __('Linkbox Inserter', 'seo-ultimate'); }
|
14 |
|
15 |
function get_default_settings() {
|
|
|
16 |
return array(
|
17 |
'html' => '<div class="su-linkbox" id="post-{id}-linkbox"><div class="su-linkbox-label">' .
|
18 |
__('Link to this post!', 'seo-ultimate') .
|
@@ -24,22 +25,20 @@ class SU_Linkbox extends SU_Module {
|
|
24 |
}
|
25 |
|
26 |
function init() {
|
|
|
27 |
add_action('template_redirect', array($this, 'template_init'));
|
28 |
}
|
29 |
|
30 |
function template_init() {
|
31 |
$enabled = false;
|
32 |
|
33 |
-
if ($this->should_linkbox())
|
|
|
34 |
add_filter('the_content', array($this, 'linkbox_filter'));
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
add_action('su_linkbox', array($this, 'linkbox_action'));
|
39 |
-
$enabled = true;
|
40 |
-
}
|
41 |
-
if ($enabled && trim($this->get_setting('css')))
|
42 |
-
add_action('su_head', array($this, 'output_css'));
|
43 |
}
|
44 |
|
45 |
function admin_page_contents() {
|
@@ -59,15 +58,23 @@ class SU_Linkbox extends SU_Module {
|
|
59 |
|
60 |
function linkbox_filter($content, $id = false) {
|
61 |
|
|
|
62 |
if (!$id) $id = SEO_Ultimate::get_post_id();
|
63 |
|
64 |
if ($id) {
|
|
|
|
|
|
|
|
|
|
|
65 |
$linkbox = $this->get_setting('html');
|
66 |
$linkbox = str_replace(
|
67 |
array('{id}', '{url}', '{title}'),
|
68 |
array(intval($id), attribute_escape(get_permalink($id)), attribute_escape(get_the_title($id))),
|
69 |
$linkbox
|
70 |
);
|
|
|
|
|
71 |
return $content.$linkbox;
|
72 |
}
|
73 |
|
@@ -78,16 +85,25 @@ class SU_Linkbox extends SU_Module {
|
|
78 |
echo $this->linkbox_filter('', $id);
|
79 |
}
|
80 |
|
81 |
-
function
|
82 |
-
|
83 |
-
|
84 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
}
|
86 |
|
87 |
-
function
|
88 |
-
return __(
|
89 |
-
<p>The Linkbox Inserter can add linkboxes to your posts/pages. These linkboxes contain HTML code that visitors can use to link to your site.
|
90 |
-
This is a great way to encourage SEO-beneficial linking activity.</p>
|
91 |
<p>Here’s information on the various settings:</p>
|
92 |
<ul>
|
93 |
<li><p><strong>Display linkboxes...</strong></p>
|
@@ -109,8 +125,7 @@ This is a great way to encourage SEO-beneficial linking activity.</p>
|
|
109 |
</ul>
|
110 |
</li>
|
111 |
</ul>
|
112 |
-
|
113 |
-
, 'seo-ultimate');
|
114 |
}
|
115 |
}
|
116 |
|
2 |
/**
|
3 |
* Linkbox Inserter Module
|
4 |
*
|
5 |
+
* @version 1.0.2
|
6 |
* @since 0.6
|
7 |
*/
|
8 |
|
13 |
function get_menu_title() { return __('Linkbox Inserter', 'seo-ultimate'); }
|
14 |
|
15 |
function get_default_settings() {
|
16 |
+
//The default linkbox HTML
|
17 |
return array(
|
18 |
'html' => '<div class="su-linkbox" id="post-{id}-linkbox"><div class="su-linkbox-label">' .
|
19 |
__('Link to this post!', 'seo-ultimate') .
|
25 |
}
|
26 |
|
27 |
function init() {
|
28 |
+
//We only want to filter post content when we're in the front-end, so we hook into template_redirect
|
29 |
add_action('template_redirect', array($this, 'template_init'));
|
30 |
}
|
31 |
|
32 |
function template_init() {
|
33 |
$enabled = false;
|
34 |
|
35 |
+
if ($this->should_linkbox())
|
36 |
+
//Add the linkbox to post/page content
|
37 |
add_filter('the_content', array($this, 'linkbox_filter'));
|
38 |
+
|
39 |
+
if ($this->get_setting('action_hook'))
|
40 |
+
//Enable the action hook
|
41 |
add_action('su_linkbox', array($this, 'linkbox_action'));
|
|
|
|
|
|
|
|
|
42 |
}
|
43 |
|
44 |
function admin_page_contents() {
|
58 |
|
59 |
function linkbox_filter($content, $id = false) {
|
60 |
|
61 |
+
//If no ID is provided, get the ID of the current post
|
62 |
if (!$id) $id = SEO_Ultimate::get_post_id();
|
63 |
|
64 |
if ($id) {
|
65 |
+
//Don't add a linkbox if a "more" link is present (since a linkbox should go at the very bottom of a post)
|
66 |
+
$morelink = '<a href="'.get_permalink($id).'#more-'.$id.'" class="more-link">';
|
67 |
+
if (strpos($content, $morelink) !== false) return $content;
|
68 |
+
|
69 |
+
//Load the HTML and replace the variables with the proper values
|
70 |
$linkbox = $this->get_setting('html');
|
71 |
$linkbox = str_replace(
|
72 |
array('{id}', '{url}', '{title}'),
|
73 |
array(intval($id), attribute_escape(get_permalink($id)), attribute_escape(get_the_title($id))),
|
74 |
$linkbox
|
75 |
);
|
76 |
+
|
77 |
+
//Return the content with the linkbox added to the bottom
|
78 |
return $content.$linkbox;
|
79 |
}
|
80 |
|
85 |
echo $this->linkbox_filter('', $id);
|
86 |
}
|
87 |
|
88 |
+
function admin_dropdowns() {
|
89 |
+
return array(
|
90 |
+
'overview' => __('Overview', 'seo-ultimate')
|
91 |
+
, 'settings' => __('Settings Help', 'seo-ultimate')
|
92 |
+
);
|
93 |
+
}
|
94 |
+
|
95 |
+
function admin_dropdown_overview() {
|
96 |
+
return __("
|
97 |
+
<ul>
|
98 |
+
<li><p><strong>What it does:</strong> Linkbox Inserter can add linkboxes to your posts/pages.</p></li>
|
99 |
+
<li><p><strong>Why it helps:</strong> Linkboxes contain HTML code that visitors can use to link to your site. This is a great way to encourage SEO-beneficial linking activity.</p></li>
|
100 |
+
<li><p><strong>How to use it:</strong> Use the checkboxes to enable the Linkbox Inserter in various areas of your site. Customize the HTML if desired. Click “Save Changes” when finished.</p></li>
|
101 |
+
</ul>
|
102 |
+
", 'seo-ultimate');
|
103 |
}
|
104 |
|
105 |
+
function admin_dropdown_settings() {
|
106 |
+
return __("
|
|
|
|
|
107 |
<p>Here’s information on the various settings:</p>
|
108 |
<ul>
|
109 |
<li><p><strong>Display linkboxes...</strong></p>
|
125 |
</ul>
|
126 |
</li>
|
127 |
</ul>
|
128 |
+
", 'seo-ultimate');
|
|
|
129 |
}
|
130 |
}
|
131 |
|
modules/meta.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Meta Editor Module
|
4 |
*
|
5 |
-
* @version 1.0.
|
6 |
* @since 0.3
|
7 |
*/
|
8 |
|
@@ -54,7 +54,7 @@ class SU_Meta extends SU_Module {
|
|
54 |
$fields['20|description|keywords'] =
|
55 |
"<tr class='textarea'>\n<th scope='row'><label for='$id'>".__("Description:", 'seo-ultimate')."</label></th>\n"
|
56 |
. "<td><textarea name='$id' id='$id' type='text' class='regular-text' cols='60' rows='3'"
|
57 |
-
. " onkeyup=\"javascript:
|
58 |
. "<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>")
|
59 |
. "</td>\n</tr>\n"
|
60 |
. $this->get_postmeta_textbox('keywords', __('Keywords:<br /><em>(separate with commas)</em>', 'seo-ultimate'))
|
@@ -63,6 +63,7 @@ class SU_Meta extends SU_Module {
|
|
63 |
return $fields;
|
64 |
}
|
65 |
|
|
|
66 |
function meta_robots($commands) {
|
67 |
|
68 |
$tags = array('noodp', 'noydir', 'noarchive');
|
@@ -79,31 +80,38 @@ class SU_Meta extends SU_Module {
|
|
79 |
$desc = false;
|
80 |
$kw = false;
|
81 |
|
|
|
82 |
if (is_home()) {
|
83 |
$desc = $this->get_setting('home_description');
|
84 |
if (!$desc && $this->get_setting('home_description_tagline_default')) $desc = get_bloginfo('description');
|
85 |
$kw = $this->get_setting('home_keywords');
|
|
|
|
|
86 |
} elseif (is_singular()) {
|
87 |
$desc = $this->get_postmeta('description');
|
88 |
$kw = $this->get_postmeta('keywords');
|
89 |
}
|
90 |
|
|
|
91 |
if ($desc) {
|
92 |
$desc = su_esc_attr($desc);
|
93 |
echo "\t<meta name=\"description\" content=\"$desc\" />\n";
|
94 |
}
|
95 |
|
|
|
96 |
if ($kw) {
|
97 |
$kw = su_esc_attr($kw);
|
98 |
echo "\t<meta name=\"keywords\" content=\"$kw\" />\n";
|
99 |
}
|
100 |
|
|
|
101 |
$verify = array(
|
102 |
'google' => 'verify-v1'
|
103 |
, 'yahoo' => 'y_key'
|
104 |
, 'microsoft' => 'msvalidate.01'
|
105 |
);
|
106 |
|
|
|
107 |
foreach ($verify as $site => $name) {
|
108 |
if ($value = $this->get_setting($site.'_verify')) {
|
109 |
$value = su_esc_attr($value);
|
@@ -111,8 +119,10 @@ class SU_Meta extends SU_Module {
|
|
111 |
}
|
112 |
}
|
113 |
|
|
|
114 |
if ($custom = $this->get_setting('custom_html')) {
|
115 |
|
|
|
116 |
$mark_code = $this->get_setting('mark_code', false, 'settings');
|
117 |
$desc = __('Custom Header Code', 'seo-ultimate');
|
118 |
|
@@ -125,9 +135,25 @@ class SU_Meta extends SU_Module {
|
|
125 |
|
126 |
}
|
127 |
|
128 |
-
function
|
129 |
-
return
|
130 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
<p>Here’s information on the various settings:</p>
|
132 |
<ul>
|
133 |
<li><p><strong>Blog Homepage Meta Description</strong> — When your blog homepage appears in search results, it’ll have a title and a description.
|
@@ -145,8 +171,8 @@ class SU_Meta extends SU_Module {
|
|
145 |
<li><p><strong>Spider Instructions</strong></p>
|
146 |
<ul>
|
147 |
<li><p><strong>Don’t use this site’s Open Directory / Yahoo! Directory description in search results.</strong> —
|
148 |
-
If your site is listed in the <a href=
|
149 |
-
the <a href=
|
150 |
some search engines may use your directory listing as the meta description.
|
151 |
These boxes tell search engines not to do that and will give you full control over your meta descriptions.
|
152 |
These settings have no effect if your site isn’t listed in the Open Directory or Yahoo! Directory respectively.</p></li>
|
@@ -158,8 +184,7 @@ class SU_Meta extends SU_Module {
|
|
158 |
<li><p><strong>Verification Codes</strong> — This section lets you enter in verification codes for the webmaster portals of the 3 leading search engines.</p></li>
|
159 |
<li><p><strong>Custom <head> HTML</strong> — Just enter in raw HTML code here, and it’ll be entered into the <head> tag across your entire site.</p></li>
|
160 |
</ul>
|
161 |
-
|
162 |
-
, 'seo-ultimate');
|
163 |
}
|
164 |
|
165 |
function postmeta_help($help) {
|
2 |
/**
|
3 |
* Meta Editor Module
|
4 |
*
|
5 |
+
* @version 1.0.3
|
6 |
* @since 0.3
|
7 |
*/
|
8 |
|
54 |
$fields['20|description|keywords'] =
|
55 |
"<tr class='textarea'>\n<th scope='row'><label for='$id'>".__("Description:", 'seo-ultimate')."</label></th>\n"
|
56 |
. "<td><textarea name='$id' id='$id' type='text' class='regular-text' cols='60' rows='3'"
|
57 |
+
. " onkeyup=\"javascript:document.getElementById('su_meta_description_charcount').innerHTML = document.getElementById('_su_description').value.length\">$value</textarea>"
|
58 |
. "<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>")
|
59 |
. "</td>\n</tr>\n"
|
60 |
. $this->get_postmeta_textbox('keywords', __('Keywords:<br /><em>(separate with commas)</em>', 'seo-ultimate'))
|
63 |
return $fields;
|
64 |
}
|
65 |
|
66 |
+
//Add the appropriate commands to the meta robots array
|
67 |
function meta_robots($commands) {
|
68 |
|
69 |
$tags = array('noodp', 'noydir', 'noarchive');
|
80 |
$desc = false;
|
81 |
$kw = false;
|
82 |
|
83 |
+
//If we're viewing the homepage, look for homepage meta data.
|
84 |
if (is_home()) {
|
85 |
$desc = $this->get_setting('home_description');
|
86 |
if (!$desc && $this->get_setting('home_description_tagline_default')) $desc = get_bloginfo('description');
|
87 |
$kw = $this->get_setting('home_keywords');
|
88 |
+
|
89 |
+
//If we're viewing a post or page, look for its meta data.
|
90 |
} elseif (is_singular()) {
|
91 |
$desc = $this->get_postmeta('description');
|
92 |
$kw = $this->get_postmeta('keywords');
|
93 |
}
|
94 |
|
95 |
+
//Do we have a description? If so, output it.
|
96 |
if ($desc) {
|
97 |
$desc = su_esc_attr($desc);
|
98 |
echo "\t<meta name=\"description\" content=\"$desc\" />\n";
|
99 |
}
|
100 |
|
101 |
+
//Do we have keywords? If so, output them.
|
102 |
if ($kw) {
|
103 |
$kw = su_esc_attr($kw);
|
104 |
echo "\t<meta name=\"keywords\" content=\"$kw\" />\n";
|
105 |
}
|
106 |
|
107 |
+
//Supported meta tags and their names
|
108 |
$verify = array(
|
109 |
'google' => 'verify-v1'
|
110 |
, 'yahoo' => 'y_key'
|
111 |
, 'microsoft' => 'msvalidate.01'
|
112 |
);
|
113 |
|
114 |
+
//Do we have verification tags? If so, output them.
|
115 |
foreach ($verify as $site => $name) {
|
116 |
if ($value = $this->get_setting($site.'_verify')) {
|
117 |
$value = su_esc_attr($value);
|
119 |
}
|
120 |
}
|
121 |
|
122 |
+
//Display custom code if provided
|
123 |
if ($custom = $this->get_setting('custom_html')) {
|
124 |
|
125 |
+
//Does the plugin user want us to surround code insertions with comments? If so, mark the custom code as such.
|
126 |
$mark_code = $this->get_setting('mark_code', false, 'settings');
|
127 |
$desc = __('Custom Header Code', 'seo-ultimate');
|
128 |
|
135 |
|
136 |
}
|
137 |
|
138 |
+
function admin_dropdowns() {
|
139 |
+
return array(
|
140 |
+
'overview' => __('Overview', 'seo-ultimate')
|
141 |
+
, 'settings' => __('Settings Help', 'seo-ultimate')
|
142 |
+
);
|
143 |
+
}
|
144 |
+
|
145 |
+
function admin_dropdown_overview() {
|
146 |
+
return __("
|
147 |
+
<ul>
|
148 |
+
<li><p><strong>What it does:</strong> Meta Editor lets you customize a wide variety of settings known as “meta data.”</p></li>
|
149 |
+
<li><p><strong>Why it helps:</strong> Using meta data, you can convey information to search engines, such as what text you want displayed by your site in search results, what your site is about, whether they can cache your site, etc.</p></li>
|
150 |
+
<li><p><strong>How to use it:</strong> Adjust the settings as desired, and then click Save Changes. You can refer to the “Settings Help” tab for information on the settings available. You can also customize the meta data of an individual post or page by using the textboxes that Meta Editor adds to the post/page editors.</p></li>
|
151 |
+
</ul>
|
152 |
+
", 'seo-ultimate');
|
153 |
+
}
|
154 |
+
|
155 |
+
function admin_dropdown_settings() {
|
156 |
+
return __("
|
157 |
<p>Here’s information on the various settings:</p>
|
158 |
<ul>
|
159 |
<li><p><strong>Blog Homepage Meta Description</strong> — When your blog homepage appears in search results, it’ll have a title and a description.
|
171 |
<li><p><strong>Spider Instructions</strong></p>
|
172 |
<ul>
|
173 |
<li><p><strong>Don’t use this site’s Open Directory / Yahoo! Directory description in search results.</strong> —
|
174 |
+
If your site is listed in the <a href='http://www.dmoz.org/' target='_blank'>Open Directory (DMOZ)</a> or
|
175 |
+
the <a href='http://dir.yahoo.com/' target='_blank'>Yahoo! Directory</a>,
|
176 |
some search engines may use your directory listing as the meta description.
|
177 |
These boxes tell search engines not to do that and will give you full control over your meta descriptions.
|
178 |
These settings have no effect if your site isn’t listed in the Open Directory or Yahoo! Directory respectively.</p></li>
|
184 |
<li><p><strong>Verification Codes</strong> — This section lets you enter in verification codes for the webmaster portals of the 3 leading search engines.</p></li>
|
185 |
<li><p><strong>Custom <head> HTML</strong> — Just enter in raw HTML code here, and it’ll be entered into the <head> tag across your entire site.</p></li>
|
186 |
</ul>
|
187 |
+
", 'seo-ultimate');
|
|
|
188 |
}
|
189 |
|
190 |
function postmeta_help($help) {
|
modules/modules.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Module Manager Module
|
4 |
*
|
5 |
-
* @version 1.1
|
6 |
* @since 0.7
|
7 |
*/
|
8 |
|
@@ -32,7 +32,9 @@ class SU_Modules extends SU_Module {
|
|
32 |
global $seo_ultimate;
|
33 |
|
34 |
echo "<p>";
|
35 |
-
_e("
|
|
|
|
|
36 |
echo "</p>";
|
37 |
|
38 |
$this->admin_form_start(false, false);
|
@@ -104,7 +106,7 @@ STR;
|
|
104 |
}
|
105 |
|
106 |
function admin_help() {
|
107 |
-
return __(
|
108 |
<p>The Module Manager lets you customize the visibility and accessibility of each module; here are the options available:</p>
|
109 |
<ul>
|
110 |
<li><strong>Enabled</strong> — The default option. The module will be fully enabled and accessible.</li>
|
@@ -112,8 +114,7 @@ STR;
|
|
112 |
<li><strong>Hidden</strong> — The module’s functionality will be enabled, but the module won’t be visible on the SEO menu. You will still be able to access the module’s admin page by clicking on its title in the Module Manager table.</li>
|
113 |
<li><strong>Disabled</strong> — The module will be completely disabled and inaccessible.</li>
|
114 |
</ul>
|
115 |
-
|
116 |
-
, 'seo-ultimate');
|
117 |
}
|
118 |
}
|
119 |
|
2 |
/**
|
3 |
* Module Manager Module
|
4 |
*
|
5 |
+
* @version 1.1.1
|
6 |
* @since 0.7
|
7 |
*/
|
8 |
|
32 |
global $seo_ultimate;
|
33 |
|
34 |
echo "<p>";
|
35 |
+
_e("SEO Ultimate’s features are located in groups called “modules.” By default, most of these modules are listed in the “SEO” menu on the left. Whenever you’re working with a module, you can view documentation by clicking the “Help” tab in the upper-right-hand corner of your administration screen.", 'seo-ultimate');
|
36 |
+
echo "</p><p>";
|
37 |
+
_e("The Module Manager lets you disable or hide modules you don’t use. You can also silence modules from displaying bubble alerts on the menu.", 'seo-ultimate');
|
38 |
echo "</p>";
|
39 |
|
40 |
$this->admin_form_start(false, false);
|
106 |
}
|
107 |
|
108 |
function admin_help() {
|
109 |
+
return __("
|
110 |
<p>The Module Manager lets you customize the visibility and accessibility of each module; here are the options available:</p>
|
111 |
<ul>
|
112 |
<li><strong>Enabled</strong> — The default option. The module will be fully enabled and accessible.</li>
|
114 |
<li><strong>Hidden</strong> — The module’s functionality will be enabled, but the module won’t be visible on the SEO menu. You will still be able to access the module’s admin page by clicking on its title in the Module Manager table.</li>
|
115 |
<li><strong>Disabled</strong> — The module will be completely disabled and inaccessible.</li>
|
116 |
</ul>
|
117 |
+
", 'seo-ultimate');
|
|
|
118 |
}
|
119 |
}
|
120 |
|
modules/noindex.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Noindex Manager Module
|
4 |
*
|
5 |
-
* @version 1.0.
|
6 |
* @since 0.1
|
7 |
*/
|
8 |
|
@@ -14,20 +14,27 @@ class SU_Noindex extends SU_Module {
|
|
14 |
|
15 |
function init() {
|
16 |
|
|
|
17 |
add_action('su_meta_robots', array($this, 'wphead_noindex'), 1);
|
18 |
|
|
|
|
|
|
|
19 |
if ($this->get_setting('noindex_comments_feed'))
|
20 |
add_action('commentsrss2_head', array($this, 'rss2_noindex_tag'));
|
21 |
-
|
|
|
22 |
if ($this->get_setting('noindex_admin'))
|
23 |
add_action('admin_head', array($this, 'xhtml_noindex_tag'));
|
24 |
-
|
|
|
25 |
if ($this->get_setting('noindex_login'))
|
26 |
add_action('login_head', array($this, 'xhtml_noindex_tag'));
|
27 |
}
|
28 |
|
29 |
function admin_page_contents() {
|
30 |
|
|
|
31 |
if (!get_option('blog_public'))
|
32 |
$this->queue_message('error',
|
33 |
__("Note: The current <a href='options-privacy.php'>privacy settings</a> will block indexing of the entire site, regardless of which options are set below.", 'seo-ultimate') );
|
@@ -39,7 +46,7 @@ class SU_Noindex extends SU_Module {
|
|
39 |
, 'noindex_search' => __('Blog search pages', 'seo-ultimate')
|
40 |
, 'noindex_category' => __('Category archives', 'seo-ultimate')
|
41 |
, 'noindex_comments_feed' => __('Comment feeds', 'seo-ultimate')
|
42 |
-
|
43 |
, 'noindex_date' => __('Date-based archives', 'seo-ultimate')
|
44 |
, 'noindex_home_paged' => __('Subpages of the homepage', 'seo-ultimate')
|
45 |
, 'noindex_tag' => __('Tag archives', 'seo-ultimate')
|
@@ -50,7 +57,7 @@ class SU_Noindex extends SU_Module {
|
|
50 |
|
51 |
function wphead_noindex($commands) {
|
52 |
|
53 |
-
if ($this->should_noindex()
|
54 |
array_push($commands, 'noindex', 'nofollow');
|
55 |
|
56 |
return $commands;
|
@@ -63,6 +70,15 @@ class SU_Noindex extends SU_Module {
|
|
63 |
foreach ($checks as $setting) {
|
64 |
if (call_user_func("is_$setting")) return $this->get_setting("noindex_$setting");
|
65 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
}
|
67 |
|
68 |
function rss2_noindex_tag() {
|
@@ -73,10 +89,25 @@ class SU_Noindex extends SU_Module {
|
|
73 |
echo "\t<meta name=\"robots\" content=\"noindex\" />\n";
|
74 |
}
|
75 |
|
76 |
-
function
|
77 |
-
return
|
78 |
-
|
79 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
80 |
<p>Here’s information on the various settings:</p>
|
81 |
<ul>
|
82 |
<li><p><strong>Administration back-end pages</strong> — Tells spiders not to index the administration area (the part you’re in now),
|
@@ -86,6 +117,7 @@ This is useful for removing pages that contain unimportant content (e.g. the log
|
|
86 |
<li><p><strong>Category archives</strong> — Tells spiders not to index category archives. Recommended only if you don’t use categories.</p></li>
|
87 |
<li><p><strong>Comment feeds</strong> — Tells spiders not to index the RSS feeds that exist for every post’s comments.
|
88 |
(These comment feeds are totally separate from your normal blog feeds.) Recommended.</p></li>
|
|
|
89 |
<li><p><strong>Date-based archives</strong> — Tells spiders not to index day/month/year archives.
|
90 |
Recommended, since these pages have little keyword value.</p></li>
|
91 |
<li><p><strong>Subpages of the homepage</strong> — Tells spiders not to index the homepage's subpages (page 2, page 3, etc).
|
@@ -93,8 +125,7 @@ This is useful for removing pages that contain unimportant content (e.g. the log
|
|
93 |
<li><p><strong>Tag archives</strong> — Tells spiders not to index tag archives. Recommended only if you don’t use tags.</p></li>
|
94 |
<li><p><strong>User login/registration pages</strong> — Tells spiders not to index WordPress’s user login and registration pages. Recommended.</p></li>
|
95 |
</ul>
|
96 |
-
|
97 |
-
, 'seo-ultimate');
|
98 |
}
|
99 |
}
|
100 |
|
2 |
/**
|
3 |
* Noindex Manager Module
|
4 |
*
|
5 |
+
* @version 1.0.2
|
6 |
* @since 0.1
|
7 |
*/
|
8 |
|
14 |
|
15 |
function init() {
|
16 |
|
17 |
+
//Hook into our wp_head() action
|
18 |
add_action('su_meta_robots', array($this, 'wphead_noindex'), 1);
|
19 |
|
20 |
+
//Now we'll hook into places where wp_head() is not called
|
21 |
+
|
22 |
+
//Hook into comment feed headers
|
23 |
if ($this->get_setting('noindex_comments_feed'))
|
24 |
add_action('commentsrss2_head', array($this, 'rss2_noindex_tag'));
|
25 |
+
|
26 |
+
//Hook into the admin header
|
27 |
if ($this->get_setting('noindex_admin'))
|
28 |
add_action('admin_head', array($this, 'xhtml_noindex_tag'));
|
29 |
+
|
30 |
+
//Hook into the login header
|
31 |
if ($this->get_setting('noindex_login'))
|
32 |
add_action('login_head', array($this, 'xhtml_noindex_tag'));
|
33 |
}
|
34 |
|
35 |
function admin_page_contents() {
|
36 |
|
37 |
+
//If global noindex tags are enabled, these settings will be moot, so notify the user.
|
38 |
if (!get_option('blog_public'))
|
39 |
$this->queue_message('error',
|
40 |
__("Note: The current <a href='options-privacy.php'>privacy settings</a> will block indexing of the entire site, regardless of which options are set below.", 'seo-ultimate') );
|
46 |
, 'noindex_search' => __('Blog search pages', 'seo-ultimate')
|
47 |
, 'noindex_category' => __('Category archives', 'seo-ultimate')
|
48 |
, 'noindex_comments_feed' => __('Comment feeds', 'seo-ultimate')
|
49 |
+
, 'noindex_cpage' => __('Comment subpages', 'seo-ultimate')
|
50 |
, 'noindex_date' => __('Date-based archives', 'seo-ultimate')
|
51 |
, 'noindex_home_paged' => __('Subpages of the homepage', 'seo-ultimate')
|
52 |
, 'noindex_tag' => __('Tag archives', 'seo-ultimate')
|
57 |
|
58 |
function wphead_noindex($commands) {
|
59 |
|
60 |
+
if ($this->should_noindex())
|
61 |
array_push($commands, 'noindex', 'nofollow');
|
62 |
|
63 |
return $commands;
|
70 |
foreach ($checks as $setting) {
|
71 |
if (call_user_func("is_$setting")) return $this->get_setting("noindex_$setting");
|
72 |
}
|
73 |
+
|
74 |
+
//Homepage subpages
|
75 |
+
if ($this->get_setting('noindex_home_paged') && is_home() && is_paged()) return true;
|
76 |
+
|
77 |
+
//Comment subpages
|
78 |
+
global $wp_query;
|
79 |
+
if ($this->get_setting('noindex_cpage') && isset($wp_query->query_vars['cpage'])) return true;
|
80 |
+
|
81 |
+
return false;
|
82 |
}
|
83 |
|
84 |
function rss2_noindex_tag() {
|
89 |
echo "\t<meta name=\"robots\" content=\"noindex\" />\n";
|
90 |
}
|
91 |
|
92 |
+
function admin_dropdowns() {
|
93 |
+
return array(
|
94 |
+
'overview' => __('Overview', 'seo-ultimate')
|
95 |
+
, 'settings' => __('Settings Help', 'seo-ultimate')
|
96 |
+
);
|
97 |
+
}
|
98 |
+
|
99 |
+
function admin_dropdown_overview() {
|
100 |
+
return __("
|
101 |
+
<ul>
|
102 |
+
<li><p><strong>What it does:</strong> Noindex Manager lets you prohibit the search engine spiders from indexing certain pages on your blog using the "meta robots noindex" tag.</p></li>
|
103 |
+
<li><p><strong>Why it helps:</strong> This module lets you “noindex” pages that contain unimportant content (e.g. the login page), or pages that mostly contain duplicate content.</p></li>
|
104 |
+
<li><p><strong>How to use it:</strong> Adjust the settings as desired, and then click Save Changes. You can refer to the “Settings Help” tab for information on the settings available.</p></li>
|
105 |
+
</ul>
|
106 |
+
", 'seo-ultimate');
|
107 |
+
}
|
108 |
+
|
109 |
+
function admin_dropdown_settings() {
|
110 |
+
return __("
|
111 |
<p>Here’s information on the various settings:</p>
|
112 |
<ul>
|
113 |
<li><p><strong>Administration back-end pages</strong> — Tells spiders not to index the administration area (the part you’re in now),
|
117 |
<li><p><strong>Category archives</strong> — Tells spiders not to index category archives. Recommended only if you don’t use categories.</p></li>
|
118 |
<li><p><strong>Comment feeds</strong> — Tells spiders not to index the RSS feeds that exist for every post’s comments.
|
119 |
(These comment feeds are totally separate from your normal blog feeds.) Recommended.</p></li>
|
120 |
+
<li><p><strong>Comment subpages</strong> — Tells spiders not to index comment subpages (page 2, page 3, etc.).</p></li>
|
121 |
<li><p><strong>Date-based archives</strong> — Tells spiders not to index day/month/year archives.
|
122 |
Recommended, since these pages have little keyword value.</p></li>
|
123 |
<li><p><strong>Subpages of the homepage</strong> — Tells spiders not to index the homepage's subpages (page 2, page 3, etc).
|
125 |
<li><p><strong>Tag archives</strong> — Tells spiders not to index tag archives. Recommended only if you don’t use tags.</p></li>
|
126 |
<li><p><strong>User login/registration pages</strong> — Tells spiders not to index WordPress’s user login and registration pages. Recommended.</p></li>
|
127 |
</ul>
|
128 |
+
", 'seo-ultimate');
|
|
|
129 |
}
|
130 |
}
|
131 |
|
modules/settings.php
CHANGED
@@ -2,23 +2,23 @@
|
|
2 |
/**
|
3 |
* Settings Module
|
4 |
*
|
5 |
-
* @version 2.2
|
6 |
* @since 0.2
|
7 |
*/
|
8 |
|
9 |
if (class_exists('SU_Module')) {
|
10 |
|
11 |
class SU_Settings extends SU_Module {
|
12 |
-
|
13 |
var $wp_meta_called = false;
|
14 |
-
|
15 |
function get_page_title() { return __('SEO Ultimate Plugin Settings', 'seo-ultimate'); }
|
16 |
function get_menu_title() { return __('SEO Ultimate', 'seo-ultimate'); }
|
17 |
function get_menu_parent(){ return 'options-general.php'; }
|
18 |
-
|
19 |
function get_default_settings() {
|
20 |
return array(
|
21 |
-
'attribution_link' =>
|
22 |
, 'attribution_link_css' => true
|
23 |
, 'plugin_notices' => true
|
24 |
);
|
@@ -166,7 +166,7 @@ class SU_Settings extends SU_Module {
|
|
166 |
}
|
167 |
|
168 |
function admin_help() {
|
169 |
-
return __(
|
170 |
<p>The Settings module lets you manage settings related to the SEO Ultimate plugin as a whole.</p>
|
171 |
<p>Here’s information on each of the settings:</p>
|
172 |
<ul>
|
@@ -175,8 +175,7 @@ class SU_Settings extends SU_Module {
|
|
175 |
<li><p><strong>Insert comments around HTML code insertions</strong> — If enabled, SEO Ultimate will use HTML comments to identify all code it inserts into your <head> tag.
|
176 |
This is useful if you’re trying to figure out whether or not SEO Ultimate is inserting a certain piece of header code.</p></li>
|
177 |
</ul>
|
178 |
-
|
179 |
-
, 'seo-ultimate');
|
180 |
}
|
181 |
|
182 |
}
|
2 |
/**
|
3 |
* Settings Module
|
4 |
*
|
5 |
+
* @version 2.2.1
|
6 |
* @since 0.2
|
7 |
*/
|
8 |
|
9 |
if (class_exists('SU_Module')) {
|
10 |
|
11 |
class SU_Settings extends SU_Module {
|
12 |
+
|
13 |
var $wp_meta_called = false;
|
14 |
+
|
15 |
function get_page_title() { return __('SEO Ultimate Plugin Settings', 'seo-ultimate'); }
|
16 |
function get_menu_title() { return __('SEO Ultimate', 'seo-ultimate'); }
|
17 |
function get_menu_parent(){ return 'options-general.php'; }
|
18 |
+
|
19 |
function get_default_settings() {
|
20 |
return array(
|
21 |
+
'attribution_link' => false
|
22 |
, 'attribution_link_css' => true
|
23 |
, 'plugin_notices' => true
|
24 |
);
|
166 |
}
|
167 |
|
168 |
function admin_help() {
|
169 |
+
return __("
|
170 |
<p>The Settings module lets you manage settings related to the SEO Ultimate plugin as a whole.</p>
|
171 |
<p>Here’s information on each of the settings:</p>
|
172 |
<ul>
|
175 |
<li><p><strong>Insert comments around HTML code insertions</strong> — If enabled, SEO Ultimate will use HTML comments to identify all code it inserts into your <head> tag.
|
176 |
This is useful if you’re trying to figure out whether or not SEO Ultimate is inserting a certain piece of header code.</p></li>
|
177 |
</ul>
|
178 |
+
", 'seo-ultimate');
|
|
|
179 |
}
|
180 |
|
181 |
}
|
modules/slugs.php
ADDED
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Slug Optimizer Module
|
4 |
+
*
|
5 |
+
* @version 1.0
|
6 |
+
* @since 0.9
|
7 |
+
*/
|
8 |
+
|
9 |
+
if (class_exists('SU_Module')) {
|
10 |
+
|
11 |
+
class SU_Slugs extends SU_Module {
|
12 |
+
|
13 |
+
function get_menu_title() { return __('Slug Optimizer', 'seo-ultimate'); }
|
14 |
+
|
15 |
+
function admin_page_contents() {
|
16 |
+
$this->admin_form_start();
|
17 |
+
$this->textarea('words_to_remove', __('Words to Remove', 'seo-ultimate'), 20);
|
18 |
+
$this->admin_form_end();
|
19 |
+
}
|
20 |
+
|
21 |
+
function init() {
|
22 |
+
|
23 |
+
//Only sanitize if a permalink is being requested via AJAX
|
24 |
+
if ($_POST['action'] == 'sample-permalink')
|
25 |
+
//The filter priority is very important to ensure our function runs before WordPress's sanitize_title_with_dashes() function
|
26 |
+
add_filter('sanitize_title', array($this, 'remove_words_from_title'), 9);
|
27 |
+
}
|
28 |
+
|
29 |
+
function remove_words_from_title($title) {
|
30 |
+
|
31 |
+
if (strcmp($title, $_POST['new_title']) == 0) {
|
32 |
+
//An empty slug was given, so the post title is being used as the default! Call to action!
|
33 |
+
|
34 |
+
//Remove the stopwords from the slug
|
35 |
+
$newtitle = implode("-", array_diff(explode(" ", $title), explode("\n", $this->get_setting('words_to_remove'))));
|
36 |
+
|
37 |
+
//Make sure we haven't removed too much!
|
38 |
+
if (!empty($newtitle)) return $newtitle;
|
39 |
+
}
|
40 |
+
|
41 |
+
return $title;
|
42 |
+
}
|
43 |
+
|
44 |
+
function admin_dropdowns() {
|
45 |
+
return array(
|
46 |
+
'overview' => __('Overview', 'seo-ultimate')
|
47 |
+
, 'faq' => __('FAQ', 'seo-ultimate')
|
48 |
+
);
|
49 |
+
}
|
50 |
+
|
51 |
+
function admin_dropdown_overview() {
|
52 |
+
return __("
|
53 |
+
<ul>
|
54 |
+
<li><p><strong>What it does:</strong> Slug Optimizer removes common words from the portion of a post’s or Page’s URL that is based on its title. (This portion is also known as the “slug.”)</p></li>
|
55 |
+
<li><p><strong>Why it helps:</strong> Slug Optimizer increases keyword potency because there are fewer words in your URLs competing for relevance.</p></li>
|
56 |
+
<li><p><strong>How to use it:</strong> Slug Optimizer goes to work when you’re editing a post or Page, with no action required on your part.
|
57 |
+
If needed, you can use the textbox below to customize which words are removed.</p></li>
|
58 |
+
</ul>
|
59 |
+
", 'seo-ultimate');
|
60 |
+
}
|
61 |
+
|
62 |
+
function admin_dropdown_faq() {
|
63 |
+
return __("
|
64 |
+
<h6>What's a slug?</h6>
|
65 |
+
<p>The slug of a post or page is the portion of its URL that is based on its title.</p>
|
66 |
+
<p>When you edit a post or Page in WordPress, the slug is the yellow-highlighted portion of the Permalink beneath the Title textbox.</p>
|
67 |
+
|
68 |
+
<h6>Does the Slug Optimizer change my existing URLs?</h6>
|
69 |
+
<p>No. Slug Optimizer will not relocate your content by changing existing URLs. Slug Optimizer only takes effect on new posts and pages.</p>
|
70 |
+
|
71 |
+
<h6>How do I see Slug Optimizer in action?</h6>
|
72 |
+
<ol>
|
73 |
+
<li>Create a new post/Page in WordPress.</li>
|
74 |
+
<li>Type in a title containing some common words.</li>
|
75 |
+
<li>Click outside the Title box. WordPress will insert a URL labeled “Permalink” below the Title textbox. The Slug Optimizer will have removed the common words from the URL.</li>
|
76 |
+
</ol>
|
77 |
+
|
78 |
+
<h6>Why didn't the Slug Optimizer remove common words from my slug?</h6>
|
79 |
+
<p>It's possible that every word in your post title is in the list of words to remove. In this case, Slug Optimizer doesn't remove the words, because if it did, you'd end up with a blank slug.</p>
|
80 |
+
|
81 |
+
<h6>What if I want to include a common word in my slug?</h6>
|
82 |
+
<p>When editing the post or page in question, just click the Edit button next to the permalink and change the slug as desired.</p>
|
83 |
+
|
84 |
+
<h6>How do I revert back to the optimized slug after making changes?</h6>
|
85 |
+
<p>When editing the post or page in question, just click the Edit button next to the permalink; a Save button will appear in its place. Next erase the contents of the textbox, and then click the aforementioned Save button.</p>
|
86 |
+
", 'seo-ultimate');
|
87 |
+
}
|
88 |
+
|
89 |
+
function get_default_settings() {
|
90 |
+
|
91 |
+
//Special thanks to the "SEO Slugs" plugin for the stopwords array.
|
92 |
+
//http://wordpress.org/extend/plugins/seo-slugs/
|
93 |
+
$defaults = array ("a", "able", "about", "above", "abroad", "according", "accordingly", "across", "actually", "adj", "after", "afterwards", "again", "against", "ago", "ahead", "ain't", "all", "allow", "allows", "almost", "alone", "along", "alongside", "already", "also", "although", "always", "am", "amid", "amidst", "among", "amongst", "an", "and", "another", "any", "anybody", "anyhow", "anyone", "anything", "anyway", "anyways", "anywhere", "apart", "appear", "appreciate", "appropriate", "are", "aren't", "around", "as", "a's", "aside", "ask", "asking", "associated", "at", "available", "away", "awfully", "b", "back", "backward", "backwards", "be", "became", "because", "become", "becomes", "becoming", "been", "before", "beforehand", "begin", "behind", "being", "believe", "below", "beside", "besides", "best", "better", "between", "beyond", "both", "brief", "but", "by", "c", "came", "can", "cannot", "cant", "can't", "caption", "cause", "causes", "certain", "certainly", "changes", "clearly", "c'mon", "co", "co.", "com", "come", "comes", "concerning", "consequently", "consider", "considering", "contain", "containing", "contains", "corresponding", "could", "couldn't", "course", "c's", "currently", "d", "dare", "daren't", "definitely", "described", "despite", "did", "didn't", "different", "directly", "do", "does", "doesn't", "doing", "done", "don't", "down", "downwards", "during", "e", "each", "edu", "eg", "eight", "eighty", "either", "else", "elsewhere", "end", "ending", "enough", "entirely", "especially", "et", "etc", "even", "ever", "evermore", "every", "everybody", "everyone", "everything", "everywhere", "ex", "exactly", "example", "except", "f", "fairly", "far", "farther", "few", "fewer", "fifth", "first", "five", "followed", "following", "follows", "for", "forever", "former", "formerly", "forth", "forward", "found", "four", "from", "further", "furthermore", "g", "get", "gets", "getting", "given", "gives", "go", "goes", "going", "gone", "got", "gotten", "greetings", "h", "had", "hadn't", "half", "happens", "hardly", "has", "hasn't", "have", "haven't", "having", "he", "he'd", "he'll", "hello", "help", "hence", "her", "here", "hereafter", "hereby", "herein", "here's", "hereupon", "hers", "herself", "he's", "hi", "him", "himself", "his", "hither", "hopefully", "how", "howbeit", "however", "hundred", "i", "i'd", "ie", "if", "ignored", "i'll", "i'm", "immediate", "in", "inasmuch", "inc", "inc.", "indeed", "indicate", "indicated", "indicates", "inner", "inside", "insofar", "instead", "into", "inward", "is", "isn't", "it", "it'd", "it'll", "its", "it's", "itself", "i've", "j", "just", "k", "keep", "keeps", "kept", "know", "known", "knows", "l", "last", "lately", "later", "latter", "latterly", "least", "less", "lest", "let", "let's", "like", "liked", "likely", "likewise", "little", "look", "looking", "looks", "low", "lower", "ltd", "m", "made", "mainly", "make", "makes", "many", "may", "maybe", "mayn't", "me", "mean", "meantime", "meanwhile", "merely", "might", "mightn't", "mine", "minus", "miss", "more", "moreover", "most", "mostly", "mr", "mrs", "much", "must", "mustn't", "my", "myself", "n", "name", "namely", "nd", "near", "nearly", "necessary", "need", "needn't", "needs", "neither", "never", "neverf", "neverless", "nevertheless", "new", "next", "nine", "ninety", "no", "nobody", "non", "none", "nonetheless", "noone", "no-one", "nor", "normally", "not", "nothing", "notwithstanding", "novel", "now", "nowhere", "o", "obviously", "of", "off", "often", "oh", "ok", "okay", "old", "on", "once", "one", "ones", "one's", "only", "onto", "opposite", "or", "other", "others", "otherwise", "ought", "oughtn't", "our", "ours", "ourselves", "out", "outside", "over", "overall", "own", "p", "particular", "particularly", "past", "per", "perhaps", "placed", "please", "plus", "possible", "presumably", "probably", "provided", "provides", "q", "que", "quite", "qv", "r", "rather", "rd", "re", "really", "reasonably", "recent", "recently", "regarding", "regardless", "regards", "relatively", "respectively", "right", "round", "s", "said", "same", "saw", "say", "saying", "says", "second", "secondly", "see", "seeing", "seem", "seemed", "seeming", "seems", "seen", "self", "selves", "sensible", "sent", "serious", "seriously", "seven", "several", "shall", "shan't", "she", "she'd", "she'll", "she's", "should", "shouldn't", "since", "six", "so", "some", "somebody", "someday", "somehow", "someone", "something", "sometime", "sometimes", "somewhat", "somewhere", "soon", "sorry", "specified", "specify", "specifying", "still", "sub", "such", "sup", "sure", "t", "take", "taken", "taking", "tell", "tends", "th", "than", "thank", "thanks", "thanx", "that", "that'll", "thats", "that's", "that've", "the", "their", "theirs", "them", "themselves", "then", "thence", "there", "thereafter", "thereby", "there'd", "therefore", "therein", "there'll", "there're", "theres", "there's", "thereupon", "there've", "these", "they", "they'd", "they'll", "they're", "they've", "thing", "things", "think", "third", "thirty", "this", "thorough", "thoroughly", "those", "though", "three", "through", "throughout", "thru", "thus", "till", "to", "together", "too", "took", "toward", "towards", "tried", "tries", "truly", "try", "trying", "t's", "twice", "two", "u", "un", "under", "underneath", "undoing", "unfortunately", "unless", "unlike", "unlikely", "until", "unto", "up", "upon", "upwards", "us", "use", "used", "useful", "uses", "using", "usually", "v", "value", "various", "versus", "very", "via", "viz", "vs", "w", "want", "wants", "was", "wasn't", "way", "we", "we'd", "welcome", "well", "we'll", "went", "were", "we're", "weren't", "we've", "what", "whatever", "what'll", "what's", "what've", "when", "whence", "whenever", "where", "whereafter", "whereas", "whereby", "wherein", "where's", "whereupon", "wherever", "whether", "which", "whichever", "while", "whilst", "whither", "who", "who'd", "whoever", "whole", "who'll", "whom", "whomever", "who's", "whose", "why", "will", "willing", "wish", "with", "within", "without", "wonder", "won't", "would", "wouldn't", "x", "y", "yes", "yet", "you", "you'd", "you'll", "your", "you're", "yours", "yourself", "yourselves", "you've", "z", "zero");
|
94 |
+
|
95 |
+
return array(
|
96 |
+
'words_to_remove' => implode("\n", $defaults)
|
97 |
+
);
|
98 |
+
}
|
99 |
+
}
|
100 |
+
|
101 |
+
}
|
102 |
+
?>
|
modules/titles.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
/**
|
3 |
* Title Rewriter Module
|
4 |
*
|
5 |
-
* @version 1.0.
|
6 |
* @since 0.1
|
7 |
*/
|
8 |
|
@@ -200,18 +200,32 @@ class SU_Titles extends SU_Module {
|
|
200 |
return $title;
|
201 |
}
|
202 |
|
203 |
-
function
|
204 |
-
return
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
215 |
<ul>
|
216 |
<li><p><strong>Blog Homepage Title</strong> — Displays on the main blog posts page.</p></li>
|
217 |
<li><p><strong>Post Title Format</strong> — Displays on single-post pages. The {post} variable is replaced with the post’s title.</p></li>
|
@@ -239,8 +253,7 @@ which is replaced with the name of the blog.</p>
|
|
239 |
<li>{max} — The total number of subpages available. Would usually be used like this: Page {num} of {max}</li>
|
240 |
</ul></li>
|
241 |
</ul>
|
242 |
-
|
243 |
-
, 'seo-ultimate');
|
244 |
}
|
245 |
|
246 |
function postmeta_help($help) {
|
2 |
/**
|
3 |
* Title Rewriter Module
|
4 |
*
|
5 |
+
* @version 1.0.5
|
6 |
* @since 0.1
|
7 |
*/
|
8 |
|
200 |
return $title;
|
201 |
}
|
202 |
|
203 |
+
function admin_dropdowns() {
|
204 |
+
return array(
|
205 |
+
'overview' => __('Overview', 'seo-ultimate')
|
206 |
+
, 'settings' => __('Settings & Variables', 'seo-ultimate')
|
207 |
+
);
|
208 |
+
}
|
209 |
+
|
210 |
+
function admin_dropdown_overview() {
|
211 |
+
return __("
|
212 |
+
<ul>
|
213 |
+
<li><p><strong>What it does:</strong> Title Rewriter helps you customize the contents of your website’s <code><title></code> tags.
|
214 |
+
The tag contents are displayed in web browser title bars and in search engine result pages.</p></li>
|
215 |
+
<li><p><strong>Why it helps:</strong> Proper title rewriting ensures that the keywords in your post/Page titles have greater prominence for search engine spiders and users.
|
216 |
+
This is an important foundation for WordPress SEO.</p></li>
|
217 |
+
<li><p><strong>How to use it:</strong> Title Rewriter enables recommended settings automatically, so you shouldn’t need to change anything.
|
218 |
+
If you do wish to edit the rewriting formats, you can do so using the textboxes below (the “Settings Help” tab includes additional information on this).
|
219 |
+
You also have the option of overriding the <code><title></code> tag of an individual post or page by using the “Title Tag” textbox that Title Rewriter adds to the post/page editors.</p></li>
|
220 |
+
</ul>
|
221 |
+
", 'seo-ultimate');
|
222 |
+
}
|
223 |
+
|
224 |
+
function admin_dropdown_settings() {
|
225 |
+
return __("
|
226 |
+
<p>Various variables, surrounded in {curly brackets}, are provided for use in the title formats.
|
227 |
+
All settings support the {blog} variable, which is replaced with the name of the blog.</p>
|
228 |
+
<p>Here’s information on each of the settings and its supported variables:</p>
|
229 |
<ul>
|
230 |
<li><p><strong>Blog Homepage Title</strong> — Displays on the main blog posts page.</p></li>
|
231 |
<li><p><strong>Post Title Format</strong> — Displays on single-post pages. The {post} variable is replaced with the post’s title.</p></li>
|
253 |
<li>{max} — The total number of subpages available. Would usually be used like this: Page {num} of {max}</li>
|
254 |
</ul></li>
|
255 |
</ul>
|
256 |
+
", 'seo-ultimate');
|
|
|
257 |
}
|
258 |
|
259 |
function postmeta_help($help) {
|
readme.txt
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
=== SEO Ultimate ===
|
2 |
Contributors: SEO Design Solutions
|
3 |
-
Tags: seo, title, meta, noindex, canonical, 404, robots.txt, htaccess, google, yahoo, bing, search engines, admin, post, page, modules
|
4 |
Requires at least: 2.7
|
5 |
Tested up to: 2.8.2
|
6 |
-
Stable tag: 0.
|
7 |
|
8 |
-
This all-in-one SEO plugin can handle titles, noindex, meta data, canonical tags, 404 error tracking, and more (with many more features coming soon).
|
9 |
|
10 |
== Description ==
|
11 |
|
@@ -25,6 +25,10 @@ SEO Ultimate is an all-in-one [SEO](http://www.seodesignsolutions.com/) plugin w
|
|
25 |
|
26 |
* **File Editor** - Lets you edit two important SEO-related files: robots.txt and .htaccess
|
27 |
|
|
|
|
|
|
|
|
|
28 |
SEO Ultimate was developed with WordPress plugin "best practices" in mind:
|
29 |
|
30 |
* Integration with the contextual help system of WordPress 2.7+
|
@@ -34,8 +38,6 @@ SEO Ultimate was developed with WordPress plugin "best practices" in mind:
|
|
34 |
* Integration with the new WordPress 2.7+ menu
|
35 |
* Settings import/export/reset functionality
|
36 |
|
37 |
-
**NOTE:** This plugin is in beta, which means it's very feature-incomplete. We have many more features that we're working on finetuning before release. If you install the plugin now, you can have these new features delivered to you on a regular basis via WordPress's automatic plugin upgrader.
|
38 |
-
|
39 |
|
40 |
== Installation ==
|
41 |
|
@@ -124,6 +126,34 @@ No. The Title Rewriter edits the `<title>` tags of your site, not your post/page
|
|
124 |
|
125 |
The "title" is the title of your post or page, and is displayed on your site and in your RSS feed. The title is also used in your `<title>` tag by default; however, you can override the value of just the `<title>` tag by using the "Title Tag" field in the "SEO Settings" box.
|
126 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
= How do I remove the attribution link? =
|
128 |
|
129 |
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`.
|
@@ -162,6 +192,20 @@ Yes. WordPress plugins are supposed to delete their settings during the uninstal
|
|
162 |
|
163 |
== Changelog ==
|
164 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
165 |
= Version 0.8 (July 22, 2009) =
|
166 |
* Feature: Added robots.txt editor (new File Editor module)
|
167 |
* Feature: Added .htaccess editor (new File Editor module)
|
1 |
=== SEO Ultimate ===
|
2 |
Contributors: SEO Design Solutions
|
3 |
+
Tags: seo, title, meta, noindex, canonical, 404, robots.txt, htaccess, slugs, url, google, yahoo, bing, search engines, admin, post, page, modules
|
4 |
Requires at least: 2.7
|
5 |
Tested up to: 2.8.2
|
6 |
+
Stable tag: 0.9
|
7 |
|
8 |
+
This all-in-one SEO plugin can handle titles, noindex, meta data, slugs, canonical tags, 404 error tracking, and more (with many more features coming soon).
|
9 |
|
10 |
== Description ==
|
11 |
|
25 |
|
26 |
* **File Editor** - Lets you edit two important SEO-related files: robots.txt and .htaccess
|
27 |
|
28 |
+
* **Slug Optimizer** - Removes common words from post/Page slugs to increase in-URL keyword potency.
|
29 |
+
|
30 |
+
We have many more features that we're working on finetuning before release. If you install the plugin now, you can have these new features delivered to you on a regular basis via WordPress's automatic plugin upgrader.
|
31 |
+
|
32 |
SEO Ultimate was developed with WordPress plugin "best practices" in mind:
|
33 |
|
34 |
* Integration with the contextual help system of WordPress 2.7+
|
38 |
* Integration with the new WordPress 2.7+ menu
|
39 |
* Settings import/export/reset functionality
|
40 |
|
|
|
|
|
41 |
|
42 |
== Installation ==
|
43 |
|
126 |
|
127 |
The "title" is the title of your post or page, and is displayed on your site and in your RSS feed. The title is also used in your `<title>` tag by default; however, you can override the value of just the `<title>` tag by using the "Title Tag" field in the "SEO Settings" box.
|
128 |
|
129 |
+
= What's a slug? =
|
130 |
+
|
131 |
+
The slug of a post or page is the portion of its URL that is based on its title.
|
132 |
+
|
133 |
+
When you edit a post or Page in WordPress, the slug is the yellow-highlighted portion of the Permalink beneath the Title textbox.
|
134 |
+
|
135 |
+
= Does the Slug Optimizer change my existing URLs? =
|
136 |
+
|
137 |
+
No. Slug Optimizer will not relocate your content by changing existing URLs. Slug Optimizer only takes effect on new posts and pages.
|
138 |
+
|
139 |
+
= How do I see Slug Optimizer in action? =
|
140 |
+
|
141 |
+
1. Create a new post/Page in WordPress.
|
142 |
+
2. Type in a title containing some common words.
|
143 |
+
3. Click outside the Title box. WordPress will insert a URL labeled "Permalink" below the Title textbox. The Slug Optimizer will have removed the common words from the URL.
|
144 |
+
|
145 |
+
= Why didn't the Slug Optimizer remove common words from my slug? =
|
146 |
+
|
147 |
+
It's possible that every word in your post title is in the list of words to remove. In this case, Slug Optimizer doesn't remove the words, because if it did, you'd end up with a blank slug.
|
148 |
+
|
149 |
+
= What if I want to include a common word in my slug? =
|
150 |
+
|
151 |
+
When editing the post or page in question, just click the "Edit" button next to the permalink and change the slug as desired.
|
152 |
+
|
153 |
+
= How do I revert back to the optimized slug after making changes? =
|
154 |
+
|
155 |
+
When editing the post or page in question, just click the "Edit" button next to the permalink; a "Save" button will appear in its place. Next erase the contents of the textbox, and then click the aforementioned "Save" button.
|
156 |
+
|
157 |
= How do I remove the attribution link? =
|
158 |
|
159 |
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`.
|
192 |
|
193 |
== Changelog ==
|
194 |
|
195 |
+
= Version 0.9 (August 1, 2009) =
|
196 |
+
* Feature: Added the Slug Optimizer module
|
197 |
+
* Feature: Noindex Manager now supports noindexing comment subpages
|
198 |
+
* Bugfix: 404 Monitor's numeric notice now only includes new 404s
|
199 |
+
* Bugfix: Linkbox Inserter now respects the "more" tag
|
200 |
+
* Bugfix: Missing strings added to the POT file
|
201 |
+
* Improvement: 404 Monitor now shows the referring URL for all 404 errors
|
202 |
+
* Improvement: Reduced the number of database queries the plugin makes
|
203 |
+
* Improvement: CSS and JavaScript are now only loaded when appropriate
|
204 |
+
* Improvement: Added additional built-in documentation
|
205 |
+
* Improvement: Divided built-in help into multiple tabs to reduce dropdown height
|
206 |
+
* Improvement: Miscellaneous code efficiency improvements
|
207 |
+
* Improvement: Many additional code comments added
|
208 |
+
|
209 |
= Version 0.8 (July 22, 2009) =
|
210 |
* Feature: Added robots.txt editor (new File Editor module)
|
211 |
* Feature: Added .htaccess editor (new File Editor module)
|
seo-ultimate.css
DELETED
@@ -1,237 +0,0 @@
|
|
1 |
-
/* MENU */
|
2 |
-
|
3 |
-
#adminmenu #toplevel_page_seo div.wp-menu-image {
|
4 |
-
background-image: url(images/icon.png);
|
5 |
-
background-position: -1px -33px;
|
6 |
-
}
|
7 |
-
|
8 |
-
#adminmenu #toplevel_page_seo:hover div.wp-menu-image,
|
9 |
-
#adminmenu #toplevel_page_seo.wp-has-current-submenu div.wp-menu-image {
|
10 |
-
background-position: -1px -1px;
|
11 |
-
}
|
12 |
-
|
13 |
-
/* MESSAGES */
|
14 |
-
|
15 |
-
div.su-module .su-success,
|
16 |
-
div.su-module .su-error,
|
17 |
-
div.su-module .su-warning,
|
18 |
-
div.su-module .su-info {
|
19 |
-
padding-left: 21px;
|
20 |
-
background-repeat: no-repeat;
|
21 |
-
background-position: 0px center;
|
22 |
-
}
|
23 |
-
|
24 |
-
div.su-module .su-success {
|
25 |
-
background-image: url(images/success.png);
|
26 |
-
color: #008000;
|
27 |
-
}
|
28 |
-
|
29 |
-
div.su-module .su-error {
|
30 |
-
background-image: url(images/error.png);
|
31 |
-
color: #FF0000;
|
32 |
-
}
|
33 |
-
|
34 |
-
div.su-module .su-warning {
|
35 |
-
background-image: url(images/warning.png);
|
36 |
-
color: #FF8C00;
|
37 |
-
}
|
38 |
-
|
39 |
-
div.su-module .su-info {
|
40 |
-
background-image: url(images/info.png);
|
41 |
-
color: #0000FF;
|
42 |
-
}
|
43 |
-
|
44 |
-
#wpcontent div.su-module div.su-message p {
|
45 |
-
background-position: 10px center;
|
46 |
-
padding: 10px 10px 10px 36px;
|
47 |
-
margin: 1em 0;
|
48 |
-
color: black;
|
49 |
-
border-width: 1px;
|
50 |
-
border-style: solid;
|
51 |
-
}
|
52 |
-
|
53 |
-
div.su-module .su-message .su-success {
|
54 |
-
background-color: #DFFFE3;
|
55 |
-
border-color: #61DF6F;
|
56 |
-
}
|
57 |
-
|
58 |
-
div.su-module .su-message .su-error {
|
59 |
-
background-color: #FFBFBF;
|
60 |
-
border-color: #FF0000;
|
61 |
-
}
|
62 |
-
|
63 |
-
div.su-module .su-message .su-warning {
|
64 |
-
background-color: #FFFFE0;
|
65 |
-
border-color: orange;
|
66 |
-
}
|
67 |
-
|
68 |
-
div.su-module .su-message .su-info {
|
69 |
-
background-color: #DFEEFF;
|
70 |
-
border-color: #8F93FF;
|
71 |
-
}
|
72 |
-
|
73 |
-
/* ADMIN PAGES */
|
74 |
-
|
75 |
-
div.su-module {
|
76 |
-
padding-bottom: 1em;
|
77 |
-
}
|
78 |
-
|
79 |
-
div.su-module h3.su-subheader {
|
80 |
-
margin-top: 3em;
|
81 |
-
padding-top: 1em;
|
82 |
-
border-top: 3px solid #ccc;
|
83 |
-
}
|
84 |
-
|
85 |
-
div.su-module table.widefat {
|
86 |
-
width: auto;
|
87 |
-
margin: 2em 0;
|
88 |
-
}
|
89 |
-
|
90 |
-
div.su-module table.widefat th,
|
91 |
-
div.su-module table.widefat td {
|
92 |
-
padding-right: 2em;
|
93 |
-
}
|
94 |
-
|
95 |
-
div.su-module table.widefat tr.new-hit td {
|
96 |
-
background-color: #DFFFE3;
|
97 |
-
}
|
98 |
-
|
99 |
-
div.su-module .form-table .regular-text {
|
100 |
-
width: 325px;
|
101 |
-
}
|
102 |
-
|
103 |
-
div.su-module .form-table td div.field {
|
104 |
-
padding-bottom: 1em;
|
105 |
-
}
|
106 |
-
|
107 |
-
div.su-module table.report {
|
108 |
-
border-collapse: collapse;
|
109 |
-
border-top: 1px solid #ccc;
|
110 |
-
}
|
111 |
-
|
112 |
-
div.su-module table.report th {
|
113 |
-
font-weight: normal;
|
114 |
-
}
|
115 |
-
|
116 |
-
div.su-module table.report th, div.su-module table.report td {
|
117 |
-
padding: 1em 3em 1em 0;
|
118 |
-
border-bottom: 1px solid #ccc;
|
119 |
-
text-align: left;
|
120 |
-
}
|
121 |
-
|
122 |
-
/* TABS (Heavily based on CSS from the Breadcrumbs NavXT plugin) */
|
123 |
-
|
124 |
-
div.su-module .su-tabs ul.ui-tabs-nav {
|
125 |
-
border-bottom: 1px solid #dfdfdf;
|
126 |
-
font-size: 12px;
|
127 |
-
height: 29px;
|
128 |
-
list-style: none;
|
129 |
-
margin: 13px 0 0;
|
130 |
-
overflow: visible;
|
131 |
-
padding: 0 0 0 8px;
|
132 |
-
}
|
133 |
-
|
134 |
-
div.su-module .su-tabs ul.ui-tabs-nav li {
|
135 |
-
display: block;
|
136 |
-
float: left;
|
137 |
-
line-height: 200%;
|
138 |
-
list-style: none;
|
139 |
-
margin: 0;
|
140 |
-
padding: 0;
|
141 |
-
position: relative;
|
142 |
-
text-align: center;
|
143 |
-
white-space: nowrap;
|
144 |
-
width: auto;
|
145 |
-
}
|
146 |
-
|
147 |
-
|
148 |
-
div.su-module .su-tabs ul.ui-tabs-nav li a {
|
149 |
-
border-bottom: 1px solid #dfdfdf;
|
150 |
-
display: block;
|
151 |
-
float: left;
|
152 |
-
line-height: 28px;
|
153 |
-
padding: 1px 13px 0;
|
154 |
-
position: relative;
|
155 |
-
text-decoration: none;
|
156 |
-
}
|
157 |
-
|
158 |
-
div.su-module .su-tabs ul.ui-tabs-nav li.ui-tabs-selected a {
|
159 |
-
-moz-border-radius-topleft: 4px;
|
160 |
-
-moz-border-radius-topright: 4px;
|
161 |
-
-webkit-border-top-left-radius: 4px;
|
162 |
-
-webkit-border-top-right-radius: 4px;
|
163 |
-
border-top-left-radius: 4px;
|
164 |
-
border-top-right-radius: 4px;
|
165 |
-
border: 1px solid #dfdfdf;
|
166 |
-
border-bottom-color: #f9f9f9;
|
167 |
-
color: #333333;
|
168 |
-
font-weight: normal;
|
169 |
-
padding: 0 12px;
|
170 |
-
}
|
171 |
-
|
172 |
-
/* CONTEXTUAL HELP */
|
173 |
-
|
174 |
-
div.su-help div.metabox-prefs {
|
175 |
-
margin-bottom: 2em;
|
176 |
-
}
|
177 |
-
|
178 |
-
div.su-help ul {
|
179 |
-
list-style-type: disc;
|
180 |
-
padding-left: 1em;
|
181 |
-
margin-left: 1em;
|
182 |
-
}
|
183 |
-
|
184 |
-
/* POSTMETA BOX */
|
185 |
-
|
186 |
-
#su-postmeta-box table tr {
|
187 |
-
vertical-align: middle;
|
188 |
-
}
|
189 |
-
|
190 |
-
#su-postmeta-box table th,
|
191 |
-
#su-postmeta-box table td {
|
192 |
-
padding: 0.5em 0;
|
193 |
-
}
|
194 |
-
|
195 |
-
#su-postmeta-box table th {
|
196 |
-
text-align: right;
|
197 |
-
font-weight: bold;
|
198 |
-
padding-right: 0.5em;
|
199 |
-
}
|
200 |
-
|
201 |
-
#su-postmeta-box table tr.textarea {
|
202 |
-
vertical-align: top;
|
203 |
-
}
|
204 |
-
|
205 |
-
#su-postmeta-box table tr.textarea th label {
|
206 |
-
display: block;
|
207 |
-
margin-top: 5px;
|
208 |
-
}
|
209 |
-
|
210 |
-
#su-postmeta-box table th em {
|
211 |
-
font-weight: normal;
|
212 |
-
}
|
213 |
-
|
214 |
-
#su-postmeta-box table,
|
215 |
-
#su-postmeta-box table td,
|
216 |
-
#su-postmeta-box table td input.regular-text,
|
217 |
-
#su-postmeta-box table td textarea {
|
218 |
-
width: 100%;
|
219 |
-
}
|
220 |
-
|
221 |
-
/* PLUGIN NOTICES */
|
222 |
-
|
223 |
-
#wpwrap .su-plugin-notice .update-message {
|
224 |
-
font-weight: normal;
|
225 |
-
}
|
226 |
-
|
227 |
-
/* IMPORT MODULES */
|
228 |
-
|
229 |
-
.su-module table#import-status {
|
230 |
-
border: 0;
|
231 |
-
width: auto;
|
232 |
-
margin: 2em 0;
|
233 |
-
}
|
234 |
-
|
235 |
-
.su-module table#import-status td {
|
236 |
-
padding: 0 0.5em 1em 0;
|
237 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
seo-ultimate.js
DELETED
@@ -1,17 +0,0 @@
|
|
1 |
-
function reset_textbox(id, d, m, e) {
|
2 |
-
if (confirm(m+"\n\n"+d)) {
|
3 |
-
document.getElementById(id).value=d;
|
4 |
-
e.className='hidden';
|
5 |
-
}
|
6 |
-
}
|
7 |
-
|
8 |
-
function textbox_value_changed(e, d, l) {
|
9 |
-
if (e.value==d)
|
10 |
-
document.getElementById(l).className='hidden';
|
11 |
-
else
|
12 |
-
document.getElementById(l).className='';
|
13 |
-
}
|
14 |
-
|
15 |
-
function textbox_char_count(textbox, charcount) {
|
16 |
-
document.getElementById(charcount).innerHTML = document.getElementById(textbox).value.length;
|
17 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 can rewrite title tags, set meta data, add noindex, insert canonical tags, log 404 errors, edit your robots.txt, and more.
|
6 |
-
Version: 0.
|
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 0.
|
16 |
* @link http://www.seodesignsolutions.com/wordpress-seo/ SEO Ultimate Homepage
|
17 |
*/
|
18 |
|
@@ -33,15 +33,15 @@ You should have received a copy of the GNU General Public License
|
|
33 |
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
34 |
*/
|
35 |
|
36 |
-
|
37 |
/********** CONSTANTS **********/
|
38 |
|
|
|
39 |
define("SU_PLUGIN_NAME", "SEO Ultimate");
|
40 |
define("SU_PLUGIN_URI", "http://www.seodesignsolutions.com/wordpress-seo/");
|
41 |
-
define("SU_VERSION", "0.
|
42 |
define("SU_AUTHOR", "SEO Design Solutions");
|
43 |
define("SU_AUTHOR_URI", "http://www.seodesignsolutions.com/");
|
44 |
-
define("SU_USER_AGENT", "SeoUltimate/0.
|
45 |
|
46 |
define('SU_MODULE_ENABLED', 10);
|
47 |
define('SU_MODULE_SILENCED', 5);
|
@@ -54,13 +54,10 @@ define('SU_RESULT_ERROR', -1);
|
|
54 |
|
55 |
/********** INCLUDES **********/
|
56 |
|
|
|
57 |
require('class.seo-ultimate.php');
|
58 |
require('class.su-module.php');
|
59 |
-
require('class.su-importmodule.php');
|
60 |
-
require('class.su-parentmodule.php');
|
61 |
-
require('class.su-widget.php');
|
62 |
require('class.su-hitset.php');
|
63 |
-
require('functions.php');
|
64 |
|
65 |
|
66 |
/********** PLUGIN FILE LOAD HANDLER **********/
|
3 |
Plugin Name: SEO Ultimate
|
4 |
Plugin URI: http://www.seodesignsolutions.com/wordpress-seo/
|
5 |
Description: This all-in-one SEO plugin can rewrite title tags, set meta data, add noindex, insert canonical tags, log 404 errors, edit your robots.txt, and more.
|
6 |
+
Version: 0.9
|
7 |
Author: SEO Design Solutions
|
8 |
Author URI: http://www.seodesignsolutions.com/
|
9 |
Text Domain: seo-ultimate
|
12 |
/**
|
13 |
* The main SEO Ultimate plugin file.
|
14 |
* @package SeoUltimate
|
15 |
+
* @version 0.9
|
16 |
* @link http://www.seodesignsolutions.com/wordpress-seo/ SEO Ultimate Homepage
|
17 |
*/
|
18 |
|
33 |
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
34 |
*/
|
35 |
|
|
|
36 |
/********** CONSTANTS **********/
|
37 |
|
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", "0.9");
|
42 |
define("SU_AUTHOR", "SEO Design Solutions");
|
43 |
define("SU_AUTHOR_URI", "http://www.seodesignsolutions.com/");
|
44 |
+
define("SU_USER_AGENT", "SeoUltimate/0.9");
|
45 |
|
46 |
define('SU_MODULE_ENABLED', 10);
|
47 |
define('SU_MODULE_SILENCED', 5);
|
54 |
|
55 |
/********** INCLUDES **********/
|
56 |
|
57 |
+
require('functions.php');
|
58 |
require('class.seo-ultimate.php');
|
59 |
require('class.su-module.php');
|
|
|
|
|
|
|
60 |
require('class.su-hitset.php');
|
|
|
61 |
|
62 |
|
63 |
/********** PLUGIN FILE LOAD HANDLER **********/
|
seo-ultimate.pot
CHANGED
@@ -1,680 +1,1169 @@
|
|
1 |
-
#
|
2 |
-
# Copyright (C)
|
3 |
-
# This file is distributed under the same license as the
|
4 |
-
#
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
"
|
10 |
-
"
|
11 |
-
"
|
12 |
-
"
|
13 |
-
"
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
#: class.seo-ultimate.php:
|
22 |
-
msgid "SEO
|
23 |
-
msgstr ""
|
24 |
-
|
25 |
-
#: class.seo-ultimate.php:
|
26 |
-
msgid "SEO"
|
27 |
-
msgstr ""
|
28 |
-
|
29 |
-
#: class.seo-ultimate.php:
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
msgid "
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
msgid "
|
79 |
-
msgstr ""
|
80 |
-
|
81 |
-
#: class.su-
|
82 |
-
#, php-format
|
83 |
-
msgid "%
|
84 |
-
msgstr ""
|
85 |
-
|
86 |
-
#: class.su-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
"
|
176 |
-
"
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
"
|
182 |
-
"
|
183 |
-
"
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
"
|
216 |
-
"
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
"
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
msgstr ""
|
257 |
-
|
258 |
-
#: modules/
|
259 |
-
msgid "
|
260 |
-
msgstr ""
|
261 |
-
|
262 |
-
#: modules/
|
263 |
-
msgid "
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
"
|
282 |
-
"
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
msgid "
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
msgstr ""
|
325 |
-
|
326 |
-
#: modules/
|
327 |
-
msgid "
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
"<
|
333 |
-
"
|
334 |
-
"
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
"<
|
340 |
-
"
|
341 |
-
"
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
"
|
355 |
-
"
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
"
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
"
|
443 |
-
"
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
"
|
464 |
-
msgstr ""
|
465 |
-
|
466 |
-
#: modules/
|
467 |
-
msgid "
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
"
|
474 |
-
msgstr ""
|
475 |
-
|
476 |
-
#: modules/
|
477 |
-
msgid "
|
478 |
-
msgstr ""
|
479 |
-
|
480 |
-
#: modules/
|
481 |
-
msgid "
|
482 |
-
msgstr ""
|
483 |
-
|
484 |
-
#: modules/
|
485 |
-
msgid "
|
486 |
-
msgstr ""
|
487 |
-
|
488 |
-
#: modules/
|
489 |
-
msgid "
|
490 |
-
msgstr ""
|
491 |
-
|
492 |
-
#: modules/
|
493 |
-
msgid "
|
494 |
-
msgstr ""
|
495 |
-
|
496 |
-
#: modules/
|
497 |
-
msgid "
|
498 |
-
msgstr ""
|
499 |
-
|
500 |
-
#: modules/
|
501 |
-
msgid "
|
502 |
-
msgstr ""
|
503 |
-
|
504 |
-
#: modules/
|
505 |
-
|
506 |
-
"
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
"
|
515 |
-
msgstr ""
|
516 |
-
|
517 |
-
#: modules/
|
518 |
-
msgid "
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
"
|
532 |
-
"
|
533 |
-
msgstr ""
|
534 |
-
|
535 |
-
#: modules/
|
536 |
-
msgid "
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
"
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
msgstr ""
|
575 |
-
|
576 |
-
#: modules/
|
577 |
-
msgid "
|
578 |
-
msgstr ""
|
579 |
-
|
580 |
-
#: modules/
|
581 |
-
msgid "
|
582 |
-
msgstr ""
|
583 |
-
|
584 |
-
#: modules/
|
585 |
-
msgid "
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
"
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
"
|
671 |
-
"
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# SEO Ultimate
|
2 |
+
# Copyright (C) 2009 John Lamansky
|
3 |
+
# This file is distributed under the same license as the SEO Ultimate package.
|
4 |
+
#
|
5 |
+
#, fuzzy
|
6 |
+
msgid ""
|
7 |
+
msgstr ""
|
8 |
+
"Project-Id-Version: SEO Ultimate 0.9\n"
|
9 |
+
"Report-Msgid-Bugs-To: http://wordpress.org/tag/seo-ultimate\n"
|
10 |
+
"POT-Creation-Date: 2009-07-23 22:19+0000\n"
|
11 |
+
"MIME-Version: 1.0\n"
|
12 |
+
"Content-Type: text/plain; charset=utf-8\n"
|
13 |
+
"Content-Transfer-Encoding: 8bit\n"
|
14 |
+
|
15 |
+
#. #-#-#-#-# seo-ultimate.pot (SEO Ultimate 0.9) #-#-#-#-#
|
16 |
+
#. Plugin Name of an extension
|
17 |
+
#: class.seo-ultimate.php:668 modules/settings.php:16
|
18 |
+
msgid "SEO Ultimate"
|
19 |
+
msgstr ""
|
20 |
+
|
21 |
+
#: class.seo-ultimate.php:668
|
22 |
+
msgid "SEO"
|
23 |
+
msgstr ""
|
24 |
+
|
25 |
+
#: class.seo-ultimate.php:859
|
26 |
+
msgid "SEO Settings Help"
|
27 |
+
msgstr ""
|
28 |
+
|
29 |
+
#: class.seo-ultimate.php:861
|
30 |
+
msgid "The SEO Settings box lets you customize these settings:"
|
31 |
+
msgstr ""
|
32 |
+
|
33 |
+
#: class.seo-ultimate.php:863
|
34 |
+
msgid "(The SEO Settings box is part of the SEO Ultimate plugin.)"
|
35 |
+
msgstr ""
|
36 |
+
|
37 |
+
#: class.seo-ultimate.php:918
|
38 |
+
#, php-format
|
39 |
+
msgid ""
|
40 |
+
"SEO Ultimate includes the functionality of %1$s. You may want to deactivate %"
|
41 |
+
"1$s to avoid plugin conflicts."
|
42 |
+
msgstr ""
|
43 |
+
|
44 |
+
#: class.seo-ultimate.php:999
|
45 |
+
msgid "SEO Settings"
|
46 |
+
msgstr ""
|
47 |
+
|
48 |
+
#: class.su-hitset.php:44
|
49 |
+
msgid "Date"
|
50 |
+
msgstr ""
|
51 |
+
|
52 |
+
#: class.su-hitset.php:45
|
53 |
+
msgid "IP Address"
|
54 |
+
msgstr ""
|
55 |
+
|
56 |
+
#: class.su-hitset.php:46
|
57 |
+
msgid "User Agent"
|
58 |
+
msgstr ""
|
59 |
+
|
60 |
+
#: class.su-hitset.php:47
|
61 |
+
msgid "URL Requested"
|
62 |
+
msgstr ""
|
63 |
+
|
64 |
+
#: class.su-hitset.php:48
|
65 |
+
msgid "Redirected To"
|
66 |
+
msgstr ""
|
67 |
+
|
68 |
+
#: class.su-hitset.php:49
|
69 |
+
msgid "Status Code"
|
70 |
+
msgstr ""
|
71 |
+
|
72 |
+
#: class.su-hitset.php:50
|
73 |
+
msgid "Referring URL"
|
74 |
+
msgstr ""
|
75 |
+
|
76 |
+
#: class.su-hitset.php:82
|
77 |
+
#, php-format
|
78 |
+
msgid "%1$s<br />%2$s"
|
79 |
+
msgstr ""
|
80 |
+
|
81 |
+
#: class.su-module.php:495
|
82 |
+
#, php-format
|
83 |
+
msgid "%s %s|Dropdown Title"
|
84 |
+
msgstr ""
|
85 |
+
|
86 |
+
#: class.su-module.php:507
|
87 |
+
#, php-format
|
88 |
+
msgid "%s Documentation"
|
89 |
+
msgstr ""
|
90 |
+
|
91 |
+
#: class.su-module.php:511
|
92 |
+
msgid "Documentation"
|
93 |
+
msgstr ""
|
94 |
+
|
95 |
+
#: class.su-module.php:529
|
96 |
+
#, php-format
|
97 |
+
msgid "%1$s | %2$s %3$s by %4$s"
|
98 |
+
msgstr ""
|
99 |
+
|
100 |
+
#: class.su-module.php:563
|
101 |
+
msgid "Settings updated."
|
102 |
+
msgstr ""
|
103 |
+
|
104 |
+
#: class.su-module.php:583
|
105 |
+
msgid "Save Changes"
|
106 |
+
msgstr ""
|
107 |
+
|
108 |
+
#: class.su-module.php:679
|
109 |
+
msgid ""
|
110 |
+
"Are you sure you want to replace the textbox contents with this default "
|
111 |
+
"value?"
|
112 |
+
msgstr ""
|
113 |
+
|
114 |
+
#: class.su-module.php:692
|
115 |
+
msgid "Reset"
|
116 |
+
msgstr ""
|
117 |
+
|
118 |
+
#: modules/404s.php:20
|
119 |
+
msgid "404 Monitor"
|
120 |
+
msgstr ""
|
121 |
+
|
122 |
+
#: modules/404s.php:38
|
123 |
+
msgid "The log entry was successfully deleted."
|
124 |
+
msgstr ""
|
125 |
+
|
126 |
+
#: modules/404s.php:40
|
127 |
+
msgid "This log entry has already been deleted."
|
128 |
+
msgstr ""
|
129 |
+
|
130 |
+
#: modules/404s.php:49
|
131 |
+
msgid "The log was successfully cleared."
|
132 |
+
msgstr ""
|
133 |
+
|
134 |
+
#: modules/404s.php:57
|
135 |
+
msgid "No 404 errors in the log."
|
136 |
+
msgstr ""
|
137 |
+
|
138 |
+
#: modules/404s.php:68
|
139 |
+
msgid "Are you sure you want to delete all 404 log entries?"
|
140 |
+
msgstr ""
|
141 |
+
|
142 |
+
#: modules/404s.php:70
|
143 |
+
msgid "Clear Log"
|
144 |
+
msgstr ""
|
145 |
+
|
146 |
+
#: modules/404s.php:83
|
147 |
+
msgid "Open"
|
148 |
+
msgstr ""
|
149 |
+
|
150 |
+
#: modules/404s.php:84
|
151 |
+
msgid "Google Cache"
|
152 |
+
msgstr ""
|
153 |
+
|
154 |
+
#: modules/404s.php:85
|
155 |
+
msgid "Delete Log Entry"
|
156 |
+
msgstr ""
|
157 |
+
|
158 |
+
#: modules/404s.php:101 modules/canonical.php:136 modules/files.php:140
|
159 |
+
#: modules/linkbox.php:90 modules/meta.php:140 modules/noindex.php:94
|
160 |
+
#: modules/slugs.php:46 modules/titles.php:205
|
161 |
+
msgid "Overview"
|
162 |
+
msgstr ""
|
163 |
+
|
164 |
+
#: modules/404s.php:104
|
165 |
+
msgid "Options Help"
|
166 |
+
msgstr ""
|
167 |
+
|
168 |
+
#: modules/404s.php:107
|
169 |
+
msgid "Troubleshooting"
|
170 |
+
msgstr ""
|
171 |
+
|
172 |
+
#: modules/404s.php:113
|
173 |
+
msgid ""
|
174 |
+
"\r\n"
|
175 |
+
"<ul>\r\n"
|
176 |
+
"\t<li><p><strong>What it does:</strong> The 404 Monitor keeps track of non-"
|
177 |
+
"existant URLs that generated 404 errors.\r\n"
|
178 |
+
"\t\t404 errors are when a search engine or visitor comes to a URL on your "
|
179 |
+
"site but nothing exists at that URL.</p></li>\r\n"
|
180 |
+
"\t<li><p><strong>Why it helps:</strong> The 404 Monitor helps you spot 404 "
|
181 |
+
"errors; \r\n"
|
182 |
+
"\t\tthen you can take steps to correct them to reduce linkjuice loss from "
|
183 |
+
"broken links.</p></li>\r\n"
|
184 |
+
"\t<li><p><strong>How to use it:</strong> Check the 404 Monitor occasionally "
|
185 |
+
"for errors.\r\n"
|
186 |
+
"\t\t(A numeric bubble will appear next to the “404 Monitor” item "
|
187 |
+
"on the menu if there are any newly-logged URLs that you haven’t seen "
|
188 |
+
"yet. \r\n"
|
189 |
+
"\t\tThese new URLs will also be highlighted green in the table.)\r\n"
|
190 |
+
"\t\tIf a 404 error’s referring URL is located on your site, try "
|
191 |
+
"locating and fixing the broken URL.\r\n"
|
192 |
+
"\t\tIf moved content was previously located at the requested URL, try using "
|
193 |
+
"a redirection plugin to point the old URL to the new one.</p></li>\r\n"
|
194 |
+
"</ul>\r\n"
|
195 |
+
msgstr ""
|
196 |
+
|
197 |
+
#: modules/404s.php:130
|
198 |
+
msgid ""
|
199 |
+
"Currently, the 404 Monitor doesn’t have any 404 errors in its log. "
|
200 |
+
"This is good, and means there’s no action required on your part. If "
|
201 |
+
"the 404 Monitor logs any 404 errors in the future, you’ll see them on "
|
202 |
+
"this page."
|
203 |
+
msgstr ""
|
204 |
+
|
205 |
+
#: modules/404s.php:138
|
206 |
+
msgid ""
|
207 |
+
"\r\n"
|
208 |
+
"<p>Hover over a table row to access these options:</p>\r\n"
|
209 |
+
"<ul>\r\n"
|
210 |
+
"\t\t<li>The “View” link will open the URL in a new window. This "
|
211 |
+
"is useful for testing whether or not a redirect is working.</li>\r\n"
|
212 |
+
"\t\t<li>The “Google Cache” link will open Google’s "
|
213 |
+
"archived version of the URL in a new window. This is useful for determining "
|
214 |
+
"what content, if any, used to be located at that URL.</li>\r\n"
|
215 |
+
"\t\t<li>Once you've taken care of a 404 error, you can click the “"
|
216 |
+
"Delete Log Entry” link to remove it from the list. The URL will "
|
217 |
+
"reappear on the list if it triggers a 404 error in the future.</li>\r\n"
|
218 |
+
"</ul>\r\n"
|
219 |
+
msgstr ""
|
220 |
+
|
221 |
+
#: modules/404s.php:149
|
222 |
+
msgid ""
|
223 |
+
"\r\n"
|
224 |
+
"<p>404 Monitor doesn’t appear to work? Take these notes into "
|
225 |
+
"consideration:</p>\r\n"
|
226 |
+
"<ul>\r\n"
|
227 |
+
"\t\t<li>In order for the 404 Monitor to track 404 errors, you must have "
|
228 |
+
"“Pretty Permalinks” enabled in your <a href="
|
229 |
+
msgstr ""
|
230 |
+
|
231 |
+
#: modules/canonical.php:13
|
232 |
+
msgid "Canonicalizer"
|
233 |
+
msgstr ""
|
234 |
+
|
235 |
+
#: modules/canonical.php:24
|
236 |
+
msgid "Generate <code><link rel="canonical" /></code> tags."
|
237 |
+
msgstr ""
|
238 |
+
|
239 |
+
#: modules/canonical.php:141
|
240 |
+
msgid ""
|
241 |
+
"\r\n"
|
242 |
+
"<ul>\r\n"
|
243 |
+
"\t<li><p><strong>What it does:</strong> Canonicalizer inserts <code><link "
|
244 |
+
"rel="canonical" /></code> tags to minimize possible exact-"
|
245 |
+
"content duplication penalties.</p></li>\r\n"
|
246 |
+
"\t<li><p><strong>Why it helps:</strong> These tags will point Google to the "
|
247 |
+
"correct URL for your homepage and each of your posts, Pages, categories, "
|
248 |
+
"tags, date archives, and author archives. \r\n"
|
249 |
+
"That way, if Google comes across an alternate URL by which one of those "
|
250 |
+
"items can be accessed, it will be able to find the correct URL \r\n"
|
251 |
+
"and won’t penalize you for having two identical pages on your site.</"
|
252 |
+
"p></li>\r\n"
|
253 |
+
"\t<li><p><strong>How to use it:</strong> Just check the checkbox and click "
|
254 |
+
"Save Changes. SEO Ultimate will do the rest.</p></li>\r\n"
|
255 |
+
"</ul>\r\n"
|
256 |
+
msgstr ""
|
257 |
+
|
258 |
+
#: modules/files.php:15
|
259 |
+
msgid "File Editor"
|
260 |
+
msgstr ""
|
261 |
+
|
262 |
+
#: modules/files.php:53
|
263 |
+
msgid ""
|
264 |
+
"A .htaccess file exists, but it’s not writable. You can edit it here "
|
265 |
+
"once the file permissions are corrected."
|
266 |
+
msgstr ""
|
267 |
+
|
268 |
+
#: modules/files.php:59
|
269 |
+
msgid ""
|
270 |
+
"WordPress won’t be able to display your robots.txt file because the "
|
271 |
+
"default <a href=\"options-permalink.php\" target=\"_blank\">permalink "
|
272 |
+
"structure</a> is in use."
|
273 |
+
msgstr ""
|
274 |
+
|
275 |
+
#: modules/files.php:66
|
276 |
+
#, php-format
|
277 |
+
msgid "robots.txt [<a href=\"%s\" target=\"_blank\">Open</a>]"
|
278 |
+
msgstr ""
|
279 |
+
|
280 |
+
#: modules/files.php:70
|
281 |
+
msgid "Enable this custom robots.txt file and disable the default file"
|
282 |
+
msgstr ""
|
283 |
+
|
284 |
+
#: modules/files.php:71
|
285 |
+
msgid "Let other plugins add rules to my custom robots.txt file"
|
286 |
+
msgstr ""
|
287 |
+
|
288 |
+
#: modules/files.php:72
|
289 |
+
msgid "robots.txt Settings"
|
290 |
+
msgstr ""
|
291 |
+
|
292 |
+
#: modules/files.php:75
|
293 |
+
msgid ""
|
294 |
+
"Please realize that incorrectly editing your robots.txt file could block "
|
295 |
+
"search engines from your site."
|
296 |
+
msgstr ""
|
297 |
+
|
298 |
+
#: modules/files.php:79
|
299 |
+
msgid ".htaccess"
|
300 |
+
msgstr ""
|
301 |
+
|
302 |
+
#: modules/files.php:82
|
303 |
+
msgid ""
|
304 |
+
"Also, incorrectly editing your .htaccess file could disable your entire "
|
305 |
+
"website. Edit with caution!"
|
306 |
+
msgstr ""
|
307 |
+
|
308 |
+
#: modules/files.php:132
|
309 |
+
#, php-format
|
310 |
+
msgid ""
|
311 |
+
"Please note that your privacy settings won’t have any effect on your "
|
312 |
+
"robots.txt file, since you’re using <a href=\"%s\">a custom one</a>."
|
313 |
+
msgstr ""
|
314 |
+
|
315 |
+
#: modules/files.php:141 modules/slugs.php:47
|
316 |
+
msgid "FAQ"
|
317 |
+
msgstr ""
|
318 |
+
|
319 |
+
#: modules/files.php:146
|
320 |
+
msgid ""
|
321 |
+
"The File Editor module lets you edit system files that are of SEO value. "
|
322 |
+
"Edit the files as desired, then click Save Changes. If you create a custom "
|
323 |
+
"robots.txt file, be sure to enable it with the checkbox."
|
324 |
+
msgstr ""
|
325 |
+
|
326 |
+
#: modules/files.php:150
|
327 |
+
msgid ""
|
328 |
+
"\r\n"
|
329 |
+
"<h6>Why do I get a “500 Server Error” after using the File "
|
330 |
+
"Editor?</h6>\r\n"
|
331 |
+
"\r\n"
|
332 |
+
"<p>You may have inserted code into your .htaccess file that your web server "
|
333 |
+
"can't understand. As the File Editor warns, incorrectly editing your ."
|
334 |
+
"htaccess file can disable your entire website in this way. To restore your "
|
335 |
+
"site, you'll need to use an FTP client (or your web host's File Manager) to "
|
336 |
+
"edit or rename your .htaccess file. If you need help, please contact your "
|
337 |
+
"web host.</p>\r\n"
|
338 |
+
"\r\n"
|
339 |
+
"<h6>Will my robots.txt edits remain if I disable the File Editor?</h6>\r\n"
|
340 |
+
"\r\n"
|
341 |
+
"<p>No. On a WordPress blog, the robots.txt file is dynamically generated "
|
342 |
+
"just like your posts and Pages. If you disable the File Editor module or the "
|
343 |
+
"entire SEO Ultimate plugin, the File Editor won't be able to insert your "
|
344 |
+
"custom code into the robots.txt file anymore.</p>\r\n"
|
345 |
+
"\r\n"
|
346 |
+
"<h6>Will my .htaccess edits remain if I disable the File Editor?</h6>\r\n"
|
347 |
+
"\r\n"
|
348 |
+
"<p>Yes. The .htaccess file is static. Your edits will remain even if you "
|
349 |
+
"disable SEO Ultimate or its File Editor module.</p>\r\n"
|
350 |
+
"\r\n"
|
351 |
+
"<h6>Where did my .htaccess edits go?</h6>\r\n"
|
352 |
+
"\r\n"
|
353 |
+
"<p>The .htaccess file is static, so SEO Ultimate doesn't have total control "
|
354 |
+
"over it. It's possible that WordPress, another plugin, or other software may "
|
355 |
+
"overwrite your .htaccess file. If you have a backup of your blog's files, "
|
356 |
+
"you can try recovering your edits from there.</p>\r\n"
|
357 |
+
msgstr ""
|
358 |
+
|
359 |
+
#: modules/linkbox.php:13
|
360 |
+
msgid "Linkbox Inserter"
|
361 |
+
msgstr ""
|
362 |
+
|
363 |
+
#: modules/linkbox.php:19
|
364 |
+
msgid "Link to this post!"
|
365 |
+
msgstr ""
|
366 |
+
|
367 |
+
#: modules/linkbox.php:46
|
368 |
+
msgid "At the end of posts"
|
369 |
+
msgstr ""
|
370 |
+
|
371 |
+
#: modules/linkbox.php:47
|
372 |
+
msgid "At the end of pages"
|
373 |
+
msgstr ""
|
374 |
+
|
375 |
+
#: modules/linkbox.php:48
|
376 |
+
msgid "When called by the su_linkbox hook"
|
377 |
+
msgstr ""
|
378 |
+
|
379 |
+
#: modules/linkbox.php:49
|
380 |
+
msgid "Display linkboxes..."
|
381 |
+
msgstr ""
|
382 |
+
|
383 |
+
#: modules/linkbox.php:50
|
384 |
+
msgid "Linkbox HTML"
|
385 |
+
msgstr ""
|
386 |
+
|
387 |
+
#: modules/linkbox.php:91 modules/meta.php:141 modules/noindex.php:95
|
388 |
+
msgid "Settings Help"
|
389 |
+
msgstr ""
|
390 |
+
|
391 |
+
#: modules/linkbox.php:96
|
392 |
+
msgid ""
|
393 |
+
"\r\n"
|
394 |
+
"<ul>\r\n"
|
395 |
+
"\t<li><p><strong>What it does:</strong> Linkbox Inserter can add linkboxes "
|
396 |
+
"to your posts/pages.</p></li>\r\n"
|
397 |
+
"\t<li><p><strong>Why it helps:</strong> Linkboxes contain HTML code that "
|
398 |
+
"visitors can use to link to your site. This is a great way to encourage SEO-"
|
399 |
+
"beneficial linking activity.</p></li>\r\n"
|
400 |
+
"\t<li><p><strong>How to use it:</strong> Use the checkboxes to enable the "
|
401 |
+
"Linkbox Inserter in various areas of your site. Customize the HTML if "
|
402 |
+
"desired. Click “Save Changes” when finished.</p></li>\r\n"
|
403 |
+
"</ul>\r\n"
|
404 |
+
msgstr ""
|
405 |
+
|
406 |
+
#: modules/linkbox.php:106
|
407 |
+
msgid ""
|
408 |
+
"\r\n"
|
409 |
+
"<p>Here’s information on the various settings:</p>\r\n"
|
410 |
+
"<ul>\r\n"
|
411 |
+
"\t<li><p><strong>Display linkboxes...</strong></p>\r\n"
|
412 |
+
"\t\t<ul>\r\n"
|
413 |
+
"\t\t\t<li><p><strong>At the end of posts</strong> — Adds the linkbox "
|
414 |
+
"HTML to the end of all posts \r\n"
|
415 |
+
"\t\t\t\t(whether they’re displayed on the blog homepage, in archives, "
|
416 |
+
"or by themselves).</p></li>\r\n"
|
417 |
+
"\t\t\t<li><p><strong>At the end of pages</strong> — Adds the linkbox "
|
418 |
+
"HTML to the end of all Pages.</p></li>\r\n"
|
419 |
+
"\t\t\t<li><p><strong>When called by the su_linkbox hook</strong> — For "
|
420 |
+
"more fine-tuned control over where linkboxes appear, \r\n"
|
421 |
+
"\t\t\t\tenable this option and add <code><?php do_action"
|
422 |
+
"('su_linkbox'); ?></code> to your theme. \r\n"
|
423 |
+
"\t\t\t\tYou can also add an ID parameter to display the linkbox of a "
|
424 |
+
"particular post/page; for example: \r\n"
|
425 |
+
"\t\t\t\t<code><?php do_action('su_linkbox', 123); ?></"
|
426 |
+
"code></p></li>\r\n"
|
427 |
+
"\t\t</ul>\r\n"
|
428 |
+
"\t</li>\r\n"
|
429 |
+
"\t<li><p><strong>HTML</strong> — The HTML that will be outputted to "
|
430 |
+
"display the linkboxes. The HTML field supports these variables:</p>\r\n"
|
431 |
+
"\t\t<ul>\r\n"
|
432 |
+
"\t\t\t<li>{id} — The ID of the current post/page, or the ID passed to "
|
433 |
+
"the action hook call.</li>\r\n"
|
434 |
+
"\t\t\t<li>{url} — The permalink URL of the post/page.</li>\r\n"
|
435 |
+
"\t\t\t<li>{title} — The title of the post/page.</li>\r\n"
|
436 |
+
"\t\t</ul>\r\n"
|
437 |
+
"\t</li>\r\n"
|
438 |
+
"</ul>\r\n"
|
439 |
+
msgstr ""
|
440 |
+
|
441 |
+
#: modules/meta.php:13
|
442 |
+
msgid "Meta Editor"
|
443 |
+
msgstr ""
|
444 |
+
|
445 |
+
#: modules/meta.php:30
|
446 |
+
msgid "Blog Homepage Meta Description"
|
447 |
+
msgstr ""
|
448 |
+
|
449 |
+
#: modules/meta.php:31
|
450 |
+
msgid "Blog Homepage Meta Keywords"
|
451 |
+
msgstr ""
|
452 |
+
|
453 |
+
#: modules/meta.php:34
|
454 |
+
msgid "Use this blog’s tagline as the default homepage description."
|
455 |
+
msgstr ""
|
456 |
+
|
457 |
+
#: modules/meta.php:35
|
458 |
+
msgid "Default Values"
|
459 |
+
msgstr ""
|
460 |
+
|
461 |
+
#: modules/meta.php:37
|
462 |
+
msgid ""
|
463 |
+
"Don’t use this site’s Open Directory description in search results."
|
464 |
+
msgstr ""
|
465 |
+
|
466 |
+
#: modules/meta.php:38
|
467 |
+
msgid ""
|
468 |
+
"Don’t use this site’s Yahoo! Directory description in search "
|
469 |
+
"results."
|
470 |
+
msgstr ""
|
471 |
+
|
472 |
+
#: modules/meta.php:39
|
473 |
+
msgid "Don’t cache or archive this site."
|
474 |
+
msgstr ""
|
475 |
+
|
476 |
+
#: modules/meta.php:40
|
477 |
+
msgid "Spider Instructions"
|
478 |
+
msgstr ""
|
479 |
+
|
480 |
+
#: modules/meta.php:42
|
481 |
+
msgid "Google Webmaster Tools:"
|
482 |
+
msgstr ""
|
483 |
+
|
484 |
+
#: modules/meta.php:43
|
485 |
+
msgid "Yahoo! Site Explorer:"
|
486 |
+
msgstr ""
|
487 |
+
|
488 |
+
#: modules/meta.php:44
|
489 |
+
msgid "Bing Webmaster Center:"
|
490 |
+
msgstr ""
|
491 |
+
|
492 |
+
#: modules/meta.php:45
|
493 |
+
msgid "Verification Codes"
|
494 |
+
msgstr ""
|
495 |
+
|
496 |
+
#: modules/meta.php:46
|
497 |
+
msgid "Custom <head> HTML"
|
498 |
+
msgstr ""
|
499 |
+
|
500 |
+
#: modules/meta.php:55
|
501 |
+
msgid "Description:"
|
502 |
+
msgstr ""
|
503 |
+
|
504 |
+
#: modules/meta.php:58
|
505 |
+
#, php-format
|
506 |
+
msgid "You’ve entered %s characters. Most search engines use up to 160."
|
507 |
+
msgstr ""
|
508 |
+
|
509 |
+
#: modules/meta.php:60
|
510 |
+
msgid "Keywords:<br /><em>(separate with commas)</em>"
|
511 |
+
msgstr ""
|
512 |
+
|
513 |
+
#: modules/meta.php:127
|
514 |
+
msgid "Custom Header Code"
|
515 |
+
msgstr ""
|
516 |
+
|
517 |
+
#: modules/meta.php:146
|
518 |
+
msgid ""
|
519 |
+
"\r\n"
|
520 |
+
"<ul>\r\n"
|
521 |
+
"\t<li><p><strong>What it does:</strong> Meta Editor lets you customize a "
|
522 |
+
"wide variety of settings known as “meta data.”</p></li>\r\n"
|
523 |
+
"\t<li><p><strong>Why it helps:</strong> Using meta data, you can convey "
|
524 |
+
"information to search engines, such as what text you want displayed by your "
|
525 |
+
"site in search results, what your site is about, whether they can cache your "
|
526 |
+
"site, etc.</p></li>\r\n"
|
527 |
+
"\t<li><p><strong>How to use it:</strong> Adjust the settings as desired, and "
|
528 |
+
"then click Save Changes. You can refer to the “Settings Help” "
|
529 |
+
"tab for information on the settings available. You can also customize the "
|
530 |
+
"meta data of an individual post or page by using the textboxes that Meta "
|
531 |
+
"Editor adds to the post/page editors.</p></li>\r\n"
|
532 |
+
"</ul>\r\n"
|
533 |
+
msgstr ""
|
534 |
+
|
535 |
+
#: modules/meta.php:156
|
536 |
+
msgid ""
|
537 |
+
"\r\n"
|
538 |
+
"<p>Here’s information on the various settings:</p>\r\n"
|
539 |
+
"<ul>\r\n"
|
540 |
+
"\t<li><p><strong>Blog Homepage Meta Description</strong> — When your "
|
541 |
+
"blog homepage appears in search results, it’ll have a title and a "
|
542 |
+
"description. \r\n"
|
543 |
+
"\t\tWhen you insert content into the description field below, the Meta "
|
544 |
+
"Editor will add code to your blog homepage (the <code><meta "
|
545 |
+
"name="description" /></code> tag)\r\n"
|
546 |
+
"\t\tthat asks search engines to use what you’ve entered as the "
|
547 |
+
"homepage’s search results description.</p></li>\r\n"
|
548 |
+
"\t<li><p><strong>Blog Homepage Meta Keywords</strong> — Here you can "
|
549 |
+
"enter keywords that describe the overall subject matter of your entire blog. "
|
550 |
+
"Use commas to separate keywords. \r\n"
|
551 |
+
"\t\tYour keywords will be put in the <code><meta name=""
|
552 |
+
"keywords" /></code> tag on your blog homepage.</p></li>\r\n"
|
553 |
+
"\t<li><p><strong>Default Values</strong></p>\r\n"
|
554 |
+
"\t\t<ul>\r\n"
|
555 |
+
"\t\t\t<li><p><strong>Use this blog’s tagline as the default homepage "
|
556 |
+
"description.</strong> — \r\n"
|
557 |
+
"\t\t\t\tIf this box is checked and if the Blog Homepage Meta Description "
|
558 |
+
"field is empty, \r\n"
|
559 |
+
"\t\t\t\tMeta Editor will use your blog’s <a href="
|
560 |
+
msgstr ""
|
561 |
+
|
562 |
+
#: modules/meta.php:191
|
563 |
+
msgid ""
|
564 |
+
"<strong>Description:</strong> — The value of the meta description tag. "
|
565 |
+
"The description will often appear underneath the title in search engine "
|
566 |
+
"results. "
|
567 |
+
msgstr ""
|
568 |
+
|
569 |
+
#: modules/meta.php:193
|
570 |
+
msgid ""
|
571 |
+
"<strong>Keywords:</strong> — The value of the meta keywords tag. The "
|
572 |
+
"keywords list gives search engines a hint as to what this post/page is "
|
573 |
+
"about. "
|
574 |
+
msgstr ""
|
575 |
+
|
576 |
+
#: modules/modules.php:13
|
577 |
+
msgid "Modules"
|
578 |
+
msgstr ""
|
579 |
+
|
580 |
+
#: modules/modules.php:14
|
581 |
+
msgid "Module Manager"
|
582 |
+
msgstr ""
|
583 |
+
|
584 |
+
#: modules/modules.php:35
|
585 |
+
msgid ""
|
586 |
+
"SEO Ultimate’s features are located in groups called “modules."
|
587 |
+
"” By default, most of these modules are listed in the “"
|
588 |
+
"SEO” menu on the left. Whenever you’re working with a module, "
|
589 |
+
"you can view documentation by clicking the “Help” tab in the "
|
590 |
+
"upper-right-hand corner of your administration screen."
|
591 |
+
msgstr ""
|
592 |
+
|
593 |
+
#: modules/modules.php:37
|
594 |
+
msgid ""
|
595 |
+
"The Module Manager lets you disable or hide modules you don’t use. "
|
596 |
+
"You can also silence modules from displaying bubble alerts on the menu."
|
597 |
+
msgstr ""
|
598 |
+
|
599 |
+
#: modules/modules.php:43
|
600 |
+
msgid "Status"
|
601 |
+
msgstr ""
|
602 |
+
|
603 |
+
#: modules/modules.php:44
|
604 |
+
msgid "Module"
|
605 |
+
msgstr ""
|
606 |
+
|
607 |
+
#: modules/modules.php:57
|
608 |
+
msgid "Enabled"
|
609 |
+
msgstr ""
|
610 |
+
|
611 |
+
#: modules/modules.php:58
|
612 |
+
msgid "Silenced"
|
613 |
+
msgstr ""
|
614 |
+
|
615 |
+
#: modules/modules.php:59
|
616 |
+
msgid "Hidden"
|
617 |
+
msgstr ""
|
618 |
+
|
619 |
+
#: modules/modules.php:60
|
620 |
+
msgid "Disabled"
|
621 |
+
msgstr ""
|
622 |
+
|
623 |
+
#: modules/modules.php:109
|
624 |
+
msgid ""
|
625 |
+
"\r\n"
|
626 |
+
"<p>The Module Manager lets you customize the visibility and accessibility of "
|
627 |
+
"each module; here are the options available:</p>\r\n"
|
628 |
+
"<ul>\r\n"
|
629 |
+
"\t<li><strong>Enabled</strong> — The default option. The module will "
|
630 |
+
"be fully enabled and accessible.</li>\r\n"
|
631 |
+
"\t<li><strong>Silenced</strong> — The module will be enabled and "
|
632 |
+
"accessible, but it won’t be allowed to display numeric bubble alerts "
|
633 |
+
"on the menu.</li>\r\n"
|
634 |
+
"\t<li><strong>Hidden</strong> — The module’s functionality will "
|
635 |
+
"be enabled, but the module won’t be visible on the SEO menu. You will "
|
636 |
+
"still be able to access the module’s admin page by clicking on its "
|
637 |
+
"title in the Module Manager table.</li>\r\n"
|
638 |
+
"\t<li><strong>Disabled</strong> — The module will be completely "
|
639 |
+
"disabled and inaccessible.</li>\r\n"
|
640 |
+
"</ul>\r\n"
|
641 |
+
msgstr ""
|
642 |
+
|
643 |
+
#: modules/noindex.php:13
|
644 |
+
msgid "Noindex Manager"
|
645 |
+
msgstr ""
|
646 |
+
|
647 |
+
#: modules/noindex.php:40
|
648 |
+
msgid ""
|
649 |
+
"Note: The current <a href='options-privacy.php'>privacy settings</a> will "
|
650 |
+
"block indexing of the entire site, regardless of which options are set below."
|
651 |
+
msgstr ""
|
652 |
+
|
653 |
+
#: modules/noindex.php:43
|
654 |
+
msgid "Prevent indexing of..."
|
655 |
+
msgstr ""
|
656 |
+
|
657 |
+
#: modules/noindex.php:44
|
658 |
+
msgid "Administration back-end pages"
|
659 |
+
msgstr ""
|
660 |
+
|
661 |
+
#: modules/noindex.php:45
|
662 |
+
msgid "Author archives"
|
663 |
+
msgstr ""
|
664 |
+
|
665 |
+
#: modules/noindex.php:46
|
666 |
+
msgid "Blog search pages"
|
667 |
+
msgstr ""
|
668 |
+
|
669 |
+
#: modules/noindex.php:47
|
670 |
+
msgid "Category archives"
|
671 |
+
msgstr ""
|
672 |
+
|
673 |
+
#: modules/noindex.php:48
|
674 |
+
msgid "Comment feeds"
|
675 |
+
msgstr ""
|
676 |
+
|
677 |
+
#: modules/noindex.php:49
|
678 |
+
msgid "Comment subpages"
|
679 |
+
msgstr ""
|
680 |
+
|
681 |
+
#: modules/noindex.php:50
|
682 |
+
msgid "Date-based archives"
|
683 |
+
msgstr ""
|
684 |
+
|
685 |
+
#: modules/noindex.php:51
|
686 |
+
msgid "Subpages of the homepage"
|
687 |
+
msgstr ""
|
688 |
+
|
689 |
+
#: modules/noindex.php:52
|
690 |
+
msgid "Tag archives"
|
691 |
+
msgstr ""
|
692 |
+
|
693 |
+
#: modules/noindex.php:53
|
694 |
+
msgid "User login/registration pages"
|
695 |
+
msgstr ""
|
696 |
+
|
697 |
+
#: modules/noindex.php:100
|
698 |
+
msgid ""
|
699 |
+
"\r\n"
|
700 |
+
"<ul>\r\n"
|
701 |
+
"\t<li><p><strong>What it does:</strong> Noindex Manager lets you prohibit "
|
702 |
+
"the search engine spiders from indexing certain pages on your blog using the "
|
703 |
+
""meta robots noindex" tag.</p></li>\r\n"
|
704 |
+
"\t<li><p><strong>Why it helps:</strong> This module lets you “"
|
705 |
+
"noindex” pages that contain unimportant content (e.g. the login page), "
|
706 |
+
"or pages that mostly contain duplicate content.</p></li>\r\n"
|
707 |
+
"\t<li><p><strong>How to use it:</strong> Adjust the settings as desired, and "
|
708 |
+
"then click Save Changes. You can refer to the “Settings Help” "
|
709 |
+
"tab for information on the settings available.</p></li>\r\n"
|
710 |
+
"</ul>\r\n"
|
711 |
+
msgstr ""
|
712 |
+
|
713 |
+
#: modules/noindex.php:110
|
714 |
+
msgid ""
|
715 |
+
"\r\n"
|
716 |
+
"<p>Here’s information on the various settings:</p>\r\n"
|
717 |
+
"<ul>\r\n"
|
718 |
+
"\t<li><p><strong>Administration back-end pages</strong> — Tells "
|
719 |
+
"spiders not to index the administration area (the part you’re in now),"
|
720 |
+
"\r\n"
|
721 |
+
"\t\tin the unlikely event a spider somehow gains access to the "
|
722 |
+
"administration. Recommended.</p></li>\r\n"
|
723 |
+
"\t<li><p><strong>Author archives</strong> — Tells spiders not to index "
|
724 |
+
"author archives. Useful if your blog only has one author.</p></li>\r\n"
|
725 |
+
"\t<li><p><strong>Blog search pages</strong> — Tells spiders not to "
|
726 |
+
"index the result pages of WordPress’s blog search function. "
|
727 |
+
"Recommended.</p></li>\r\n"
|
728 |
+
"\t<li><p><strong>Category archives</strong> — Tells spiders not to "
|
729 |
+
"index category archives. Recommended only if you don’t use categories."
|
730 |
+
"</p></li>\r\n"
|
731 |
+
"\t<li><p><strong>Comment feeds</strong> — Tells spiders not to index "
|
732 |
+
"the RSS feeds that exist for every post’s comments.\r\n"
|
733 |
+
"\t\t(These comment feeds are totally separate from your normal blog feeds.) "
|
734 |
+
"Recommended.</p></li>\r\n"
|
735 |
+
"\t<li><p><strong>Comment subpages</strong> — Tells spiders not to "
|
736 |
+
"index comment subpages (page 2, page 3, etc.).</p></li>\r\n"
|
737 |
+
"\t<li><p><strong>Date-based archives</strong> — Tells spiders not to "
|
738 |
+
"index day/month/year archives.\r\n"
|
739 |
+
"\t\tRecommended, since these pages have little keyword value.</p></li>\r\n"
|
740 |
+
"\t<li><p><strong>Subpages of the homepage</strong> — Tells spiders not "
|
741 |
+
"to index the homepage's subpages (page 2, page 3, etc).\r\n"
|
742 |
+
"\t\tRecommended.</p></li>\r\n"
|
743 |
+
"\t<li><p><strong>Tag archives</strong> — Tells spiders not to index "
|
744 |
+
"tag archives. Recommended only if you don’t use tags.</p></li>\r\n"
|
745 |
+
"\t<li><p><strong>User login/registration pages</strong> — Tells "
|
746 |
+
"spiders not to index WordPress’s user login and registration pages. "
|
747 |
+
"Recommended.</p></li>\r\n"
|
748 |
+
"</ul>\r\n"
|
749 |
+
msgstr ""
|
750 |
+
|
751 |
+
#: modules/sds-blog.php:13
|
752 |
+
msgid "SEO Design Solutions Whitepapers"
|
753 |
+
msgstr ""
|
754 |
+
|
755 |
+
#: modules/sds-blog.php:14
|
756 |
+
msgid "Whitepapers"
|
757 |
+
msgstr ""
|
758 |
+
|
759 |
+
#: modules/sds-blog.php:37
|
760 |
+
msgid ""
|
761 |
+
"Search engine optimization articles from the company behind the SEO Ultimate "
|
762 |
+
"plugin."
|
763 |
+
msgstr ""
|
764 |
+
|
765 |
+
#: modules/sds-blog.php:88
|
766 |
+
msgid ""
|
767 |
+
"The articles below are loaded from the SEO Design Solutions website. Click "
|
768 |
+
"on an article’s title to read it."
|
769 |
+
msgstr ""
|
770 |
+
|
771 |
+
#: modules/settings.php:15
|
772 |
+
msgid "SEO Ultimate Plugin Settings"
|
773 |
+
msgstr ""
|
774 |
+
|
775 |
+
#: modules/settings.php:65
|
776 |
+
msgid "Settings successfully imported."
|
777 |
+
msgstr ""
|
778 |
+
|
779 |
+
#: modules/settings.php:67
|
780 |
+
msgid ""
|
781 |
+
"The uploaded file is not in the proper format. Settings could not be "
|
782 |
+
"imported."
|
783 |
+
msgstr ""
|
784 |
+
|
785 |
+
#: modules/settings.php:69
|
786 |
+
msgid "The settings file could not be uploaded successfully."
|
787 |
+
msgstr ""
|
788 |
+
|
789 |
+
#: modules/settings.php:72
|
790 |
+
msgid ""
|
791 |
+
"Settings could not be imported because no settings file was selected. Please "
|
792 |
+
"click the “Browse” button and select a file to import."
|
793 |
+
msgstr ""
|
794 |
+
|
795 |
+
#: modules/settings.php:80
|
796 |
+
msgid "All settings have been erased and defaults have been restored."
|
797 |
+
msgstr ""
|
798 |
+
|
799 |
+
#: modules/settings.php:94
|
800 |
+
msgid "Plugin Settings"
|
801 |
+
msgstr ""
|
802 |
+
|
803 |
+
#: modules/settings.php:96
|
804 |
+
msgid "Enable attribution link"
|
805 |
+
msgstr ""
|
806 |
+
|
807 |
+
#: modules/settings.php:97
|
808 |
+
msgid "Enable attribution link CSS styling"
|
809 |
+
msgstr ""
|
810 |
+
|
811 |
+
#: modules/settings.php:98
|
812 |
+
msgid "Notify me about unnecessary active plugins"
|
813 |
+
msgstr ""
|
814 |
+
|
815 |
+
#: modules/settings.php:100
|
816 |
+
msgid "Insert comments around HTML code insertions"
|
817 |
+
msgstr ""
|
818 |
+
|
819 |
+
#: modules/settings.php:105
|
820 |
+
msgid "Manage Settings Data"
|
821 |
+
msgstr ""
|
822 |
+
|
823 |
+
#: modules/settings.php:109
|
824 |
+
msgid ""
|
825 |
+
"This section allows you to export, import, and reset the settings of the "
|
826 |
+
"plugin and all its modules."
|
827 |
+
msgstr ""
|
828 |
+
|
829 |
+
#: modules/settings.php:111
|
830 |
+
msgid ""
|
831 |
+
"A settings file includes the data of every checkbox and textbox of every "
|
832 |
+
"installed module, as well as the “Plugin Settings” section "
|
833 |
+
"above. "
|
834 |
+
msgstr ""
|
835 |
+
|
836 |
+
#: modules/settings.php:120
|
837 |
+
msgid "Export:"
|
838 |
+
msgstr ""
|
839 |
+
|
840 |
+
#: modules/settings.php:123
|
841 |
+
msgid "Download Settings File"
|
842 |
+
msgstr ""
|
843 |
+
|
844 |
+
#: modules/settings.php:128
|
845 |
+
msgid "Import:"
|
846 |
+
msgstr ""
|
847 |
+
|
848 |
+
#: modules/settings.php:133
|
849 |
+
msgid ""
|
850 |
+
"Are you sure you want to import this settings file? This will overwrite your "
|
851 |
+
"current settings and cannot be undone."
|
852 |
+
msgstr ""
|
853 |
+
|
854 |
+
#: modules/settings.php:134
|
855 |
+
msgid "Import This Settings File"
|
856 |
+
msgstr ""
|
857 |
+
|
858 |
+
#: modules/settings.php:141
|
859 |
+
msgid "Reset:"
|
860 |
+
msgstr ""
|
861 |
+
|
862 |
+
#: modules/settings.php:144
|
863 |
+
msgid ""
|
864 |
+
"Are you sure you want to erase all module settings? This cannot be undone."
|
865 |
+
msgstr ""
|
866 |
+
|
867 |
+
#: modules/settings.php:145
|
868 |
+
msgid "Restore Default Settings"
|
869 |
+
msgstr ""
|
870 |
+
|
871 |
+
#: modules/settings.php:169
|
872 |
+
msgid ""
|
873 |
+
"\r\n"
|
874 |
+
"<p>The Settings module lets you manage settings related to the SEO Ultimate "
|
875 |
+
"plugin as a whole.</p>\r\n"
|
876 |
+
"<p>Here’s information on each of the settings:</p>\r\n"
|
877 |
+
"<ul>\r\n"
|
878 |
+
"\t<li><p><strong>Enable attribution link</strong> — If enabled, the "
|
879 |
+
"plugin will display an attribution link on your site.\r\n"
|
880 |
+
"\t\tWe ask that you please leave this enabled.</p></li>\r\n"
|
881 |
+
"\t<li><p><strong>Insert comments around HTML code insertions</strong> "
|
882 |
+
"— If enabled, SEO Ultimate will use HTML comments to identify all code "
|
883 |
+
"it inserts into your <head> tag.\r\n"
|
884 |
+
"\t\tThis is useful if you’re trying to figure out whether or not SEO "
|
885 |
+
"Ultimate is inserting a certain piece of header code.</p></li>\r\n"
|
886 |
+
"</ul>\r\n"
|
887 |
+
msgstr ""
|
888 |
+
|
889 |
+
#: modules/slugs.php:13
|
890 |
+
msgid "Slug Optimizer"
|
891 |
+
msgstr ""
|
892 |
+
|
893 |
+
#: modules/slugs.php:17
|
894 |
+
msgid "Words to Remove"
|
895 |
+
msgstr ""
|
896 |
+
|
897 |
+
#: modules/slugs.php:52
|
898 |
+
msgid ""
|
899 |
+
"\r\n"
|
900 |
+
"<ul>\r\n"
|
901 |
+
"\t<li><p><strong>What it does:</strong> Slug Optimizer removes common words "
|
902 |
+
"from the portion of a post’s or Page’s URL that is based on its "
|
903 |
+
"title. (This portion is also known as the “slug.”)</p></li>\r\n"
|
904 |
+
"\t<li><p><strong>Why it helps:</strong> Slug Optimizer increases keyword "
|
905 |
+
"potency because there are fewer words in your URLs competing for relevance.</"
|
906 |
+
"p></li>\r\n"
|
907 |
+
"\t<li><p><strong>How to use it:</strong> Slug Optimizer goes to work when "
|
908 |
+
"you’re editing a post or Page, with no action required on your part."
|
909 |
+
"\r\n"
|
910 |
+
"\t\tIf needed, you can use the textbox below to customize which words are "
|
911 |
+
"removed.</p></li>\r\n"
|
912 |
+
"</ul>\r\n"
|
913 |
+
msgstr ""
|
914 |
+
|
915 |
+
#: modules/slugs.php:63
|
916 |
+
msgid ""
|
917 |
+
"\r\n"
|
918 |
+
"<h6>What's a slug?</h6>\r\n"
|
919 |
+
"<p>The slug of a post or page is the portion of its URL that is based on its "
|
920 |
+
"title.</p>\r\n"
|
921 |
+
"<p>When you edit a post or Page in WordPress, the slug is the yellow-"
|
922 |
+
"highlighted portion of the Permalink beneath the Title textbox.</p>\r\n"
|
923 |
+
"\r\n"
|
924 |
+
"<h6>Does the Slug Optimizer change my existing URLs?</h6>\r\n"
|
925 |
+
"<p>No. Slug Optimizer will not relocate your content by changing existing "
|
926 |
+
"URLs. Slug Optimizer only takes effect on new posts and pages.</p>\r\n"
|
927 |
+
"\r\n"
|
928 |
+
"<h6>How do I see Slug Optimizer in action?</h6>\r\n"
|
929 |
+
"<ol>\r\n"
|
930 |
+
"\t<li>Create a new post/Page in WordPress.</li>\r\n"
|
931 |
+
"\t<li>Type in a title containing some common words.</li>\r\n"
|
932 |
+
"\t<li>Click outside the Title box. WordPress will insert a URL labeled "
|
933 |
+
"“Permalink” below the Title textbox. The Slug Optimizer will "
|
934 |
+
"have removed the common words from the URL.</li>\r\n"
|
935 |
+
"</ol>\r\n"
|
936 |
+
"\r\n"
|
937 |
+
"<h6>Why didn't the Slug Optimizer remove common words from my slug?</h6>\r\n"
|
938 |
+
"<p>It's possible that every word in your post title is in the list of words "
|
939 |
+
"to remove. In this case, Slug Optimizer doesn't remove the words, because if "
|
940 |
+
"it did, you'd end up with a blank slug.</p>\r\n"
|
941 |
+
"\r\n"
|
942 |
+
"<h6>What if I want to include a common word in my slug?</h6>\r\n"
|
943 |
+
"<p>When editing the post or page in question, just click the Edit button "
|
944 |
+
"next to the permalink and change the slug as desired.</p>\r\n"
|
945 |
+
"\r\n"
|
946 |
+
"<h6>How do I revert back to the optimized slug after making changes?</h6>\r\n"
|
947 |
+
"<p>When editing the post or page in question, just click the Edit button "
|
948 |
+
"next to the permalink; a Save button will appear in its place. Next erase "
|
949 |
+
"the contents of the textbox, and then click the aforementioned Save button.</"
|
950 |
+
"p>\r\n"
|
951 |
+
msgstr ""
|
952 |
+
|
953 |
+
#: modules/titles.php:13
|
954 |
+
msgid "Title Rewriter"
|
955 |
+
msgstr ""
|
956 |
+
|
957 |
+
#: modules/titles.php:25
|
958 |
+
msgid "{blog}"
|
959 |
+
msgstr ""
|
960 |
+
|
961 |
+
#: modules/titles.php:26
|
962 |
+
msgid "{post} | {blog}"
|
963 |
+
msgstr ""
|
964 |
+
|
965 |
+
#: modules/titles.php:27
|
966 |
+
msgid "{page} | {blog}"
|
967 |
+
msgstr ""
|
968 |
+
|
969 |
+
#: modules/titles.php:28
|
970 |
+
msgid "{category} | {blog}"
|
971 |
+
msgstr ""
|
972 |
+
|
973 |
+
#: modules/titles.php:29
|
974 |
+
msgid "{tag} | {blog}"
|
975 |
+
msgstr ""
|
976 |
+
|
977 |
+
#: modules/titles.php:30
|
978 |
+
msgid "Archives for {month} {day}, {year} | {blog}"
|
979 |
+
msgstr ""
|
980 |
+
|
981 |
+
#: modules/titles.php:31
|
982 |
+
msgid "Archives for {month} {year} | {blog}"
|
983 |
+
msgstr ""
|
984 |
+
|
985 |
+
#: modules/titles.php:32
|
986 |
+
msgid "Archives for {year} | {blog}"
|
987 |
+
msgstr ""
|
988 |
+
|
989 |
+
#: modules/titles.php:33
|
990 |
+
msgid "Posts by {author} | {blog}"
|
991 |
+
msgstr ""
|
992 |
+
|
993 |
+
#: modules/titles.php:34
|
994 |
+
msgid "Search Results for {query} | {blog}"
|
995 |
+
msgstr ""
|
996 |
+
|
997 |
+
#: modules/titles.php:35
|
998 |
+
msgid "404 Not Found | {blog}"
|
999 |
+
msgstr ""
|
1000 |
+
|
1001 |
+
#: modules/titles.php:36
|
1002 |
+
msgid "{title} - Page {num}"
|
1003 |
+
msgstr ""
|
1004 |
+
|
1005 |
+
#: modules/titles.php:42
|
1006 |
+
msgid "Blog Homepage Title"
|
1007 |
+
msgstr ""
|
1008 |
+
|
1009 |
+
#: modules/titles.php:43
|
1010 |
+
msgid "Post Title Format"
|
1011 |
+
msgstr ""
|
1012 |
+
|
1013 |
+
#: modules/titles.php:44
|
1014 |
+
msgid "Page Title Format"
|
1015 |
+
msgstr ""
|
1016 |
+
|
1017 |
+
#: modules/titles.php:45
|
1018 |
+
msgid "Category Title Format"
|
1019 |
+
msgstr ""
|
1020 |
+
|
1021 |
+
#: modules/titles.php:46
|
1022 |
+
msgid "Tag Title Format"
|
1023 |
+
msgstr ""
|
1024 |
+
|
1025 |
+
#: modules/titles.php:47
|
1026 |
+
msgid "Day Archive Title Format"
|
1027 |
+
msgstr ""
|
1028 |
+
|
1029 |
+
#: modules/titles.php:48
|
1030 |
+
msgid "Month Archive Title Format"
|
1031 |
+
msgstr ""
|
1032 |
+
|
1033 |
+
#: modules/titles.php:49
|
1034 |
+
msgid "Year Archive Title Format"
|
1035 |
+
msgstr ""
|
1036 |
+
|
1037 |
+
#: modules/titles.php:50
|
1038 |
+
msgid "Author Archive Title Format"
|
1039 |
+
msgstr ""
|
1040 |
+
|
1041 |
+
#: modules/titles.php:51
|
1042 |
+
msgid "Search Title Format"
|
1043 |
+
msgstr ""
|
1044 |
+
|
1045 |
+
#: modules/titles.php:52
|
1046 |
+
msgid "404 Title Format"
|
1047 |
+
msgstr ""
|
1048 |
+
|
1049 |
+
#: modules/titles.php:53
|
1050 |
+
msgid "Pagination Title Format"
|
1051 |
+
msgstr ""
|
1052 |
+
|
1053 |
+
#: modules/titles.php:64
|
1054 |
+
msgid "Title Tag:"
|
1055 |
+
msgstr ""
|
1056 |
+
|
1057 |
+
#: modules/titles.php:206
|
1058 |
+
msgid "Settings & Variables"
|
1059 |
+
msgstr ""
|
1060 |
+
|
1061 |
+
#: modules/titles.php:211
|
1062 |
+
msgid ""
|
1063 |
+
"\r\n"
|
1064 |
+
"<ul>\r\n"
|
1065 |
+
"\t<li><p><strong>What it does:</strong> Title Rewriter helps you customize "
|
1066 |
+
"the contents of your website’s <code><title></code> tags.\r\n"
|
1067 |
+
"\t\tThe tag contents are displayed in web browser title bars and in search "
|
1068 |
+
"engine result pages.</p></li>\r\n"
|
1069 |
+
"\t<li><p><strong>Why it helps:</strong> Proper title rewriting ensures that "
|
1070 |
+
"the keywords in your post/Page titles have greater prominence for search "
|
1071 |
+
"engine spiders and users.\r\n"
|
1072 |
+
"\t\tThis is an important foundation for WordPress SEO.</p></li>\r\n"
|
1073 |
+
"\t<li><p><strong>How to use it:</strong> Title Rewriter enables recommended "
|
1074 |
+
"settings automatically, so you shouldn’t need to change anything.\r\n"
|
1075 |
+
"\t\tIf you do wish to edit the rewriting formats, you can do so using the "
|
1076 |
+
"textboxes below (the “Settings Help” tab includes additional "
|
1077 |
+
"information on this).\r\n"
|
1078 |
+
"\t\tYou also have the option of overriding the <code><title></code> "
|
1079 |
+
"tag of an individual post or page by using the “Title Tag” "
|
1080 |
+
"textbox that Title Rewriter adds to the post/page editors.</p></li>\r\n"
|
1081 |
+
"</ul>\r\n"
|
1082 |
+
msgstr ""
|
1083 |
+
|
1084 |
+
#: modules/titles.php:225
|
1085 |
+
msgid ""
|
1086 |
+
"\r\n"
|
1087 |
+
"<p>Various variables, surrounded in {curly brackets}, are provided for use "
|
1088 |
+
"in the title formats.\r\n"
|
1089 |
+
"All settings support the {blog} variable, which is replaced with the name of "
|
1090 |
+
"the blog.</p>\r\n"
|
1091 |
+
"<p>Here’s information on each of the settings and its supported "
|
1092 |
+
"variables:</p>\r\n"
|
1093 |
+
"<ul>\r\n"
|
1094 |
+
"\t<li><p><strong>Blog Homepage Title</strong> — Displays on the main "
|
1095 |
+
"blog posts page.</p></li>\r\n"
|
1096 |
+
"\t<li><p><strong>Post Title Format</strong> — Displays on single-post "
|
1097 |
+
"pages. The {post} variable is replaced with the post’s title.</p></li>"
|
1098 |
+
"\r\n"
|
1099 |
+
"\t<li><p><strong>Page Title Format</strong> — Displays on WordPress "
|
1100 |
+
"Pages. The {page} variable is replaced with the Page’s title.</p></li>"
|
1101 |
+
"\r\n"
|
1102 |
+
"\t<li><p><strong>Category Title Format</strong> — Displays on category "
|
1103 |
+
"archives. The {category} variable is replaced with the name of the category."
|
1104 |
+
"</p></li>\r\n"
|
1105 |
+
"\t<li><p><strong>Tag Title Format</strong> — Displays on tag archives. "
|
1106 |
+
"The {tag} variable is replaced with the name of the tag.</p></li>\r\n"
|
1107 |
+
"\t<li><p><strong>Day Archive Title Format</strong> — Displays on day "
|
1108 |
+
"archives. Supports these variables:</p>\r\n"
|
1109 |
+
"\t\t<ul>\r\n"
|
1110 |
+
"\t\t\t<li>{day} — The day number, with ordinal suffix, e.g. 23rd</li>"
|
1111 |
+
"\r\n"
|
1112 |
+
"\t\t\t<li>{daynum} — The two-digit day number, e.g. 23</li>\r\n"
|
1113 |
+
"\t\t\t<li>{month} — The name of the month, e.g. April</li>\r\n"
|
1114 |
+
"\t\t\t<li>{monthnum} — The two-digit number of the month, e.g. 04</li>"
|
1115 |
+
"\r\n"
|
1116 |
+
"\t\t\t<li>{year} — The year, e.g. 2009</li>\r\n"
|
1117 |
+
"\t\t</ul></li>\r\n"
|
1118 |
+
"\t<li><p><strong>Month Archive Title Format</strong> — Displays on "
|
1119 |
+
"month archives. Supports {month}, {monthnum}, and {year}.</p></li>\r\n"
|
1120 |
+
"\t<li><p><strong>Year Archive Title Format</strong> — Displays on year "
|
1121 |
+
"archives. Supports the {year} variable.</p></li>\r\n"
|
1122 |
+
"\t<li><p><strong>Author Archive Title Format</strong> — Displays on "
|
1123 |
+
"author archives. The {author} variable is replaced with the author’s "
|
1124 |
+
"Display Name.</p></li>\r\n"
|
1125 |
+
"\t<li><p><strong>Search Title Format</strong> — Displays on the result "
|
1126 |
+
"pages for WordPress’s blog search function.\r\n"
|
1127 |
+
"\t\tThe {query} variable is replaced with the search query as-is. The "
|
1128 |
+
"{ucwords} variable returns the search query with the first letter of each "
|
1129 |
+
"word capitalized.</p></li>\r\n"
|
1130 |
+
"\t<li><p><strong>404 Title Format</strong> — Displays whenever a URL "
|
1131 |
+
"doesn’t go anywhere.</p></li>\r\n"
|
1132 |
+
"\t<li><p><strong>Pagination Title Format</strong> — Displays whenever "
|
1133 |
+
"the visitor is on a subpage (page 2, page 3, etc). Supports these variables:"
|
1134 |
+
"</p>\r\n"
|
1135 |
+
"\t\t<ul>\r\n"
|
1136 |
+
"\t\t\t<li>{title} — The title that would normally be displayed on page "
|
1137 |
+
"1.</li>\r\n"
|
1138 |
+
"\t\t\t<li>{num} — The current page number (2, 3, etc).</li>\r\n"
|
1139 |
+
"\t\t\t<li>{max} — The total number of subpages available. Would "
|
1140 |
+
"usually be used like this: Page {num} of {max}</li>\r\n"
|
1141 |
+
"\t\t</ul></li>\r\n"
|
1142 |
+
"</ul>\r\n"
|
1143 |
+
msgstr ""
|
1144 |
+
|
1145 |
+
#: modules/titles.php:260
|
1146 |
+
msgid ""
|
1147 |
+
"<strong>Title Tag</strong> — The exact contents of the <title> "
|
1148 |
+
"tag. The title appears in visitors' title bars and in search engine result "
|
1149 |
+
"titles. "
|
1150 |
+
msgstr ""
|
1151 |
+
|
1152 |
+
#. Plugin URI of an extension
|
1153 |
+
msgid "http://www.seodesignsolutions.com/wordpress-seo/"
|
1154 |
+
msgstr ""
|
1155 |
+
|
1156 |
+
#. Description of an extension
|
1157 |
+
msgid ""
|
1158 |
+
"This all-in-one SEO plugin can rewrite title tags, set meta data, add "
|
1159 |
+
"noindex, insert canonical tags, log 404 errors, edit your robots.txt, and "
|
1160 |
+
"more."
|
1161 |
+
msgstr ""
|
1162 |
+
|
1163 |
+
#. Author of an extension
|
1164 |
+
msgid "SEO Design Solutions"
|
1165 |
+
msgstr ""
|
1166 |
+
|
1167 |
+
#. Author URI of an extension
|
1168 |
+
msgid "http://www.seodesignsolutions.com/"
|
1169 |
+
msgstr ""
|
tabs.js
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
jQuery(function()
|
2 |
+
{
|
3 |
+
su_init_tabs();
|
4 |
+
});
|
5 |
+
|
6 |
+
function su_init_tabs()
|
7 |
+
{
|
8 |
+
/* if this is not the breadcrumb 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)
|
14 |
+
{
|
15 |
+
id = jQuery(this).attr('id');
|
16 |
+
caption = jQuery(this).find('h3').text();
|
17 |
+
jQuery('#su-tabset > ul').append('<li><a href="#'+id+'"><span>'+caption+"<\/span><\/a><\/li>");
|
18 |
+
jQuery(this).find('h3').hide();
|
19 |
+
});
|
20 |
+
|
21 |
+
/* init the tabs plugin */
|
22 |
+
var jquiver = undefined == jQuery.ui ? [0,0,0] : undefined == jQuery.ui.version ? [0,1,0] : jQuery.ui.version.split('.');
|
23 |
+
switch(true) {
|
24 |
+
// tabs plugin has been fixed to work on the parent element again.
|
25 |
+
case jquiver[0] >= 1 && jquiver[1] >= 7:
|
26 |
+
jQuery("#su-tabset").tabs();
|
27 |
+
break;
|
28 |
+
// tabs plugin has bug and needs to work on ul directly.
|
29 |
+
default:
|
30 |
+
jQuery("#su-tabset > ul").tabs();
|
31 |
+
}
|
32 |
+
|
33 |
+
/* handler for openeing the last tab after submit (compability version) */
|
34 |
+
jQuery('#su-tabset ul a').click(function(i){
|
35 |
+
var form = jQuery('#bcn_admin_options');
|
36 |
+
var action = form.attr("action").split('#', 1) + jQuery(this).attr('href');
|
37 |
+
// an older bug pops up with some jQuery version(s), which makes it
|
38 |
+
// necessary to set the form's action attribute by standard javascript
|
39 |
+
// node access:
|
40 |
+
form.get(0).setAttribute("action", action);
|
41 |
+
});
|
42 |
+
}
|