Version Description
Download this release
Release Info
Developer | SEO Design Solutions |
Plugin | SEO Ultimate |
Version | 3.7 |
Comparing to | |
See all releases |
Code changes from version 3.6 to 3.7
- includes/jlfunctions/arr.php +14 -0
- includes/jlfunctions/html.php +8 -3
- includes/jlfunctions/str.php +8 -0
- includes/jlwp/functions.php +37 -6
- modules/class.su-module.php +50 -32
- modules/modules.css +1 -1
- plugin/class.seo-ultimate.php +16 -9
- plugin/global.css +10 -0
- readme.txt +7 -3
- seo-ultimate.php +8 -8
includes/jlfunctions/arr.php
CHANGED
@@ -79,6 +79,20 @@ class suarr {
|
|
79 |
return false;
|
80 |
}
|
81 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
function vklrsort(&$arr, $valuekey) {
|
83 |
$valuekey = sustr::preg_filter('A-Za-z0-9', $valuekey);
|
84 |
uksort($arr, create_function('$a,$b', 'return strlen($b["'.$valuekey.'"]) - strlen($a["'.$valuekey.'"]);'));
|
79 |
return false;
|
80 |
}
|
81 |
|
82 |
+
function recursive_get($array, $key) {
|
83 |
+
if (is_array($array)) {
|
84 |
+
if (isset($array[$key]))
|
85 |
+
return $array[$key];
|
86 |
+
|
87 |
+
foreach ($array as $subarray) {
|
88 |
+
if ($value = suarr::recursive_get($subarray, $key))
|
89 |
+
return $value;
|
90 |
+
}
|
91 |
+
}
|
92 |
+
|
93 |
+
return false;
|
94 |
+
}
|
95 |
+
|
96 |
function vklrsort(&$arr, $valuekey) {
|
97 |
$valuekey = sustr::preg_filter('A-Za-z0-9', $valuekey);
|
98 |
uksort($arr, create_function('$a,$b', 'return strlen($b["'.$valuekey.'"]) - strlen($a["'.$valuekey.'"]);'));
|
includes/jlfunctions/html.php
CHANGED
@@ -12,9 +12,14 @@ class suhtml {
|
|
12 |
function option_tags($options, $current = true) {
|
13 |
$html = '';
|
14 |
foreach ($options as $value => $label) {
|
15 |
-
$
|
16 |
-
|
17 |
-
|
|
|
|
|
|
|
|
|
|
|
18 |
}
|
19 |
return $html;
|
20 |
}
|
12 |
function option_tags($options, $current = true) {
|
13 |
$html = '';
|
14 |
foreach ($options as $value => $label) {
|
15 |
+
if (is_array($label)) {
|
16 |
+
$html .= "<optgroup label='$value'>\n".suhtml::option_tags($label, $current)."</optgroup>\n";
|
17 |
+
} else {
|
18 |
+
//if (is_numeric($value)) $value = '';
|
19 |
+
$html .= "\t<option value='$value'";
|
20 |
+
if ($value == $current) $html .= " selected='selected'";
|
21 |
+
$html .= ">$label</option>\n";
|
22 |
+
}
|
23 |
}
|
24 |
return $html;
|
25 |
}
|
includes/jlfunctions/str.php
CHANGED
@@ -179,6 +179,14 @@ class sustr {
|
|
179 |
|
180 |
return preg_replace($search_regex, $replace, $subject, $limit, $count);
|
181 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
182 |
}
|
183 |
|
184 |
?>
|
179 |
|
180 |
return preg_replace($search_regex, $replace, $subject, $limit, $count);
|
181 |
}
|
182 |
+
|
183 |
+
function upto($str, $sub) {
|
184 |
+
$end = strpos($str, $sub);
|
185 |
+
if ($end === false)
|
186 |
+
return $str;
|
187 |
+
else
|
188 |
+
return substr($str, 0, $end);
|
189 |
+
}
|
190 |
}
|
191 |
|
192 |
?>
|
includes/jlwp/functions.php
CHANGED
@@ -27,14 +27,45 @@ class suwp {
|
|
27 |
}
|
28 |
|
29 |
function get_post_type_names() {
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
}
|
36 |
|
37 |
-
return
|
38 |
}
|
39 |
|
40 |
function get_taxonomies() {
|
27 |
}
|
28 |
|
29 |
function get_post_type_names() {
|
30 |
+
//If WP 2.9+ && WP 3.0+...
|
31 |
+
if (function_exists('get_post_types') && $types = get_post_types(array('public' => true), 'names'))
|
32 |
+
return $types;
|
33 |
+
|
34 |
+
//WP 2.9 or less
|
35 |
+
return array('post', 'page', 'attachment');
|
36 |
+
}
|
37 |
+
|
38 |
+
function get_post_type_objects() {
|
39 |
+
$types = array();
|
40 |
+
|
41 |
+
//Custom post type support - requires WordPress 3.0 or above (won't work with 2.9 custom post types)
|
42 |
+
if (function_exists('get_post_types'))
|
43 |
+
$types = get_post_types(array('public' => true), 'objects');
|
44 |
+
|
45 |
+
/*
|
46 |
+
if (function_exists('get_post_types'))
|
47 |
+
$types = suarr::flatten_values(get_post_types(array('public' => true), 'objects'), array('labels', 'name'));
|
48 |
+
*/
|
49 |
+
|
50 |
+
//Legacy support for WordPress 2.9 and below
|
51 |
+
if (!count($types)) {
|
52 |
+
|
53 |
+
$_types = array(
|
54 |
+
array('post', __('Posts'), __('Post'))
|
55 |
+
, array('page', __('Pages'), __('Page'))
|
56 |
+
, array('attachment', __('Attachments'), __('Attachment'))
|
57 |
+
);
|
58 |
+
$types = array();
|
59 |
+
foreach ($_types as $_type) {
|
60 |
+
$type = new stdClass();
|
61 |
+
$type->name = $_type[0];
|
62 |
+
$type->labels->name = $_type[1];
|
63 |
+
$type->labels->singular_name = $_type[2];
|
64 |
+
$types[] = $type;
|
65 |
+
}
|
66 |
}
|
67 |
|
68 |
+
return $types;
|
69 |
}
|
70 |
|
71 |
function get_taxonomies() {
|
modules/class.su-module.php
CHANGED
@@ -847,7 +847,7 @@ class SU_Module {
|
|
847 |
* @param string $title The text to output.
|
848 |
*/
|
849 |
function admin_form_subheader($title) {
|
850 |
-
echo "<th><strong>$title</strong></th>\n";
|
851 |
}
|
852 |
|
853 |
/**
|
@@ -1017,34 +1017,7 @@ class SU_Module {
|
|
1017 |
*/
|
1018 |
function get_postmeta_edit_tabs($fields) {
|
1019 |
|
1020 |
-
$types =
|
1021 |
-
|
1022 |
-
//Custom post type support - requires WordPress 3.0 or above (won't work with 2.9 custom post types)
|
1023 |
-
if (function_exists('get_post_types'))
|
1024 |
-
$types = get_post_types(array('public' => true), 'objects');
|
1025 |
-
|
1026 |
-
/*
|
1027 |
-
if (function_exists('get_post_types'))
|
1028 |
-
$types = suarr::flatten_values(get_post_types(array('public' => true), 'objects'), array('labels', 'name'));
|
1029 |
-
*/
|
1030 |
-
|
1031 |
-
//Legacy support for WordPress 2.9 and below
|
1032 |
-
if (!count($types)) {
|
1033 |
-
|
1034 |
-
$_types = array(
|
1035 |
-
array('post', __('Posts'), __('Post'))
|
1036 |
-
, array('page', __('Pages'), __('Page'))
|
1037 |
-
, array('attachment', __('Attachments'), __('Attachment'))
|
1038 |
-
);
|
1039 |
-
$types = array();
|
1040 |
-
foreach ($_types as $_type) {
|
1041 |
-
$type = new stdClass();
|
1042 |
-
$type->name = $_type[0];
|
1043 |
-
$type->labels->name = $_type[1];
|
1044 |
-
$type->labels->singular_name = $_type[2];
|
1045 |
-
$types[] = $type;
|
1046 |
-
}
|
1047 |
-
}
|
1048 |
|
1049 |
//Turn the types array into a tabs array
|
1050 |
$tabs = array();
|
@@ -1236,6 +1209,7 @@ class SU_Module {
|
|
1236 |
$field['type'] //Type
|
1237 |
, $inputid
|
1238 |
, $value
|
|
|
1239 |
);
|
1240 |
}
|
1241 |
|
@@ -1262,7 +1236,7 @@ class SU_Module {
|
|
1262 |
* @param string $inputid The name/ID of the input element
|
1263 |
* @param string $value The current value of the field
|
1264 |
*/
|
1265 |
-
function get_input_element($type, $inputid, $value) {
|
1266 |
//Get HTML element
|
1267 |
switch ($type) {
|
1268 |
case 'textbox':
|
@@ -1277,6 +1251,10 @@ class SU_Module {
|
|
1277 |
$checked = $value ? " checked='checked'" : '';
|
1278 |
return "<input name='$inputid' id='$inputid' type='checkbox' value='1'$checked />";
|
1279 |
break;
|
|
|
|
|
|
|
|
|
1280 |
}
|
1281 |
|
1282 |
return '';
|
@@ -1707,6 +1685,46 @@ class SU_Module {
|
|
1707 |
$this->radiobuttons($name, array($value => $label));
|
1708 |
}
|
1709 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1710 |
/**
|
1711 |
* @since 3.0
|
1712 |
*/
|
@@ -2076,7 +2094,7 @@ class SU_Module {
|
|
2076 |
register_setting('seo-ultimate', $id);
|
2077 |
$value = su_esc_editable_html($this->get_postmeta($id));
|
2078 |
$id = "_su_".su_esc_attr($id);
|
2079 |
-
|
2080 |
|
2081 |
$html .= "<tr class='textbox' valign='middle'>\n<th scope='row'><label for='$id'>$title</label></th>\n"
|
2082 |
."<td><input name='$id' id='$id' type='text' value='$value' class='regular-text' tabindex='2' /></td>\n</tr>\n";
|
@@ -2167,7 +2185,7 @@ class SU_Module {
|
|
2167 |
$name = "_su_".su_esc_attr($name);
|
2168 |
|
2169 |
$html = "<tr class='dropdown' valign='middle'>\n<th scope='row'><label for='$name'>$grouptext</label></th>\n<td><fieldset><legend class='hidden'>$grouptext</legend>\n";
|
2170 |
-
$html .= "<select name='$name' id='$name' onchange='javascript:su_toggle_select_children(this)'
|
2171 |
$html .= suhtml::option_tags($options, $current);
|
2172 |
$html .= "</select>\n";
|
2173 |
$html .= "</fieldset></td>\n</tr>\n";
|
847 |
* @param string $title The text to output.
|
848 |
*/
|
849 |
function admin_form_subheader($title) {
|
850 |
+
echo "<tr><th colspan='2'><strong>$title</strong></th></tr>\n";
|
851 |
}
|
852 |
|
853 |
/**
|
1017 |
*/
|
1018 |
function get_postmeta_edit_tabs($fields) {
|
1019 |
|
1020 |
+
$types = suwp::get_post_type_objects();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1021 |
|
1022 |
//Turn the types array into a tabs array
|
1023 |
$tabs = array();
|
1209 |
$field['type'] //Type
|
1210 |
, $inputid
|
1211 |
, $value
|
1212 |
+
, isset($field['options']) ? $field['options'] : false
|
1213 |
);
|
1214 |
}
|
1215 |
|
1236 |
* @param string $inputid The name/ID of the input element
|
1237 |
* @param string $value The current value of the field
|
1238 |
*/
|
1239 |
+
function get_input_element($type, $inputid, $value, $options=false) {
|
1240 |
//Get HTML element
|
1241 |
switch ($type) {
|
1242 |
case 'textbox':
|
1251 |
$checked = $value ? " checked='checked'" : '';
|
1252 |
return "<input name='$inputid' id='$inputid' type='checkbox' value='1'$checked />";
|
1253 |
break;
|
1254 |
+
case 'dropdown':
|
1255 |
+
if (is_array($options))
|
1256 |
+
return "<select name='$inputid' id='$inputid'>".suhtml::option_tags($options, $value)."</select>";
|
1257 |
+
break;
|
1258 |
}
|
1259 |
|
1260 |
return '';
|
1685 |
$this->radiobuttons($name, array($value => $label));
|
1686 |
}
|
1687 |
|
1688 |
+
/**
|
1689 |
+
* Outputs a dropdown into an admin form and saves the set's value into the database after form submission.
|
1690 |
+
*
|
1691 |
+
* @since 3.7
|
1692 |
+
* @uses is_action()
|
1693 |
+
* @uses update_setting()
|
1694 |
+
* @uses admin_form_group_start()
|
1695 |
+
* @uses admin_form_group_end()
|
1696 |
+
* @uses su_esc_attr()
|
1697 |
+
* @uses get_setting()
|
1698 |
+
*
|
1699 |
+
* @param string $name The name of the set of radio buttons.
|
1700 |
+
* @param array $values The keys of this array are the radio button values, and the array values are the label strings.
|
1701 |
+
* @param string|false $grouptext The text to display in a table cell to the left of the one containing the radio buttons. Optional.
|
1702 |
+
*/
|
1703 |
+
function dropdown($name, $values, $grouptext=false) {
|
1704 |
+
|
1705 |
+
//Save dropdown setting after form submission
|
1706 |
+
if ($this->is_action('update'))
|
1707 |
+
$this->update_setting($name, $_POST[$name]);
|
1708 |
+
|
1709 |
+
if ($grouptext)
|
1710 |
+
$this->admin_form_group_start($grouptext, false);
|
1711 |
+
else
|
1712 |
+
echo "<tr valign='top' class='su-admin-form-dropdown'>\n<td colspan='2'>\n";
|
1713 |
+
|
1714 |
+
if (is_array($values)) {
|
1715 |
+
|
1716 |
+
register_setting($this->get_module_key(), $name);
|
1717 |
+
|
1718 |
+
$name = su_esc_attr($name);
|
1719 |
+
echo "<select name='$name' id='$name'>\n";
|
1720 |
+
echo suhtml::option_tags($values, $this->get_setting($name));
|
1721 |
+
echo "</select>";
|
1722 |
+
}
|
1723 |
+
|
1724 |
+
if ($grouptext) echo "</fieldset>";
|
1725 |
+
echo "</td>\n</tr>\n";
|
1726 |
+
}
|
1727 |
+
|
1728 |
/**
|
1729 |
* @since 3.0
|
1730 |
*/
|
2094 |
register_setting('seo-ultimate', $id);
|
2095 |
$value = su_esc_editable_html($this->get_postmeta($id));
|
2096 |
$id = "_su_".su_esc_attr($id);
|
2097 |
+
//$title = str_replace(' ', ' ', $title);
|
2098 |
|
2099 |
$html .= "<tr class='textbox' valign='middle'>\n<th scope='row'><label for='$id'>$title</label></th>\n"
|
2100 |
."<td><input name='$id' id='$id' type='text' value='$value' class='regular-text' tabindex='2' /></td>\n</tr>\n";
|
2185 |
$name = "_su_".su_esc_attr($name);
|
2186 |
|
2187 |
$html = "<tr class='dropdown' valign='middle'>\n<th scope='row'><label for='$name'>$grouptext</label></th>\n<td><fieldset><legend class='hidden'>$grouptext</legend>\n";
|
2188 |
+
$html .= "<select name='$name' id='$name' onchange='javascript:su_toggle_select_children(this)'>\n";
|
2189 |
$html .= suhtml::option_tags($options, $current);
|
2190 |
$html .= "</select>\n";
|
2191 |
$html .= "</fieldset></td>\n</tr>\n";
|
modules/modules.css
CHANGED
@@ -10,7 +10,7 @@ div.su-module h2 {
|
|
10 |
|
11 |
div.su-module h4.su-subheader {
|
12 |
font-size: 1.17em;
|
13 |
-
margin: 3em 0
|
14 |
padding-top: 1em;
|
15 |
border-top: 3px solid #ccc;
|
16 |
}
|
10 |
|
11 |
div.su-module h4.su-subheader {
|
12 |
font-size: 1.17em;
|
13 |
+
margin: 3em 0 1em;
|
14 |
padding-top: 1em;
|
15 |
border-top: 3px solid #ccc;
|
16 |
}
|
plugin/class.seo-ultimate.php
CHANGED
@@ -987,7 +987,7 @@ class SEO_Ultimate {
|
|
987 |
|
988 |
//If we're on the post or page editor...
|
989 |
if (strcmp($screen, 'post') == 0 || strcmp($screen, 'page') == 0) {
|
990 |
-
|
991 |
//Gather post meta help content
|
992 |
$helparray = apply_filters('su_postmeta_help', array());
|
993 |
|
@@ -1392,8 +1392,9 @@ class SEO_Ultimate {
|
|
1392 |
function add_postmeta_box() {
|
1393 |
|
1394 |
//Add the metabox to posts and pages.
|
1395 |
-
|
1396 |
-
|
|
|
1397 |
//Only show the meta box if there are fields to show.
|
1398 |
if ($this->get_postmeta_fields($screen))
|
1399 |
add_meta_box('su_postmeta', __('SEO Settings', 'seo-ultimate'), array(&$this, "show_{$screen}_postmeta_box"), $screen, 'normal', 'high');
|
@@ -1457,14 +1458,20 @@ class SEO_Ultimate {
|
|
1457 |
|
1458 |
//Run preliminary permissions checks
|
1459 |
if ( !wp_verify_nonce($_REQUEST['_su_wpnonce'], 'su-update-postmeta') ) return;
|
1460 |
-
|
1461 |
-
|
1462 |
-
|
1463 |
-
if (
|
1464 |
-
} else
|
|
|
|
|
|
|
|
|
|
|
|
|
1465 |
|
1466 |
//Get an array of the postmeta fields
|
1467 |
-
$keys = array_keys($this->get_postmeta_array($
|
1468 |
$fields = array();
|
1469 |
|
1470 |
foreach ($keys as $key) {
|
987 |
|
988 |
//If we're on the post or page editor...
|
989 |
if (strcmp($screen, 'post') == 0 || strcmp($screen, 'page') == 0) {
|
990 |
+
|
991 |
//Gather post meta help content
|
992 |
$helparray = apply_filters('su_postmeta_help', array());
|
993 |
|
1392 |
function add_postmeta_box() {
|
1393 |
|
1394 |
//Add the metabox to posts and pages.
|
1395 |
+
$posttypes = suwp::get_post_type_names();
|
1396 |
+
foreach ($posttypes as $screen) {
|
1397 |
+
|
1398 |
//Only show the meta box if there are fields to show.
|
1399 |
if ($this->get_postmeta_fields($screen))
|
1400 |
add_meta_box('su_postmeta', __('SEO Settings', 'seo-ultimate'), array(&$this, "show_{$screen}_postmeta_box"), $screen, 'normal', 'high');
|
1458 |
|
1459 |
//Run preliminary permissions checks
|
1460 |
if ( !wp_verify_nonce($_REQUEST['_su_wpnonce'], 'su-update-postmeta') ) return;
|
1461 |
+
$post_type = isset($_POST['post_type']) ? $_POST['post_type'] : 'post';
|
1462 |
+
if (function_exists('get_post_type_object')) { //If WP3.0+...
|
1463 |
+
$post_type_object = get_post_type_object($post_type);
|
1464 |
+
if (!current_user_can($post_type_object->cap->edit_posts)) return;
|
1465 |
+
} else { //WP2.9 or below
|
1466 |
+
if ( 'page' == $_POST['post_type'] ) {
|
1467 |
+
if ( !current_user_can( 'edit_page', $post_id )) return;
|
1468 |
+
} elseif ( 'post' == $_POST['post_type'] ) {
|
1469 |
+
if ( !current_user_can( 'edit_post', $post_id )) return;
|
1470 |
+
} else return;
|
1471 |
+
}
|
1472 |
|
1473 |
//Get an array of the postmeta fields
|
1474 |
+
$keys = array_keys($this->get_postmeta_array($post_type));
|
1475 |
$fields = array();
|
1476 |
|
1477 |
foreach ($keys as $key) {
|
plugin/global.css
CHANGED
@@ -135,6 +135,16 @@ div.su-help h6 {
|
|
135 |
width: 12em;
|
136 |
}
|
137 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
138 |
/* PLUGIN NOTICES */
|
139 |
|
140 |
#wpwrap .su-plugin-notice .update-message, #wpwrap .su-plugin-update-info {
|
135 |
width: 12em;
|
136 |
}
|
137 |
|
138 |
+
#su-postmeta-box select optgroup,
|
139 |
+
div.su-module select optgroup {
|
140 |
+
margin-top: 1em;
|
141 |
+
}
|
142 |
+
|
143 |
+
#su-postmeta-box select optgroup option,
|
144 |
+
div.su-module select optgroup option {
|
145 |
+
margin-left: 1em;
|
146 |
+
}
|
147 |
+
|
148 |
/* PLUGIN NOTICES */
|
149 |
|
150 |
#wpwrap .su-plugin-notice .update-message, #wpwrap .su-plugin-update-info {
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: SEO Design Solutions
|
|
3 |
Tags: seo, SEO Ultimate, suite, google, yahoo, bing, search engines, admin, post, page, custom post types, categories, tags, terms, custom taxonomies, title, meta, robots, noindex, nofollow, canonical, 404, robots.txt, htaccess, slugs, url, anchor, more, link, excerpt, permalink, links, autolinks, code, footer, modules, uninstallable, reinstallable, downgradable, import, export, CSV
|
4 |
Requires at least: 2.8
|
5 |
Tested up to: 3.0
|
6 |
-
Stable tag: 3.
|
7 |
|
8 |
This all-in-one SEO plugin gives you control over titles, noindex/nofollow, meta tags, slugs, canonical tags, "more" links, 404 errors, rich snippets, and more.
|
9 |
|
@@ -11,11 +11,11 @@ This all-in-one SEO plugin gives you control over titles, noindex/nofollow, meta
|
|
11 |
|
12 |
= Recent Releases =
|
13 |
|
|
|
14 |
* Version 3.6 adds a maximum log size option to 404 Monitor
|
15 |
* Version 3.5 adds the Sharing Facilitator module
|
16 |
* Version 3.4 adds the option to ignore 404s from specific URLs or wildcard URL patterns
|
17 |
* Version 3.3 adds the option to only log 404s from search engines and/or referrers
|
18 |
-
* Version 3.2 adds CSV import/export for Deeplink Juggernaut
|
19 |
|
20 |
= Features =
|
21 |
|
@@ -204,11 +204,15 @@ Frequently asked questions, settings help, and troubleshooting tips for SEO Ulti
|
|
204 |
|
205 |
== Changelog ==
|
206 |
|
|
|
|
|
|
|
|
|
207 |
= Version 3.6 (June 28, 2010) =
|
208 |
* Feature: Users can now set the maximum number of log entries that 404 Monitor will keep at a time
|
209 |
* Improvement: Fixed aesthetic issue that appeared in SEO Settings box under certain configurations
|
210 |
* Bugfix: Browsers will no longer jump to the top of the screen when expanding/collapsing the Referer/User Agent lists in 404 Monitor
|
211 |
-
* Bugfix: Fixed invalid HTML in 404 Monitor
|
212 |
* Bugfix: Fixed PHP4 error by removing usage of PHP5-only str_split function
|
213 |
|
214 |
= Version 3.5 (June 26, 2010) =
|
3 |
Tags: seo, SEO Ultimate, suite, google, yahoo, bing, search engines, admin, post, page, custom post types, categories, tags, terms, custom taxonomies, title, meta, robots, noindex, nofollow, canonical, 404, robots.txt, htaccess, slugs, url, anchor, more, link, excerpt, permalink, links, autolinks, code, footer, modules, uninstallable, reinstallable, downgradable, import, export, CSV
|
4 |
Requires at least: 2.8
|
5 |
Tested up to: 3.0
|
6 |
+
Stable tag: 3.7
|
7 |
|
8 |
This all-in-one SEO plugin gives you control over titles, noindex/nofollow, meta tags, slugs, canonical tags, "more" links, 404 errors, rich snippets, and more.
|
9 |
|
11 |
|
12 |
= Recent Releases =
|
13 |
|
14 |
+
* Version 3.7 adds the "SEO Settings" box to custom post type editors
|
15 |
* Version 3.6 adds a maximum log size option to 404 Monitor
|
16 |
* Version 3.5 adds the Sharing Facilitator module
|
17 |
* Version 3.4 adds the option to ignore 404s from specific URLs or wildcard URL patterns
|
18 |
* Version 3.3 adds the option to only log 404s from search engines and/or referrers
|
|
|
19 |
|
20 |
= Features =
|
21 |
|
204 |
|
205 |
== Changelog ==
|
206 |
|
207 |
+
= Version 3.7 (June 30, 2010) =
|
208 |
+
* Feature: "SEO Settings" box now added to editing screens for custom post types
|
209 |
+
* Bugfix: Fixed invalid HTML in the admin interfaces of Noindex Manager and Sharing Facilitator
|
210 |
+
|
211 |
= Version 3.6 (June 28, 2010) =
|
212 |
* Feature: Users can now set the maximum number of log entries that 404 Monitor will keep at a time
|
213 |
* Improvement: Fixed aesthetic issue that appeared in SEO Settings box under certain configurations
|
214 |
* Bugfix: Browsers will no longer jump to the top of the screen when expanding/collapsing the Referer/User Agent lists in 404 Monitor
|
215 |
+
* Bugfix: Fixed invalid HTML in the admin interface of 404 Monitor
|
216 |
* Bugfix: Fixed PHP4 error by removing usage of PHP5-only str_split function
|
217 |
|
218 |
= Version 3.5 (June 26, 2010) =
|
seo-ultimate.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: SEO Ultimate
|
4 |
Plugin URI: http://www.seodesignsolutions.com/wordpress-seo/
|
5 |
Description: This all-in-one SEO plugin gives you control over title tags, noindex/nofollow, meta tags, rich snippets, slugs, canonical tags, "more" links, 404 errors, rich snippets, and more.
|
6 |
-
Version: 3.
|
7 |
Author: SEO Design Solutions
|
8 |
Author URI: http://www.seodesignsolutions.com/
|
9 |
Text Domain: seo-ultimate
|
@@ -12,7 +12,7 @@ Text Domain: seo-ultimate
|
|
12 |
/**
|
13 |
* The main SEO Ultimate plugin file.
|
14 |
* @package SeoUltimate
|
15 |
-
* @version 3.
|
16 |
* @link http://www.seodesignsolutions.com/wordpress-seo/ SEO Ultimate Homepage
|
17 |
*/
|
18 |
|
@@ -45,12 +45,12 @@ if (!defined('ABSPATH')) {
|
|
45 |
define('SU_MINIMUM_WP_VER', '2.8');
|
46 |
|
47 |
//Reading plugin info from constants is faster than trying to parse it from the header above.
|
48 |
-
define(
|
49 |
-
define(
|
50 |
-
define(
|
51 |
-
define(
|
52 |
-
define(
|
53 |
-
define(
|
54 |
|
55 |
/********** INCLUDES **********/
|
56 |
|
3 |
Plugin Name: SEO Ultimate
|
4 |
Plugin URI: http://www.seodesignsolutions.com/wordpress-seo/
|
5 |
Description: This all-in-one SEO plugin gives you control over title tags, noindex/nofollow, meta tags, rich snippets, slugs, canonical tags, "more" links, 404 errors, rich snippets, and more.
|
6 |
+
Version: 3.7
|
7 |
Author: SEO Design Solutions
|
8 |
Author URI: http://www.seodesignsolutions.com/
|
9 |
Text Domain: seo-ultimate
|
12 |
/**
|
13 |
* The main SEO Ultimate plugin file.
|
14 |
* @package SeoUltimate
|
15 |
+
* @version 3.7
|
16 |
* @link http://www.seodesignsolutions.com/wordpress-seo/ SEO Ultimate Homepage
|
17 |
*/
|
18 |
|
45 |
define('SU_MINIMUM_WP_VER', '2.8');
|
46 |
|
47 |
//Reading plugin info from constants is faster than trying to parse it from the header above.
|
48 |
+
define('SU_PLUGIN_NAME', 'SEO Ultimate');
|
49 |
+
define('SU_PLUGIN_URI', 'http://www.seodesignsolutions.com/wordpress-seo/');
|
50 |
+
define('SU_VERSION', '3.7');
|
51 |
+
define('SU_AUTHOR', 'SEO Design Solutions');
|
52 |
+
define('SU_AUTHOR_URI', 'http://www.seodesignsolutions.com/');
|
53 |
+
define('SU_USER_AGENT', 'SeoUltimate/3.7');
|
54 |
|
55 |
/********** INCLUDES **********/
|
56 |
|