All in One SEO Pack - Version 2.0.4

Version Description

Download this release

Release Info

Developer pbaylies
Plugin Icon 128x128 All in One SEO Pack
Version 2.0.4
Comparing to
See all releases

Code changes from version 2.0.3.1 to 2.0.4

aioseop_class.php CHANGED
@@ -61,73 +61,97 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
61
  $this->store_option = true;
62
  $this->file = __FILE__; // the current file
63
  parent::__construct();
64
- $this->default_options = array(
65
- "donate"=> Array(
66
- 'name' => __( 'I enjoy this plugin and have made a donation:', 'all_in_one_seo_pack' ),
67
- 'help_text' => __( 'All donations support continued development of this free software.', 'all_in_one_seo_pack' ),
68
- 'default' => 0),
69
- "home_title"=> Array(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  'name' => __( 'Home Title:', 'all_in_one_seo_pack' ),
71
- 'help_text' => __( 'As the name implies, this will be the title of your homepage. This is independent of any other option. If not set, the default blog title will get used.', 'all_in_one_seo_pack' ),
72
  'default' => null, 'type' => 'textarea', 'sanitize' => 'text' ),
73
- "home_description"=> Array(
 
74
  'name' => __( 'Home Description:', 'all_in_one_seo_pack' ),
75
- 'help_text' => __( 'The META description for your homepage. Independent of any other options, the default is no META description at all if this is not set.', 'all_in_one_seo_pack' ),
76
  'default' => '', 'type' => 'textarea', 'sanitize' => 'text' ),
77
- "togglekeywords" => Array(
 
 
 
 
 
 
 
78
  'name' => __( 'Use Keywords:', 'all_in_one_seo_pack' ),
79
- 'help_text' => __( 'This option allows you to toggle the use of meta keywords throughout the whole of the site.', 'all_in_one_seo_pack' ),
80
  'default' => 0,
81
  'type' => 'radio',
82
  'initial_options' => Array( 0 => __( 'Enabled', 'all_in_one_seo_pack' ),
83
  1 => __( 'Disabled', 'all_in_one_seo_pack' ) )
84
  ),
85
- "home_keywords"=> Array(
86
- 'name' => __( 'Home Keywords (comma separated):', 'all_in_one_seo_pack' ),
87
- 'help_text' => __( 'A comma separated list of your most important keywords for your site that will be written as META keywords on your homepage. Don\'t stuff everything in here.', 'all_in_one_seo_pack' ),
88
- 'default' => null, 'type' => 'textarea', 'sanitize' => 'text',
 
89
  'condshow' => Array( "aiosp_togglekeywords" => 0 ) ),
90
- "can"=> Array(
91
- 'name' => __( 'Canonical URLs:', 'all_in_one_seo_pack' ),
92
- 'help_text' => __( "This option will automatically generate Canonical URLS for your entire WordPress installation. This will help to prevent duplicate content penalties by <a href='http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html' target='_blank'>Google</a>.", 'all_in_one_seo_pack' ),
93
- 'default' => 1),
 
 
 
 
 
 
 
 
 
94
  "rewrite_titles"=> Array(
95
  'name' => __( 'Rewrite Titles:', 'all_in_one_seo_pack' ),
96
- 'help_text' => __( "Note that this is all about the title tag. This is what you see in your browser's window title bar. This is NOT visible on a page, only in the window title bar and of course in the source. If set, all page, post, category, search and archive page titles get rewritten. You can specify the format for most of them. For example: The default templates puts the title tag of posts like this: ‚'Blog Archive >> Blog Name >> Post Title‚' (maybe I've overdone slightly). This is far from optimal. With the default post title format, Rewrite Title rewrites this to 'Post Title | Blog Name'. If you have manually defined a title (in one of the text fields for All in One SEO Plugin input) this will become the title of your post in the format string.", 'all_in_one_seo_pack' ),
97
  'default' => 1,
98
  'type' => 'radio',
99
  'initial_options' => Array( 1 => __( 'Enabled', 'all_in_one_seo_pack' ),
100
  0 => __( 'Disabled', 'all_in_one_seo_pack' ) )
101
  ),
102
- "force_rewrites"=> Array(
103
- 'name' => __( 'Force Rewrites:', 'all_in_one_seo_pack' ),
104
- 'help_text' => __( "Use output buffering to ensure that the title gets rewritten.", 'all_in_one_seo_pack' ),
105
- 'default' => 1,
106
- 'type' => 'hidden',
107
- 'prefix' => $this->prefix,
108
- 'initial_options' => Array( 1 => __( 'Enabled', 'all_in_one_seo_pack' ),
109
- 0 => __( 'Disabled', 'all_in_one_seo_pack' ) )
110
- ),
111
- "use_original_title"=> Array(
112
- 'name' => __( 'Use Original Title:', 'all_in_one_seo_pack' ),
113
- 'help_text' => __( "Use wp_title to set the title; disable this option if you run into conflicts with the title being set by your theme or another plugin.", 'all_in_one_seo_pack' ),
114
- 'type' => 'radio',
115
- 'default' => 0,
116
- 'initial_options' => Array( 1 => __( 'Enabled', 'all_in_one_seo_pack' ),
117
- 0 => __( 'Disabled', 'all_in_one_seo_pack' ) )
118
- ),
119
  "cap_titles"=> Array(
120
  'name' => __( 'Capitalize Titles:', 'all_in_one_seo_pack' ),
121
- 'help_text' => __( "Check this and Search Page Titles and Tag Page Titles will have the first letter of each word capitalized.", 'all_in_one_seo_pack' ),
122
  'default' => 1),
 
123
  "cap_cats"=> Array(
124
  'name' => __( 'Capitalize Category Titles:', 'all_in_one_seo_pack' ),
125
- 'help_text' => __( "Check this and Category Titles will have the first letter of each word capitalized.", 'all_in_one_seo_pack' ),
126
  'default' => 1),
127
- "page_title_format"=> Array(
 
128
  'name' => __( 'Page Title Format:', 'all_in_one_seo_pack' ),
129
  'help_text' =>
130
- __( 'The following macros are supported:', 'all_in_one_seo_pack' )
131
  . '<ul><li>' . __( '%blog_title% - Your blog title', 'all_in_one_seo_pack' ) . '</li><li>' .
132
  __( '%blog_description% - Your blog description', 'all_in_one_seo_pack' ) . '</li><li>' .
133
  __( '%page_title% - The original title of the page', 'all_in_one_seo_pack' ) . '</li><li>' .
@@ -141,10 +165,11 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
141
  'type' => 'text',
142
  'default' => '%page_title% | %blog_title%',
143
  'condshow' => Array( "aiosp_rewrite_titles" => 1 ) ),
144
- "post_title_format"=> Array(
 
145
  'name' => __( 'Post Title Format:', 'all_in_one_seo_pack' ),
146
  'help_text' =>
147
- __( 'The following macros are supported:', 'all_in_one_seo_pack' )
148
  . '<ul><li>' . __( '%blog_title% - Your blog title', 'all_in_one_seo_pack' ) . '</li><li>' .
149
  __( '%blog_description% - Your blog description', 'all_in_one_seo_pack' ) . '</li><li>' .
150
  __( '%post_title% - The original title of the post', 'all_in_one_seo_pack' ) . '</li><li>' .
@@ -158,10 +183,11 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
158
  'type' => 'text',
159
  'default' => '%post_title% | %blog_title%',
160
  'condshow' => Array( "aiosp_rewrite_titles" => 1 ) ),
161
- "category_title_format"=> Array(
 
162
  'name' => __( 'Category Title Format:', 'all_in_one_seo_pack' ),
163
  'help_text' =>
164
- __( 'The following macros are supported:', 'all_in_one_seo_pack' ) .
165
  '<ul><li>' . __( '%blog_title% - Your blog title', 'all_in_one_seo_pack' ) . '</li><li>' .
166
  __( '%blog_description% - Your blog description', 'all_in_one_seo_pack' ) . '</li><li>' .
167
  __( '%category_title% - The original title of the category', 'all_in_one_seo_pack' ) . '</li><li>' .
@@ -169,10 +195,11 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
169
  'type' => 'text',
170
  'default' => '%category_title% | %blog_title%',
171
  'condshow' => Array( "aiosp_rewrite_titles" => 1 ) ),
172
- "archive_title_format"=> Array(
 
173
  'name' => __( 'Date Archive Title Format:', 'all_in_one_seo_pack' ),
174
  'help_text' =>
175
- __( 'The following macros are supported:', 'all_in_one_seo_pack' ) .
176
  '<ul><li>' . __( '%blog_title% - Your blog title', 'all_in_one_seo_pack' ) . '</li><li>' .
177
  __( '%blog_description% - Your blog description', 'all_in_one_seo_pack' ) . '</li><li>' .
178
  __( '%date% - The original archive title given by wordpress, e.g. "2007" or "2007 August"', 'all_in_one_seo_pack' ) . '</li><li>' .
@@ -182,39 +209,43 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
182
  'type' => 'text',
183
  'default' => '%date% | %blog_title%',
184
  'condshow' => Array( "aiosp_rewrite_titles" => 1 ) ),
 
185
  "author_title_format"=> Array(
186
  'name' => __( 'Author Archive Title Format:', 'all_in_one_seo_pack' ),
187
  'help_text' =>
188
- __( 'The following macros are supported:', 'all_in_one_seo_pack' ) .
189
  '<ul><li>' . __( '%blog_title% - Your blog title', 'all_in_one_seo_pack' ) . '</li><li>' .
190
  __( '%blog_description% - Your blog description', 'all_in_one_seo_pack' ) . '</li><li>' .
191
  __( '%author% - The original archive title given by wordpress, e.g. "Steve" or "John Smith"', 'all_in_one_seo_pack' ) . '</li></ul>',
192
  'type' => 'text',
193
  'default' => '%author% | %blog_title%',
194
  'condshow' => Array( "aiosp_rewrite_titles" => 1 ) ),
195
- "tag_title_format"=> Array(
 
196
  'name' => __( 'Tag Title Format:', 'all_in_one_seo_pack' ),
197
  'help_text' =>
198
- __( 'The following macros are supported:', 'all_in_one_seo_pack' ) .
199
  '<ul><li>' . __( '%blog_title% - Your blog title', 'all_in_one_seo_pack' ) . '</li><li>' .
200
  __( '%blog_description% - Your blog description', 'all_in_one_seo_pack' ) . '</li><li>' .
201
  __( '%tag% - The name of the tag', 'all_in_one_seo_pack' ) . '</li></ul>',
202
  'type' => 'text',
203
  'default' => '%tag% | %blog_title%',
204
  'condshow' => Array( "aiosp_rewrite_titles" => 1 ) ),
205
- "search_title_format"=> Array(
 
206
  'name' => __( 'Search Title Format:', 'all_in_one_seo_pack' ),
207
  'help_text' =>
208
- __( 'The following macros are supported:', 'all_in_one_seo_pack' ) .
209
  '<ul><li>' . __( '%blog_title% - Your blog title', 'all_in_one_seo_pack' ) . '</li><li>' .
210
  __( '%blog_description% - Your blog description', 'all_in_one_seo_pack' ) . '</li><li>' .
211
  __( '%search% - What was searched for', 'all_in_one_seo_pack' ) . '</li></ul>',
212
  'type' => 'text',
213
  'default' => '%search% | %blog_title%',
214
  'condshow' => Array( "aiosp_rewrite_titles" => 1 ) ),
215
- "description_format"=> Array(
 
216
  'name' => __( 'Description Format', 'all_in_one_seo_pack' ),
217
- 'help_text' => __( 'The following macros are supported:', 'all_in_one_seo_pack' ) .
218
  '<ul><li>' . __( '%blog_title% - Your blog title', 'all_in_one_seo_pack' ) . '</li><li>' .
219
  __( '%blog_description% - Your blog description', 'all_in_one_seo_pack' ) . '</li><li>' .
220
  __( '%description% - The original description as determined by the plugin, e.g. the excerpt if one is set or an auto-generated one if that option is set', 'all_in_one_seo_pack' ) . '</li><li>' .
@@ -222,9 +253,10 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
222
  'type' => 'text',
223
  'default' => '%description%',
224
  'condshow' => Array( "aiosp_rewrite_titles" => 1 ) ),
225
- "404_title_format"=> Array(
 
226
  'name' => __( '404 Title Format:', 'all_in_one_seo_pack' ),
227
- 'help_text' => __( 'The following macros are supported:', 'all_in_one_seo_pack' ) .
228
  '<ul><li>' . __( '%blog_title% - Your blog title', 'all_in_one_seo_pack' ) . '</li><li>' .
229
  __( '%blog_description% - Your blog description', 'all_in_one_seo_pack' ) . '</li><li>' .
230
  __( '%request_url% - The original URL path, like "/url-that-does-not-exist/"', 'all_in_one_seo_pack' ) . '</li><li>' .
@@ -233,25 +265,28 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
233
  'type' => 'text',
234
  'default' => 'Nothing found for %request_words%',
235
  'condshow' => Array( "aiosp_rewrite_titles" => 1 ) ),
 
236
  "paged_format"=> Array(
237
  'name' => __( 'Paged Format:', 'all_in_one_seo_pack' ),
238
- 'help_text' => __( 'This string gets appended/prepended to titles when they are for paged index pages (like home or archive pages).', 'all_in_one_seo_pack' )
239
  . __( 'The following macros are supported:', 'all_in_one_seo_pack' )
240
  . '<ul><li>' . __( '%page% - The page number', 'all_in_one_seo_pack' ) . '</li></ul>',
241
  'type' => 'text',
242
  'default' => ' - Part %page%',
243
  'condshow' => Array( "aiosp_rewrite_titles" => 1 ) ),
 
244
  "enablecpost"=> Array(
245
  'name' => __( 'SEO for Custom Post Types:', 'all_in_one_seo_pack' ),
246
- 'help_text' => __( 'Check this if you want your enable AIOSEOP support for Custom Post Types on this site.', 'all_in_one_seo_pack' ),
247
  'default' => 'on',
248
  'type' => 'radio',
249
  'initial_options' => Array( 'on' => __( 'Enabled', 'all_in_one_seo_pack' ),
250
  0 => __( 'Disabled', 'all_in_one_seo_pack' ) )
251
  ),
 
252
  "cpostadvanced" => Array(
253
  'name' => __( 'Enable Advanced Options:', 'all_in_one_seo_pack' ),
254
- 'help_text' => __( 'This allows you to do more with your custom post types.', 'all_in_one_seo_pack' ),
255
  'default' => 0,
256
  'type' => 'radio',
257
  'initial_options' => Array( 'on' => __( 'Enabled', 'all_in_one_seo_pack' ),
@@ -259,156 +294,184 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
259
  'label' => null,
260
  'condshow' => Array( "aiosp_enablecpost" => 'on' )
261
  ),
 
262
  "cpostactive" => Array(
263
  'name' => __( 'SEO on only these post types:', 'all_in_one_seo_pack' ),
264
- 'help_text' => __( 'Select specific custom post types for AIOSEOP support.', 'all_in_one_seo_pack' ),
265
  'type' => 'multicheckbox',
266
  'default' => array('post', 'page'),
267
  'condshow' => Array( 'aiosp_enablecpost' => 'on', 'aiosp_cpostadvanced' => 'on' )
268
  ),
269
- "cpostnoindex" => Array(
270
- 'name' => __( 'Default to NOINDEX:', 'all_in_one_seo_pack' ),
271
- 'help_text' => __( 'Select noindex robots meta on specific custom post types by default.', 'all_in_one_seo_pack' ),
272
- 'type' => 'multicheckbox',
273
- 'default' => array(),
274
- 'condshow' => Array( 'aiosp_enablecpost' => 'on', 'aiosp_cpostadvanced' => 'on' )
275
- ),
276
- "cpostnofollow" => Array(
277
- 'name' => __( 'Default to NOFOLLOW:', 'all_in_one_seo_pack' ),
278
- 'help_text' => __( 'Select nofollow robots meta on specific custom post types by default.', 'all_in_one_seo_pack' ),
279
- 'type' => 'multicheckbox',
280
- 'default' => array(),
281
- 'condshow' => Array( 'aiosp_enablecpost' => 'on', 'aiosp_cpostadvanced' => 'on' )
282
- ),
283
  "cposttitles" => Array(
284
  'name' => __( 'Custom titles:', 'all_in_one_seo_pack' ),
285
- 'help_text' => __( 'Allows setting specific custom titles for all post types.', 'all_in_one_seo_pack' ),
286
  'type' => 'checkbox',
287
  'default' => 0,
288
  'condshow' => Array( 'aiosp_enablecpost' => 'on', 'aiosp_cpostadvanced' => 'on' )
289
  ),
 
290
  "posttypecolumns" => Array(
291
- 'name' => __( 'Show Column Labels for Custom Post Types:', 'all_in_one_seo_pack' ),
292
- 'help_text' => __( 'Choose which post types you want to have SEO columns on the edit.php screen. You can select as many as you like.', 'all_in_one_seo_pack' ),
293
  'type' => 'multicheckbox',
294
  'default' => array('post', 'page') ),
 
295
  "admin_bar" => Array(
296
  'name' => __( 'Display Menu In Admin Bar:', 'all_in_one_seo_pack' ),
297
- 'help_text' => __( 'Check this for easy access to settings from the admin menu bar.', 'all_in_one_seo_pack' ),
298
  'default' => 'on',
299
  ),
 
300
  "custom_menu_order" => Array(
301
  'name' => __( 'Display Menu At The Top:', 'all_in_one_seo_pack' ),
302
- 'help_text' => __( 'Check this for easy access to settings from the top of your WordPress Dashboard.', 'all_in_one_seo_pack' ),
303
  'default' => 'on',
304
  ),
 
305
  "google_verify" => Array(
306
  'name' => __( 'Google Webmaster Tools:', 'all_in_one_seo_pack' ),
307
- 'help_text' => __( 'Enter your verification code here to add a meta tag to your homepage to verify your site.', 'all_in_one_seo_pack' ),
308
  'default' => '', 'type' => 'text' ),
 
309
  "bing_verify" => Array(
310
  'name' => __( 'Bing Webmaster Center:', 'all_in_one_seo_pack' ),
311
- 'help_text' => __( 'Enter your verification code here to add a meta tag to your homepage to verify your site.', 'all_in_one_seo_pack' ),
312
  'default' => '', 'type' => 'text' ),
 
313
  "pinterest_verify" => Array(
314
  'name' => __( 'Pinterest Site Verification:', 'all_in_one_seo_pack' ),
315
- 'help_text' => __( 'Enter your verification code here to add a meta tag to your homepage to verify your site.', 'all_in_one_seo_pack' ),
316
  'default' => '', 'type' => 'text' ),
 
317
  "google_publisher"=> Array(
318
  'name' => __( 'Google Plus Default Profile:', 'all_in_one_seo_pack' ),
319
- 'help_text' => __( 'Enter your Google Plus Profile URL here to link your site\'s pages to Google Plus.', 'all_in_one_seo_pack' ),
320
  'default' => '', 'type' => 'text' ),
 
321
  "google_disable_profile"=> Array(
322
  'name' => __( 'Disable Google Plus Profile:', 'all_in_one_seo_pack' ),
323
- 'help_text' => __( 'Check this option to remove the Google Plus Profile field on user profile pages.', 'all_in_one_seo_pack' ),
324
  'default' => 0, 'type' => 'checkbox' ),
 
325
  "google_analytics_id"=> Array(
326
  'name' => __( 'Google Analytics ID:', 'all_in_one_seo_pack' ),
327
- 'help_text' => __( 'Enter your Google Analytics ID here to track your site with Google Analytics.', 'all_in_one_seo_pack' ),
328
  'default' => null, 'type' => 'text' ),
 
 
 
 
 
 
 
 
 
 
 
 
 
329
  "ga_domain"=> Array(
330
  'name' => __( 'Tracking Domain:', 'all_in_one_seo_pack' ),
331
  'type' => 'text',
332
- 'help_text' => __( 'Enter domain name for tracking with Google Analytics.', 'all_in_one_seo_pack' ),
333
  'condshow' => Array( 'aiosp_google_analytics_id' => Array( 'lhs' => 'aiosp_google_analytics_id', 'op' => '!=', 'rhs' => '' ) ) ),
 
334
  "ga_multi_domain"=> Array(
335
  'name' => __( 'Track Multiple Domains:', 'all_in_one_seo_pack' ),
336
- 'help_text' => __( 'Enable multi-domain tracking for Google Analytics.', 'all_in_one_seo_pack' ),
337
  'default' => 0,
338
  'condshow' => Array( 'aiosp_google_analytics_id' => Array( 'lhs' => 'aiosp_google_analytics_id', 'op' => '!=', 'rhs' => '' ) ) ),
 
339
  "ga_track_outbound_links"=> Array(
340
  'name' => __( 'Track Outbound Links:', 'all_in_one_seo_pack' ),
341
- 'help_text' => __( 'Add functionality to track outbound links with Google Analytics.', 'all_in_one_seo_pack' ),
342
  'default' => 0,
343
  'condshow' => Array( 'aiosp_google_analytics_id' => Array( 'lhs' => 'aiosp_google_analytics_id', 'op' => '!=', 'rhs' => '' ) ) ),
344
- "use_categories"=> Array(
345
- 'name' => __( 'Use Categories for META keywords:', 'all_in_one_seo_pack' ),
346
- 'help_text' => __( 'Check this if you want your categories for a given post used as the META keywords for this post (in addition to any keywords and tags you specify on the post edit page).', 'all_in_one_seo_pack' ),
347
- 'default' => 0,
348
- 'condshow' => Array( "aiosp_togglekeywords" => 0 ) ),
349
- "use_tags_as_keywords" => Array(
350
- 'name' => __( 'Use Tags for META keywords:', 'all_in_one_seo_pack' ),
351
- 'help_text' => __( 'Check this if you want your tags for a given post used as the META keywords for this post (in addition to any keywords you specify on the post edit page).', 'all_in_one_seo_pack' ),
352
- 'default' => 1,
353
- 'condshow' => Array( "aiosp_togglekeywords" => 0 ) ),
354
- "dynamic_postspage_keywords"=> Array(
355
- 'name' => __( 'Dynamically Generate Keywords for Posts Page:', 'all_in_one_seo_pack' ),
356
- 'help_text' => __( 'Check this if you want your keywords on a custom posts page (set it in options->reading) to be dynamically generated from the keywords of the posts showing on that page. If unchecked, it will use the keywords set in the edit page screen for the posts page.', 'all_in_one_seo_pack' ),
357
- 'default' => 1,
358
- 'condshow' => Array( "aiosp_togglekeywords" => 0 ) ),
 
 
359
  "category_noindex"=> Array(
360
- 'name' => __( 'Use noindex for Categories:', 'all_in_one_seo_pack' ),
361
- 'help_text' => __( 'Check this for excluding category pages from being crawled. Useful for avoiding duplicate content.', 'all_in_one_seo_pack' ),
362
  'default' => 1),
 
363
  "archive_date_noindex"=> Array(
364
- 'name' => __( 'Use noindex for Date Archives:', 'all_in_one_seo_pack' ),
365
- 'help_text' => __( 'Check this for excluding Date Archive pages from being crawled. Useful for avoiding duplicate content.', 'all_in_one_seo_pack' ),
366
  'default' => 1),
 
367
  "archive_author_noindex"=> Array(
368
- 'name' => __( 'Use noindex for Author Archives:', 'all_in_one_seo_pack' ),
369
- 'help_text' => __( 'Check this for excluding Author Archive pages from being crawled. Useful for avoiding duplicate content.', 'all_in_one_seo_pack' ),
370
  'default' => 1),
 
371
  "tags_noindex"=> Array(
372
- 'name' => __( 'Use noindex for Tag Archives:', 'all_in_one_seo_pack' ),
373
- 'help_text' => __( 'Check this for excluding tag pages from being crawled. Useful for avoiding duplicate content.', 'all_in_one_seo_pack' ),
 
 
 
 
 
374
  'default' => 0),
 
375
  "generate_descriptions"=> Array(
376
  'name' => __( 'Autogenerate Descriptions:', 'all_in_one_seo_pack' ),
377
- 'help_text' => __( "Check this and your META descriptions will get autogenerated if there's no excerpt.", 'all_in_one_seo_pack' ),
378
  'default' => 1),
 
379
  "hide_paginated_descriptions"=> Array(
380
  'name' => __( 'Remove Descriptions For Paginated Pages:', 'all_in_one_seo_pack' ),
381
- 'help_text' => __( "Check this and your META descriptions will get hidden if on Page 2 or later of paginated content.", 'all_in_one_seo_pack' ),
382
  'default' => 0),
 
383
  "unprotect_meta"=> Array(
384
  'name' => __( 'Unprotect Post Meta Fields:', 'all_in_one_seo_pack' ),
385
- 'help_text' => __( "Unprotect internal postmeta fields for use with XMLRPC -- if you don't know what that is, leave it unchecked.", 'all_in_one_seo_pack' ),
386
  'default' => 0),
 
387
  "ex_pages" => Array(
388
  'name' => __( 'Exclude Pages:', 'all_in_one_seo_pack' ),
389
- 'help_text' => __( "Enter any comma separated pages here to be excluded by All in One SEO Pack. This is helpful when using plugins which generate their own non-WordPress dynamic pages. Ex: <em>/forum/,/contact/</em> For instance, if you want to exclude the virtual pages generated by a forum plugin, all you have to do is give forum or /forum or /forum/ or and any URL with the word \"forum\" in it, such as http://mysite.com/forum or http://mysite.com/forum/someforumpage will be excluded from All in One SEO Pack.", 'all_in_one_seo_pack' ),
390
  'type' => 'textarea', 'default' => '' ),
 
391
  "post_meta_tags"=> Array(
392
  'name' => __( 'Additional Post Headers:', 'all_in_one_seo_pack' ),
393
- 'help_text' => __( 'What you enter here will be copied verbatim to your header on posts.', 'all_in_one_seo_pack' ) . ' ' . __( 'You can enter whatever additional headers you want here, even references to stylesheets.', 'all_in_one_seo_pack' ),
394
  'type' => 'textarea', 'default' => '', 'sanitize' => 'default' ),
 
395
  "page_meta_tags"=> Array(
396
  'name' => __( 'Additional Page Headers:', 'all_in_one_seo_pack' ),
397
- 'help_text' => __( 'What you enter here will be copied verbatim to your header on pages.', 'all_in_one_seo_pack' ) . ' ' . __( 'You can enter whatever additional headers you want here, even references to stylesheets.', 'all_in_one_seo_pack' ),
398
  'type' => 'textarea', 'default' => '', 'sanitize' => 'default' ),
 
399
  "front_meta_tags"=> Array(
400
  'name' => __( 'Additional Front Page Headers:', 'all_in_one_seo_pack' ),
401
- 'help_text' => __( 'What you enter here will be copied verbatim to your header on the front page if you have a static page set in Settings, Reading.', 'all_in_one_seo_pack' ) . ' ' . __( 'You can enter whatever additional headers you want here, even references to stylesheets.', 'all_in_one_seo_pack' ) . ' ' . __( 'This will fall back to using Additional Page Headers if you have them set and nothing is entered here.', 'all_in_one_seo_pack' ),
402
  'type' => 'textarea', 'default' => '', 'sanitize' => 'default' ),
 
403
  "home_meta_tags"=> Array(
404
  'name' => __( 'Additional Blog Page Headers:', 'all_in_one_seo_pack' ),
405
- 'help_text' => __( 'What you enter here will be copied verbatim to your header on the home page if you have Front page displays your latest posts selected in Settings, Reading.  It will also be copied verbatim to your header on the Posts page if you have one set in Settings, Reading.', 'all_in_one_seo_pack' ) . ' ' . __( 'You can enter whatever additional headers you want here, even references to stylesheets.', 'all_in_one_seo_pack' ),
406
  'type' => 'textarea', 'default' => '', 'sanitize' => 'default' ),
407
- "do_log"=> Array(
408
- 'name' => __( 'Log important events:', 'all_in_one_seo_pack' ),
409
- 'help_text' => __( 'Check this and SEO pack will create a log of important events (all_in_one_seo_pack.log) in its plugin directory which might help debugging it. Make sure this directory is writable.', 'all_in_one_seo_pack' ),
410
- 'default' => null ),
411
  );
 
412
 
413
  $this->locations = Array(
414
  'default' => Array( 'name' => $this->name, 'prefix' => 'aiosp_', 'type' => 'settings', 'options' => null ),
@@ -418,7 +481,7 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
418
  'edit' => Array( 'type' => 'hidden', 'default' => 'aiosp_edit', 'prefix' => true, 'nowrap' => 1 ),
419
  'nonce-aioseop-edit' => Array( 'type' => 'hidden', 'default' => null, 'prefix' => false, 'nowrap' => 1 ),
420
  'upgrade' => Array( 'type' => 'html', 'label' => 'none',
421
- 'default' => '<a target="__blank" href="http://semperplugins.com/plugins/all-in-one-seo-pack-pro-version/">'
422
  . __( 'Upgrade to All in One SEO Pack Pro Version', 'all_in_one_seo_pack' ) . '</a>'
423
  ),
424
  'snippet' => Array( 'name' => __( 'Preview Snippet', 'all_in_one_seo_pack' ), 'type' => 'custom', 'help_text' => __( 'A preview of what this page might look like in search engine results.', 'all_in_one_seo_pack' ), 'label' => 'top',
@@ -452,43 +515,53 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
452
  $this->layout = Array(
453
  'default' => Array(
454
  'name' => __( 'General Settings', 'all_in_one_seo_pack' ),
 
455
  'options' => Array() // this is set below, to the remaining options -- pdb
456
  ),
457
  'home' => Array(
458
  'name' => __( 'Home Page Settings', 'all_in_one_seo_pack' ),
 
459
  'options' => Array( 'home_title', 'home_description', 'home_keywords' )
460
  ),
461
  'keywords' => Array(
462
  'name' => __( 'Keyword Settings', 'all_in_one_seo_pack' ),
 
463
  'options' => Array( "togglekeywords", "use_categories", "use_tags_as_keywords", "dynamic_postspage_keywords" )
464
  ),
465
  'title' => Array(
466
  'name' => __( 'Title Settings', 'all_in_one_seo_pack' ),
 
467
  'options' => Array( "rewrite_titles", "force_rewrites", "cap_titles", "cap_cats", "page_title_format", "post_title_format", "category_title_format", "archive_title_format", "author_title_format",
468
  "tag_title_format", "search_title_format", "description_format", "404_title_format", "paged_format" )
469
  ),
470
  'cpt' => Array(
471
  'name' => __( 'Custom Post Type Settings', 'all_in_one_seo_pack' ),
 
472
  'options' => Array( "enablecpost", "cpostadvanced", "cpostactive", "cposttitles" )
473
  ),
474
  'display' => Array(
475
  'name' => __( 'Display Settings', 'all_in_one_seo_pack' ),
 
476
  'options' => Array( "posttypecolumns", "admin_bar", "custom_menu_order" )
477
  ),
478
  'webmaster' => Array(
479
  'name' => __( 'Webmaster Verification', 'all_in_one_seo_pack' ),
 
480
  'options' => Array( "google_verify", "bing_verify", "pinterest_verify" )
481
  ),
482
  'google' => Array(
483
  'name' => __( 'Google Settings', 'all_in_one_seo_pack' ),
484
- 'options' => Array( "google_publisher", "google_disable_profile", "google_analytics_id", "ga_domain", "ga_multi_domain", "ga_track_outbound_links" )
 
485
  ),
486
  'noindex' => Array(
487
  'name' => __( 'Noindex Settings', 'all_in_one_seo_pack' ),
488
- 'options' => Array( 'cpostnoindex', 'cpostnofollow', 'category_noindex', 'archive_date_noindex', 'archive_author_noindex', 'tags_noindex' )
 
489
  ),
490
  'advanced' => Array(
491
  'name' => __( 'Advanced Settings', 'all_in_one_seo_pack' ),
 
492
  'options' => Array( 'generate_descriptions', 'hide_paginated_descriptions', 'unprotect_meta', 'ex_pages', 'post_meta_tags', 'page_meta_tags', 'front_meta_tags', 'home_meta_tags' )
493
  )
494
  );
@@ -711,16 +784,16 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
711
  }
712
 
713
  function add_admin_pointers() {
714
- $this->pointers['aioseop_menu_203'] = Array( 'pointer_target' => '#toplevel_page_all-in-one-seo-pack-aioseop_class',
715
  'pointer_text' => '<h3>' . sprintf( __( 'Welcome to Version %s!', 'all_in_one_seo_pack' ), AIOSEOP_VERSION )
716
  . '</h3><p>' . __( 'Thank you for running the latest and greatest All in One SEO Pack ever! Please review your settings, as we\'re always adding new features for you!', 'all_in_one_seo_pack' ) . '</p>',
717
  'pointer_edge' => 'top',
718
  'pointer_align' => 'left',
719
  'pointer_scope' => 'global'
720
  );
721
- $this->pointers['aioseop_welcome_203'] = Array( 'pointer_target' => '#aioseop_top_button',
722
  'pointer_text' => '<h3>' . sprintf( __( 'Review Your Settings', 'all_in_one_seo_pack' ), AIOSEOP_VERSION )
723
- . '</h3><p>' . __( 'Thank you for running the latest and greatest All in One SEO Pack ever! New in 2.0: manage your performance with our Performance module; enable it from our new feature manager! And please review your settings, we have added some new ones!', 'all_in_one_seo_pack' ) . '</p>',
724
  'pointer_edge' => 'bottom',
725
  'pointer_align' => 'left',
726
  'pointer_scope' => 'local'
@@ -769,7 +842,7 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
769
  $get_opts = $this->default_options( $location );
770
  foreach ( Array( 'keywords', 'description', 'title', 'sitemap_exclude', 'disable', 'disable_analytics', 'noindex', 'nofollow', 'noodp', 'noydir', 'titleatr', 'menulabel' ) as $f ) {
771
  $field = "aiosp_$f";
772
- $get_opts[$field] = htmlspecialchars( stripcslashes( get_post_meta( $post_id, '_aioseop_' . $f, true ) ) );
773
  }
774
  $opts = wp_parse_args( $opts, $get_opts );
775
  return $opts;
@@ -859,7 +932,7 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
859
  <a target="_blank" title="<?php _e('All in One SEO Plugin Support Forum', 'all_in_one_seo_pack' ); ?>"
860
  href="http://semperplugins.com/support/"><?php _e('Support Forum', 'all_in_one_seo_pack' ); ?></a>
861
  | <strong><a target="_blank" title="<?php _e('Pro Version', 'all_in_one_seo_pack' ); ?>"
862
- href="http://semperplugins.com/plugins/all-in-one-seo-pack-pro-version/">
863
  <?php _e('UPGRADE TO PRO VERSION', 'all_in_one_seo_pack' ); ?></a></strong></p>
864
  </div>
865
  <?php
@@ -938,9 +1011,9 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
938
  $post = $this->get_queried_object();
939
 
940
  if ( is_single() || is_page() ) {
941
- $aiosp_disable = htmlspecialchars(stripcslashes( get_post_meta( $post->ID, '_aioseop_disable', true ) ) );
942
  if ( $aiosp_disable ) {
943
- $aiosp_disable_analytics = htmlspecialchars(stripcslashes( get_post_meta( $post->ID, '_aioseop_disable_analytics', true ) ) );
944
  if ( !$aiosp_disable_analytics ) {
945
  if ( aioseop_option_isset( 'aiosp_google_analytics_id' ) ) {
946
  remove_action( 'aioseop_modules_wp_head', array( $this, 'aiosp_google_analytics' ) );
@@ -953,7 +1026,7 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
953
  if ( !empty( $aioseop_options['aiosp_cpostadvanced'] ) ) {
954
  $wp_post_types = $aioseop_options['aiosp_cpostactive'];
955
  if ( empty( $aioseop_options['aiosp_cpostactive'] ) ) return;
956
- if( !is_singular( $wp_post_types ) ) return;
957
  }
958
  }
959
 
@@ -1026,15 +1099,27 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
1026
  if ( is_feed() ) return;
1027
 
1028
  if( aioseop_mrt_exclude_this_page() ) return;
 
 
 
 
 
 
 
 
 
 
 
 
 
1029
 
1030
  global $wp_query;
1031
  global $aioseop_options;
1032
- $post = $this->get_queried_object();
1033
  $meta_string = null;
1034
  $description = '';
1035
-
1036
  if ( is_single() || is_page() ) {
1037
- $aiosp_disable = htmlspecialchars( stripcslashes( get_post_meta( $post->ID, '_aioseop_disable', true ) ) );
1038
  if ( $aiosp_disable ) return;
1039
  if( empty( $aioseop_options['aiosp_enablecpost'] ) ) {
1040
  $wp_post_types = get_post_types( Array( '_builtin' => true ) ); // don't display meta if SEO isn't enabled on custom post types -- pdb
@@ -1089,9 +1174,9 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
1089
  if ( $is_front_page_keywords )
1090
  $keywords = trim( $this->internationalize( $aioseop_options['aiosp_home_keywords'] ) );
1091
  elseif ( $this->is_static_posts_page() && !$aioseop_options['aiosp_dynamic_postspage_keywords'] ) // and if option = use page set keywords instead of keywords from recent posts
1092
- $keywords = stripcslashes( $this->internationalize( get_post_meta( $post->ID, "_aioseop_keywords", true ) ) );
1093
  elseif ( !empty( $blog_page ) && !$aioseop_options['aiosp_dynamic_postspage_keywords'] )
1094
- $keywords = stripcslashes( $this->internationalize( get_post_meta( $blog_page->ID, "_aioseop_keywords", true ) ) );
1095
  else $keywords = $this->get_all_keywords();
1096
 
1097
  if ( is_category() && $this->show_page_description() )
@@ -1103,14 +1188,13 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
1103
  elseif ( is_author() && $this->show_page_description() )
1104
  $description = $this->internationalize( get_the_author_meta( 'description' ) );
1105
  else if ( $is_front_page )
1106
- $description = trim( stripcslashes( $this->internationalize( $aioseop_options['aiosp_home_description'] ) ) );
1107
  else if ( is_single() || is_page() || is_home() || $this->is_static_posts_page() )
1108
-
1109
- $description = $this->get_aioseop_description( $post );
1110
 
1111
  /*
1112
  if ( $this->is_static_front_page() )
1113
- $description = trim( stripcslashes( $this->internationalize( $aioseop_options['aiosp_home_description'] ) ) );
1114
  elseif ( !empty( $blog_page ) )
1115
  $description = $this->get_post_description( $blog_page );
1116
  if ( empty( $description ) && is_object( $post ) && !is_archive() && empty( $blog_page ) )
@@ -1165,23 +1249,25 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
1165
 
1166
  if ( isset( $keywords ) && $togglekeywords == 0 && !empty( $keywords ) && !( is_home() && is_paged() ) ) {
1167
  if ( isset( $meta_string ) ) $meta_string .= "\n";
1168
- $keywords = str_replace( '"', '', $keywords );
1169
  $meta_string .= sprintf( "<meta name=\"keywords\" content=\"%s\" />\n", $keywords );
1170
  }
1171
 
1172
  $is_tag = is_tag();
1173
 
 
 
1174
  if ( ( is_category() && $aioseop_options['aiosp_category_noindex'] ) || ( !is_category() && is_archive() &&!$is_tag
1175
  && ( ( $aioseop_options['aiosp_archive_date_noindex'] && is_date() ) || ( $aioseop_options['aiosp_archive_author_noindex'] && is_author() ) ) )
1176
- || ( $aioseop_options['aiosp_tags_noindex'] && $is_tag ) ) {
1177
- $meta_string .= '<meta name="robots" content="noindex,follow" />' . "\n";
1178
  } else {
1179
  if ( is_single() || is_page() ) {
1180
  $post_type = get_post_type();
1181
- $aiosp_noindex = htmlspecialchars( stripcslashes( get_post_meta( $post->ID, '_aioseop_noindex', true ) ) );
1182
- $aiosp_nofollow = htmlspecialchars( stripcslashes( get_post_meta( $post->ID, '_aioseop_nofollow', true ) ) );
1183
- $aiosp_noodp = htmlspecialchars( stripcslashes( get_post_meta( $post->ID, '_aioseop_noodp', true ) ) );
1184
- $aiosp_noydir = htmlspecialchars( stripcslashes( get_post_meta( $post->ID, '_aioseop_noydir', true ) ) );
1185
  if ( $aiosp_noindex || $aiosp_nofollow || $aiosp_noodp || $aiosp_noydir || !empty( $aioseop_options['aiosp_cpostnoindex'] ) || !empty( $aioseop_options['aiosp_cpostnofollow'] ) ) {
1186
  $noindex = "index";
1187
  $nofollow = "follow";
@@ -1194,11 +1280,15 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
1194
  $nofollow = "no" . $nofollow;
1195
  if ( $aiosp_noodp ) $nofollow .= ',noodp';
1196
  if ( $aiosp_noydir ) $nofollow .= ',noydir';
1197
- $meta_string .= '<meta name="robots" content="' . $noindex . ',' . $nofollow . '" />' . "\n";
1198
  }
1199
  }
1200
  }
1201
 
 
 
 
 
1202
  if ( $is_front_page )
1203
  foreach( Array( 'google' => 'google-site-verification', 'bing' => 'msvalidate.01', 'pinterest' => 'p:domain_verify' ) as $k => $v )
1204
  if ( !empty( $aioseop_options["aiosp_{$k}_verify"] ) )
@@ -1206,7 +1296,7 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
1206
 
1207
  foreach( Array( 'page_meta', 'post_meta', 'home_meta', 'front_meta' ) as $meta ) {
1208
  if ( !empty( $aioseop_options["aiosp_{$meta}_tags" ] ) )
1209
- $$meta = html_entity_decode( stripcslashes( $aioseop_options["aiosp_{$meta}_tags" ] ) );
1210
  else
1211
  $$meta = '';
1212
  }
@@ -1220,6 +1310,8 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
1220
  if ( isset( $meta_string ) ) $meta_string .= "\n";
1221
  $meta_string .= $post_meta;
1222
  }
 
 
1223
 
1224
  if ( !empty( $post ) && isset( $post->post_author ) && empty( $aioseop_options['aiosp_google_disable_profile'] ) )
1225
  $googleplus = get_the_author_meta( 'googleplus', $post->post_author );
@@ -1228,12 +1320,22 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
1228
  $googleplus = $aioseop_options['aiosp_google_publisher'];
1229
 
1230
  if ( $is_front_page && !empty( $aioseop_options['aiosp_google_publisher'] ) )
1231
- $meta_string = '<link rel="publisher" href="' . $aioseop_options['aiosp_google_publisher'] . '" />' . "\n" . $meta_string;
1232
- if ( is_singular() && ( $googleplus ) ) {
1233
- $meta_string = '<link rel="author" href="' . $googleplus . '" />' . "\n" . $meta_string;
1234
- } else if ( !empty( $aioseop_options['aiosp_google_publisher'] ) ) {
1235
- $meta_string = '<link rel="author" href="' . $aioseop_options['aiosp_google_publisher'] . '" />' . "\n" . $meta_string;
1236
- }
 
 
 
 
 
 
 
 
 
 
1237
 
1238
  if ( $is_front_page && !empty( $front_meta ) ) {
1239
  if ( isset( $meta_string ) ) $meta_string .= "\n";
@@ -1314,14 +1416,47 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
1314
  echo "<!-- /all in one seo pack -->\n";
1315
  }
1316
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1317
  function aiosp_google_analytics() {
1318
  global $aioseop_options;
 
 
1319
  ob_start();
1320
- ?>
1321
- <script type="text/javascript">
1322
-
 
1323
  var _gaq = _gaq || [];
1324
- _gaq.push(['_setAccount', '<?php echo $aioseop_options['aiosp_google_analytics_id']; ?>']);
 
 
 
 
 
 
1325
  <?php if ( !empty( $aioseop_options['aiosp_ga_multi_domain'] ) ) {
1326
  ?> _gaq.push(['_setAllowLinker', true]);
1327
  <?php
@@ -1343,18 +1478,22 @@ function aiosp_google_analytics() {
1343
  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
1344
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
1345
  })();
1346
-
1347
  </script>
1348
  <?php
1349
- if ( $aioseop_options['aiosp_ga_track_outbound_links'] ) {
1350
- ?>
1351
  <script type="text/javascript">
1352
- function recordOutboundLink(link, category, action) {
1353
- _gat._getTrackerByName()._trackEvent(category, action);
1354
- if ( link.target == '_blank' ) return true;
1355
- setTimeout('document.location = "' + link.href + '"', 100);
1356
- return false;
1357
- }
 
 
 
 
 
1358
  /* use regular Javascript for this */
1359
  function getAttr(ele, attr) {
1360
  var result = (ele.getAttribute && ele.getAttribute(attr)) || null;
@@ -1383,8 +1522,9 @@ function aiosp_google_analytics() {
1383
  };
1384
  </script>
1385
  <?php
1386
- }
1387
  $analytics = ob_get_clean();
 
1388
  echo apply_filters( 'aiosp_google_analytics', $analytics );
1389
  }
1390
 
@@ -1485,7 +1625,7 @@ function aiosp_google_analytics() {
1485
  if ( !$this->show_page_description() )
1486
  return '';
1487
 
1488
- $description = trim( stripcslashes( $this->internationalize( get_post_meta( $post->ID, "_aioseop_description", true ) ) ) );
1489
  if ( !$description ) {
1490
  $description = $this->trim_excerpt_without_filters_full_length( $this->internationalize( $post->post_excerpt ) );
1491
  if ( !$description && $aioseop_options["aiosp_generate_descriptions"] ) {
@@ -1514,16 +1654,13 @@ function aiosp_google_analytics() {
1514
  return $blog_page;
1515
  }
1516
 
1517
- function get_aioseop_description( $p = null ) {
1518
  global $aioseop_options;
1519
- if ( $p === null ) {
1520
- global $post;
1521
- } else {
1522
- $post = $p;
1523
- }
1524
  $blog_page = $this->get_blog_page();
1525
  if ( $this->is_static_front_page() )
1526
- $description = trim( stripcslashes( $this->internationalize( $aioseop_options['aiosp_home_description'] ) ) );
1527
  elseif ( !empty( $blog_page ) )
1528
  $description = $this->get_post_description( $blog_page );
1529
  if ( empty( $description ) && is_object( $post ) && !is_archive() && empty( $blog_page ) )
@@ -1537,7 +1674,7 @@ function aiosp_google_analytics() {
1537
  $title_tag_start = "<title>";
1538
  $title_tag_end = "</title>";
1539
  $len_start = $this->strlen( $title_tag_start );
1540
- $title = stripcslashes( trim( $title ) );
1541
  $start = $this->strpos( $content, $title_tag_start );
1542
  $end = $this->strpos( $content, $title_tag_end );
1543
 
@@ -1585,7 +1722,7 @@ function aiosp_google_analytics() {
1585
  } else if ( is_single() ) {
1586
  $title = $this->internationalize( single_post_title( '', false ) );
1587
  } else if ( is_search() && isset($s) && !empty($s) ) {
1588
- $search = esc_attr( stripcslashes($s) );
1589
  if ( !empty( $aioseop_options['aiosp_cap_titles'] ) )
1590
  $search = $this->capitalize( $search );
1591
  $title = $search;
@@ -1773,13 +1910,14 @@ function aiosp_google_analytics() {
1773
  $title = $this->paged_title( $title );
1774
  return apply_filters( 'aioseop_title_single', $title );
1775
  } else if ( is_search() && isset( $s ) && !empty( $s ) ) {
1776
- $search = esc_attr( stripcslashes( $s ) );
1777
  if ( !empty( $aioseop_options['aiosp_cap_titles'] ) )
1778
  $search = $this->capitalize( $search );
1779
  $title_format = $aioseop_options['aiosp_search_title_format'];
1780
  $title = str_replace( '%blog_title%', $this->internationalize( get_bloginfo( 'name' ) ), $title_format );
1781
  $title = str_replace( '%blog_description%', $this->internationalize( get_bloginfo( 'description' ) ), $title );
1782
- $title = str_replace( '%search%', $search, $title);
 
1783
  return $title;
1784
  } else if ( is_tag() ) {
1785
  global $utw;
@@ -1934,14 +2072,14 @@ function aiosp_google_analytics() {
1934
  }
1935
  }
1936
  $text = $this->substr( $text, 0, $max );
1937
- return trim( stripcslashes( $text ) );
1938
  }
1939
 
1940
  function trim_excerpt_without_filters_full_length( $text ) {
1941
  $text = str_replace( ']]>', ']]&gt;', $text );
1942
  $text = preg_replace( '|\[(.+?)\](.+?\[/\\1\])?|s', '', $text );
1943
  $text = strip_tags( $text );
1944
- return trim( stripcslashes( $text ) );
1945
  }
1946
 
1947
  /**
@@ -1965,11 +2103,11 @@ function aiosp_google_analytics() {
1965
  $keywords_i = null;
1966
 
1967
  $id = $post->ID;
1968
- $keywords_i = stripcslashes( $this->internationalize( get_post_meta( $id, "_aioseop_keywords", true ) ) );
1969
  if ( is_attachment() ) {
1970
  $id = $post->post_parent;
1971
  if ( empty( $keywords_i ) )
1972
- $keywords_i = stripcslashes( $this->internationalize( get_post_meta( $id, "_aioseop_keywords", true ) ) );
1973
  }
1974
  $keywords_i = str_replace( '"', '', $keywords_i );
1975
  if (isset( $keywords_i ) && !empty( $keywords_i ) ) {
@@ -1993,13 +2131,13 @@ function aiosp_google_analytics() {
1993
  $tag = $tag->tag;
1994
  $tag = str_replace( '_', ' ', $tag );
1995
  $tag = str_replace( '-', ' ', $tag );
1996
- $tag = stripcslashes( $tag );
1997
  $keywords[] = $tag;
1998
  }
1999
  }
2000
 
2001
  // autometa
2002
- $autometa = stripcslashes( get_post_meta( $id, 'autometa', true ) );
2003
  if ( isset( $autometa ) && !empty( $autometa ) ) {
2004
  $autometa_array = explode( ' ', $autometa );
2005
  foreach ( $autometa_array as $e )
@@ -2026,7 +2164,7 @@ function aiosp_google_analytics() {
2026
  if ( $post ) {
2027
  // custom field keywords
2028
  $keywords_i = null;
2029
- $keywords_i = stripcslashes( get_post_meta( $post->ID, "_aioseop_keywords", true ) );
2030
  $keywords_i = str_replace( '"', '', $keywords_i );
2031
  if ( isset( $keywords_i) && !empty( $keywords_i ) )
2032
  $keywords[] = $keywords_i;
@@ -2128,7 +2266,7 @@ function aiosp_google_analytics() {
2128
 
2129
  function admin_bar_upgrade_menu() {
2130
  global $wp_admin_bar;
2131
- $wp_admin_bar->add_menu( array( 'parent' => AIOSEOP_PLUGIN_DIRNAME, 'title' => __( 'Upgrade To Pro', 'all_in_one_seo_pack' ), 'id' => 'aioseop-pro-upgrade', 'href' => 'http://semperplugins.com/plugins/all-in-one-seo-pack-pro-version/', 'meta' => Array( 'target' => '_blank' ) ) );
2132
  }
2133
 
2134
  function menu_order() {
@@ -2208,7 +2346,7 @@ function aiosp_google_analytics() {
2208
  do_action( 'aioseop_modules_add_menus', $file );
2209
 
2210
  $metaboxes = apply_filters( 'aioseop_add_post_metabox', Array() );
2211
-
2212
  if ( !empty( $metaboxes ) ) {
2213
  if ( $this->tabbed_metaboxes ) {
2214
  $tabs = Array();
@@ -2223,7 +2361,9 @@ function aiosp_google_analytics() {
2223
  $tab_num = count( $m );
2224
  $title = $m[0]['title'];
2225
  if ( $title != $this->plugin_name ) $title = $this->plugin_name . ' - ' . $title;
2226
- if ( $tab_num == 1 ) {
 
 
2227
  add_meta_box( $m[0]['id'], $title, $m[0]['callback'], $m[0]['post_type'], $m[0]['context'], $m[0]['priority'], $m[0]['callback_args'] );
2228
  } elseif ( $tab_num > 1 ) {
2229
  add_meta_box( $m[0]['id'] . '_tabbed', $title, Array( $this, 'display_tabbed_metabox' ), $m[0]['post_type'], $m[0]['context'], $m[0]['priority'], $m );
@@ -2233,6 +2373,8 @@ function aiosp_google_analytics() {
2233
  } else {
2234
  foreach ( $metaboxes as $m ) {
2235
  $title = $m['title'];
 
 
2236
  if ( $title != $this->plugin_name ) $title = $this->plugin_name . ' - ' . $title;
2237
  add_meta_box( $m['id'], $title, $m['callback'], $m['post_type'], $m['context'], $m['priority'], $m['callback_args'] );
2238
  }
61
  $this->store_option = true;
62
  $this->file = __FILE__; // the current file
63
  parent::__construct();
64
+ $this->default_options = array(
65
+ "donate"=> Array(
66
+ 'name' => __( 'I enjoy this plugin and have made a donation:', 'all_in_one_seo_pack' ),
67
+ 'help_text' => __( "All donations support continued development of this free software.", 'all_in_one_seo_pack' ),
68
+ 'default' => 0),
69
+
70
+ "can"=> Array(
71
+ 'name' => __( 'Canonical URLs:', 'all_in_one_seo_pack' ),
72
+ 'help_text' => __( "This option will automatically generate Canonical URLs for your entire WordPress installation. This will help to prevent duplicate content penalties by <a href='http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html' target='_blank'>Google</a>.<br /><a href='http://semperplugins.com/documentation/general-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
73
+ 'default' => 1),
74
+
75
+ "use_original_title"=> Array(
76
+ 'name' => __( 'Use Original Title:', 'all_in_one_seo_pack' ),
77
+ 'help_text' => __( "Use wp_title to set the title; disable this option if you run into conflicts with the title being set by your theme or another plugin.<br /><a href='http://semperplugins.com/documentation/general-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
78
+ 'type' => 'radio',
79
+ 'default' => 0,
80
+ 'initial_options' => Array( 1 => __( 'Enabled', 'all_in_one_seo_pack' ),
81
+ 0 => __( 'Disabled', 'all_in_one_seo_pack' ) )
82
+ ),
83
+
84
+ "do_log"=> Array(
85
+ 'name' => __( 'Log important events:', 'all_in_one_seo_pack' ),
86
+ 'help_text' => __( "Check this and All in One SEO Pack will create a log of important events (all_in_one_seo_pack.log) in its plugin directory which might help debugging. Make sure this directory is writable.<br /><a href='http://semperplugins.com/documentation/general-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
87
+ 'default' => null ),
88
+
89
+ "home_title"=> Array(
90
  'name' => __( 'Home Title:', 'all_in_one_seo_pack' ),
91
+ 'help_text' => __( "As the name implies, this will be the Meta Title of your homepage. This is independent of any other option. If not set, the default Site Title (found in WordPress under Settings, General, Site Title) will be used.<br /><a href='http://semperplugins.com/documentation/home-page-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
92
  'default' => null, 'type' => 'textarea', 'sanitize' => 'text' ),
93
+
94
+ "home_description"=> Array(
95
  'name' => __( 'Home Description:', 'all_in_one_seo_pack' ),
96
+ 'help_text' => __( "This will be the Meta Description for your homepage. This is independent of any other option. The default is no Meta Description at all if this is not set.<br /><a href='http://semperplugins.com/documentation/home-page-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
97
  'default' => '', 'type' => 'textarea', 'sanitize' => 'text' ),
98
+
99
+ "home_keywords"=> Array(
100
+ 'name' => __( 'Home Keywords (comma separated):', 'all_in_one_seo_pack' ),
101
+ 'help_text' => __( "Enter a comma separated list of your most important keywords for your site that will be written as Meta Keywords on your homepage. Don\'t stuff everything in here.<br /><a href='http://semperplugins.com/documentation/home-page-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
102
+ 'default' => null, 'type' => 'textarea', 'sanitize' => 'text',
103
+ 'condshow' => Array( "aiosp_togglekeywords" => 0 ) ),
104
+
105
+ "togglekeywords" => Array(
106
  'name' => __( 'Use Keywords:', 'all_in_one_seo_pack' ),
107
+ 'help_text' => __( "This option allows you to toggle the use of Meta Keywords throughout the whole of the site.<br /><a href='http://semperplugins.com/documentation/keyword-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
108
  'default' => 0,
109
  'type' => 'radio',
110
  'initial_options' => Array( 0 => __( 'Enabled', 'all_in_one_seo_pack' ),
111
  1 => __( 'Disabled', 'all_in_one_seo_pack' ) )
112
  ),
113
+
114
+ "use_categories"=> Array(
115
+ 'name' => __( 'Use Categories for Meta Keywords:', 'all_in_one_seo_pack' ),
116
+ 'help_text' => __( "Check this if you want your categories for a given post used as the Meta Keywords for this post (in addition to any keywords you specify on the Edit Post screen).<br /><a href='http://semperplugins.com/documentation/keyword-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
117
+ 'default' => 0,
118
  'condshow' => Array( "aiosp_togglekeywords" => 0 ) ),
119
+
120
+ "use_tags_as_keywords" => Array(
121
+ 'name' => __( 'Use Tags for Meta Keywords:', 'all_in_one_seo_pack' ),
122
+ 'help_text' => __( "Check this if you want your tags for a given post used as the Meta Keywords for this post (in addition to any keywords you specify on the Edit Post screen).<br /><a href='http://semperplugins.com/documentation/keyword-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
123
+ 'default' => 1,
124
+ 'condshow' => Array( "aiosp_togglekeywords" => 0 ) ),
125
+
126
+ "dynamic_postspage_keywords"=> Array(
127
+ 'name' => __( 'Dynamically Generate Keywords for Posts Page:', 'all_in_one_seo_pack' ),
128
+ 'help_text' => __( "Check this if you want your keywords on your Posts page (set in WordPress under Settings, Reading, Front Page Displays) to be dynamically generated from the keywords of the posts showing on that page. If unchecked, it will use the keywords set in the Edit Page screen for the Posts page.<br /><a href='http://semperplugins.com/documentation/keyword-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
129
+ 'default' => 1,
130
+ 'condshow' => Array( "aiosp_togglekeywords" => 0 ) ),
131
+
132
  "rewrite_titles"=> Array(
133
  'name' => __( 'Rewrite Titles:', 'all_in_one_seo_pack' ),
134
+ 'help_text' => __( "Note that this is all about the title tag. This is what you see in your browser's window title bar. This is NOT visible on a page, only in the title bar and in the source code. If enabled, all page, post, category, search and archive page titles get rewritten. You can specify the format for most of them. For example: Using the default post title format below, Rewrite Titles will write all post titles as 'Post Title | Blog Name'. If you have manually defined a title using All in One SEO Pack, this will become the title of your post in the format string.<br /><a href='http://semperplugins.com/documentation/title-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
135
  'default' => 1,
136
  'type' => 'radio',
137
  'initial_options' => Array( 1 => __( 'Enabled', 'all_in_one_seo_pack' ),
138
  0 => __( 'Disabled', 'all_in_one_seo_pack' ) )
139
  ),
140
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
  "cap_titles"=> Array(
142
  'name' => __( 'Capitalize Titles:', 'all_in_one_seo_pack' ),
143
+ 'help_text' => __( "Check this and Search Page Titles and Tag Page Titles will have the first letter of each word capitalized.<br /><a href='http://semperplugins.com/documentation/title-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
144
  'default' => 1),
145
+
146
  "cap_cats"=> Array(
147
  'name' => __( 'Capitalize Category Titles:', 'all_in_one_seo_pack' ),
148
+ 'help_text' => __( "Check this and Category Titles will have the first letter of each word capitalized.<br /><a href='http://semperplugins.com/documentation/title-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
149
  'default' => 1),
150
+
151
+ "page_title_format"=> Array(
152
  'name' => __( 'Page Title Format:', 'all_in_one_seo_pack' ),
153
  'help_text' =>
154
+ __( "This controls the format of the title tag for Pages.<br /><a href='http://semperplugins.com/documentation/title-settings/' target='_blank'>Click here for documentation on this setting</a><br />The following macros are supported:", 'all_in_one_seo_pack' )
155
  . '<ul><li>' . __( '%blog_title% - Your blog title', 'all_in_one_seo_pack' ) . '</li><li>' .
156
  __( '%blog_description% - Your blog description', 'all_in_one_seo_pack' ) . '</li><li>' .
157
  __( '%page_title% - The original title of the page', 'all_in_one_seo_pack' ) . '</li><li>' .
165
  'type' => 'text',
166
  'default' => '%page_title% | %blog_title%',
167
  'condshow' => Array( "aiosp_rewrite_titles" => 1 ) ),
168
+
169
+ "post_title_format"=> Array(
170
  'name' => __( 'Post Title Format:', 'all_in_one_seo_pack' ),
171
  'help_text' =>
172
+ __( "This controls the format of the title tag for Posts.<br /><a href='http://semperplugins.com/documentation/title-settings/' target='_blank'>Click here for documentation on this setting</a><br />The following macros are supported:", 'all_in_one_seo_pack' )
173
  . '<ul><li>' . __( '%blog_title% - Your blog title', 'all_in_one_seo_pack' ) . '</li><li>' .
174
  __( '%blog_description% - Your blog description', 'all_in_one_seo_pack' ) . '</li><li>' .
175
  __( '%post_title% - The original title of the post', 'all_in_one_seo_pack' ) . '</li><li>' .
183
  'type' => 'text',
184
  'default' => '%post_title% | %blog_title%',
185
  'condshow' => Array( "aiosp_rewrite_titles" => 1 ) ),
186
+
187
+ "category_title_format"=> Array(
188
  'name' => __( 'Category Title Format:', 'all_in_one_seo_pack' ),
189
  'help_text' =>
190
+ __( "This controls the format of the title tag for Category Archives.<br /><a href='http://semperplugins.com/documentation/title-settings/' target='_blank'>Click here for documentation on this setting</a><br />The following macros are supported:", 'all_in_one_seo_pack' ) .
191
  '<ul><li>' . __( '%blog_title% - Your blog title', 'all_in_one_seo_pack' ) . '</li><li>' .
192
  __( '%blog_description% - Your blog description', 'all_in_one_seo_pack' ) . '</li><li>' .
193
  __( '%category_title% - The original title of the category', 'all_in_one_seo_pack' ) . '</li><li>' .
195
  'type' => 'text',
196
  'default' => '%category_title% | %blog_title%',
197
  'condshow' => Array( "aiosp_rewrite_titles" => 1 ) ),
198
+
199
+ "archive_title_format"=> Array(
200
  'name' => __( 'Date Archive Title Format:', 'all_in_one_seo_pack' ),
201
  'help_text' =>
202
+ __( "This controls the format of the title tag for Date Archives.<br /><a href='http://semperplugins.com/documentation/title-settings/' target='_blank'>Click here for documentation on this setting</a><br />The following macros are supported:", 'all_in_one_seo_pack' ) .
203
  '<ul><li>' . __( '%blog_title% - Your blog title', 'all_in_one_seo_pack' ) . '</li><li>' .
204
  __( '%blog_description% - Your blog description', 'all_in_one_seo_pack' ) . '</li><li>' .
205
  __( '%date% - The original archive title given by wordpress, e.g. "2007" or "2007 August"', 'all_in_one_seo_pack' ) . '</li><li>' .
209
  'type' => 'text',
210
  'default' => '%date% | %blog_title%',
211
  'condshow' => Array( "aiosp_rewrite_titles" => 1 ) ),
212
+
213
  "author_title_format"=> Array(
214
  'name' => __( 'Author Archive Title Format:', 'all_in_one_seo_pack' ),
215
  'help_text' =>
216
+ __( "This controls the format of the title tag for Author Archives.<br /><a href='http://semperplugins.com/documentation/title-settings/' target='_blank'>Click here for documentation on this setting</a><br />The following macros are supported:", 'all_in_one_seo_pack' ) .
217
  '<ul><li>' . __( '%blog_title% - Your blog title', 'all_in_one_seo_pack' ) . '</li><li>' .
218
  __( '%blog_description% - Your blog description', 'all_in_one_seo_pack' ) . '</li><li>' .
219
  __( '%author% - The original archive title given by wordpress, e.g. "Steve" or "John Smith"', 'all_in_one_seo_pack' ) . '</li></ul>',
220
  'type' => 'text',
221
  'default' => '%author% | %blog_title%',
222
  'condshow' => Array( "aiosp_rewrite_titles" => 1 ) ),
223
+
224
+ "tag_title_format"=> Array(
225
  'name' => __( 'Tag Title Format:', 'all_in_one_seo_pack' ),
226
  'help_text' =>
227
+ __( "This controls the format of the title tag for Tag Archives.<br /><a href='http://semperplugins.com/documentation/title-settings/' target='_blank'>Click here for documentation on this setting</a><br />The following macros are supported:", 'all_in_one_seo_pack' ) .
228
  '<ul><li>' . __( '%blog_title% - Your blog title', 'all_in_one_seo_pack' ) . '</li><li>' .
229
  __( '%blog_description% - Your blog description', 'all_in_one_seo_pack' ) . '</li><li>' .
230
  __( '%tag% - The name of the tag', 'all_in_one_seo_pack' ) . '</li></ul>',
231
  'type' => 'text',
232
  'default' => '%tag% | %blog_title%',
233
  'condshow' => Array( "aiosp_rewrite_titles" => 1 ) ),
234
+
235
+ "search_title_format"=> Array(
236
  'name' => __( 'Search Title Format:', 'all_in_one_seo_pack' ),
237
  'help_text' =>
238
+ __( "This controls the format of the title tag for the Search page.<br /><a href='http://semperplugins.com/documentation/title-settings/' target='_blank'>Click here for documentation on this setting</a><br />The following macros are supported:", 'all_in_one_seo_pack' ) .
239
  '<ul><li>' . __( '%blog_title% - Your blog title', 'all_in_one_seo_pack' ) . '</li><li>' .
240
  __( '%blog_description% - Your blog description', 'all_in_one_seo_pack' ) . '</li><li>' .
241
  __( '%search% - What was searched for', 'all_in_one_seo_pack' ) . '</li></ul>',
242
  'type' => 'text',
243
  'default' => '%search% | %blog_title%',
244
  'condshow' => Array( "aiosp_rewrite_titles" => 1 ) ),
245
+
246
+ "description_format"=> Array(
247
  'name' => __( 'Description Format', 'all_in_one_seo_pack' ),
248
+ 'help_text' => __( "This controls the format of Meta Descriptions.<br /><a href='http://semperplugins.com/documentation/title-settings/' target='_blank'>Click here for documentation on this setting</a><br />The following macros are supported:", 'all_in_one_seo_pack' ) .
249
  '<ul><li>' . __( '%blog_title% - Your blog title', 'all_in_one_seo_pack' ) . '</li><li>' .
250
  __( '%blog_description% - Your blog description', 'all_in_one_seo_pack' ) . '</li><li>' .
251
  __( '%description% - The original description as determined by the plugin, e.g. the excerpt if one is set or an auto-generated one if that option is set', 'all_in_one_seo_pack' ) . '</li><li>' .
253
  'type' => 'text',
254
  'default' => '%description%',
255
  'condshow' => Array( "aiosp_rewrite_titles" => 1 ) ),
256
+
257
+ "404_title_format"=> Array(
258
  'name' => __( '404 Title Format:', 'all_in_one_seo_pack' ),
259
+ 'help_text' => __( "This controls the format of the title tag for the 404 page.<br /><a href='http://semperplugins.com/documentation/title-settings/' target='_blank'>Click here for documentation on this setting</a><br />The following macros are supported:", 'all_in_one_seo_pack' ) .
260
  '<ul><li>' . __( '%blog_title% - Your blog title', 'all_in_one_seo_pack' ) . '</li><li>' .
261
  __( '%blog_description% - Your blog description', 'all_in_one_seo_pack' ) . '</li><li>' .
262
  __( '%request_url% - The original URL path, like "/url-that-does-not-exist/"', 'all_in_one_seo_pack' ) . '</li><li>' .
265
  'type' => 'text',
266
  'default' => 'Nothing found for %request_words%',
267
  'condshow' => Array( "aiosp_rewrite_titles" => 1 ) ),
268
+
269
  "paged_format"=> Array(
270
  'name' => __( 'Paged Format:', 'all_in_one_seo_pack' ),
271
+ 'help_text' => __( "This string gets appended/prepended to titles of paged index pages (like home or archive pages).<br /><a href='http://semperplugins.com/documentation/title-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' )
272
  . __( 'The following macros are supported:', 'all_in_one_seo_pack' )
273
  . '<ul><li>' . __( '%page% - The page number', 'all_in_one_seo_pack' ) . '</li></ul>',
274
  'type' => 'text',
275
  'default' => ' - Part %page%',
276
  'condshow' => Array( "aiosp_rewrite_titles" => 1 ) ),
277
+
278
  "enablecpost"=> Array(
279
  'name' => __( 'SEO for Custom Post Types:', 'all_in_one_seo_pack' ),
280
+ 'help_text' => __( "Check this if you want to use All in One SEO Pack with any Custom Post Types on this site.<br /><a href='http://semperplugins.com/documentation/custom-post-type-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
281
  'default' => 'on',
282
  'type' => 'radio',
283
  'initial_options' => Array( 'on' => __( 'Enabled', 'all_in_one_seo_pack' ),
284
  0 => __( 'Disabled', 'all_in_one_seo_pack' ) )
285
  ),
286
+
287
  "cpostadvanced" => Array(
288
  'name' => __( 'Enable Advanced Options:', 'all_in_one_seo_pack' ),
289
+ 'help_text' => __( "This will show or hide the advanced options for SEO for Custom Post Types.<br /><a href='http://semperplugins.com/documentation/custom-post-type-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
290
  'default' => 0,
291
  'type' => 'radio',
292
  'initial_options' => Array( 'on' => __( 'Enabled', 'all_in_one_seo_pack' ),
294
  'label' => null,
295
  'condshow' => Array( "aiosp_enablecpost" => 'on' )
296
  ),
297
+
298
  "cpostactive" => Array(
299
  'name' => __( 'SEO on only these post types:', 'all_in_one_seo_pack' ),
300
+ 'help_text' => __( "Use these checkboxes to select which Post Types you want to use All in One SEO Pack with.<br /><a href='http://semperplugins.com/documentation/custom-post-type-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
301
  'type' => 'multicheckbox',
302
  'default' => array('post', 'page'),
303
  'condshow' => Array( 'aiosp_enablecpost' => 'on', 'aiosp_cpostadvanced' => 'on' )
304
  ),
305
+
 
 
 
 
 
 
 
 
 
 
 
 
 
306
  "cposttitles" => Array(
307
  'name' => __( 'Custom titles:', 'all_in_one_seo_pack' ),
308
+ 'help_text' => __( "This allows you to set the title tags for each Custom Post Type.<br /><a href='http://semperplugins.com/documentation/custom-post-type-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
309
  'type' => 'checkbox',
310
  'default' => 0,
311
  'condshow' => Array( 'aiosp_enablecpost' => 'on', 'aiosp_cpostadvanced' => 'on' )
312
  ),
313
+
314
  "posttypecolumns" => Array(
315
+ 'name' => __( 'Show SEO Columns:', 'all_in_one_seo_pack' ),
316
+ 'help_text' => __( "This lets you select which screens display the SEO Title, SEO Keywords and SEO Description columns.<br /><a href='http://semperplugins.com/documentation/display-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
317
  'type' => 'multicheckbox',
318
  'default' => array('post', 'page') ),
319
+
320
  "admin_bar" => Array(
321
  'name' => __( 'Display Menu In Admin Bar:', 'all_in_one_seo_pack' ),
322
+ 'help_text' => __( "Check this to add All in One SEO Pack to the Admin Bar for easy access to your SEO settings.<br /><a href='http://semperplugins.com/documentation/display-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
323
  'default' => 'on',
324
  ),
325
+
326
  "custom_menu_order" => Array(
327
  'name' => __( 'Display Menu At The Top:', 'all_in_one_seo_pack' ),
328
+ 'help_text' => __( "Check this to move the All in One SEO Pack menu item to the top of your WordPress Dashboard menu.<br /><a href='http://semperplugins.com/documentation/display-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
329
  'default' => 'on',
330
  ),
331
+
332
  "google_verify" => Array(
333
  'name' => __( 'Google Webmaster Tools:', 'all_in_one_seo_pack' ),
334
+ 'help_text' => __( "Enter your verification code here to verify your site with Google Webmaster Tools.<br /><a href='http://semperplugins.com/documentation/google-webmaster-tools-verification/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
335
  'default' => '', 'type' => 'text' ),
336
+
337
  "bing_verify" => Array(
338
  'name' => __( 'Bing Webmaster Center:', 'all_in_one_seo_pack' ),
339
+ 'help_text' => __( "Enter your verification code here to verify your site with Bing Webmaster Tools.<br /><a href='http://semperplugins.com/documentation/bing-webmaster-verification/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
340
  'default' => '', 'type' => 'text' ),
341
+
342
  "pinterest_verify" => Array(
343
  'name' => __( 'Pinterest Site Verification:', 'all_in_one_seo_pack' ),
344
+ 'help_text' => __( "Enter your verification code here to verify your site with Pinterest.<br /><a href='http://semperplugins.com/documentation/pinterest-site-verification/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
345
  'default' => '', 'type' => 'text' ),
346
+
347
  "google_publisher"=> Array(
348
  'name' => __( 'Google Plus Default Profile:', 'all_in_one_seo_pack' ),
349
+ 'help_text' => __( "Enter your Google Plus Profile URL here to link your site to your Google Plus account for authorship.<br /><a href='http://semperplugins.com/documentation/google-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
350
  'default' => '', 'type' => 'text' ),
351
+
352
  "google_disable_profile"=> Array(
353
  'name' => __( 'Disable Google Plus Profile:', 'all_in_one_seo_pack' ),
354
+ 'help_text' => __( "Check this to remove the Google Plus field from the user profile screen.<br /><a href='http://semperplugins.com/documentation/google-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
355
  'default' => 0, 'type' => 'checkbox' ),
356
+
357
  "google_analytics_id"=> Array(
358
  'name' => __( 'Google Analytics ID:', 'all_in_one_seo_pack' ),
359
+ 'help_text' => __( "Enter your Google Analytics ID here to track visitor behavior on your site using Google Analytics.<br /><a href='http://semperplugins.com/documentation/google-analytics/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
360
  'default' => null, 'type' => 'text' ),
361
+
362
+ "ga_use_universal_analytics" => Array(
363
+ 'name' => __( 'Use Universal Analytics:', 'all_in_one_seo_pack' ),
364
+ 'help_text' => __( "Use the new Universal Analytics tracking code for Google Analytics; do this for new analytics accounts.", 'all_in_one_seo_pack' ),
365
+ 'default' => 0,
366
+ 'condshow' => Array( 'aiosp_google_analytics_id' => Array( 'lhs' => 'aiosp_google_analytics_id', 'op' => '!=', 'rhs' => '' ) ) ),
367
+
368
+ "google_analytics_legacy_id"=> Array(
369
+ 'name' => __( 'Google Analytics Legacy ID:', 'all_in_one_seo_pack' ),
370
+ 'help_text' => __( "Enter your old Google Analytics ID here if you wish to continue tracking your site with an old GA Google Analytics tracking code in addition to using the new Universal Analytics code.", 'all_in_one_seo_pack' ),
371
+ 'default' => null, 'type' => 'text',
372
+ 'condshow' => Array( 'aiosp_google_analytics_id' => Array( 'lhs' => 'aiosp_google_analytics_id', 'op' => '!=', 'rhs' => '' ), "aiosp_ga_use_universal_analytics" => 'on' ) ),
373
+
374
  "ga_domain"=> Array(
375
  'name' => __( 'Tracking Domain:', 'all_in_one_seo_pack' ),
376
  'type' => 'text',
377
+ 'help_text' => __( "Enter your domain name if you have enabled tracking of Subdomains in Google Analytics.<br /><a href='http://semperplugins.com/documentation/google-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
378
  'condshow' => Array( 'aiosp_google_analytics_id' => Array( 'lhs' => 'aiosp_google_analytics_id', 'op' => '!=', 'rhs' => '' ) ) ),
379
+
380
  "ga_multi_domain"=> Array(
381
  'name' => __( 'Track Multiple Domains:', 'all_in_one_seo_pack' ),
382
+ 'help_text' => __( "Check this if you have enabled tracking of Multiple top-level domains in Google Analytics.<br /><a href='http://semperplugins.com/documentation/google-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
383
  'default' => 0,
384
  'condshow' => Array( 'aiosp_google_analytics_id' => Array( 'lhs' => 'aiosp_google_analytics_id', 'op' => '!=', 'rhs' => '' ) ) ),
385
+
386
  "ga_track_outbound_links"=> Array(
387
  'name' => __( 'Track Outbound Links:', 'all_in_one_seo_pack' ),
388
+ 'help_text' => __( "Check this if you want to track outbound links with Google Analytics.<br /><a href='http://semperplugins.com/documentation/google-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
389
  'default' => 0,
390
  'condshow' => Array( 'aiosp_google_analytics_id' => Array( 'lhs' => 'aiosp_google_analytics_id', 'op' => '!=', 'rhs' => '' ) ) ),
391
+
392
+ "cpostnoindex" => Array(
393
+ 'name' => __( 'Default NOINDEX settings:', 'all_in_one_seo_pack' ),
394
+ 'help_text' => __( "Set the default NOINDEX setting for each Post Type.<br /><a href='http://semperplugins.com/documentation/noindex-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
395
+ 'type' => 'multicheckbox',
396
+ 'default' => array(),
397
+ 'condshow' => Array( 'aiosp_enablecpost' => 'on', 'aiosp_cpostadvanced' => 'on' )
398
+ ),
399
+
400
+ "cpostnofollow" => Array(
401
+ 'name' => __( 'Default NOFOLLOW settings:', 'all_in_one_seo_pack' ),
402
+ 'help_text' => __( "Set the default NOFOLLOW setting for each Post Type.<br /><a href='http://semperplugins.com/documentation/noindex-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
403
+ 'type' => 'multicheckbox',
404
+ 'default' => array(),
405
+ 'condshow' => Array( 'aiosp_enablecpost' => 'on', 'aiosp_cpostadvanced' => 'on' )
406
+ ),
407
+
408
  "category_noindex"=> Array(
409
+ 'name' => __( 'Use NOINDEX for Category Archives:', 'all_in_one_seo_pack' ),
410
+ 'help_text' => __( "Check this to ask search engines not to index Category Archives. Useful for avoiding duplicate content.<br /><a href='http://semperplugins.com/documentation/noindex-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
411
  'default' => 1),
412
+
413
  "archive_date_noindex"=> Array(
414
+ 'name' => __( 'Use NOINDEX for Date Archives:', 'all_in_one_seo_pack' ),
415
+ 'help_text' => __( "Check this to ask search engines not to index Date Archives. Useful for avoiding duplicate content.<br /><a href='http://semperplugins.com/documentation/noindex-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
416
  'default' => 1),
417
+
418
  "archive_author_noindex"=> Array(
419
+ 'name' => __( 'Use NOINDEX for Author Archives:', 'all_in_one_seo_pack' ),
420
+ 'help_text' => __( "Check this to ask search engines not to index Author Archives. Useful for avoiding duplicate content.<br /><a href='http://semperplugins.com/documentation/noindex-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
421
  'default' => 1),
422
+
423
  "tags_noindex"=> Array(
424
+ 'name' => __( 'Use NOINDEX for Tag Archives:', 'all_in_one_seo_pack' ),
425
+ 'help_text' => __( "Check this to ask search engines not to index Tag Archives. Useful for avoiding duplicate content.<br /><a href='http://semperplugins.com/documentation/noindex-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
426
+ 'default' => 0),
427
+
428
+ "search_noindex"=> Array(
429
+ 'name' => __( 'Use NOINDEX for the Search page:', 'all_in_one_seo_pack' ),
430
+ 'help_text' => __( "Check this to ask search engines not to index the Search page. Useful for avoiding duplicate content.<br /><a href='http://semperplugins.com/documentation/noindex-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
431
  'default' => 0),
432
+
433
  "generate_descriptions"=> Array(
434
  'name' => __( 'Autogenerate Descriptions:', 'all_in_one_seo_pack' ),
435
+ 'help_text' => __( "Check this and your Meta Descriptions will be auto-generated from your excerpt or content.<br /><a href='http://semperplugins.com/documentation/advanced-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
436
  'default' => 1),
437
+
438
  "hide_paginated_descriptions"=> Array(
439
  'name' => __( 'Remove Descriptions For Paginated Pages:', 'all_in_one_seo_pack' ),
440
+ 'help_text' => __( "Check this and your Meta Descriptions will be removed from page 2 or later of paginated content.<br /><a href='http://semperplugins.com/documentation/advanced-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
441
  'default' => 0),
442
+
443
  "unprotect_meta"=> Array(
444
  'name' => __( 'Unprotect Post Meta Fields:', 'all_in_one_seo_pack' ),
445
+ 'help_text' => __( "Check this to unprotect internal postmeta fields for use with XMLRPC. If you don't know what that is, leave it unchecked.<br /><a href='http://semperplugins.com/documentation/advanced-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
446
  'default' => 0),
447
+
448
  "ex_pages" => Array(
449
  'name' => __( 'Exclude Pages:', 'all_in_one_seo_pack' ),
450
+ 'help_text' => __( "Enter a comma separated list of pages here to be excluded by All in One SEO Pack. This is helpful when using plugins which generate their own non-WordPress dynamic pages. Ex: <em>/forum/, /contact/</em> For instance, if you want to exclude the virtual pages generated by a forum plugin, all you have to do is add forum or /forum or /forum/ or and any URL with the word \"forum\" in it, such as http://mysite.com/forum or http://mysite.com/forum/someforumpage here and it will be excluded from All in One SEO Pack.<br /><a href='http://semperplugins.com/documentation/advanced-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
451
  'type' => 'textarea', 'default' => '' ),
452
+
453
  "post_meta_tags"=> Array(
454
  'name' => __( 'Additional Post Headers:', 'all_in_one_seo_pack' ),
455
+ 'help_text' => __( "What you enter here will be copied verbatim to the header of all Posts. You can enter whatever additional headers you want here, even references to stylesheets.<br /><a href='http://semperplugins.com/documentation/advanced-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
456
  'type' => 'textarea', 'default' => '', 'sanitize' => 'default' ),
457
+
458
  "page_meta_tags"=> Array(
459
  'name' => __( 'Additional Page Headers:', 'all_in_one_seo_pack' ),
460
+ 'help_text' => __( "What you enter here will be copied verbatim to the header of all Pages. You can enter whatever additional headers you want here, even references to stylesheets.<br /><a href='http://semperplugins.com/documentation/advanced-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
461
  'type' => 'textarea', 'default' => '', 'sanitize' => 'default' ),
462
+
463
  "front_meta_tags"=> Array(
464
  'name' => __( 'Additional Front Page Headers:', 'all_in_one_seo_pack' ),
465
+ 'help_text' => __( "What you enter here will be copied verbatim to the header of the front page if you have set a static page in Settings, Reading, Front Page Displays. You can enter whatever additional headers you want here, even references to stylesheets. This will fall back to using Additional Page Headers if you have them set and nothing is entered here.<br /><a href='http://semperplugins.com/documentation/advanced-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
466
  'type' => 'textarea', 'default' => '', 'sanitize' => 'default' ),
467
+
468
  "home_meta_tags"=> Array(
469
  'name' => __( 'Additional Blog Page Headers:', 'all_in_one_seo_pack' ),
470
+ 'help_text' => __( "What you enter here will be copied verbatim to the header of the home page if you have Front page displays your latest posts selected in Settings, Reading.  It will also be copied verbatim to the header on the Posts page if you have one set in Settings, Reading. You can enter whatever additional headers you want here, even references to stylesheets.<br /><a href='http://semperplugins.com/documentation/advanced-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
471
  'type' => 'textarea', 'default' => '', 'sanitize' => 'default' ),
472
+
 
 
 
473
  );
474
+
475
 
476
  $this->locations = Array(
477
  'default' => Array( 'name' => $this->name, 'prefix' => 'aiosp_', 'type' => 'settings', 'options' => null ),
481
  'edit' => Array( 'type' => 'hidden', 'default' => 'aiosp_edit', 'prefix' => true, 'nowrap' => 1 ),
482
  'nonce-aioseop-edit' => Array( 'type' => 'hidden', 'default' => null, 'prefix' => false, 'nowrap' => 1 ),
483
  'upgrade' => Array( 'type' => 'html', 'label' => 'none',
484
+ 'default' => '<a target="__blank" href="http://semperplugins.com/plugins/all-in-one-seo-pack-pro-version/?loc=meta">'
485
  . __( 'Upgrade to All in One SEO Pack Pro Version', 'all_in_one_seo_pack' ) . '</a>'
486
  ),
487
  'snippet' => Array( 'name' => __( 'Preview Snippet', 'all_in_one_seo_pack' ), 'type' => 'custom', 'help_text' => __( 'A preview of what this page might look like in search engine results.', 'all_in_one_seo_pack' ), 'label' => 'top',
515
  $this->layout = Array(
516
  'default' => Array(
517
  'name' => __( 'General Settings', 'all_in_one_seo_pack' ),
518
+ 'help_link' => 'http://semperplugins.com/documentation/general-settings/',
519
  'options' => Array() // this is set below, to the remaining options -- pdb
520
  ),
521
  'home' => Array(
522
  'name' => __( 'Home Page Settings', 'all_in_one_seo_pack' ),
523
+ 'help_link' => 'http://semperplugins.com/documentation/home-page-settings/',
524
  'options' => Array( 'home_title', 'home_description', 'home_keywords' )
525
  ),
526
  'keywords' => Array(
527
  'name' => __( 'Keyword Settings', 'all_in_one_seo_pack' ),
528
+ 'help_link' => 'http://semperplugins.com/documentation/keyword-settings/',
529
  'options' => Array( "togglekeywords", "use_categories", "use_tags_as_keywords", "dynamic_postspage_keywords" )
530
  ),
531
  'title' => Array(
532
  'name' => __( 'Title Settings', 'all_in_one_seo_pack' ),
533
+ 'help_link' => 'http://semperplugins.com/documentation/title-settings/',
534
  'options' => Array( "rewrite_titles", "force_rewrites", "cap_titles", "cap_cats", "page_title_format", "post_title_format", "category_title_format", "archive_title_format", "author_title_format",
535
  "tag_title_format", "search_title_format", "description_format", "404_title_format", "paged_format" )
536
  ),
537
  'cpt' => Array(
538
  'name' => __( 'Custom Post Type Settings', 'all_in_one_seo_pack' ),
539
+ 'help_link' => 'http://semperplugins.com/documentation/custom-post-type-settings/',
540
  'options' => Array( "enablecpost", "cpostadvanced", "cpostactive", "cposttitles" )
541
  ),
542
  'display' => Array(
543
  'name' => __( 'Display Settings', 'all_in_one_seo_pack' ),
544
+ 'help_link' => 'http://semperplugins.com/documentation/display-settings/',
545
  'options' => Array( "posttypecolumns", "admin_bar", "custom_menu_order" )
546
  ),
547
  'webmaster' => Array(
548
  'name' => __( 'Webmaster Verification', 'all_in_one_seo_pack' ),
549
+ 'help_link' => 'http://semperplugins.com/documentation/google-webmaster-tools-verification/',
550
  'options' => Array( "google_verify", "bing_verify", "pinterest_verify" )
551
  ),
552
  'google' => Array(
553
  'name' => __( 'Google Settings', 'all_in_one_seo_pack' ),
554
+ 'help_link' => 'http://semperplugins.com/documentation/google-settings/',
555
+ 'options' => Array( "google_publisher", "google_disable_profile", "google_analytics_id", "ga_use_universal_analytics", "google_analytics_legacy_id", "ga_domain", "ga_multi_domain", "ga_track_outbound_links" )
556
  ),
557
  'noindex' => Array(
558
  'name' => __( 'Noindex Settings', 'all_in_one_seo_pack' ),
559
+ 'help_link' => 'http://semperplugins.com/documentation/noindex-settings/',
560
+ 'options' => Array( 'cpostnoindex', 'cpostnofollow', 'category_noindex', 'archive_date_noindex', 'archive_author_noindex', 'tags_noindex', 'search_noindex' )
561
  ),
562
  'advanced' => Array(
563
  'name' => __( 'Advanced Settings', 'all_in_one_seo_pack' ),
564
+ 'help_link' => 'http://semperplugins.com/documentation/advanced-settings/',
565
  'options' => Array( 'generate_descriptions', 'hide_paginated_descriptions', 'unprotect_meta', 'ex_pages', 'post_meta_tags', 'page_meta_tags', 'front_meta_tags', 'home_meta_tags' )
566
  )
567
  );
784
  }
785
 
786
  function add_admin_pointers() {
787
+ $this->pointers['aioseop_menu_204'] = Array( 'pointer_target' => '#toplevel_page_all-in-one-seo-pack-aioseop_class',
788
  'pointer_text' => '<h3>' . sprintf( __( 'Welcome to Version %s!', 'all_in_one_seo_pack' ), AIOSEOP_VERSION )
789
  . '</h3><p>' . __( 'Thank you for running the latest and greatest All in One SEO Pack ever! Please review your settings, as we\'re always adding new features for you!', 'all_in_one_seo_pack' ) . '</p>',
790
  'pointer_edge' => 'top',
791
  'pointer_align' => 'left',
792
  'pointer_scope' => 'global'
793
  );
794
+ $this->pointers['aioseop_welcome_204'] = Array( 'pointer_target' => '#aioseop_top_button',
795
  'pointer_text' => '<h3>' . sprintf( __( 'Review Your Settings', 'all_in_one_seo_pack' ), AIOSEOP_VERSION )
796
+ . '</h3><p>' . __( 'Thank you for running the latest and greatest All in One SEO Pack ever! New since 2.0.3: manage your sitemap with our XML Sitemap module; enable it from our Feature Manager! And please review your settings, we have added some new ones!', 'all_in_one_seo_pack' ) . '</p>',
797
  'pointer_edge' => 'bottom',
798
  'pointer_align' => 'left',
799
  'pointer_scope' => 'local'
842
  $get_opts = $this->default_options( $location );
843
  foreach ( Array( 'keywords', 'description', 'title', 'sitemap_exclude', 'disable', 'disable_analytics', 'noindex', 'nofollow', 'noodp', 'noydir', 'titleatr', 'menulabel' ) as $f ) {
844
  $field = "aiosp_$f";
845
+ $get_opts[$field] = htmlspecialchars( stripslashes( get_post_meta( $post_id, '_aioseop_' . $f, true ) ) );
846
  }
847
  $opts = wp_parse_args( $opts, $get_opts );
848
  return $opts;
932
  <a target="_blank" title="<?php _e('All in One SEO Plugin Support Forum', 'all_in_one_seo_pack' ); ?>"
933
  href="http://semperplugins.com/support/"><?php _e('Support Forum', 'all_in_one_seo_pack' ); ?></a>
934
  | <strong><a target="_blank" title="<?php _e('Pro Version', 'all_in_one_seo_pack' ); ?>"
935
+ href="http://semperplugins.com/plugins/all-in-one-seo-pack-pro-version/?loc=side">
936
  <?php _e('UPGRADE TO PRO VERSION', 'all_in_one_seo_pack' ); ?></a></strong></p>
937
  </div>
938
  <?php
1011
  $post = $this->get_queried_object();
1012
 
1013
  if ( is_single() || is_page() ) {
1014
+ $aiosp_disable = htmlspecialchars(stripslashes( get_post_meta( $post->ID, '_aioseop_disable', true ) ) );
1015
  if ( $aiosp_disable ) {
1016
+ $aiosp_disable_analytics = htmlspecialchars(stripslashes( get_post_meta( $post->ID, '_aioseop_disable_analytics', true ) ) );
1017
  if ( !$aiosp_disable_analytics ) {
1018
  if ( aioseop_option_isset( 'aiosp_google_analytics_id' ) ) {
1019
  remove_action( 'aioseop_modules_wp_head', array( $this, 'aiosp_google_analytics' ) );
1026
  if ( !empty( $aioseop_options['aiosp_cpostadvanced'] ) ) {
1027
  $wp_post_types = $aioseop_options['aiosp_cpostactive'];
1028
  if ( empty( $aioseop_options['aiosp_cpostactive'] ) ) return;
1029
+ if( !is_singular( $wp_post_types ) && !is_front_page() ) return;
1030
  }
1031
  }
1032
 
1099
  if ( is_feed() ) return;
1100
 
1101
  if( aioseop_mrt_exclude_this_page() ) return;
1102
+
1103
+ static $aioseop_dup_counter = 0;
1104
+ $aioseop_dup_counter++;
1105
+ if ( $aioseop_dup_counter > 1 ) {
1106
+ echo "\n<!-- Debug Warning: All in One SEO Pack Pro meta data was included again from " . current_filter() . " filter. Called {$aioseop_dup_counter} times! -->\n";
1107
+ return;
1108
+ }
1109
+
1110
+ if ( is_home() && !is_front_page() ) {
1111
+ $post = $this->get_blog_page();
1112
+ } else {
1113
+ $post = $this->get_queried_object();
1114
+ }
1115
 
1116
  global $wp_query;
1117
  global $aioseop_options;
 
1118
  $meta_string = null;
1119
  $description = '';
1120
+
1121
  if ( is_single() || is_page() ) {
1122
+ $aiosp_disable = htmlspecialchars( stripslashes( get_post_meta( $post->ID, '_aioseop_disable', true ) ) );
1123
  if ( $aiosp_disable ) return;
1124
  if( empty( $aioseop_options['aiosp_enablecpost'] ) ) {
1125
  $wp_post_types = get_post_types( Array( '_builtin' => true ) ); // don't display meta if SEO isn't enabled on custom post types -- pdb
1174
  if ( $is_front_page_keywords )
1175
  $keywords = trim( $this->internationalize( $aioseop_options['aiosp_home_keywords'] ) );
1176
  elseif ( $this->is_static_posts_page() && !$aioseop_options['aiosp_dynamic_postspage_keywords'] ) // and if option = use page set keywords instead of keywords from recent posts
1177
+ $keywords = stripslashes( $this->internationalize( get_post_meta( $post->ID, "_aioseop_keywords", true ) ) );
1178
  elseif ( !empty( $blog_page ) && !$aioseop_options['aiosp_dynamic_postspage_keywords'] )
1179
+ $keywords = stripslashes( $this->internationalize( get_post_meta( $blog_page->ID, "_aioseop_keywords", true ) ) );
1180
  else $keywords = $this->get_all_keywords();
1181
 
1182
  if ( is_category() && $this->show_page_description() )
1188
  elseif ( is_author() && $this->show_page_description() )
1189
  $description = $this->internationalize( get_the_author_meta( 'description' ) );
1190
  else if ( $is_front_page )
1191
+ $description = trim( stripslashes( $this->internationalize( $aioseop_options['aiosp_home_description'] ) ) );
1192
  else if ( is_single() || is_page() || is_home() || $this->is_static_posts_page() )
1193
+ $description = $this->get_aioseop_description( $post );
 
1194
 
1195
  /*
1196
  if ( $this->is_static_front_page() )
1197
+ $description = trim( stripslashes( $this->internationalize( $aioseop_options['aiosp_home_description'] ) ) );
1198
  elseif ( !empty( $blog_page ) )
1199
  $description = $this->get_post_description( $blog_page );
1200
  if ( empty( $description ) && is_object( $post ) && !is_archive() && empty( $blog_page ) )
1249
 
1250
  if ( isset( $keywords ) && $togglekeywords == 0 && !empty( $keywords ) && !( is_home() && is_paged() ) ) {
1251
  if ( isset( $meta_string ) ) $meta_string .= "\n";
1252
+ $keywords = wp_filter_nohtml_kses( str_replace( '"', '', $keywords ) );
1253
  $meta_string .= sprintf( "<meta name=\"keywords\" content=\"%s\" />\n", $keywords );
1254
  }
1255
 
1256
  $is_tag = is_tag();
1257
 
1258
+ $robots_meta = '';
1259
+
1260
  if ( ( is_category() && $aioseop_options['aiosp_category_noindex'] ) || ( !is_category() && is_archive() &&!$is_tag
1261
  && ( ( $aioseop_options['aiosp_archive_date_noindex'] && is_date() ) || ( $aioseop_options['aiosp_archive_author_noindex'] && is_author() ) ) )
1262
+ || ( $aioseop_options['aiosp_tags_noindex'] && $is_tag ) || ( $aioseop_options['aiosp_search_noindex'] && is_search() ) ) {
1263
+ $robots_meta = 'noindex,follow';
1264
  } else {
1265
  if ( is_single() || is_page() ) {
1266
  $post_type = get_post_type();
1267
+ $aiosp_noindex = htmlspecialchars( stripslashes( get_post_meta( $post->ID, '_aioseop_noindex', true ) ) );
1268
+ $aiosp_nofollow = htmlspecialchars( stripslashes( get_post_meta( $post->ID, '_aioseop_nofollow', true ) ) );
1269
+ $aiosp_noodp = htmlspecialchars( stripslashes( get_post_meta( $post->ID, '_aioseop_noodp', true ) ) );
1270
+ $aiosp_noydir = htmlspecialchars( stripslashes( get_post_meta( $post->ID, '_aioseop_noydir', true ) ) );
1271
  if ( $aiosp_noindex || $aiosp_nofollow || $aiosp_noodp || $aiosp_noydir || !empty( $aioseop_options['aiosp_cpostnoindex'] ) || !empty( $aioseop_options['aiosp_cpostnofollow'] ) ) {
1272
  $noindex = "index";
1273
  $nofollow = "follow";
1280
  $nofollow = "no" . $nofollow;
1281
  if ( $aiosp_noodp ) $nofollow .= ',noodp';
1282
  if ( $aiosp_noydir ) $nofollow .= ',noydir';
1283
+ $robots_meta = $noindex . ',' . $nofollow;
1284
  }
1285
  }
1286
  }
1287
 
1288
+ $robots_meta = apply_filters( 'aioseop_robots_meta', $robots_meta );
1289
+ if ( !empty( $robots_meta ) )
1290
+ $meta_string .= '<meta name="robots" content="' . esc_attr( $robots_meta ) . '" />' . "\n";
1291
+
1292
  if ( $is_front_page )
1293
  foreach( Array( 'google' => 'google-site-verification', 'bing' => 'msvalidate.01', 'pinterest' => 'p:domain_verify' ) as $k => $v )
1294
  if ( !empty( $aioseop_options["aiosp_{$k}_verify"] ) )
1296
 
1297
  foreach( Array( 'page_meta', 'post_meta', 'home_meta', 'front_meta' ) as $meta ) {
1298
  if ( !empty( $aioseop_options["aiosp_{$meta}_tags" ] ) )
1299
+ $$meta = html_entity_decode( stripslashes( $aioseop_options["aiosp_{$meta}_tags" ] ) );
1300
  else
1301
  $$meta = '';
1302
  }
1310
  if ( isset( $meta_string ) ) $meta_string .= "\n";
1311
  $meta_string .= $post_meta;
1312
  }
1313
+
1314
+ $googleplus = $publisher = $author = '';
1315
 
1316
  if ( !empty( $post ) && isset( $post->post_author ) && empty( $aioseop_options['aiosp_google_disable_profile'] ) )
1317
  $googleplus = get_the_author_meta( 'googleplus', $post->post_author );
1320
  $googleplus = $aioseop_options['aiosp_google_publisher'];
1321
 
1322
  if ( $is_front_page && !empty( $aioseop_options['aiosp_google_publisher'] ) )
1323
+ $publisher = $aioseop_options['aiosp_google_publisher'];
1324
+
1325
+ $publisher = apply_filters( 'aioseop_google_publisher', $publisher );
1326
+
1327
+ if ( !empty( $publisher ) )
1328
+ $meta_string = '<link rel="publisher" href="' . esc_url( $publisher ) . '" />' . "\n" . $meta_string;
1329
+
1330
+ if ( is_singular() && ( !empty( $googleplus ) ) )
1331
+ $author = $googleplus;
1332
+ else if ( !empty( $aioseop_options['aiosp_google_publisher'] ) )
1333
+ $author = $aioseop_options['aiosp_google_publisher'];
1334
+
1335
+ $author = apply_filters( 'aioseop_google_author', $author );
1336
+
1337
+ if ( !empty( $author ) )
1338
+ $meta_string = '<link rel="author" href="' . esc_url( $author ) . '" />' . "\n" . $meta_string;
1339
 
1340
  if ( $is_front_page && !empty( $front_meta ) ) {
1341
  if ( isset( $meta_string ) ) $meta_string .= "\n";
1416
  echo "<!-- /all in one seo pack -->\n";
1417
  }
1418
 
1419
+ function universal_analytics() {
1420
+ global $aioseop_options;
1421
+ $analytics = '';
1422
+ if ( !empty( $aioseop_options['aiosp_ga_use_universal_analytics'] ) ) {
1423
+ $allow_linker = '';
1424
+ if ( !empty( $aioseop_options['aiosp_ga_multi_domain'] ) ) {
1425
+ $allow_linker = ", { 'allowLinker': true }";
1426
+ }
1427
+ $analytics =<<<EOF
1428
+ <script>
1429
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
1430
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
1431
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
1432
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
1433
+
1434
+ ga('create', '{$aioseop_options["aiosp_google_analytics_id"]}'{$allow_linker});
1435
+ ga('send', 'pageview');
1436
+ </script>
1437
+
1438
+ EOF;
1439
+ }
1440
+ return $analytics;
1441
+ }
1442
+
1443
  function aiosp_google_analytics() {
1444
  global $aioseop_options;
1445
+ $analytics = '';
1446
+ if ( !empty( $aioseop_options['aiosp_google_analytics_id'] ) ) {
1447
  ob_start();
1448
+ $analytics = $this->universal_analytics();
1449
+ echo $analytics;
1450
+ if ( empty( $analytics ) || ( !empty( $aioseop_options['aiosp_google_analytics_legacy_id'] ) ) ) {
1451
+ ?> <script type="text/javascript">
1452
  var _gaq = _gaq || [];
1453
+ _gaq.push(['_setAccount', '<?php
1454
+ if ( !empty( $aioseop_options['aiosp_google_analytics_legacy_id'] ) ) {
1455
+ echo $aioseop_options['aiosp_google_analytics_legacy_id'];
1456
+ } else {
1457
+ echo $aioseop_options['aiosp_google_analytics_id'];
1458
+ }
1459
+ ?>']);
1460
  <?php if ( !empty( $aioseop_options['aiosp_ga_multi_domain'] ) ) {
1461
  ?> _gaq.push(['_setAllowLinker', true]);
1462
  <?php
1478
  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
1479
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
1480
  })();
 
1481
  </script>
1482
  <?php
1483
+ }
1484
+ if ( $aioseop_options['aiosp_ga_track_outbound_links'] ) { ?>
1485
  <script type="text/javascript">
1486
+ function recordOutboundLink(link, category, action) {
1487
+ <?php if ( !empty( $aioseop_options['aiosp_ga_use_universal_analytics'] ) ) { ?>
1488
+ ga(category, action);
1489
+ <?php }
1490
+ if ( empty( $aioseop_options['aiosp_ga_use_universal_analytics'] ) || !empty( $aioseop_options['aiosp_google_analytics_legacy_id'] ) ) { ?>
1491
+ _gat._getTrackerByName()._trackEvent(category, action);
1492
+ <?php } ?>
1493
+ if ( link.target == '_blank' ) return true;
1494
+ setTimeout('document.location = "' + link.href + '"', 100);
1495
+ return false;
1496
+ }
1497
  /* use regular Javascript for this */
1498
  function getAttr(ele, attr) {
1499
  var result = (ele.getAttribute && ele.getAttribute(attr)) || null;
1522
  };
1523
  </script>
1524
  <?php
1525
+ }
1526
  $analytics = ob_get_clean();
1527
+ }
1528
  echo apply_filters( 'aiosp_google_analytics', $analytics );
1529
  }
1530
 
1625
  if ( !$this->show_page_description() )
1626
  return '';
1627
 
1628
+ $description = trim( stripslashes( $this->internationalize( get_post_meta( $post->ID, "_aioseop_description", true ) ) ) );
1629
  if ( !$description ) {
1630
  $description = $this->trim_excerpt_without_filters_full_length( $this->internationalize( $post->post_excerpt ) );
1631
  if ( !$description && $aioseop_options["aiosp_generate_descriptions"] ) {
1654
  return $blog_page;
1655
  }
1656
 
1657
+ function get_aioseop_description( $post = null ) {
1658
  global $aioseop_options;
1659
+ if ( $post === null )
1660
+ $post = $GLOBALS["post"];
 
 
 
1661
  $blog_page = $this->get_blog_page();
1662
  if ( $this->is_static_front_page() )
1663
+ $description = trim( stripslashes( $this->internationalize( $aioseop_options['aiosp_home_description'] ) ) );
1664
  elseif ( !empty( $blog_page ) )
1665
  $description = $this->get_post_description( $blog_page );
1666
  if ( empty( $description ) && is_object( $post ) && !is_archive() && empty( $blog_page ) )
1674
  $title_tag_start = "<title>";
1675
  $title_tag_end = "</title>";
1676
  $len_start = $this->strlen( $title_tag_start );
1677
+ $title = stripslashes( trim( $title ) );
1678
  $start = $this->strpos( $content, $title_tag_start );
1679
  $end = $this->strpos( $content, $title_tag_end );
1680
 
1722
  } else if ( is_single() ) {
1723
  $title = $this->internationalize( single_post_title( '', false ) );
1724
  } else if ( is_search() && isset($s) && !empty($s) ) {
1725
+ $search = esc_attr( stripslashes($s) );
1726
  if ( !empty( $aioseop_options['aiosp_cap_titles'] ) )
1727
  $search = $this->capitalize( $search );
1728
  $title = $search;
1910
  $title = $this->paged_title( $title );
1911
  return apply_filters( 'aioseop_title_single', $title );
1912
  } else if ( is_search() && isset( $s ) && !empty( $s ) ) {
1913
+ $search = esc_attr( stripslashes( $s ) );
1914
  if ( !empty( $aioseop_options['aiosp_cap_titles'] ) )
1915
  $search = $this->capitalize( $search );
1916
  $title_format = $aioseop_options['aiosp_search_title_format'];
1917
  $title = str_replace( '%blog_title%', $this->internationalize( get_bloginfo( 'name' ) ), $title_format );
1918
  $title = str_replace( '%blog_description%', $this->internationalize( get_bloginfo( 'description' ) ), $title );
1919
+ $title = str_replace( '%search%', $search, $title );
1920
+ $title = $this->paged_title( $title );
1921
  return $title;
1922
  } else if ( is_tag() ) {
1923
  global $utw;
2072
  }
2073
  }
2074
  $text = $this->substr( $text, 0, $max );
2075
+ return trim( stripslashes( $text ) );
2076
  }
2077
 
2078
  function trim_excerpt_without_filters_full_length( $text ) {
2079
  $text = str_replace( ']]>', ']]&gt;', $text );
2080
  $text = preg_replace( '|\[(.+?)\](.+?\[/\\1\])?|s', '', $text );
2081
  $text = strip_tags( $text );
2082
+ return trim( stripslashes( $text ) );
2083
  }
2084
 
2085
  /**
2103
  $keywords_i = null;
2104
 
2105
  $id = $post->ID;
2106
+ $keywords_i = stripslashes( $this->internationalize( get_post_meta( $id, "_aioseop_keywords", true ) ) );
2107
  if ( is_attachment() ) {
2108
  $id = $post->post_parent;
2109
  if ( empty( $keywords_i ) )
2110
+ $keywords_i = stripslashes( $this->internationalize( get_post_meta( $id, "_aioseop_keywords", true ) ) );
2111
  }
2112
  $keywords_i = str_replace( '"', '', $keywords_i );
2113
  if (isset( $keywords_i ) && !empty( $keywords_i ) ) {
2131
  $tag = $tag->tag;
2132
  $tag = str_replace( '_', ' ', $tag );
2133
  $tag = str_replace( '-', ' ', $tag );
2134
+ $tag = stripslashes( $tag );
2135
  $keywords[] = $tag;
2136
  }
2137
  }
2138
 
2139
  // autometa
2140
+ $autometa = stripslashes( get_post_meta( $id, 'autometa', true ) );
2141
  if ( isset( $autometa ) && !empty( $autometa ) ) {
2142
  $autometa_array = explode( ' ', $autometa );
2143
  foreach ( $autometa_array as $e )
2164
  if ( $post ) {
2165
  // custom field keywords
2166
  $keywords_i = null;
2167
+ $keywords_i = stripslashes( get_post_meta( $post->ID, "_aioseop_keywords", true ) );
2168
  $keywords_i = str_replace( '"', '', $keywords_i );
2169
  if ( isset( $keywords_i) && !empty( $keywords_i ) )
2170
  $keywords[] = $keywords_i;
2266
 
2267
  function admin_bar_upgrade_menu() {
2268
  global $wp_admin_bar;
2269
+ $wp_admin_bar->add_menu( array( 'parent' => AIOSEOP_PLUGIN_DIRNAME, 'title' => __( 'Upgrade To Pro', 'all_in_one_seo_pack' ), 'id' => 'aioseop-pro-upgrade', 'href' => 'http://semperplugins.com/plugins/all-in-one-seo-pack-pro-version/?loc=menu', 'meta' => Array( 'target' => '_blank' ) ) );
2270
  }
2271
 
2272
  function menu_order() {
2346
  do_action( 'aioseop_modules_add_menus', $file );
2347
 
2348
  $metaboxes = apply_filters( 'aioseop_add_post_metabox', Array() );
2349
+
2350
  if ( !empty( $metaboxes ) ) {
2351
  if ( $this->tabbed_metaboxes ) {
2352
  $tabs = Array();
2361
  $tab_num = count( $m );
2362
  $title = $m[0]['title'];
2363
  if ( $title != $this->plugin_name ) $title = $this->plugin_name . ' - ' . $title;
2364
+ if ( $tab_num <= 1 ) {
2365
+ if ( !empty( $m[0]['help_link'] ) )
2366
+ $title .= "<a class='aioseop_help_text_link aioseop_meta_box_help' target='_blank' href='" . $m[0]['help_link'] . "'>" . __( 'Help', 'all_in_one_seo_pack' ) . "</a>";
2367
  add_meta_box( $m[0]['id'], $title, $m[0]['callback'], $m[0]['post_type'], $m[0]['context'], $m[0]['priority'], $m[0]['callback_args'] );
2368
  } elseif ( $tab_num > 1 ) {
2369
  add_meta_box( $m[0]['id'] . '_tabbed', $title, Array( $this, 'display_tabbed_metabox' ), $m[0]['post_type'], $m[0]['context'], $m[0]['priority'], $m );
2373
  } else {
2374
  foreach ( $metaboxes as $m ) {
2375
  $title = $m['title'];
2376
+ if ( !empty( $m['help_link'] ) )
2377
+ $title .= "<a class='aioseop_help_text_link aioseop_meta_box_help' target='_blank' href='" . $m['help_link'] . "'>" . __( 'Help', 'all_in_one_seo_pack' ) . "</a>";
2378
  if ( $title != $this->plugin_name ) $title = $this->plugin_name . ' - ' . $title;
2379
  add_meta_box( $m['id'], $title, $m['callback'], $m['post_type'], $m['context'], $m['priority'], $m['callback_args'] );
2380
  }
aioseop_feature_manager.php CHANGED
@@ -54,7 +54,13 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Feature_Manager' ) ) {
54
  if ( isset( $this->module_info[$m][$option] ) )
55
  $this->default_options["enable_$m"][$option] = $this->module_info[$m][$option];
56
  }
57
-
 
 
 
 
 
 
58
  // load initial options / set defaults
59
  $this->update_options( );
60
  add_filter( $this->prefix . 'output_option', Array( $this, 'display_option_div' ), 10, 2 );
54
  if ( isset( $this->module_info[$m][$option] ) )
55
  $this->default_options["enable_$m"][$option] = $this->module_info[$m][$option];
56
  }
57
+ $this->layout = Array(
58
+ 'default' => Array(
59
+ 'name' => $this->name,
60
+ 'help_link' => 'http://semperplugins.com/documentation/feature-manager/',
61
+ 'options' => array_keys( $this->default_options )
62
+ )
63
+ );
64
  // load initial options / set defaults
65
  $this->update_options( );
66
  add_filter( $this->prefix . 'output_option', Array( $this, 'display_option_div' ), 10, 2 );
aioseop_functions.php CHANGED
@@ -100,7 +100,10 @@ if ( !function_exists( 'aioseop_option_isset' ) ) {
100
  if ( !function_exists( 'aioseop_addmycolumns' ) ) {
101
  function aioseop_addmycolumns() {
102
  global $aioseop_options, $pagenow;
103
- $aiosp_posttypecolumns = $aioseop_options['aiosp_posttypecolumns'];
 
 
 
104
  if ( !empty( $pagenow ) && ( $pagenow == 'upload.php' ) )
105
  $post_type = 'attachment';
106
  elseif ( !isset( $_GET['post_type'] ) )
@@ -194,10 +197,10 @@ if ( !function_exists( 'aioseop_ajax_save_meta' ) ) {
194
  if( $result != '' ): $label = $result;
195
  else: $label = ''; $result = '<strong><i>' . __( 'No', 'all_in_one_seo_pack' ) . ' ' . $target . '</i></strong>' ; endif;
196
  $output = $result . '<a id="' . $target . 'editlink' . $post_id . '" href="javascript:void(0);"';
197
- $output .= 'onclick="aioseop_ajax_edit_meta_form(' . $post_id . ', \'' . $label . '\', \'' . $target . '\');return false;" title="' . __('Edit') . '">';
198
  $output .= '<img class="aioseop_edit_button" id="aioseop_edit_id" src="' . AIOSEOP_PLUGIN_IMAGES_URL . '/cog_edit.png" /></a>';
199
  die( "jQuery('div#aioseop_" . $target . "_" . $post_id . "').fadeOut('fast', function() {
200
- jQuery('div#aioseop_" . $target . "_" . $post_id . "').html('" . addslashes_gpc($output) . "').fadeIn('fast');
201
  });" );
202
  }
203
  }
@@ -366,11 +369,11 @@ if ( !function_exists( 'aioseop_mrt_pccolumn' ) ) {
366
  <div class="aioseop_mpc_admin_meta_options"
367
  id="aioseop_<?php print $target; ?>_<?php echo $id; ?>"
368
  style="float:left;">
369
- <?php $content = htmlspecialchars( stripcslashes( get_post_meta( $id, "_aioseop_" . $target, TRUE ) ) );
370
- if( !empty($content) ): $label = str_replace( "'", "\'", $content );
371
  else: $label = ''; $content = '<strong><i>No ' . $target . '</i></strong>' ; endif;
372
- print $content . '<a id="' . $target . 'editlink' . $id . '" href="javascript:void(0);" onclick="aioseop_ajax_edit_meta_form(' .
373
- $id . ', \'' . $label . '\', \'' . $target . '\');return false;" title="' . __('Edit') . '">';
374
  print "<img class='aioseop_edit_button'
375
  id='aioseop_edit_id'
376
  src='" . AIOSEOP_PLUGIN_IMAGES_URL . "cog_edit.png' /></a>";
100
  if ( !function_exists( 'aioseop_addmycolumns' ) ) {
101
  function aioseop_addmycolumns() {
102
  global $aioseop_options, $pagenow;
103
+ $aiosp_posttypecolumns = Array();
104
+ if ( !empty( $aioseop_options) && !empty( $aioseop_options['aiosp_posttypecolumns'] ) ) {
105
+ $aiosp_posttypecolumns = $aioseop_options['aiosp_posttypecolumns'];
106
+ }
107
  if ( !empty( $pagenow ) && ( $pagenow == 'upload.php' ) )
108
  $post_type = 'attachment';
109
  elseif ( !isset( $_GET['post_type'] ) )
197
  if( $result != '' ): $label = $result;
198
  else: $label = ''; $result = '<strong><i>' . __( 'No', 'all_in_one_seo_pack' ) . ' ' . $target . '</i></strong>' ; endif;
199
  $output = $result . '<a id="' . $target . 'editlink' . $post_id . '" href="javascript:void(0);"';
200
+ $output .= 'onclick=\'aioseop_ajax_edit_meta_form(' . $post_id . ', ' . json_encode( $label ) . ', "' . $target . '");return false;\' title="' . __('Edit') . '">';
201
  $output .= '<img class="aioseop_edit_button" id="aioseop_edit_id" src="' . AIOSEOP_PLUGIN_IMAGES_URL . '/cog_edit.png" /></a>';
202
  die( "jQuery('div#aioseop_" . $target . "_" . $post_id . "').fadeOut('fast', function() {
203
+ jQuery('div#aioseop_" . $target . "_" . $post_id . "').html(" . json_encode( $output ) . ").fadeIn('fast');
204
  });" );
205
  }
206
  }
369
  <div class="aioseop_mpc_admin_meta_options"
370
  id="aioseop_<?php print $target; ?>_<?php echo $id; ?>"
371
  style="float:left;">
372
+ <?php $content = htmlspecialchars( stripslashes( get_post_meta( $id, "_aioseop_" . $target, TRUE ) ) );
373
+ if( !empty($content) ): $label = esc_js( $content );
374
  else: $label = ''; $content = '<strong><i>No ' . $target . '</i></strong>' ; endif;
375
+ print $content . '<a id="' . $target . 'editlink' . $id . '" href="javascript:void(0);" onclick=\'aioseop_ajax_edit_meta_form(' .
376
+ $id . ', "' . str_replace( Array( '"', '&quot;' ), Array( '\x22', '\x22' ), esc_js( $label ) ) . '", "' . $target . '");return false;\' title="' . __('Edit') . '">';
377
  print "<img class='aioseop_edit_button'
378
  id='aioseop_edit_id'
379
  src='" . AIOSEOP_PLUGIN_IMAGES_URL . "cog_edit.png' /></a>";
aioseop_module.css CHANGED
@@ -28,6 +28,13 @@
28
  width: 40px;
29
  float: left;
30
  }
 
 
 
 
 
 
 
31
  .aioseop_label {
32
  color: #5F5F5F;
33
  font-weight: bold;
28
  width: 40px;
29
  float: left;
30
  }
31
+ .aioseop_meta_box_help, .aioseop_meta_box_help:active {
32
+ float: right;
33
+ background-size: 42%;
34
+ padding-left: 20px;
35
+ padding-top: 5px;
36
+ width: 32px;
37
+ }
38
  .aioseop_label {
39
  color: #5F5F5F;
40
  font-weight: bold;
aioseop_module.js CHANGED
@@ -72,7 +72,7 @@ function aioseop_do_condshow_match( index, value ) {
72
  matches = false;
73
  }
74
  } else {
75
- if ( subopt.match(/aiosp_cpostactive/) ) { // special case for this one -- pdb
76
  cur = aioseop_get_field_values( subopt );
77
  if ( jQuery.inArray( setting, cur, 0 ) < 0 ) {
78
  matches = false;
72
  matches = false;
73
  }
74
  } else {
75
+ if ( subopt.match(/\\\[\\\]/) ) { // special case for these -- pdb
76
  cur = aioseop_get_field_values( subopt );
77
  if ( jQuery.inArray( setting, cur, 0 ) < 0 ) {
78
  matches = false;
aioseop_module_class.php CHANGED
@@ -229,6 +229,12 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
229
  * @author Adrien aka Gaarf & contributors
230
  * @see http://gaarf.info/2009/08/13/xml-string-to-php-array/
231
  */
 
 
 
 
 
 
232
  function xml_string_to_array( $xmlstr ) {
233
  $doc = new DOMDocument();
234
  $doc->loadXML( $xmlstr );
@@ -250,7 +256,8 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
250
  $t = $child->tagName;
251
  if(!isset($output[$t]))
252
  $output[$t] = array();
253
- $output[$t][] = $v;
 
254
  }
255
  elseif($v || $v === '0')
256
  $output = (string) $v;
@@ -269,6 +276,7 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
269
  $output[$t] = $v[0];
270
  }
271
  }
 
272
  return $output;
273
  }
274
 
@@ -386,7 +394,7 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
386
  wp_reset_postdata();
387
  return $buf;
388
  }
389
-
390
  /**
391
  * Handles exporting settings data for a module.
392
  */
@@ -439,10 +447,10 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
439
  * Print a basic error message.
440
  */
441
  function output_error( $error ) {
442
- echo "<div class='aioseop_module error' style='text-align:center;'>$error</div>";
443
  return FALSE;
444
  }
445
-
446
  /***
447
  * Backwards compatibility - see http://php.net/manual/en/function.str-getcsv.php
448
  */
@@ -850,6 +858,8 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
850
  } else {
851
  $title = $v['name'];
852
  if ( $title != $this->plugin_name ) $title = $this->plugin_name . ' - ' . $title;
 
 
853
  add_meta_box( $v['prefix'] . $k, $title, Array( $this, 'display_metabox' ), $posttype, $v['context'], $v['priority'], $v );
854
  }
855
  }
@@ -862,6 +872,8 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
862
  * Update postmeta for metabox.
863
  */
864
  function save_post_data( $post_id ) {
 
 
865
  if ( $this->locations !== null ) {
866
  foreach( $this->locations as $k => $v ) {
867
  if ( isset($v['type']) && ( $v['type'] === 'metabox' ) ) {
@@ -875,7 +887,11 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
875
  $update = true;
876
  }
877
  }
878
- if ( $update ) update_post_meta( $post_id, '_' . $this->get_prefix($k) . $k, $options );
 
 
 
 
879
  }
880
  }
881
  }
@@ -919,7 +935,7 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
919
  $cmp = !strcmp( $v, $value );
920
  else
921
  $cmp = !strcmp( $v, "" );
922
- // $cmp = !strcmp( (string)$v, (string)$value );
923
  } else
924
  $cmp = ( $value == $v );
925
  if ( ( !$is_arr && $cmp ) || ( $is_arr && in_array( $v, $value ) ) )
@@ -966,7 +982,7 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
966
  $buf .= "<input name='$name' type='{$options['type']}' $attr>\n"; break;
967
  case 'textarea': $buf .= "<textarea name='$name' $attr>$value</textarea>"; break;
968
  case 'image': $buf .= "<input class='aioseop_upload_image_button button-primary' type='button' value='Upload Image' style='float:left;' />" .
969
- "<input class='aioseop_upload_image_label' name='$name' type='text' readonly $attr value='$value' size=57 style='float:left;clear:left;'>\n";
970
  break;
971
  case 'html': $buf .= $value; break;
972
  default: $buf .= "<input name='$name' type='{$options['type']}' $attr value='$value'>\n";
@@ -1016,11 +1032,22 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
1016
  static $location_settings = Array();
1017
  $defaults = null;
1018
  $prefix = $this->get_prefix( $location );
1019
- if ( is_array( $meta_args['args'] ) && !empty( $meta_args['args']['default_options'] ) )
 
1020
  $defaults = $meta_args['args']['default_options'];
 
 
 
 
 
 
 
 
 
1021
  if ( !isset( $location_settings[$prefix] ) ) {
1022
  $current_options = apply_filters( "{$this->prefix}display_options", $this->get_current_options( Array(), $location, $defaults ), $location );
1023
  $settings = apply_filters( "{$this->prefix}display_settings", $this->setting_options( $location, $defaults ), $location, $current_options );
 
1024
  $location_settings[$prefix]['current_options'] = $current_options;
1025
  $location_settings[$prefix]['settings'] = $settings;
1026
  } else {
@@ -1175,9 +1202,10 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
1175
  <div id="aioseop_top_button">
1176
  <div id="aiosp_ajax_settings_message"></div>
1177
  <?php
 
1178
  $submit_options = Array('action' => Array( 'type' => 'hidden', 'value' => 'aiosp_update_module' ),
1179
  'module' => Array( 'type' => 'hidden', 'value' => get_class( $this ) ),
1180
- 'location' => Array( 'type' => 'hidden', 'value' => $location ),
1181
  'nonce-aioseop' => Array( 'type' => 'hidden', 'value' => wp_create_nonce('aioseop-nonce') ),
1182
  'page_options' => Array( 'type' => 'hidden', 'value' => 'aiosp_home_description' ),
1183
  'Submit' => Array( 'type' => 'submit', 'class' => 'button-primary', 'value' => __('Update Options', 'all_in_one_seo_pack') . ' &raquo;' ),
@@ -1197,9 +1225,13 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
1197
  if ($opts !== FALSE) $this->options = $opts;
1198
  if ( is_array( $this->layout ) ) {
1199
  foreach( $this->layout as $l => $lopts ) {
1200
- if ( !isset( $lopts['tab'] ) || ( $this->current_tab == $lopts['tab'] ) )
1201
- add_meta_box( $this->get_prefix( $location ) . $l . "_metabox", $lopts['name'], array($this, 'display_options' ),
1202
- "{$this->prefix}settings", 'advanced', 'default', $lopts );
 
 
 
 
1203
  }
1204
  } else add_meta_box( $this->get_prefix( $location ) . "metabox", $name, array($this, 'display_options'), "{$this->prefix}settings", 'advanced');
1205
  do_meta_boxes( "{$this->prefix}settings", 'advanced', $location );
229
  * @author Adrien aka Gaarf & contributors
230
  * @see http://gaarf.info/2009/08/13/xml-string-to-php-array/
231
  */
232
+ function html_string_to_array( $xmlstr ) {
233
+ $doc = new DOMDocument();
234
+ $doc->loadHTML( $xmlstr );
235
+ return $this->domnode_to_array( $doc->documentElement );
236
+ }
237
+
238
  function xml_string_to_array( $xmlstr ) {
239
  $doc = new DOMDocument();
240
  $doc->loadXML( $xmlstr );
256
  $t = $child->tagName;
257
  if(!isset($output[$t]))
258
  $output[$t] = array();
259
+ if ( is_array($output) )
260
+ $output[$t][] = $v;
261
  }
262
  elseif($v || $v === '0')
263
  $output = (string) $v;
276
  $output[$t] = $v[0];
277
  }
278
  }
279
+ if ( empty( $output ) ) return '';
280
  return $output;
281
  }
282
 
394
  wp_reset_postdata();
395
  return $buf;
396
  }
397
+
398
  /**
399
  * Handles exporting settings data for a module.
400
  */
447
  * Print a basic error message.
448
  */
449
  function output_error( $error ) {
450
+ echo "<div class='aioseop_module error'>$error</div>";
451
  return FALSE;
452
  }
453
+
454
  /***
455
  * Backwards compatibility - see http://php.net/manual/en/function.str-getcsv.php
456
  */
858
  } else {
859
  $title = $v['name'];
860
  if ( $title != $this->plugin_name ) $title = $this->plugin_name . ' - ' . $title;
861
+ if ( !empty( $v['help_link'] ) )
862
+ $title .= "<a class='aioseop_help_text_link aioseop_meta_box_help' target='_blank' href='" . $lopts['help_link'] . "'>" . __( 'Help', 'all_in_one_seo_pack' ) . "</a>";
863
  add_meta_box( $v['prefix'] . $k, $title, Array( $this, 'display_metabox' ), $posttype, $v['context'], $v['priority'], $v );
864
  }
865
  }
872
  * Update postmeta for metabox.
873
  */
874
  function save_post_data( $post_id ) {
875
+ static $update = false;
876
+ if ( $update ) return;
877
  if ( $this->locations !== null ) {
878
  foreach( $this->locations as $k => $v ) {
879
  if ( isset($v['type']) && ( $v['type'] === 'metabox' ) ) {
887
  $update = true;
888
  }
889
  }
890
+ if ( $update ) {
891
+ $prefix = $this->get_prefix( $k );
892
+ $options = apply_filters( $prefix . 'filter_metabox_options', $options, $k, $post_id );
893
+ update_post_meta( $post_id, '_' . $prefix . $k, $options );
894
+ }
895
  }
896
  }
897
  }
935
  $cmp = !strcmp( $v, $value );
936
  else
937
  $cmp = !strcmp( $v, "" );
938
+ // $cmp = !strcmp( (string)$v, (string)$value );
939
  } else
940
  $cmp = ( $value == $v );
941
  if ( ( !$is_arr && $cmp ) || ( $is_arr && in_array( $v, $value ) ) )
982
  $buf .= "<input name='$name' type='{$options['type']}' $attr>\n"; break;
983
  case 'textarea': $buf .= "<textarea name='$name' $attr>$value</textarea>"; break;
984
  case 'image': $buf .= "<input class='aioseop_upload_image_button button-primary' type='button' value='Upload Image' style='float:left;' />" .
985
+ "<input class='aioseop_upload_image_label' name='$name' type='text' $attr value='$value' size=57 style='float:left;clear:left;'>\n";
986
  break;
987
  case 'html': $buf .= $value; break;
988
  default: $buf .= "<input name='$name' type='{$options['type']}' $attr value='$value'>\n";
1032
  static $location_settings = Array();
1033
  $defaults = null;
1034
  $prefix = $this->get_prefix( $location );
1035
+ $help_link = '';
1036
+ if ( is_array( $meta_args['args'] ) && !empty( $meta_args['args']['default_options'] ) ) {
1037
  $defaults = $meta_args['args']['default_options'];
1038
+ }
1039
+ if ( !empty( $meta_args['callback_args'] ) ) {
1040
+ if ( !empty( $meta_args['callback_args']['help_link'] ) ) {
1041
+ $help_link = $meta_args['callback_args']['help_link'];
1042
+ }
1043
+ }
1044
+ if ( !empty( $help_link ) )
1045
+ echo "<a class='aioseop_help_text_link aioseop_meta_box_help' target='_blank' href='" . $help_link . "'>" . __( 'Help', 'all_in_one_seo_pack' ) . "</a>";
1046
+
1047
  if ( !isset( $location_settings[$prefix] ) ) {
1048
  $current_options = apply_filters( "{$this->prefix}display_options", $this->get_current_options( Array(), $location, $defaults ), $location );
1049
  $settings = apply_filters( "{$this->prefix}display_settings", $this->setting_options( $location, $defaults ), $location, $current_options );
1050
+ $current_options = apply_filters( "{$this->prefix}override_options", $current_options, $location, $settings );
1051
  $location_settings[$prefix]['current_options'] = $current_options;
1052
  $location_settings[$prefix]['settings'] = $settings;
1053
  } else {
1202
  <div id="aioseop_top_button">
1203
  <div id="aiosp_ajax_settings_message"></div>
1204
  <?php
1205
+
1206
  $submit_options = Array('action' => Array( 'type' => 'hidden', 'value' => 'aiosp_update_module' ),
1207
  'module' => Array( 'type' => 'hidden', 'value' => get_class( $this ) ),
1208
+ 'location' => Array( 'type' => 'hidden', 'value' => $location ),
1209
  'nonce-aioseop' => Array( 'type' => 'hidden', 'value' => wp_create_nonce('aioseop-nonce') ),
1210
  'page_options' => Array( 'type' => 'hidden', 'value' => 'aiosp_home_description' ),
1211
  'Submit' => Array( 'type' => 'submit', 'class' => 'button-primary', 'value' => __('Update Options', 'all_in_one_seo_pack') . ' &raquo;' ),
1225
  if ($opts !== FALSE) $this->options = $opts;
1226
  if ( is_array( $this->layout ) ) {
1227
  foreach( $this->layout as $l => $lopts ) {
1228
+ if ( !isset( $lopts['tab'] ) || ( $this->current_tab == $lopts['tab'] ) ) {
1229
+ $title = $lopts['name'];
1230
+ if ( !empty( $lopts['help_link'] ) )
1231
+ $title .= "<a class='aioseop_help_text_link aioseop_meta_box_help' target='_blank' href='" . $lopts['help_link'] . "'>" . __( 'Help', 'all_in_one_seo_pack' ) . "</a>";
1232
+ add_meta_box( $this->get_prefix( $location ) . $l . "_metabox", $title, array($this, 'display_options' ),
1233
+ "{$this->prefix}settings", 'advanced', 'default', $lopts );
1234
+ }
1235
  }
1236
  } else add_meta_box( $this->get_prefix( $location ) . "metabox", $name, array($this, 'display_options'), "{$this->prefix}settings", 'advanced');
1237
  do_meta_boxes( "{$this->prefix}settings", 'advanced', $location );
aioseop_performance.php CHANGED
@@ -15,16 +15,19 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Performance' ) ) {
15
  $this->prefix = 'aiosp_performance_'; // option prefix
16
  $this->file = __FILE__; // the current file
17
  parent::__construct();
 
 
 
 
 
 
 
18
  $this->default_options = array(
19
  'memory_limit' => Array( 'name' => __( 'Raise memory limit', 'all_in_one_seo_pack' ),
20
- 'help_text' => __( 'Allows you to raise your PHP memory limit to a reasonable value. Note: WordPress core and other WordPress plugins may also change the value of the memory limit.', 'all_in_one_seo_pack' ),
21
- 'default' => '256M',
22
- 'type' => 'select',
23
  'initial_options' => Array( 0 => __( "Use the system default", 'all_in_one_seo_pack' ), '32M' => '32MB', '64M' => '64MB', '128M' => '128MB', '256M' => '256MB' ) ),
24
  'execution_time' => Array( 'name' => __( 'Raise execution time', 'all_in_one_seo_pack' ),
25
- 'help_text' => __( 'Allows you to raise your PHP execution time to a reasonable value.', 'all_in_one_seo_pack' ),
26
- 'default' => '',
27
- 'type' => 'select',
28
  'initial_options' => Array( '' => __( "Use the system default", 'all_in_one_seo_pack' ), 30 => '30s', 60 => '1m', 120 => '2m', 300 => '5m', 0 => __( 'No limit', 'all_in_one_seo_pack' ) ) )
29
  );
30
 
@@ -32,9 +35,7 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Performance' ) ) {
32
  if ( aioseop_option_isset( 'aiosp_rewrite_titles' ) && $aioseop_options['aiosp_rewrite_titles'] ) {
33
  $this->default_options['force_rewrites'] = Array(
34
  'name' => __( 'Force Rewrites:', 'all_in_one_seo_pack' ),
35
- 'help_text' => __( "Use output buffering to ensure that the title gets rewritten.", 'all_in_one_seo_pack' ),
36
- 'default' => 1,
37
- 'type' => 'radio',
38
  'initial_options' => Array( 1 => __( 'Enabled', 'all_in_one_seo_pack' ),
39
  0 => __( 'Disabled', 'all_in_one_seo_pack' ) )
40
  );
@@ -43,6 +44,7 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Performance' ) ) {
43
  $this->layout = Array(
44
  'default' => Array(
45
  'name' => $this->name,
 
46
  'options' => array_keys( $this->default_options )
47
  )
48
  );
@@ -53,11 +55,16 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Performance' ) ) {
53
 
54
  $this->layout['system_status'] = Array(
55
  'name' => __( 'System Status', 'all_in_one_seo_pack' ),
 
56
  'options' => array_keys( $system_status )
57
  );
58
 
59
  $this->default_options = array_merge( $this->default_options, $system_status );
60
 
 
 
 
 
61
  add_filter( $this->prefix . 'display_options', Array( $this, 'display_options_filter' ), 10, 2 );
62
  add_filter( $this->prefix . 'update_options', Array( $this, 'update_options_filter' ), 10, 2 );
63
  add_action( $this->prefix . 'settings_update', Array( $this, 'settings_update_action' ), 10, 2 );
@@ -111,7 +118,7 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Performance' ) ) {
111
  }
112
 
113
  function settings_page_init() {
114
- $this->default_options['status']['default'] = $this->get_serverinfo();
115
  }
116
 
117
  function menu_order() {
@@ -239,4 +246,4 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Performance' ) ) {
239
  return $buf;
240
  }
241
  }
242
- }
15
  $this->prefix = 'aiosp_performance_'; // option prefix
16
  $this->file = __FILE__; // the current file
17
  parent::__construct();
18
+
19
+ $help_text = Array(
20
+ "memory_limit" => __( "This setting allows you to raise your PHP memory limit to a reasonable value. Note: WordPress core and other WordPress plugins may also change the value of the memory limit.<br /><a href='http://semperplugins.com/documentation/performance-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
21
+ "execution_time" => __( "This setting allows you to raise your PHP execution time to a reasonable value.<br /><a href='http://semperplugins.com/documentation/performance-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
22
+ "force_rewrites" => __( "Use output buffering to ensure that the title gets rewritten. Enable this option if you run into issues with the title tag being set by your theme or another plugin.<br /><a href='http://semperplugins.com/documentation/performance-settings/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' )
23
+ );
24
+
25
  $this->default_options = array(
26
  'memory_limit' => Array( 'name' => __( 'Raise memory limit', 'all_in_one_seo_pack' ),
27
+ 'default' => '256M', 'type' => 'select',
 
 
28
  'initial_options' => Array( 0 => __( "Use the system default", 'all_in_one_seo_pack' ), '32M' => '32MB', '64M' => '64MB', '128M' => '128MB', '256M' => '256MB' ) ),
29
  'execution_time' => Array( 'name' => __( 'Raise execution time', 'all_in_one_seo_pack' ),
30
+ 'default' => '', 'type' => 'select',
 
 
31
  'initial_options' => Array( '' => __( "Use the system default", 'all_in_one_seo_pack' ), 30 => '30s', 60 => '1m', 120 => '2m', 300 => '5m', 0 => __( 'No limit', 'all_in_one_seo_pack' ) ) )
32
  );
33
 
35
  if ( aioseop_option_isset( 'aiosp_rewrite_titles' ) && $aioseop_options['aiosp_rewrite_titles'] ) {
36
  $this->default_options['force_rewrites'] = Array(
37
  'name' => __( 'Force Rewrites:', 'all_in_one_seo_pack' ),
38
+ 'default' => 1, 'type' => 'radio',
 
 
39
  'initial_options' => Array( 1 => __( 'Enabled', 'all_in_one_seo_pack' ),
40
  0 => __( 'Disabled', 'all_in_one_seo_pack' ) )
41
  );
44
  $this->layout = Array(
45
  'default' => Array(
46
  'name' => $this->name,
47
+ 'help_link' => 'http://semperplugins.com/documentation/performance-settings/',
48
  'options' => array_keys( $this->default_options )
49
  )
50
  );
55
 
56
  $this->layout['system_status'] = Array(
57
  'name' => __( 'System Status', 'all_in_one_seo_pack' ),
58
+ 'help_link' => 'http://semperplugins.com/documentation/performance-settings/',
59
  'options' => array_keys( $system_status )
60
  );
61
 
62
  $this->default_options = array_merge( $this->default_options, $system_status );
63
 
64
+ if ( !empty( $help_text ) )
65
+ foreach( $help_text as $k => $v )
66
+ $this->default_options[$k]['help_text'] = $v;
67
+
68
  add_filter( $this->prefix . 'display_options', Array( $this, 'display_options_filter' ), 10, 2 );
69
  add_filter( $this->prefix . 'update_options', Array( $this, 'update_options_filter' ), 10, 2 );
70
  add_action( $this->prefix . 'settings_update', Array( $this, 'settings_update_action' ), 10, 2 );
118
  }
119
 
120
  function settings_page_init() {
121
+ $this->default_options['status']['default'] = $this->get_serverinfo();
122
  }
123
 
124
  function menu_order() {
246
  return $buf;
247
  }
248
  }
249
+ }
aioseop_sitemap.php CHANGED
@@ -19,57 +19,66 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Sitemap' ) ) {
19
  $this->prefix = 'aiosp_sitemap_'; // option prefix
20
  $this->file = __FILE__; // the current file
21
  parent::__construct();
22
- $this->comment_string = __( "Sitemap %s generated by All in One SEO Pack %s by Michael Torbert of Semper Fi Web Design on %s",
23
- 'all_in_one_seo_pack' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
 
25
  $this->default_options = array(
26
  'filename' => Array( 'name' => __( 'Filename Prefix', 'all_in_one_seo_pack' ),
27
- 'help_text' => __( 'The prefix for your sitemap file name. This will default to "sitemap."', 'all_in_one_seo_pack' ),
28
  'default' => 'sitemap', 'type' => 'text', 'sanitize' => 'filename' ),
29
- 'google' => Array( 'name' => __( 'Notify Google', 'all_in_one_seo_pack'),
30
- 'help_text' => __( 'Notify Google when you update your sitemap settings.', 'all_in_one_seo_pack' ) ),
31
- 'bing' => Array( 'name' => __( 'Notify Bing', 'all_in_one_seo_pack'),
32
- 'help_text' => __('Notify Bing when you update your sitemap settings.', 'all_in_one_seo_pack' ) ),
33
- 'indexes' => Array( 'name' => __( 'Enable Sitemap Indexes', 'all_in_one_seo_pack' ),
34
- 'help_text' => __( 'Organize sitemap entries into distinct files in your sitemap.', 'all_in_one_seo_pack' ) ),
35
  'paginate' => Array( 'name' => __( 'Paginate Sitemap Indexes', 'all_in_one_seo_pack' ),
36
- 'help_text' => __( 'Splits long sitemaps into separate files.', 'all_in_one_seo_pack' ),
37
- 'condshow' => Array( "aiosp_sitemap_indexes" => 'on' ) ),
38
  'max_posts' => Array( 'name' => __( 'Maximum Posts Per Sitemap', 'all_in_one_seo_pack' ),
39
- 'help_text' => __( 'Allows you to specify the maximum number of posts in a sitemap (up to 50,000).', 'all_in_one_seo_pack' ),
40
- 'type' => 'text', 'default' => 50000,
41
- 'condshow' => Array( "aiosp_sitemap_indexes" => 'on', "aiosp_sitemap_paginate" => 'on' ) ),
42
  'posttypes' => Array( 'name' => __( 'Post Types', 'all_in_one_seo_pack'),
43
- 'help_text' => __( 'Select which post types appear in your sitemap.', 'all_in_one_seo_pack' ),
44
  'type' => 'multicheckbox', 'default' => 'all' ),
45
  'taxonomies'=> Array( 'name' => __( 'Taxonomies', 'all_in_one_seo_pack' ),
46
- 'help_text' => __( 'Select which taxonomy archives appear in your sitemap.', 'all_in_one_seo_pack' ),
47
  'type' => 'multicheckbox', 'default' => 'all' ),
48
- 'archive' => Array( 'name' => __( 'Include Date Archive Pages', 'all_in_one_seo_pack' ),
49
- 'help_text' => __( 'Include date archive pages in your sitemap.', 'all_in_one_seo_pack' ) ),
50
- 'author' => Array( 'name' => __( 'Include Author Pages', 'all_in_one_seo_pack' ),
51
- 'help_text' => __( 'Include author archive pages in your sitemap.', 'all_in_one_seo_pack' ) ),
52
- 'gzipped' => Array( 'name' => __( 'Create Compressed Sitemap', 'all_in_one_seo_pack' ), 'default' => 'On',
53
- 'help_text' => __( 'Create a compressed sitemap file in .xml.gz format', 'all_in_one_seo_pack' ) ),
54
- 'robots' => Array( 'name' => __( 'Link From Virtual Robots.txt', 'all_in_one_seo_pack' ), 'default' => 'On',
55
- 'help_text' => __( 'Places a link to your Sitemap.xml into your virtual Robots.txt file.', 'all_in_one_seo_pack' ) ),
56
- 'rewrite' => Array( 'name' => __( 'Dynamically Generate Sitemap', 'all_in_one_seo_pack' ), 'default' => 'On',
57
- 'help_text' => __( 'Use rewrites to generate your sitemap on the fly. NOTE: This is required for WordPress Multisite.', 'all_in_one_seo_pack') )
58
-
59
  );
60
 
61
  $status_options = Array(
62
  'link' => Array( 'default' => '', 'type' => 'html', 'label' => 'none', 'save' => false ),
63
- 'debug' => Array( 'name' => __( 'Debug Log', 'all_in_one_seo_pack' ), 'default' => '', 'type' => 'html', 'disabled' => 'disabled', 'save' => false, 'label' => 'none', 'rows' => 5, 'cols' => 120, 'style' => 'min-width:950px',
64
- 'help_text' => __( 'Debug messages and status information for sitemap.', 'all_in_one_seo_pack' ) )
65
  );
66
 
67
  $this->layout = Array(
68
  'status' => Array(
69
  'name' => __( 'Sitemap Status', 'all_in_one_seo_pack' ),
 
70
  'options' => array_keys( $status_options ) ),
71
  'default' => Array(
72
  'name' => $this->name,
 
73
  'options' => array_keys( $this->default_options )
74
  )
75
  );
@@ -102,41 +111,49 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Sitemap' ) ) {
102
 
103
  $addl_options = Array(
104
  'addl_instructions' => Array( 'default' => '<div>' . __( 'Enter information below for any additional links for your sitemap not already managed through WordPress.', 'all_in_one_seo_pack' ) . '</div><br />', 'type' => 'html', 'label' => 'none', 'save' => false ),
105
- 'addl_url' => Array( 'name' => __( 'Page URL', 'all_in_one_seo_pack' ), 'type' => 'text', 'help_text' => __( 'URL to the page.', 'all_in_one_seo_pack' ), 'label' => 'top', 'save' => false ),
106
- 'addl_prio' => Array( 'name' => __( 'Page Priority', 'all_in_one_seo_pack' ), 'type' => 'select', 'help_text' => __( 'The priority of the page.', 'all_in_one_seo_pack' ), 'initial_options' => $prio, 'label' => 'top', 'save' => false ),
107
- 'addl_freq' => Array( 'name' => __( 'Page Frequency', 'all_in_one_seo_pack' ), 'type' => 'select', 'help_text' => __( 'The frequency of the page.', 'all_in_one_seo_pack' ), 'initial_options' => $freq, 'label' => 'top', 'save' => false ),
108
- 'addl_mod' => Array( 'name' => __( 'Last Modified', 'all_in_one_seo_pack' ), 'type' => 'text', 'help_text' => __( 'Last modified date of the page.', 'all_in_one_seo_pack' ), 'label' => 'top', 'save' => false ),
109
  'addl_pages'=> Array( 'name' => __( 'Additional Pages', 'all_in_one_seo_pack' ), 'type' => 'custom', 'save' => true ),
110
  'Submit' => Array( 'type' => 'submit', 'class' => 'button-primary', 'name' => __( 'Add URL', 'all_in_one_seo_pack' ) . ' &raquo;', 'style' => 'margin-left: 20px;', 'label' => 'none', 'save' => false, 'value' => 1 )
111
  );
112
 
113
  $excl_options = Array(
114
- 'excl_categories' => Array( 'name' => __( 'Excluded Categories', 'all_in_one_seo_pack' ), 'type' => 'multicheckbox', 'help_text' => __( 'Entries from these categories will be excluded from the sitemap.', 'all_in_one_seo_pack' ), 'initial_options' => '' ),
115
- 'excl_pages' => Array( 'name' => __( 'Excluded Pages', 'all_in_one_seo_pack' ), 'type' => 'text', 'help_text' => __( 'Use page slugs or page IDs, seperated by commas, to exclude pages from the sitemap.', 'all_in_one_seo_pack' ) )
116
  );
117
 
118
  $this->layout['addl_pages'] = Array(
119
  'name' => __( 'Additional Pages', 'all_in_one_seo_pack' ),
 
120
  'options' => array_keys( $addl_options )
121
  );
122
 
123
  $this->layout['excl_pages'] = Array(
124
  'name' => __( 'Excluded Items', 'all_in_one_seo_pack' ),
 
125
  'options' => array_keys( $excl_options )
126
  );
127
 
128
  $this->layout['priorities'] = Array(
129
  'name' => __( 'Priorities', 'all_in_one_seo_pack' ),
 
130
  'options' => array_keys( $prio_options )
131
  );
132
 
133
  $this->layout['frequencies'] = Array(
134
  'name' => __( 'Frequencies', 'all_in_one_seo_pack' ),
 
135
  'options' => array_keys( $freq_options )
136
  );
137
 
138
  $this->default_options = array_merge( $status_options, $this->default_options, $addl_options, $excl_options, $prio_options, $freq_options );
139
 
 
 
 
 
140
  // load initial options / set defaults
141
  $this->update_options( );
142
 
@@ -167,6 +184,7 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Sitemap' ) ) {
167
  if ( !empty( $args['value'] ) ) {
168
  $buf .= "<table class='aioseop_table' cellpadding=0 cellspacing=0>\n";
169
  foreach ( $args['value'] as $k => $v ) {
 
170
  $buf .= "\t<tr><td><a href='#' title='$k' class='aiosp_delete_url'></a> {$k}</td><td>{$v['prio']}</td><td>{$v['freq']}</td><td>{$v['mod']}</td></tr>\n";
171
  }
172
  $buf .= "</table>\n";
@@ -174,9 +192,10 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Sitemap' ) ) {
174
  }
175
  $args['options']['type'] = 'hidden';
176
  if ( !empty( $args['value'] ) )
177
- $args['value'] = serialize( $args['value'] );
178
  else
179
  $args['options']['type'] = 'html';
 
180
  $buf .= $this->get_option_html( $args );
181
  $buf .= '</div>';
182
  return $buf;
@@ -265,9 +284,9 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Sitemap' ) ) {
265
 
266
  /** Handle 'all' option for post types / taxonomies, further sanitization of filename, rewrites on for multisite, setting up addl pages option. **/
267
  function filter_options( $options ) {
268
- if ( is_array( $options['aiosp_sitemap_posttypes'] ) && in_array( 'all', $options['aiosp_sitemap_posttypes'] ) )
269
  $options['aiosp_sitemap_posttypes'] = array_keys( $this->default_options['posttypes' ]['initial_options'] );
270
- if ( is_array( $options['aiosp_sitemap_taxonomies'] ) && in_array( 'all', $options['aiosp_sitemap_taxonomies'] ) )
271
  $options['aiosp_sitemap_taxonomies'] = array_keys( $this->default_options['taxonomies' ]['initial_options'] );
272
  $opt = $this->prefix . 'filename';
273
  if ( isset( $options[$opt] ) && !empty( $options[$opt] ) )
@@ -277,8 +296,21 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Sitemap' ) ) {
277
  if ( is_multisite() ) $options[ $this->prefix . 'rewrite'] = 'On';
278
  if ( !is_array( $options[ $this->prefix . 'addl_pages' ] ) ) {
279
  $options[ $this->prefix . 'addl_pages' ] = wp_specialchars_decode( stripslashes_deep( $options[ $this->prefix . 'addl_pages' ] ), ENT_QUOTES );
280
- $options[ $this->prefix . 'addl_pages' ] = maybe_unserialize( $options[ $this->prefix . 'addl_pages' ] );
 
 
 
 
 
 
 
 
 
 
 
 
281
  }
 
282
  if ( !empty( $_POST[ $this->prefix . 'addl_url' ] ) ) {
283
  foreach( Array( 'addl_url', 'addl_prio', 'addl_freq', 'addl_mod' ) as $field ) {
284
  if ( !empty( $_POST[ $this->prefix . $field ] ) ) {
@@ -291,7 +323,7 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Sitemap' ) ) {
291
  $options[ $this->prefix . 'addl_pages' ][ $_POST[ $this->prefix . 'addl_url' ] ] = Array(
292
  'prio' => $_POST[ $this->prefix . 'addl_prio' ],
293
  'freq' => $_POST[ $this->prefix . 'addl_freq' ],
294
- 'mod' => $_POST[ $this->prefix . 'addl_mod' ]
295
  );
296
  }
297
  return $options;
@@ -685,16 +717,25 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Sitemap' ) ) {
685
  $this->debug_message( __( 'Updated sitemap settings.', 'all_in_one_seo_pack' ) );
686
  }
687
 
 
 
 
 
 
 
 
688
  /** Write sitemaps (compressed or otherwise) to the filesystem. **/
689
  function write_sitemaps( $filename, $contents ) {
690
  $this->write_sitemap( $filename . ".xml", $contents );
691
  if ( $this->options['aiosp_sitemap_gzipped'] ) $this->write_sitemap( $filename . ".xml.gz", $contents, true );
692
  }
693
-
694
  /** Write a single sitemap to the filesystem, handle compression. **/
695
  function write_sitemap($filename, $contents, $gzip = false) {
696
  if ( $gzip ) $contents = gzencode( $contents );
 
697
  $filename = get_home_path() . sanitize_file_name( $filename );
 
698
  return $this->save_file( $filename, $contents );
699
  }
700
 
@@ -879,14 +920,22 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Sitemap' ) ) {
879
  $prio = array_merge( $child, $prio, $prio2, $prio3 );
880
  return $this->build_sitemap( $prio, $comment );
881
  }
882
-
883
  /** Output the XML for a sitemap. **/
884
  function output_sitemap( $urls, $comment = '' ) {
885
  $max_items = 50000;
886
  if ( !is_array( $urls ) ) return null;
887
  echo '<?xml version="1.0" encoding="UTF-8"?>' . "\r\n\r\n";
888
  echo "<!-- " . sprintf( $this->comment_string, $comment, AIOSEOP_VERSION, date('D, d M Y H:i:s e') ) . " -->\r\n";
889
- echo '<?xml-stylesheet type="text/xsl" href="' . $this->plugin_path['url'] . 'sitemap.xsl"?>' . "\r\n";
 
 
 
 
 
 
 
 
890
  echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\r\n";
891
  $count = 0;
892
  foreach ( $urls as $url ) {
@@ -1418,7 +1467,7 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Sitemap' ) ) {
1418
  /*
1419
  if ( version_compare( $wp_version, '3.5', '>=' ) ) {
1420
  $args['meta_query'] = Array(
1421
- Array( 'key' => '_aioseop_sitemap_exclude', 'value' => '', 'compare' => 'NOT EXISTS' )
1422
  );
1423
  } else {
1424
  */
@@ -1427,11 +1476,11 @@ if ( !class_exists( 'All_in_One_SEO_Pack_Sitemap' ) ) {
1427
  $ex_args['meta_value'] = 'on';
1428
  $ex_args['meta_compare'] = '=';
1429
  $ex_args['fields'] = 'ids';
 
1430
  $q = new WP_Query( $ex_args );
1431
- if ( !empty( $q->posts ) )
1432
- $args['exclude'] = array_merge( $args['exclude'], $q->posts );
1433
- // }
1434
-
1435
  $posts = get_posts( apply_filters( $this->prefix . 'post_query', $args ) );
1436
  if ( !empty( $exclude_slugs ) ) {
1437
  foreach( $posts as $k => $v ) {
19
  $this->prefix = 'aiosp_sitemap_'; // option prefix
20
  $this->file = __FILE__; // the current file
21
  parent::__construct();
22
+ $this->comment_string = __( "Sitemap %s generated by All in One SEO Pack %s by Michael Torbert of Semper Fi Web Design on %s", 'all_in_one_seo_pack' );
23
+
24
+ $help_text = Array(
25
+ "filename" => __( "Specifies the name of your sitemap file. This will default to 'sitemap'.<br /><a href='http://semperplugins.com/documentation/xml-sitemaps-module/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
26
+ "google" => __( "Notify Google when you update your sitemap settings.<br /><a href='http://semperplugins.com/documentation/xml-sitemaps-module/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
27
+ "bing" => __("Notify Bing when you update your sitemap settings.<br /><a href='http://semperplugins.com/documentation/xml-sitemaps-module/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
28
+ "indexes" => __( "Organize sitemap entries into distinct files in your sitemap. Enable this only if your sitemap contains over 50,000 URLs or the file is over 5MB in size.<br /><a href='http://semperplugins.com/documentation/xml-sitemaps-module/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
29
+ "paginate" => __( "Split long sitemaps into separate files.<br /><a href='http://semperplugins.com/documentation/xml-sitemaps-module/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
30
+ "max_posts" => __( "Allows you to specify the maximum number of posts in a sitemap (up to 50,000).<br /><a href='http://semperplugins.com/documentation/xml-sitemaps-module/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
31
+ "posttypes" => __( "Select which Post Types appear in your sitemap.<br /><a href='http://semperplugins.com/documentation/xml-sitemaps-module/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
32
+ "taxonomies" => __( "Select which taxonomy archives appear in your sitemap.<br /><a href='http://semperplugins.com/documentation/xml-sitemaps-module/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
33
+ "archive" => __( "Include Date Archives in your sitemap.<br /><a href='http://semperplugins.com/documentation/xml-sitemaps-module/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
34
+ "author" => __( "Include Author Archives in your sitemap.<br /><a href='http://semperplugins.com/documentation/xml-sitemaps-module/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
35
+ "gzipped" => __( "Create a compressed sitemap file in .xml.gz format.<br /><a href='http://semperplugins.com/documentation/xml-sitemaps-module/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
36
+ "robots" => __( 'Places a link to your Sitemap.xml into your virtual Robots.txt file.', 'all_in_one_seo_pack' ),
37
+ "rewrite" => __( "Places a link to the sitemap file in your virtual Robots.txt file which WordPress creates.<br /><a href='http://semperplugins.com/documentation/xml-sitemaps-module/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
38
+ "debug" => __( "Use rewrites to generate your sitemap on the fly. NOTE: This is required for WordPress Multisite.<br /><a href='http://semperplugins.com/documentation/xml-sitemaps-module/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack'),
39
+ "addl_url" => __( 'URL to the page.', 'all_in_one_seo_pack' ),
40
+ "addl_prio" => __( 'The priority of the page.', 'all_in_one_seo_pack' ),
41
+ "addl_freq" => __( 'The frequency of the page.', 'all_in_one_seo_pack' ),
42
+ "addl_mod" => __( 'Last modified date of the page.', 'all_in_one_seo_pack' ),
43
+ "excl_categories" => __( "Entries from these categories will be excluded from the sitemap.<br /><a href='http://semperplugins.com/documentation/xml-sitemaps-module/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' ),
44
+ "excl_pages" => __( "Use page slugs or page IDs, seperated by commas, to exclude pages from the sitemap.<br /><a href='http://semperplugins.com/documentation/xml-sitemaps-module/' target='_blank'>Click here for documentation on this setting</a>", 'all_in_one_seo_pack' )
45
+ );
46
 
47
  $this->default_options = array(
48
  'filename' => Array( 'name' => __( 'Filename Prefix', 'all_in_one_seo_pack' ),
 
49
  'default' => 'sitemap', 'type' => 'text', 'sanitize' => 'filename' ),
50
+ 'google' => Array( 'name' => __( 'Notify Google', 'all_in_one_seo_pack') ),
51
+ 'bing' => Array( 'name' => __( 'Notify Bing', 'all_in_one_seo_pack') ),
52
+ 'indexes' => Array( 'name' => __( 'Enable Sitemap Indexes', 'all_in_one_seo_pack' ) ),
 
 
 
53
  'paginate' => Array( 'name' => __( 'Paginate Sitemap Indexes', 'all_in_one_seo_pack' ),
54
+ 'condshow' => Array( "aiosp_sitemap_indexes" => 'on' ) ),
 
55
  'max_posts' => Array( 'name' => __( 'Maximum Posts Per Sitemap', 'all_in_one_seo_pack' ),
56
+ 'type' => 'text', 'default' => 50000,
57
+ 'condshow' => Array( "aiosp_sitemap_indexes" => 'on', "aiosp_sitemap_paginate" => 'on' ) ),
 
58
  'posttypes' => Array( 'name' => __( 'Post Types', 'all_in_one_seo_pack'),
 
59
  'type' => 'multicheckbox', 'default' => 'all' ),
60
  'taxonomies'=> Array( 'name' => __( 'Taxonomies', 'all_in_one_seo_pack' ),
 
61
  'type' => 'multicheckbox', 'default' => 'all' ),
62
+ 'archive' => Array( 'name' => __( 'Include Date Archive Pages', 'all_in_one_seo_pack' ) ),
63
+ 'author' => Array( 'name' => __( 'Include Author Pages', 'all_in_one_seo_pack' ) ),
64
+ 'gzipped' => Array( 'name' => __( 'Create Compressed Sitemap', 'all_in_one_seo_pack' ), 'default' => 'On' ),
65
+ 'robots' => Array( 'name' => __( 'Link From Virtual Robots.txt', 'all_in_one_seo_pack' ), 'default' => 'On' ),
66
+ 'rewrite' => Array( 'name' => __( 'Dynamically Generate Sitemap', 'all_in_one_seo_pack' ), 'default' => 'On' )
 
 
 
 
 
 
67
  );
68
 
69
  $status_options = Array(
70
  'link' => Array( 'default' => '', 'type' => 'html', 'label' => 'none', 'save' => false ),
71
+ 'debug' => Array( 'name' => __( 'Debug Log', 'all_in_one_seo_pack' ), 'default' => '', 'type' => 'html', 'disabled' => 'disabled', 'save' => false, 'label' => 'none', 'rows' => 5, 'cols' => 120, 'style' => 'min-width:950px' )
 
72
  );
73
 
74
  $this->layout = Array(
75
  'status' => Array(
76
  'name' => __( 'Sitemap Status', 'all_in_one_seo_pack' ),
77
+ 'help_link' => 'http://semperplugins.com/documentation/xml-sitemaps-module/',
78
  'options' => array_keys( $status_options ) ),
79
  'default' => Array(
80
  'name' => $this->name,
81
+ 'help_link' => 'http://semperplugins.com/documentation/xml-sitemaps-module/',
82
  'options' => array_keys( $this->default_options )
83
  )
84
  );
111
 
112
  $addl_options = Array(
113
  'addl_instructions' => Array( 'default' => '<div>' . __( 'Enter information below for any additional links for your sitemap not already managed through WordPress.', 'all_in_one_seo_pack' ) . '</div><br />', 'type' => 'html', 'label' => 'none', 'save' => false ),
114
+ 'addl_url' => Array( 'name' => __( 'Page URL', 'all_in_one_seo_pack' ), 'type' => 'text', 'label' => 'top', 'save' => false ),
115
+ 'addl_prio' => Array( 'name' => __( 'Page Priority', 'all_in_one_seo_pack' ), 'type' => 'select', 'initial_options' => $prio, 'label' => 'top', 'save' => false ),
116
+ 'addl_freq' => Array( 'name' => __( 'Page Frequency', 'all_in_one_seo_pack' ), 'type' => 'select', 'initial_options' => $freq, 'label' => 'top', 'save' => false ),
117
+ 'addl_mod' => Array( 'name' => __( 'Last Modified', 'all_in_one_seo_pack' ), 'type' => 'text', 'label' => 'top', 'save' => false ),
118
  'addl_pages'=> Array( 'name' => __( 'Additional Pages', 'all_in_one_seo_pack' ), 'type' => 'custom', 'save' => true ),
119
  'Submit' => Array( 'type' => 'submit', 'class' => 'button-primary', 'name' => __( 'Add URL', 'all_in_one_seo_pack' ) . ' &raquo;', 'style' => 'margin-left: 20px;', 'label' => 'none', 'save' => false, 'value' => 1 )
120
  );
121
 
122
  $excl_options = Array(
123
+ 'excl_categories' => Array( 'name' => __( 'Excluded Categories', 'all_in_one_seo_pack' ), 'type' => 'multicheckbox', 'initial_options' => '' ),
124
+ 'excl_pages' => Array( 'name' => __( 'Excluded Pages', 'all_in_one_seo_pack' ), 'type' => 'text' )
125
  );
126
 
127
  $this->layout['addl_pages'] = Array(
128
  'name' => __( 'Additional Pages', 'all_in_one_seo_pack' ),
129
+ 'help_link' => 'http://semperplugins.com/documentation/xml-sitemaps-module/#addl_pages',
130
  'options' => array_keys( $addl_options )
131
  );
132
 
133
  $this->layout['excl_pages'] = Array(
134
  'name' => __( 'Excluded Items', 'all_in_one_seo_pack' ),
135
+ 'help_link' => 'http://semperplugins.com/documentation/xml-sitemaps-module/#excl_pages',
136
  'options' => array_keys( $excl_options )
137
  );
138
 
139
  $this->layout['priorities'] = Array(
140
  'name' => __( 'Priorities', 'all_in_one_seo_pack' ),
141
+ 'help_link' => 'http://semperplugins.com/documentation/xml-sitemaps-module/#prio',
142
  'options' => array_keys( $prio_options )
143
  );
144
 
145
  $this->layout['frequencies'] = Array(
146
  'name' => __( 'Frequencies', 'all_in_one_seo_pack' ),
147
+ 'help_link' => 'http://semperplugins.com/documentation/xml-sitemaps-module/#freq',
148
  'options' => array_keys( $freq_options )
149
  );
150
 
151
  $this->default_options = array_merge( $status_options, $this->default_options, $addl_options, $excl_options, $prio_options, $freq_options );
152
 
153
+ if ( !empty( $help_text ) )
154
+ foreach( $help_text as $k => $v )
155
+ $this->default_options[$k]['help_text'] = $v;
156
+
157
  // load initial options / set defaults
158
  $this->update_options( );
159
 
184
  if ( !empty( $args['value'] ) ) {
185
  $buf .= "<table class='aioseop_table' cellpadding=0 cellspacing=0>\n";
186
  foreach ( $args['value'] as $k => $v ) {
187
+ if ( is_object( $v ) ) $v = (Array)$v;
188
  $buf .= "\t<tr><td><a href='#' title='$k' class='aiosp_delete_url'></a> {$k}</td><td>{$v['prio']}</td><td>{$v['freq']}</td><td>{$v['mod']}</td></tr>\n";
189
  }
190
  $buf .= "</table>\n";
192
  }
193
  $args['options']['type'] = 'hidden';
194
  if ( !empty( $args['value'] ) )
195
+ $args['value'] = json_encode( $args['value'] );
196
  else
197
  $args['options']['type'] = 'html';
198
+ if ( empty( $args['value'] ) ) $args['value'] = '';
199
  $buf .= $this->get_option_html( $args );
200
  $buf .= '</div>';
201
  return $buf;
284
 
285
  /** Handle 'all' option for post types / taxonomies, further sanitization of filename, rewrites on for multisite, setting up addl pages option. **/
286
  function filter_options( $options ) {
287
+ if ( is_array( $options['aiosp_sitemap_posttypes'] ) && in_array( 'all', $options['aiosp_sitemap_posttypes'] ) && is_array( $this->default_options['posttypes' ]['initial_options'] ) )
288
  $options['aiosp_sitemap_posttypes'] = array_keys( $this->default_options['posttypes' ]['initial_options'] );
289
+ if ( is_array( $options['aiosp_sitemap_taxonomies'] ) && in_array( 'all', $options['aiosp_sitemap_taxonomies'] ) && is_array( $this->default_options['taxonomies' ]['initial_options'] ) )
290
  $options['aiosp_sitemap_taxonomies'] = array_keys( $this->default_options['taxonomies' ]['initial_options'] );
291
  $opt = $this->prefix . 'filename';
292
  if ( isset( $options[$opt] ) && !empty( $options[$opt] ) )
296
  if ( is_multisite() ) $options[ $this->prefix . 'rewrite'] = 'On';
297
  if ( !is_array( $options[ $this->prefix . 'addl_pages' ] ) ) {
298
  $options[ $this->prefix . 'addl_pages' ] = wp_specialchars_decode( stripslashes_deep( $options[ $this->prefix . 'addl_pages' ] ), ENT_QUOTES );
299
+ $decoded = json_decode( $options[ $this->prefix . 'addl_pages' ] );
300
+ if ( $decoded === NULL )
301
+ $decoded = maybe_unserialize( $options[ $this->prefix . 'addl_pages' ] );
302
+ if ( !is_array( $decoded ) ) $decoded = (Array)$decoded;
303
+ if ( $decoded === NULL )
304
+ $decoded = $options[ $this->prefix . 'addl_pages' ];
305
+ $options[ $this->prefix . 'addl_pages' ] = $decoded;
306
+ }
307
+ if ( is_array( $options[ $this->prefix . 'addl_pages' ] ) ) {
308
+ foreach( $options[ $this->prefix . 'addl_pages' ] as $k => $v ) {
309
+ if ( is_object( $v ) )
310
+ $options[ $this->prefix . 'addl_pages' ][$k] = (Array)$v;
311
+ }
312
  }
313
+ if ( isset( $options[ $this->prefix . 'addl_pages' ][0] ) ) unset( $options[ $this->prefix . 'addl_pages' ][0] );
314
  if ( !empty( $_POST[ $this->prefix . 'addl_url' ] ) ) {
315
  foreach( Array( 'addl_url', 'addl_prio', 'addl_freq', 'addl_mod' ) as $field ) {
316
  if ( !empty( $_POST[ $this->prefix . $field ] ) ) {
323
  $options[ $this->prefix . 'addl_pages' ][ $_POST[ $this->prefix . 'addl_url' ] ] = Array(
324
  'prio' => $_POST[ $this->prefix . 'addl_prio' ],
325
  'freq' => $_POST[ $this->prefix . 'addl_freq' ],
326
+ 'mod' => $_POST[ $this->prefix . 'addl_mod' ],
327
  );
328
  }
329
  return $options;
717
  $this->debug_message( __( 'Updated sitemap settings.', 'all_in_one_seo_pack' ) );
718
  }
719
 
720
+ function add_xml_mime_type( $mime ) {
721
+ if ( !empty( $mime ) ) {
722
+ $mime['xml'] = 'text/xml';
723
+ }
724
+ return $mime;
725
+ }
726
+
727
  /** Write sitemaps (compressed or otherwise) to the filesystem. **/
728
  function write_sitemaps( $filename, $contents ) {
729
  $this->write_sitemap( $filename . ".xml", $contents );
730
  if ( $this->options['aiosp_sitemap_gzipped'] ) $this->write_sitemap( $filename . ".xml.gz", $contents, true );
731
  }
732
+
733
  /** Write a single sitemap to the filesystem, handle compression. **/
734
  function write_sitemap($filename, $contents, $gzip = false) {
735
  if ( $gzip ) $contents = gzencode( $contents );
736
+ add_filter( 'upload_mimes', Array( $this, 'add_xml_mime_type' ) );
737
  $filename = get_home_path() . sanitize_file_name( $filename );
738
+ remove_filter( 'upload_mimes', Array( $this, 'add_xml_mime_type' ) );
739
  return $this->save_file( $filename, $contents );
740
  }
741
 
920
  $prio = array_merge( $child, $prio, $prio2, $prio3 );
921
  return $this->build_sitemap( $prio, $comment );
922
  }
923
+
924
  /** Output the XML for a sitemap. **/
925
  function output_sitemap( $urls, $comment = '' ) {
926
  $max_items = 50000;
927
  if ( !is_array( $urls ) ) return null;
928
  echo '<?xml version="1.0" encoding="UTF-8"?>' . "\r\n\r\n";
929
  echo "<!-- " . sprintf( $this->comment_string, $comment, AIOSEOP_VERSION, date('D, d M Y H:i:s e') ) . " -->\r\n";
930
+ $plugin_path = $this->plugin_path['url'];
931
+ $plugin_url = parse_url( $plugin_path );
932
+ $current_host = $_SERVER['HTTP_HOST'];
933
+ if ( empty( $current_host ) ) $current_host = $_SERVER['SERVER_NAME'];
934
+ if ( !empty( $current_host ) && ( $current_host != $plugin_url['host'] ) ) {
935
+ $plugin_url['host'] = $current_host;
936
+ $plugin_path = $this->unparse_url( $plugin_url );
937
+ }
938
+ echo '<?xml-stylesheet type="text/xsl" href="' . $plugin_path . 'sitemap.xsl"?>' . "\r\n";
939
  echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\r\n";
940
  $count = 0;
941
  foreach ( $urls as $url ) {
1467
  /*
1468
  if ( version_compare( $wp_version, '3.5', '>=' ) ) {
1469
  $args['meta_query'] = Array(
1470
+ Array( 'key' => '_aioseop_sitemap_exclude', 'value' => 'null', 'compare' => 'NOT EXISTS' )
1471
  );
1472
  } else {
1473
  */
1476
  $ex_args['meta_value'] = 'on';
1477
  $ex_args['meta_compare'] = '=';
1478
  $ex_args['fields'] = 'ids';
1479
+ $ex_args['posts_per_page'] = -1;
1480
  $q = new WP_Query( $ex_args );
1481
+ if ( !is_array( $args['exclude'] ) ) $args['exclude'] = explode( ',', $args['exclude'] );
1482
+ if ( !empty( $q->posts ) ) $args['exclude'] = array_merge( $args['exclude'], $q->posts );
1483
+ //}
 
1484
  $posts = get_posts( apply_filters( $this->prefix . 'post_query', $args ) );
1485
  if ( !empty( $exclude_slugs ) ) {
1486
  foreach( $posts as $k => $v ) {
all_in_one_seo_pack-ru_RU.mo CHANGED
Binary file
all_in_one_seo_pack.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: All In One SEO Pack
4
  Plugin URI: http://semperfiwebdesign.com
5
  Description: Out-of-the-box SEO for your WordPress blog. <a href="admin.php?page=all-in-one-seo-pack/aioseop_class.php">Options configuration panel</a> | <a href="http://semperplugins.com/plugins/">Upgrade to Pro Version</a> | <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=mrtorbert%40gmail%2ecom&item_name=All%20In%20One%20SEO%20Pack&item_number=Support%20Open%20Source&no_shipping=0&no_note=1&tax=0&currency_code=USD&lc=US&bn=PP%2dDonationsBF&charset=UTF%2d8">Donate</a> | <a href="http://semperplugins.com/support/" >Support</a> | <a href="https://www.amazon.com/wishlist/1NFQ133FNCOOA/ref=wl_web" target="_blank" title="Amazon Wish List">Amazon Wishlist</a>
6
- Version: 2.0.3.1
7
  Author: Michael Torbert
8
  Author URI: http://michaeltorbert.com
9
  */
@@ -30,11 +30,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
30
 
31
  /**
32
  * @package All-in-One-SEO-Pack
33
- * @version 2.0.3.1
34
  */
35
 
36
  if ( ! defined( 'AIOSEOP_VERSION' ) )
37
- define( 'AIOSEOP_VERSION', '2.0.3.1' );
38
 
39
  if ( ! defined( 'AIOSEOP_PLUGIN_DIR' ) ) {
40
  define( 'AIOSEOP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
@@ -61,9 +61,9 @@ if ( ! defined( 'AIOSEOP_BASELINE_MEM_LIMIT' ) )
61
  define( 'AIOSEOP_BASELINE_MEM_LIMIT', 268435456 ); // 256MB
62
 
63
  if ( ! defined( 'WP_CONTENT_URL' ) )
64
- define( 'WP_CONTENT_URL', get_option( 'siteurl' ) . '/wp-content' );
65
  if ( ! defined( 'WP_ADMIN_URL' ) )
66
- define( 'WP_ADMIN_URL', get_option( 'siteurl' ) . '/wp-admin' );
67
  if ( ! defined( 'WP_CONTENT_DIR' ) )
68
  define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' );
69
  if ( ! defined( 'WP_PLUGIN_URL' ) )
3
  Plugin Name: All In One SEO Pack
4
  Plugin URI: http://semperfiwebdesign.com
5
  Description: Out-of-the-box SEO for your WordPress blog. <a href="admin.php?page=all-in-one-seo-pack/aioseop_class.php">Options configuration panel</a> | <a href="http://semperplugins.com/plugins/">Upgrade to Pro Version</a> | <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=mrtorbert%40gmail%2ecom&item_name=All%20In%20One%20SEO%20Pack&item_number=Support%20Open%20Source&no_shipping=0&no_note=1&tax=0&currency_code=USD&lc=US&bn=PP%2dDonationsBF&charset=UTF%2d8">Donate</a> | <a href="http://semperplugins.com/support/" >Support</a> | <a href="https://www.amazon.com/wishlist/1NFQ133FNCOOA/ref=wl_web" target="_blank" title="Amazon Wish List">Amazon Wishlist</a>
6
+ Version: 2.0.4
7
  Author: Michael Torbert
8
  Author URI: http://michaeltorbert.com
9
  */
30
 
31
  /**
32
  * @package All-in-One-SEO-Pack
33
+ * @version 2.0.4
34
  */
35
 
36
  if ( ! defined( 'AIOSEOP_VERSION' ) )
37
+ define( 'AIOSEOP_VERSION', '2.0.4' );
38
 
39
  if ( ! defined( 'AIOSEOP_PLUGIN_DIR' ) ) {
40
  define( 'AIOSEOP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
61
  define( 'AIOSEOP_BASELINE_MEM_LIMIT', 268435456 ); // 256MB
62
 
63
  if ( ! defined( 'WP_CONTENT_URL' ) )
64
+ define( 'WP_CONTENT_URL', site_url() . '/wp-content' );
65
  if ( ! defined( 'WP_ADMIN_URL' ) )
66
+ define( 'WP_ADMIN_URL', site_url() . '/wp-admin' );
67
  if ( ! defined( 'WP_CONTENT_DIR' ) )
68
  define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' );
69
  if ( ! defined( 'WP_PLUGIN_URL' ) )
quickedit_functions.js CHANGED
@@ -1,7 +1,7 @@
1
  function aioseop_ajax_edit_meta_form( post_id, post_title, meta ) {
2
  var uform = jQuery('#aioseop_'+meta+'_' + post_id);
3
  var element = uform.html(); var input;
4
- input = '<input type="text" id="aioseop_new_'+meta+'_' + post_id + '" value="' + post_title + '" style="font-size:10px;width:65%;float:left" />';
5
  input += '<label style="float:left">';
6
  input += '<a class="aioseop_mpc_SEO_admin_options_edit" href="javascript:void(0);" id="aioseop_'+meta+'_save_' + post_id + '" >';
7
  input += '<img src="' + aioseopadmin.imgUrl+'accept.png" border="0" alt="" title="'+meta+'" /></a>';
@@ -13,7 +13,7 @@ function aioseop_ajax_edit_meta_form( post_id, post_title, meta ) {
13
  uform.html( element );
14
  });
15
  jQuery('#aioseop_'+meta+'_save_' + post_id).click(function() {
16
- var new_meta = jQuery( 'input#aioseop_new_'+meta+'_' + post_id ).val();
17
  handle_post_meta( post_id, new_meta, meta );
18
  });
19
  }
1
  function aioseop_ajax_edit_meta_form( post_id, post_title, meta ) {
2
  var uform = jQuery('#aioseop_'+meta+'_' + post_id);
3
  var element = uform.html(); var input;
4
+ input = '<textarea id="aioseop_new_'+meta+'_' + post_id + '" style="font-size:10px;width:65%;float:left" rows=2 cols=16>' + post_title + '</textarea>';
5
  input += '<label style="float:left">';
6
  input += '<a class="aioseop_mpc_SEO_admin_options_edit" href="javascript:void(0);" id="aioseop_'+meta+'_save_' + post_id + '" >';
7
  input += '<img src="' + aioseopadmin.imgUrl+'accept.png" border="0" alt="" title="'+meta+'" /></a>';
13
  uform.html( element );
14
  });
15
  jQuery('#aioseop_'+meta+'_save_' + post_id).click(function() {
16
+ var new_meta = jQuery( '#aioseop_new_'+meta+'_' + post_id ).val();
17
  handle_post_meta( post_id, new_meta, meta );
18
  });
19
  }
readme.txt CHANGED
@@ -1,50 +1,40 @@
1
  === All in One SEO Pack ===
2
  Contributors: hallsofmontezuma
3
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=mrtorbert%40gmail%2ecom&item_name=All%20In%20One%20SEO%20Pack&item_number=Support%20Open%20Source&no_shipping=0&no_note=1&tax=0&currency_code=USD&lc=US&bn=PP%2dDonationsBF&charset=UTF%2d8
4
- Tags: seo, search engine optimization, google
5
  Requires at least: 3.3
6
  Tested up to: 3.6.1
7
  Stable tag: trunk
8
 
9
- WordPress SEO plugin to automatically optimize your Wordpress blog for Search Engines.
10
 
11
  == Description ==
12
 
13
- **Optimizes** your Wordpress blog for Search Engines (**Search Engine Optimization**).
14
 
15
  **[Upgrade to Pro Version](http://semperplugins.com/plugins/all-in-one-seo-pack-pro-version/)**
16
 
17
- [Support](http://semperfiwebdesign.com/forum/) |
18
- [Change Log](http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/all-in-one-seo-pack-release-history/) |
19
- [FAQ](http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/all-in-one-seo-faq/)|
20
- [Translations](http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/translations-for-all-in-one-seo-pack/)
21
-
22
- Some features:
23
-
24
 
 
25
  * Google Analytics support
26
- * Support for Custom Post Types
27
  * Advanced Canonical URLs
28
  * Fine tune Page Navigational Links
29
  * Built-in API so other plugins/themes can access and extend functionality
30
  * ONLY plugin to provide SEO Integration for WP e-Commerce sites
31
- * Nonce Security
32
  * Support for CMS-style WordPress installations
33
- * Automatically optimizes your **titles** for search engines
34
  * Generates **META tags automatically**
35
- * Avoids the typical duplicate content found on Wordpress blogs
36
  * For beginners, you don't even have to look at the options, it works out-of-the-box. Just install.
37
- * For advanced users, you can fine-tune everything
38
  * You can override any title and set any META description and any META keywords you want.
39
- * Backward-Compatibility with many other plugins, like Auto Meta, Ultimate Tag Warrior and others.
40
 
41
  **If upgrading, please back up your database first!**
42
 
43
- Be sure to check out:
44
- [WP Security Scan](http://wordpress.org/extend/plugins/wp-security-scan/)
45
- and
46
- [SMS Text Message](http://wordpress.org/extend/plugins/sms-text-message/)
47
-
48
  Follow me on Twitter to keep up with the latest updates [Michael
49
  Torbert](http://twitter.com/michaeltorbert/)
50
 
@@ -56,23 +46,26 @@ manually.
56
  1. You can either use the automatic plugin installer or your FTP program to upload it to your wp-content/plugins directory
57
  the top-level folder. Don't just upload all the php files and put them in `/wp-content/plugins/`.
58
  1. Activate the plugin through the 'Plugins' menu in WordPress
59
- 1. Visit your SEO options (*Options - All in One SEO*) for Wordpress 2.3.x, (*Settings - All in One SEO*) for Wordpress 2.5.x-2.8.x
60
  1. Configure any options as desired, and then enable the plugin
61
  1. That's it!
62
-
63
  If you have to upgrade manually simply repeat the installation steps and re-enable the plugin.
64
 
65
  **If upgrading, please back up your database first!**
66
 
67
- [Upgrade guide for upgrading from 1.5.x and below to
68
- 1.6.x](http://onefinejay.com/2009/07/11/a-guide-to-upgrading-to-aioseop-v1-6-1)
 
69
 
70
  == Frequently Asked Questions ==
71
 
72
- Please read these **[FAQs](http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/all-in-one-seo-faq/)** before requesting
73
- **[My Plugin Support Forum](http://semperfiwebdesign.com/forum/)**
 
 
74
 
75
  == Upgrade Notice ==
76
 
77
- = 2.0.3.1 =
78
  This version fixes a security related bug. Please Upgrade immediately.
1
  === All in One SEO Pack ===
2
  Contributors: hallsofmontezuma
3
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=mrtorbert%40gmail%2ecom&item_name=All%20In%20One%20SEO%20Pack&item_number=Support%20Open%20Source&no_shipping=0&no_note=1&tax=0&currency_code=USD&lc=US&bn=PP%2dDonationsBF&charset=UTF%2d8
4
+ Tags: all in one, all in one seo, all in one seo pack, seo, search engine optimization, google
5
  Requires at least: 3.3
6
  Tested up to: 3.6.1
7
  Stable tag: trunk
8
 
9
+ All in One SEO Pack is a WordPress SEO plugin to automatically optimize your Wordpress blog for Search Engines such as Google.
10
 
11
  == Description ==
12
 
13
+ All in One SEO Pack **Optimizes** your Wordpress blog for SEO (**Search Engine Optimization**).
14
 
15
  **[Upgrade to Pro Version](http://semperplugins.com/plugins/all-in-one-seo-pack-pro-version/)**
16
 
17
+ [Premium Support](http://semperplugins.com/support/)
 
 
 
 
 
 
18
 
19
+ * XML Sitemap support - submit your sitemap to Google and Bing and improve your SEO
20
  * Google Analytics support
21
+ * Support for SEO on Custom Post Types
22
  * Advanced Canonical URLs
23
  * Fine tune Page Navigational Links
24
  * Built-in API so other plugins/themes can access and extend functionality
25
  * ONLY plugin to provide SEO Integration for WP e-Commerce sites
26
+ * Nonce Security built into All in One SEO Pack
27
  * Support for CMS-style WordPress installations
28
+ * Automatically optimizes your **titles** for Google and other search engines
29
  * Generates **META tags automatically**
30
+ * Avoids the typical duplicate content found on WordPress blogs
31
  * For beginners, you don't even have to look at the options, it works out-of-the-box. Just install.
32
+ * For advanced users, you can fine-tune everything to optimize your SEO
33
  * You can override any title and set any META description and any META keywords you want.
34
+ * Compatibility with many other plugins
35
 
36
  **If upgrading, please back up your database first!**
37
 
 
 
 
 
 
38
  Follow me on Twitter to keep up with the latest updates [Michael
39
  Torbert](http://twitter.com/michaeltorbert/)
40
 
46
  1. You can either use the automatic plugin installer or your FTP program to upload it to your wp-content/plugins directory
47
  the top-level folder. Don't just upload all the php files and put them in `/wp-content/plugins/`.
48
  1. Activate the plugin through the 'Plugins' menu in WordPress
49
+ 1. Visit your SEO options (*All in One SEO - General Settings*)
50
  1. Configure any options as desired, and then enable the plugin
51
  1. That's it!
52
+ fc
53
  If you have to upgrade manually simply repeat the installation steps and re-enable the plugin.
54
 
55
  **If upgrading, please back up your database first!**
56
 
57
+ == Changelog ==
58
+
59
+ All in One SEO Pack [Changelog](http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/all-in-one-seo-pack-release-history/)
60
 
61
  == Frequently Asked Questions ==
62
 
63
+ Please read these **[FAQs](http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/all-in-one-seo-faq/)** before requesting support for SEO from the
64
+ **[All in One SEO Pack Support Forum](http://semperplugins.com/support/)**
65
+
66
+ [Translations](http://semperfiwebdesign.com/documentation/all-in-one-seo-pack/translations-for-all-in-one-seo-pack/)
67
 
68
  == Upgrade Notice ==
69
 
70
+ = 2.0.4 =
71
  This version fixes a security related bug. Please Upgrade immediately.