Google XML Sitemaps - Version 4.1.2

Version Description

(2022-04-15) = * Fixed security issue related to Cross-Site Scripting attacks on debug page * Fixed HTTP error while generating sitemap (because of conflict of www and now www site) * Fixed handling WordPress core sitemap entry from robots.txt * Added option to flush database rewrite on plugin deactivation * Added option to split the custom categories into multiple sitemaps by custom taxonomy * Added option to omit the posts specified as disallow in robots.txt * Added option to set links per page for tags and categories * Added option to set a custom filename for the sitemap * Added option to list custom post in the archive sitemap

Download this release

Release Info

Developer auctollo
Plugin Icon 128x128 Google XML Sitemaps
Version 4.1.2
Comparing to
See all releases

Code changes from version 4.1.1 to 4.1.2

class-googlesitemapgeneratorloader.php ADDED
@@ -0,0 +1,504 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Loader class for the XML Sitemap Generator
4
+ *
5
+ * This class takes care of the sitemap plugin and tries to load the different parts as late as possible.
6
+ * On normal requests, only this small class is loaded. When the sitemap needs to be rebuild, the generator itself is loaded.
7
+ * The last stage is the user interface which is loaded when the administration page is requested.
8
+ *
9
+ * @author Arne Brachhold
10
+ * @package sitemap
11
+ */
12
+
13
+ /**
14
+ * This class is for the sitemap loader
15
+ */
16
+ class GoogleSitemapGeneratorLoader {
17
+
18
+ /**
19
+ * Version of the generator in SVN.
20
+ *
21
+ * @var string Version of the generator in SVN
22
+ */
23
+ private static $svn_version = '$Id: class-googlesitemapgeneratorloader.php 937300 2014-06-23 18:04:11Z arnee $';
24
+
25
+
26
+ /**
27
+ * Enabled the sitemap plugin with registering all required hooks
28
+ *
29
+ * @uses add_action Adds actions for admin menu, executing pings and handling robots.t xt
30
+ * @uses add_filter Adds filtes for admin menu icon and contexual help
31
+ * @uses GoogleSitemapGeneratorLoader::call_show_ping_result() Shows the ping result on request
32
+ */
33
+ public static function enable() {
34
+
35
+ // Register the sitemap creator to WordPress...
36
+ add_action( 'admin_menu', array( __CLASS__, 'register_admin_page' ) );
37
+
38
+ // Add a widget to the dashboard.
39
+ add_action( 'wp_dashboard_setup', array( __CLASS__, 'wp_dashboard_setup' ) );
40
+
41
+ // Nice icon for Admin Menu (requires Ozh Admin Drop Down Plugin) .
42
+ add_filter( 'ozh_adminmenu_icon', array( __CLASS__, 'register_admin_icon' ) );
43
+
44
+ // Additional links on the plugin page .
45
+ add_filter( 'plugin_row_meta', array( __CLASS__, 'register_plugin_links' ), 10, 2 );
46
+
47
+ // Listen to ping request .
48
+ add_action( 'sm_ping', array( __CLASS__, 'call_send_ping' ), 10, 1 );
49
+
50
+ // Listen to daily ping .
51
+ add_action( 'sm_ping_daily', array( __CLASS__, 'call_send_ping_daily' ), 10, 1 );
52
+
53
+ // Post is somehow changed (also publish to publish (=edit) is fired) .
54
+ add_action( 'transition_post_status', array( __CLASS__, 'schedule_ping_on_status_change' ), 9999, 3 );
55
+
56
+ add_action(
57
+ 'init',
58
+ function() {
59
+ remove_action( 'init', 'wp_sitemaps_get_server' );
60
+ },
61
+ 5
62
+ );
63
+
64
+ // Robots.txt request .
65
+ add_action( 'do_robots', array( __CLASS__, 'call_do_robots' ), 100, 0 );
66
+
67
+ // Help topics for context sensitive help .
68
+ // add_filter('contextual_help_list', array( __CLASS__, 'call_html_show_help_list' ), 9999, 2); .
69
+
70
+ // Check if the result of a ping request should be shown .
71
+ if ( isset( $_GET['sm_ping_service'] ) && ! empty( sanitize_text_field( wp_unslash( $_GET['sm_ping_service'] ) ) ) ) {
72
+ self::call_show_ping_result();
73
+ }
74
+
75
+ // Fix rewrite rules if not already done on activation hook. This happens on network activation for example.
76
+ if ( get_option( 'sm_rewrite_done', null ) !== self::$svn_version ) {
77
+ add_action( 'wp_loaded', array( __CLASS__, 'activate_rewrite' ), 9999, 1 );
78
+ }
79
+
80
+ // Schedule daily ping .
81
+ if ( ! wp_get_schedule( 'sm_ping_daily' ) ) {
82
+ wp_schedule_event( time() + ( 60 * 60 ), 'daily', 'sm_ping_daily' );
83
+ }
84
+
85
+ // Disable the WP core XML sitemaps .
86
+ add_filter( 'wp_sitemaps_enabled', '__return_false' );
87
+ }
88
+
89
+ /**
90
+ * Sets up the query vars and template redirect hooks
91
+ *
92
+ * @uses GoogleSitemapGeneratorLoader::register_query_vars
93
+ * @uses GoogleSitemapGeneratorLoader::do_template_redirect
94
+ * @since 4.0
95
+ */
96
+ public static function setup_query_vars() {
97
+
98
+ add_filter( 'query_vars', array( __CLASS__, 'register_query_vars' ), 1, 1 );
99
+
100
+ add_filter( 'template_redirect', array( __CLASS__, 'do_template_redirect' ), 1, 0 );
101
+
102
+ }
103
+
104
+ /**
105
+ * Register the plugin specific 'xml_sitemap' query var
106
+ *
107
+ * @since 4.0
108
+ * @param array $vars Array Array of existing query_vars .
109
+ * @return Array An aarray containing the new query vars
110
+ */
111
+ public static function register_query_vars( $vars ) {
112
+ array_push( $vars, 'xml_sitemap' );
113
+ return $vars;
114
+ }
115
+
116
+ /**
117
+ * Registers the plugin specific rewrite rules
118
+ *
119
+ * Combined: sitemap(-+([a-zA-Z0-9_-]+))?\.(xml|html)(.gz)?$
120
+ *
121
+ * @since 4.0
122
+ * @param array $wp_rules Array of existing rewrite rules .
123
+ * @return Array An array containing the new rewrite rules
124
+ */
125
+ public static function add_rewrite_rules( $wp_rules ) {
126
+ $sm_rules = array(
127
+ 'sitemap(-+([a-zA-Z0-9_-]+))?\.xml$' => 'index.php?xml_sitemap=params=$matches[2]',
128
+ 'sitemap(-+([a-zA-Z0-9_-]+))?\.xml\.gz$' => 'index.php?xml_sitemap=params=$matches[2];zip=true',
129
+ 'sitemap(-+([a-zA-Z0-9_-]+))?\.html$' => 'index.php?xml_sitemap=params=$matches[2];html=true',
130
+ 'sitemap(-+([a-zA-Z0-9_-]+))?\.html.gz$' => 'index.php?xml_sitemap=params=$matches[2];html=true;zip=true',
131
+ );
132
+ return array_merge( $sm_rules, $wp_rules );
133
+ }
134
+
135
+ /**
136
+ * Returns the rules required for Nginx permalinks
137
+ *
138
+ * @return string[]
139
+ */
140
+ public static function get_ngin_x_rules() {
141
+ return array(
142
+ 'rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.xml$ "/index.php?xml_sitemap=params=$2" last;',
143
+ 'rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.xml\.gz$ "/index.php?xml_sitemap=params=$2;zip=true" last;',
144
+ 'rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.html$ "/index.php?xml_sitemap=params=$2;html=true" last;',
145
+ 'rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.html.gz$ "/index.php?xml_sitemap=params=$2;html=true;zip=true" last;',
146
+ );
147
+
148
+ }
149
+
150
+ /**
151
+ * Adds the filters for wp rewrite rule adding
152
+ *
153
+ * @since 4.0
154
+ * @uses add_filter()
155
+ */
156
+ public static function setup_rewrite_hooks() {
157
+ add_filter( 'rewrite_rules_array', array( __CLASS__, 'add_rewrite_rules' ), 1, 1 );
158
+ }
159
+
160
+ /**
161
+ * Deregisters the plugin specific rewrite rules
162
+ *
163
+ * Combined: sitemap(-+([a-zA-Z0-9_-]+))?\.(xml|html)(.gz)?$
164
+ *
165
+ * @since 4.0
166
+ * @param array $wp_rules Array of existing rewrite rules .
167
+ * @return Array An array containing the new rewrite rules
168
+ */
169
+ public static function remove_rewrite_rules( $wp_rules ) {
170
+ $sm_rules = array(
171
+ 'sitemap(-+([a-zA-Z0-9_-]+))?\.xml$' => 'index.php?xml_sitemap=params=$matches[2]',
172
+ 'sitemap(-+([a-zA-Z0-9_-]+))?\.xml\.gz$' => 'index.php?xml_sitemap=params=$matches[2];zip=true',
173
+ 'sitemap(-+([a-zA-Z0-9_-]+))?\.html$' => 'index.php?xml_sitemap=params=$matches[2];html=true',
174
+ 'sitemap(-+([a-zA-Z0-9_-]+))?\.html.gz$' => 'index.php?xml_sitemap=params=$matches[2];html=true;zip=true',
175
+ );
176
+ foreach ( $wp_rules as $key => $value ) {
177
+ if ( array_key_exists( $key, $sm_rules ) ) {
178
+ unset( $wp_rules[ $key ] );
179
+ }
180
+ }
181
+ return $wp_rules;
182
+ }
183
+
184
+ /**
185
+ * Remove rewrite hooks method
186
+ */
187
+ public static function remove_rewrite_hooks() {
188
+ add_filter( 'rewrite_rules_array', array( __CLASS__, 'remove_rewrite_rules' ), 1, 1 );
189
+ }
190
+
191
+ /**
192
+ * Flushes the rewrite rules
193
+ *
194
+ * @since 4.0
195
+ * @global $wp_rewrite WP_Rewrite
196
+ * @uses WP_Rewrite::flush_rules()
197
+ */
198
+ public static function activate_rewrite() {
199
+ // @var $wp_rewrite WP_Rewrite .
200
+ global $wp_rewrite;
201
+ $wp_rewrite->flush_rules( false );
202
+ update_option( 'sm_rewrite_done', self::$svn_version );
203
+ }
204
+
205
+ /**
206
+ * Handled the plugin activation on installation
207
+ *
208
+ * @uses GoogleSitemapGeneratorLoader::activate_rewrite
209
+ * @since 4.0
210
+ */
211
+ public static function activate_plugin() {
212
+ self::setup_rewrite_hooks();
213
+ self::activate_rewrite();
214
+
215
+ if ( self::load_plugin() ) {
216
+ $gsg = GoogleSitemapGenerator::get_instance();
217
+ if ( $gsg->old_file_exists() ) {
218
+ $gsg->delete_old_files();
219
+ }
220
+ }
221
+
222
+ }
223
+
224
+ /**
225
+ * Handled the plugin deactivation
226
+ *
227
+ * @uses GoogleSitemapGeneratorLoader::activate_rewrite
228
+ * @since 4.0
229
+ */
230
+ public static function deactivate_plugin() {
231
+ global $wp_rewrite;
232
+ delete_option( 'sm_rewrite_done' );
233
+ wp_clear_scheduled_hook( 'sm_ping_daily' );
234
+ self::remove_rewrite_hooks();
235
+ $wp_rewrite->flush_rules( false );
236
+ }
237
+
238
+
239
+ /**
240
+ * Handles the plugin output on template redirection if the xml_sitemap query var is present.
241
+ *
242
+ * @since 4.0
243
+ */
244
+ public static function do_template_redirect() {
245
+ // @var $wp_query WP_Query .
246
+ global $wp_query;
247
+ if ( ! empty( $wp_query->query_vars['xml_sitemap'] ) ) {
248
+ $wp_query->is_404 = false;
249
+ $wp_query->is_feed = true;
250
+ self::call_show_sitemap( $wp_query->query_vars['xml_sitemap'] );
251
+ }
252
+ }
253
+
254
+ /**
255
+ * Registers the plugin in the admin menu system
256
+ *
257
+ * @uses add_options_page()
258
+ */
259
+ public static function register_admin_page() {
260
+ add_options_page( __( 'XML-Sitemap Generator', 'sitemap' ), __( 'XML-Sitemap', 'sitemap' ), 'administrator', self::get_base_name(), array( __CLASS__, 'call_html_show_options_page' ) );
261
+ }
262
+
263
+ /**
264
+ * Add a widget to the dashboard.
265
+ *
266
+ * @param string $a .
267
+ */
268
+ public static function wp_dashboard_setup( $a ) {
269
+ self::load_plugin();
270
+ $sg = GoogleSitemapGenerator::get_instance();
271
+
272
+ if ( $sg->show_survey() ) {
273
+ add_action( 'admin_notices', array( __CLASS__, 'wp_dashboard_admin_notices' ) );
274
+ }
275
+ }
276
+ /**
277
+ * Wp dashboard admin notices method
278
+ */
279
+ public static function wp_dashboard_admin_notices() {
280
+ $sg = GoogleSitemapGenerator::get_instance();
281
+ $sg->html_survey();
282
+ }
283
+
284
+ /**
285
+ * Returns a nice icon for the Ozh Admin Menu if the {@param $hook} equals to the sitemap plugin
286
+ *
287
+ * @param string $hook The hook to compare .
288
+ * @return string The path to the icon
289
+ */
290
+ public static function register_admin_icon( $hook ) {
291
+ if ( self::get_base_name() === $hook && function_exists( 'plugins_url' ) ) {
292
+ return plugins_url( 'img/icon-arne.gif', self::get_base_name() );
293
+ }
294
+ return $hook;
295
+ }
296
+
297
+ /**
298
+ * Registers additional links for the sitemap plugin on the WP plugin configuration page
299
+ *
300
+ * Registers the links if the $file param equals to the sitemap plugin
301
+ *
302
+ * @param string $links Array An array with the existing links .
303
+ * @param string $file string The file to compare to .
304
+ * @return string[]
305
+ */
306
+ public static function register_plugin_links( $links, $file ) {
307
+ $base = self::get_base_name();
308
+ if ( $file === $base ) {
309
+ $links[] = '<a href="options-general.php?page=' . self::get_base_name() . '">' . __( 'Settings', 'sitemap' ) . '</a>';
310
+ $links[] = '<a href="http://www.arnebrachhold.de/redir/sitemap-plist-faq/">' . __( 'FAQ', 'sitemap' ) . '</a>';
311
+ $links[] = '<a href="http://www.arnebrachhold.de/redir/sitemap-plist-support/">' . __( 'Support', 'sitemap' ) . '</a>';
312
+ }
313
+ return $links;
314
+ }
315
+
316
+ /**
317
+ * SchedulePingOnStatus Change
318
+ *
319
+ * @param string $new_status string The new post status .
320
+ * @param string $old_status string The old post status .
321
+ * @param object $post WP_Post The post object .
322
+ */
323
+ public static function schedule_ping_on_status_change( $new_status, $old_status, $post ) {
324
+ if ( 'publish' === $new_status ) {
325
+ set_transient( 'sm_ping_post_id', $post->ID, 120 );
326
+ wp_schedule_single_event( time() + 5, 'sm_ping' );
327
+ }
328
+ }
329
+
330
+ /**
331
+ * Invokes the HtmlShowOptionsPage method of the generator
332
+ *
333
+ * @uses GoogleSitemapGeneratorLoader::load_plugin()
334
+ * @uses GoogleSitemapGenerator::HtmlShowOptionsPage()
335
+ */
336
+ public static function call_html_show_options_page() {
337
+ if ( self::load_plugin() ) {
338
+ GoogleSitemapGenerator::get_instance()->html_show_options_page();
339
+ }
340
+ }
341
+
342
+ /**
343
+ * Invokes the ShowPingResult method of the generator
344
+ *
345
+ * @uses GoogleSitemapGeneratorLoader::load_plugin()
346
+ * @uses GoogleSitemapGenerator::ShowPingResult()
347
+ */
348
+ public static function call_show_ping_result() {
349
+ if ( self::load_plugin() ) {
350
+ GoogleSitemapGenerator::get_instance()->show_ping_result();
351
+ }
352
+ }
353
+
354
+ /**
355
+ * Invokes the SendPing method of the generator
356
+ *
357
+ * @uses GoogleSitemapGeneratorLoader::load_plugin()
358
+ * @uses GoogleSitemapGenerator::SendPing()
359
+ */
360
+ public static function call_send_ping() {
361
+ if ( self::load_plugin() ) {
362
+ GoogleSitemapGenerator::get_instance()->send_ping();
363
+ }
364
+ }
365
+
366
+ /**
367
+ * Invokes the SendPingDaily method of the generator
368
+ *
369
+ * @uses GoogleSitemapGeneratorLoader::load_plugin()
370
+ * @uses GoogleSitemapGenerator::SendPingDaily()
371
+ */
372
+ public static function call_send_ping_daily() {
373
+ if ( self::load_plugin() ) {
374
+ GoogleSitemapGenerator::get_instance()->send_ping_daily();
375
+ }
376
+ }
377
+
378
+ /**
379
+ * Invokes the ShowSitemap method of the generator
380
+ *
381
+ * @param string $options .
382
+ * @uses GoogleSitemapGeneratorLoader::load_plugin()
383
+ * @uses GoogleSitemapGenerator::ShowSitemap()
384
+ */
385
+ public static function call_show_sitemap( $options ) {
386
+ if ( self::load_plugin() ) {
387
+ GoogleSitemapGenerator::get_instance()->show_sitemap( $options );
388
+ }
389
+ }
390
+
391
+ /**
392
+ * Invokes the DoRobots method of the generator
393
+ *
394
+ * @uses GoogleSitemapGeneratorLoader::load_plugin()
395
+ * @uses GoogleSitemapGenerator::DoRobots()
396
+ */
397
+ public static function call_do_robots() {
398
+ if ( self::load_plugin() ) {
399
+ GoogleSitemapGenerator::get_instance()->do_robots();
400
+ }
401
+ }
402
+
403
+ /**
404
+ * Displays the help links in the upper Help Section of WordPress
405
+ */
406
+ public static function call_html_show_help_list() {
407
+
408
+ $screen = get_current_screen();
409
+ $id = get_plugin_page_hookname( self::get_base_name(), 'options-general.php' );
410
+
411
+ }
412
+
413
+
414
+ /**
415
+ * Loads the actual generator class and tries to raise the memory and time limits if not already done by WP
416
+ *
417
+ * @uses GoogleSitemapGenerator::enable()
418
+ * @return boolean true if run successfully
419
+ */
420
+ public static function load_plugin() {
421
+
422
+ if ( ! class_exists( 'GoogleSitemapGenerator' ) ) {
423
+
424
+ $mem = abs( intval( ini_get( 'memory_limit' ) ) );
425
+ if ( $mem && $mem < 128 ) {
426
+ wp_raise_memory_limit( '128M' );
427
+ }
428
+
429
+ $time = abs( intval( ini_get( 'max_execution_time' ) ) );
430
+ if ( 0 !== $time && 120 > $time ) {
431
+ set_time_limit( 120 );
432
+ }
433
+
434
+ $path = trailingslashit( dirname( __FILE__ ) );
435
+
436
+ if ( ! file_exists( $path . 'sitemap-core.php' ) ) {
437
+ return false;
438
+ }
439
+ require_once $path . 'sitemap-core.php';
440
+ }
441
+
442
+ GoogleSitemapGenerator::enable();
443
+ return true;
444
+ }
445
+
446
+ /**
447
+ * Returns the plugin basename of the plugin (using __FILE__)
448
+ *
449
+ * @return string The plugin basename, 'sitemap' for example
450
+ */
451
+ public static function get_base_name() {
452
+ return plugin_basename( sm_get_init_file() );
453
+ }
454
+
455
+ /**
456
+ * Returns the name of this loader script, using sm_GetInitFile
457
+ *
458
+ * @return string The sm_GetInitFile value
459
+ */
460
+ public static function get_plugin_file() {
461
+ return sm_get_init_file();
462
+ }
463
+
464
+ /**
465
+ * Returns the plugin version
466
+ *
467
+ * Uses the WP API to get the meta data from the top of this file (comment)
468
+ *
469
+ * @return string The version like 3.1.1
470
+ */
471
+ public static function get_version() {
472
+ if ( ! isset( $GLOBALS['sm_version'] ) ) {
473
+ if ( ! function_exists( 'get_plugin_data' ) ) {
474
+ if ( file_exists( ABSPATH . 'wp-admin/includes/plugin.php' ) ) {
475
+ require_once ABSPATH . 'wp-admin/includes/plugin.php';
476
+ } else {
477
+ return '0.ERROR';
478
+ }
479
+ }
480
+ $data = get_plugin_data( self::get_plugin_file(), false, false );
481
+ $GLOBALS['sm_version'] = $data['Version'];
482
+ }
483
+ return $GLOBALS['sm_version'];
484
+ }
485
+
486
+ /**
487
+ * Get SVN function .
488
+ */
489
+ public static function get_svn_version() {
490
+ return self::$svn_version;
491
+ }
492
+ }
493
+
494
+ // Enable the plugin for the init hook, but only if WP is loaded. Calling this php file directly will do nothing.
495
+ if ( defined( 'ABSPATH' ) && defined( 'WPINC' ) ) {
496
+ add_action( 'init', array( 'GoogleSitemapGeneratorLoader', 'Enable' ), 15, 0 );
497
+ register_activation_hook( sm_get_init_file(), array( 'GoogleSitemapGeneratorLoader', 'activate_plugin' ) );
498
+ register_deactivation_hook( sm_get_init_file(), array( 'GoogleSitemapGeneratorLoader', 'deactivate_plugin' ) );
499
+
500
+ // Set up hooks for adding permalinks, query vars.
501
+ // Don't wait until init with this, since other plugins might flush the rewrite rules in init already...
502
+ GoogleSitemapGeneratorLoader::setup_query_vars();
503
+ GoogleSitemapGeneratorLoader::setup_rewrite_hooks();
504
+ }
class-googlesitemapgeneratorstandardbuilder.php ADDED
@@ -0,0 +1,856 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Default sitemap builder
4
+ *
5
+ * @package Sitemap
6
+ * @author Arne Brachhold
7
+ * @since 4.0
8
+ */
9
+
10
+ /**
11
+ * Class
12
+ */
13
+ class GoogleSitemapGeneratorStandardBuilder {
14
+
15
+ /**
16
+ * Creates a new GoogleSitemapGeneratorStandardBuilder instance
17
+ */
18
+ public function __construct() {
19
+ add_action( 'sm_build_index', array( $this, 'index' ), 10, 1 );
20
+ add_action( 'sm_build_content', array( $this, 'content' ), 10, 3 );
21
+
22
+ add_filter( 'sm_sitemap_for_post', array( $this, 'get_sitemap_url_for_post' ), 10, 3 );
23
+ }
24
+
25
+ /**
26
+ * Generates the content of the requested sitemap
27
+ *
28
+ * @param GoogleSitemapGenerator $gsg instance of sitemap generator.
29
+ * @param String $type the type of the sitemap.
30
+ * @param String $params Parameters for the sitemap.
31
+ */
32
+ public function content( $gsg, $type, $params ) {
33
+ switch ( $type ) {
34
+ case 'pt':
35
+ $this->build_posts( $gsg, $params );
36
+ break;
37
+ case 'archives':
38
+ $this->build_archives( $gsg );
39
+ break;
40
+ case 'authors':
41
+ $this->build_authors( $gsg );
42
+ break;
43
+ case 'tax':
44
+ $this->build_taxonomies( $gsg, $params );
45
+ break;
46
+ case 'producttags':
47
+ $this->build_product_tags( $gsg, $params );
48
+ break;
49
+ case 'productcat':
50
+ $this->build_product_categories( $gsg, $params );
51
+ break;
52
+ case 'externals':
53
+ $this->build_externals( $gsg );
54
+ break;
55
+ case 'misc':
56
+ default:
57
+ $this->build_misc( $gsg );
58
+ break;
59
+ }
60
+ }
61
+
62
+ /**
63
+ * Generates the content for the post sitemap
64
+ *
65
+ * @param GoogleSitemapGenerator $gsg instance of sitemap generator.
66
+ * @param string $params string.
67
+ */
68
+ public function build_posts( $gsg, $params ) {
69
+
70
+ $pts = strrpos( $params, '-' );
71
+
72
+ if ( ! $pts ) {
73
+ return;
74
+ }
75
+
76
+ $pts = strrpos( $params, '-', $pts - strlen( $params ) - 1 );
77
+
78
+ $post_type = substr( $params, 0, $pts );
79
+
80
+ if ( ! $post_type || ! in_array( $post_type, $gsg->get_active_post_types(), true ) ) {
81
+ return;
82
+ }
83
+
84
+ $params = substr( $params, $pts + 1 );
85
+
86
+ /**
87
+ * Global variable for database.
88
+ *
89
+ * @var $wpdb wpdb
90
+ */
91
+ global $wpdb;
92
+
93
+ if ( preg_match( '/^([0-9]{4})\-([0-9]{2})$/', $params, $matches ) ) {
94
+ $year = $matches[1];
95
+ $month = $matches[2];
96
+
97
+ // Excluded posts by ID.
98
+ $excluded_post_ids = $gsg->get_excluded_post_i_ds( $gsg );
99
+ $not_allowed_slugs = $gsg->robots_disallowed();
100
+ $excluded_post_ids = array_unique( array_merge( $excluded_post_ids, $not_allowed_slugs ), SORT_REGULAR );
101
+ $gsg->set_option( 'b_exclude', $excluded_post_ids );
102
+ $gsg->save_options();
103
+ $ex_post_s_q_l = '';
104
+ if ( count( $excluded_post_ids ) > 0 ) {
105
+ $ex_post_s_q_l = 'AND p.ID NOT IN (' . implode( ',', $excluded_post_ids ) . ')';
106
+ }
107
+
108
+ // Excluded categories by taxonomy ID.
109
+ $excluded_category_i_d_s = $gsg->get_excluded_category_i_ds( $gsg );
110
+ $ex_cat_s_q_l = '';
111
+ if ( count( $excluded_category_i_d_s ) > 0 ) {
112
+ $ex_cat_s_q_l = "AND ( p.ID NOT IN ( SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id IN ( SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id IN ( " . implode( ',', $excluded_category_i_d_s ) . '))))';
113
+ }
114
+ // Statement to query the actual posts for this post type.
115
+ $qs = "
116
+ SELECT
117
+ p.ID,
118
+ p.post_author,
119
+ p.post_status,
120
+ p.post_name,
121
+ p.post_parent,
122
+ p.post_type,
123
+ p.post_date,
124
+ p.post_date_gmt,
125
+ p.post_modified,
126
+ p.post_modified_gmt,
127
+ p.comment_count
128
+ FROM
129
+ {$wpdb->posts} p
130
+ WHERE
131
+ p.post_password = ''
132
+ AND p.post_type = '%s'
133
+ AND p.post_status = 'publish'
134
+ AND YEAR(p.post_date_gmt) = %d
135
+ AND MONTH(p.post_date_gmt) = %d
136
+ {$ex_post_s_q_l}
137
+ {$ex_cat_s_q_l}
138
+ ORDER BY
139
+ p.post_date_gmt DESC
140
+ ";
141
+ // Query for counting all relevant posts for this post type.
142
+ $qsc = "
143
+ SELECT
144
+ COUNT(*)
145
+ FROM
146
+ {$wpdb->posts} p
147
+ WHERE
148
+ p.post_password = ''
149
+ AND p.post_type = '%s'
150
+ AND p.post_status = 'publish'
151
+ {$ex_post_s_q_l}
152
+ {$ex_cat_s_q_l}
153
+ ";
154
+ // phpcs:disable
155
+ $q = $wpdb->prepare( $qs, $post_type, $year, $month );
156
+ // phpcs:enable
157
+ $posts = $wpdb->get_results( $q ); // phpcs:ignore
158
+ $post_count = count( $posts );
159
+ if ( ( $post_count ) > 0 ) {
160
+ /**
161
+ * Description for priority provider
162
+ *
163
+ * @var $priority_provider GoogleSitemapGeneratorPrioProviderBase
164
+ */
165
+ $priority_provider = null;
166
+
167
+ if ( $gsg->get_option( 'b_prio_provider' ) !== '' ) {
168
+
169
+ // Number of comments for all posts.
170
+ $cache_key = __CLASS__ . '::commentCount';
171
+ $comment_count = wp_cache_get( $cache_key, 'sitemap' );
172
+ if ( false === $comment_count ) {
173
+ $comment_count = $wpdb->get_var( "SELECT COUNT(*) as `comment_count` FROM {$wpdb->comments} WHERE `comment_approved`='1'" ); // db call ok.
174
+ wp_cache_set( $cache_key, $comment_count, 'sitemap', 20 );
175
+ }
176
+
177
+ // Number of all posts matching our criteria.
178
+ $cache_key = __CLASS__ . "::totalPostCount::$post_type";
179
+ $total_post_count = wp_cache_get( $cache_key, 'sitemap' );
180
+ if ( false === $total_post_count ) {
181
+ // phpcs:disable
182
+ $total_post_count = $wpdb->get_var(
183
+ $wpdb->prepare(
184
+ "SELECT
185
+ COUNT(*)
186
+ FROM
187
+ {$wpdb->posts} p
188
+ WHERE
189
+ p.post_password = ''
190
+ AND p.post_type = " . $post_type . "
191
+ AND p.post_status = 'publish'
192
+ " . $ex_post_s_q_l . ' '
193
+ . $ex_cat_s_q_l . ''
194
+ ) // phpcs:ignore
195
+ ); // db call ok.
196
+ // phpcs:enable
197
+ wp_cache_add( $cache_key, $total_post_count, 'sitemap', 20 );
198
+ }
199
+
200
+ // Initialize a new priority provider.
201
+ $provider_class = $gsg->get_option( 'b_prio_provider' );
202
+ $priority_provider = new $provider_class( $comment_count, $total_post_count );
203
+ }
204
+
205
+ // Default priorities.
206
+ $default_priority_for_posts = $gsg->get_option( 'pr_posts' );
207
+ $default_priority_for_pages = $gsg->get_option( 'pr_pages' );
208
+
209
+ // Minimum priority.
210
+ $minimum_priority = $gsg->get_option( 'pr_posts_min' );
211
+
212
+ // Change frequencies.
213
+ $change_frequency_for_posts = $gsg->get_option( 'cf_posts' );
214
+ $change_frequency_for_pages = $gsg->get_option( 'cf_pages' );
215
+
216
+ // Page as home handling.
217
+ $home_pid = 0;
218
+ $home = get_home_url();
219
+ if ( 'page' === get_option( 'show_on_front' ) && get_option( 'page_on_front' ) ) {
220
+ $page_on_front = get_option( 'page_on_front' );
221
+ $p = get_post( $page_on_front );
222
+ if ( $p ) {
223
+ $home_pid = $p->ID;
224
+ }
225
+ }
226
+
227
+ foreach ( $posts as $post ) {
228
+
229
+ // Fill the cache with our DB result. Since it's incomplete (no text-content for example), we will clean it later.
230
+ // This is required since the permalink function will do a query for every post otherwise.
231
+ // wp_cache_add($post->ID, $post, 'posts');.
232
+
233
+ // Full URL to the post.
234
+ $permalink = get_permalink( $post );
235
+
236
+ // Exclude the home page and placeholder items by some plugins. Also include only internal links.
237
+ if (
238
+ ( ! empty( $permalink ) )
239
+ && $permalink !== $home
240
+ && $post->ID !== $home_pid
241
+ && strpos( $permalink, $home ) !== false
242
+ ) {
243
+
244
+ // Default Priority if auto calc is disabled.
245
+ $priority = ( 'page' === $post_type ? $default_priority_for_pages : $default_priority_for_posts );
246
+
247
+ // If priority calc. is enabled, calculate (but only for posts, not pages)!
248
+ if ( null !== $priority_provider && 'post' === $post_type ) {
249
+ $priority = $priority_provider->get_post_priority( $post->ID, $post->comment_count, $post );
250
+ }
251
+
252
+ // Ensure the minimum priority.
253
+ if ( 'post' === $post_type && $minimum_priority > 0 && $priority < $minimum_priority ) {
254
+ $priority = $minimum_priority;
255
+ }
256
+
257
+ // Add the URL to the sitemap.
258
+ $gsg->add_url(
259
+ $permalink,
260
+ $gsg->get_timestamp_from_my_sql( $post->post_modified_gmt && '0000-00-00 00:00:00' !== $post->post_modified_gmt ? $post->post_modified_gmt : $post->post_date_gmt ),
261
+ ( 'page' === $post_type ? $change_frequency_for_pages : $change_frequency_for_posts ),
262
+ $priority,
263
+ $post->ID
264
+ );
265
+ }
266
+
267
+ // Why not use clean_post_cache? Because some plugin will go crazy then (lots of database queries).
268
+ // The post cache was not populated in a clean way, so we also won't delete it using the API.
269
+ // wp_cache_delete( $post->ID, 'posts' );.
270
+ unset( $post );
271
+ }
272
+ unset( $posts_custom );
273
+ }
274
+ }
275
+ }
276
+
277
+
278
+ /**
279
+ * Generates the content for the archives sitemap
280
+ *
281
+ * @param GoogleSitemapGenerator $gsg object of google sitemap.
282
+ */
283
+ public function build_archives( $gsg ) {
284
+ /**
285
+ * Super global variable for database.
286
+ *
287
+ * @var $wpdb wpdb
288
+ */
289
+ global $wpdb;
290
+
291
+ $now = current_time( 'mysql', true );
292
+
293
+ $archives = $wpdb->get_results(
294
+ // phpcs:disable
295
+ $wpdb->prepare(
296
+ "SELECT DISTINCT
297
+ YEAR(post_date_gmt) AS `year`,
298
+ MONTH(post_date_gmt) AS `month`,
299
+ MAX(post_date_gmt) AS last_mod,
300
+ count(ID) AS posts
301
+ FROM
302
+ $wpdb->posts
303
+ WHERE
304
+ post_date_gmt < " . $now . "
305
+ AND post_status = 'publish'
306
+ AND post_type = 'post'
307
+ GROUP BY
308
+ YEAR(post_date_gmt),
309
+ MONTH(post_date_gmt)
310
+ ORDER BY
311
+ post_date_gmt DESC"
312
+ )
313
+ // phpcs:enable
314
+ ); // db call ok; no-cache ok.
315
+
316
+ if ( $archives ) {
317
+ foreach ( $archives as $archive ) {
318
+
319
+ $url = get_month_link( $archive->year, $archive->month );
320
+
321
+ // Archive is the current one.
322
+ if ( gmdate( 'n' ) === $archive->month && gmdate( 'Y' ) === $archive->year ) {
323
+ $change_freq = $gsg->get_option( 'cf_arch_curr' );
324
+ } else { // Archive is older.
325
+ $change_freq = $gsg->get_option( 'cf_arch_old' );
326
+ }
327
+
328
+ $gsg->add_url( $url, $gsg->get_timestamp_from_my_sql( $archive->last_mod ), $change_freq, $gsg->get_option( 'pr_arch' ) );
329
+ }
330
+ }
331
+
332
+ $post_type_customs = get_post_types( array( 'public' => 1 ) );
333
+ $post_type_customs = array_diff( $post_type_customs, array( 'page', 'attachment', 'product', 'post' ) );
334
+ foreach ( $post_type_customs as $post_type_custom ) {
335
+ $latest = new WP_Query(
336
+ array(
337
+ 'post_type' => $post_type_custom,
338
+ 'post_status' => 'publish',
339
+ 'posts_per_page' => 1,
340
+ 'orderby' => 'modified',
341
+ 'order' => 'DESC',
342
+ )
343
+ );
344
+
345
+ if ( $latest->have_posts() ) {
346
+ $modified_date = $latest->posts[0]->post_modified;
347
+ if ( gmdate( 'n', strtotime( $modified_date ) ) === gmdate( 'n' ) && gmdate( 'Y', strtotime( $modified_date ) ) === gmdate( 'Y' ) ) {
348
+ $change_freq = $gsg->get_option( 'cf_arch_curr' );
349
+ } else { // Archive is older.
350
+ $change_freq = $gsg->get_option( 'cf_arch_old' );
351
+ }
352
+ $gsg->add_url( get_post_type_archive_link( $post_type_custom ), $gsg->get_timestamp_from_my_sql( $modified_date ), $change_freq, $gsg->get_option( 'pr_arch' ), 0, array(), array(), '' );
353
+ }
354
+ }
355
+ }
356
+
357
+ /**
358
+ * Generates the misc sitemap
359
+ *
360
+ * @param GoogleSitemapGenerator $gsg instence of sitemap generator class.
361
+ */
362
+ public function build_misc( $gsg ) {
363
+
364
+ $lm = get_lastpostmodified( 'gmt' );
365
+
366
+ if ( $gsg->get_option( 'in_home' ) ) {
367
+ $home = get_bloginfo( 'url' );
368
+
369
+ // Add the home page (WITH a slash!).
370
+ if ( $gsg->get_option( 'in_home' ) ) {
371
+ if ( 'page' === get_option( 'show_on_front' ) && get_option( 'page_on_front' ) ) {
372
+ $page_on_front = get_option( 'page_on_front' );
373
+ $p = get_post( $page_on_front );
374
+ if ( $p ) {
375
+ $gsg->add_url(
376
+ trailingslashit( $home ),
377
+ $gsg->get_timestamp_from_my_sql( ( $p->post_modified_gmt && '0000-00-00 00:00:00' !== $p->post_modified_gmt ? $p->post_modified_gmt : $p->post_date_gmt ) ),
378
+ $gsg->get_option( 'cf_home' ),
379
+ $gsg->get_option( 'pr_home' )
380
+ );
381
+ }
382
+ } else {
383
+ $gsg->add_url(
384
+ trailingslashit( $home ),
385
+ ( $lm ? $gsg->get_timestamp_from_my_sql( $lm ) : time() ),
386
+ $gsg->get_option( 'cf_home' ),
387
+ $gsg->get_option( 'pr_home' )
388
+ );
389
+ }
390
+ }
391
+ }
392
+
393
+ if ( $gsg->is_xsl_enabled() && true === $gsg->get_option( 'b_html' ) ) {
394
+ $gsg->add_url(
395
+ $gsg->get_xml_url( '', '', array( 'html' => true ) ),
396
+ ( $lm ? $gsg->get_timestamp_from_my_sql( $lm ) : time() )
397
+ );
398
+ }
399
+
400
+ do_action( 'sm_buildmap' );
401
+ }
402
+
403
+ /**
404
+ * Generates the author sitemap
405
+ *
406
+ * @param GoogleSitemapGenerator $gsg instence of sitemap generator class.
407
+ */
408
+ public function build_authors( $gsg ) {
409
+ /**
410
+ * Use the wpdb global variable
411
+ *
412
+ * @var $wpdb wpdb
413
+ * */
414
+ global $wpdb;
415
+
416
+ // Unfortunately there is no API function to get all authors, so we have to do it the dirty way...
417
+ // We retrieve only users with published and not password protected enabled post types.
418
+
419
+ $enabled_post_types = null;
420
+ $enabled_post_types = $gsg->get_active_post_types();
421
+
422
+ // Ensure we count at least the posts...
423
+ $enabled_post_types_count = count( $enabled_post_types );
424
+ if ( 0 === $enabled_post_types_count ) {
425
+ $enabled_post_types[] = 'post';
426
+ }
427
+ // phpcs:disable
428
+ $authors = $wpdb->get_results(
429
+ $wpdb->prepare(
430
+ "SELECT DISTINCT
431
+ u.ID,
432
+ u.user_nicename,
433
+ MAX(p.post_modified_gmt) AS last_post
434
+ FROM
435
+ {$wpdb->users} u,
436
+ {$wpdb->posts} p
437
+ WHERE
438
+ p.post_author = u.ID
439
+ AND p.post_status = 'publish'
440
+ AND p.post_type IN('" . implode( "','", array_map( 'esc_sql', $enabled_post_types ) ) . "' )
441
+ AND p.post_password = ''
442
+ GROUP BY
443
+ u.ID,
444
+ u.user_nicename"
445
+ )
446
+ ); // db call ok; no-cache ok.
447
+ // phpcs:enable
448
+ if ( $authors && is_array( $authors ) ) {
449
+ foreach ( $authors as $author ) {
450
+ $url = get_author_posts_url( $author->ID, $author->user_nicename );
451
+ $gsg->add_url(
452
+ $url,
453
+ $gsg->get_timestamp_from_my_sql( $author->last_post ),
454
+ $gsg->get_option( 'cf_auth' ),
455
+ $gsg->get_option( 'pr_auth' )
456
+ );
457
+ }
458
+ }
459
+ }
460
+
461
+ /**
462
+ * Filters the terms query to only include published posts
463
+ *
464
+ * @param string[] $selects Array of string.
465
+ * @return string[]
466
+ */
467
+ public function filter_terms_query( $selects ) {
468
+ /**
469
+ * Global variable in functional scope for database
470
+ *
471
+ * @var wpdb $wpdb Global variable for wpdb
472
+ */
473
+ global $wpdb;
474
+ $selects[] = "
475
+ ( /* ADDED BY XML SITEMAPS */
476
+ SELECT
477
+ UNIX_TIMESTAMP(MAX(p.post_date_gmt)) as _mod_date
478
+ FROM
479
+ {$wpdb->posts} p,
480
+ {$wpdb->term_relationships} r
481
+ WHERE
482
+ p.ID = r.object_id
483
+ AND p.post_status = 'publish'
484
+ AND p.post_password = ''
485
+ AND r.term_taxonomy_id = tt.term_taxonomy_id
486
+ ) as _mod_date
487
+ /* END ADDED BY XML SITEMAPS */
488
+ ";
489
+
490
+ return $selects;
491
+ }
492
+
493
+ /**
494
+ * Generates the taxonomies sitemap
495
+ *
496
+ * @param GoogleSitemapGenerator $gsg Instance of sitemap generator.
497
+ * @param string $taxonomy The Taxonomy.
498
+ */
499
+ public function build_taxonomies( $gsg, $taxonomy ) {
500
+
501
+ $offset = $taxonomy;
502
+ $links_per_page = $gsg->get_option( 'links_page' );
503
+ if ( strpos( $taxonomy, '-' ) !== false ) {
504
+ $offset = substr( $taxonomy, strrpos( $taxonomy, '-' ) + 1 );
505
+ $taxonomy = str_replace( '-' . $offset, '', $taxonomy );
506
+ }
507
+ $offset = ( --$offset ) * $links_per_page;
508
+
509
+ $enabled_taxonomies = $this->get_enabled_taxonomies( $gsg );
510
+ if ( in_array( $taxonomy, $enabled_taxonomies, true ) ) {
511
+
512
+ $excludes = array();
513
+
514
+ $excl_cats = $gsg->get_option( 'b_exclude_cats' ); // Excluded cats.
515
+ if ( $excl_cats ) {
516
+ $excludes = $excl_cats;
517
+ }
518
+ add_filter( 'get_terms_fields', array( $this, 'filter_terms_query' ), 20, 2 );
519
+ $terms = get_terms(
520
+ $taxonomy,
521
+ array(
522
+ 'number' => $links_per_page,
523
+ 'offset' => $offset,
524
+ 'hide_empty' => true,
525
+ 'hierarchical' => false,
526
+ 'exclude' => $excludes,
527
+ )
528
+ );
529
+ remove_filter( 'get_terms_fields', array( $this, 'filter_terms_query' ), 20, 2 );
530
+
531
+ $step = 1;
532
+ $size_of_terms = count( $terms );
533
+ for ( $tax_count = 0; $tax_count < $size_of_terms; $tax_count++ ) {
534
+ $term = $terms[ $tax_count ];
535
+ switch ( $term->taxonomy ) {
536
+ case 'category':
537
+ $gsg->add_url( get_term_link( $term, $step ), $term->_mod_date, $gsg->get_option( 'cf_cats' ), $gsg->get_option( 'pr_cats' ) );
538
+ break;
539
+ case 'product_cat':
540
+ $gsg->add_url( get_term_link( $term, $step ), $term->_mod_date, $gsg->get_option( 'cf_product_cat' ), $gsg->get_option( 'pr_product_cat' ) );
541
+ break;
542
+ default:
543
+ $gsg->add_url( get_term_link( $term, $step ), $term->_mod_date, $gsg->get_option( 'cf_tags' ), $gsg->get_option( 'pr_tags' ) );
544
+ break;
545
+ }
546
+ $step++;
547
+ }
548
+ }
549
+ }
550
+
551
+ /**
552
+ * Returns the enabled taxonomies. Only taxonomies with posts are returned.
553
+ *
554
+ * @param GoogleSitemapGenerator $gsg Google sitemap generator's instance.
555
+ * @return array
556
+ */
557
+ public function get_enabled_taxonomies( GoogleSitemapGenerator $gsg ) {
558
+
559
+ $enabled_taxonomies = $gsg->get_option( 'in_tax' );
560
+ if ( $gsg->get_option( 'in_tags' ) ) {
561
+ $enabled_taxonomies[] = 'post_tag';
562
+ }
563
+
564
+ if ( $gsg->get_option( 'in_cats' ) ) {
565
+ $enabled_taxonomies[] = 'category';
566
+ }
567
+
568
+ $tax_list = array();
569
+ foreach ( $enabled_taxonomies as $tax_name ) {
570
+ $taxonomy = get_taxonomy( $tax_name );
571
+ if ( $taxonomy && wp_count_terms( $taxonomy->name, array( 'hide_empty' => true ) ) > 0 ) {
572
+ $tax_list[] = $taxonomy->name;
573
+ }
574
+ }
575
+ return $tax_list;
576
+ }
577
+
578
+ /**
579
+ * Returns the enabled Product tags. Only Product Tags with posts are returned.
580
+ *
581
+ * @param GoogleSitemapGenerator $gsg Instance of sitemap generator.
582
+ * @param int $offset Offset.
583
+ * @return void
584
+ */
585
+ public function build_product_tags( GoogleSitemapGenerator $gsg, $offset ) {
586
+ $links_per_page = $gsg->get_option( 'links_page' );
587
+ $offset = ( --$offset ) * $links_per_page;
588
+
589
+ add_filter( 'get_terms_fields', array( $this, 'filter_terms_query' ), 20, 2 );
590
+ $terms = get_terms(
591
+ 'product_tag',
592
+ array(
593
+ 'number' => $links_per_page,
594
+ 'offset' => $offset,
595
+ )
596
+ );
597
+ remove_filter( 'get_terms_fields', array( $this, 'filter_terms_query' ), 20, 2 );
598
+ $term_array = array();
599
+
600
+ if ( ! empty( $terms ) && ! is_wp_error( $terms ) ) {
601
+ foreach ( $terms as $term ) {
602
+ $term_array[] = $term->name;
603
+ $url = get_term_link( $term );
604
+ $gsg->add_url( $url, $term->_mod_date, $gsg->get_option( 'cf_tags' ), $gsg->get_option( 'pr_tags' ), $term->ID, array(), array(), '' );
605
+ }
606
+ }
607
+ }
608
+
609
+ /**
610
+ * Returns the enabled Product Categories. Only Product Categories with posts are returned.
611
+ *
612
+ * @param GoogleSitemapGenerator $gsg Instance of sitemap generator.
613
+ * @param int $offset Offset.
614
+ * @return void
615
+ */
616
+ public function build_product_categories( GoogleSitemapGenerator $gsg, $offset ) {
617
+ $links_per_page = $gsg->get_option( 'links_page' );
618
+ $offset = ( --$offset ) * $links_per_page;
619
+ $excludes = array();
620
+ $excl_cats = $gsg->get_option( 'b_exclude_cats' ); // Excluded cats.
621
+ if ( $excl_cats ) {
622
+ $excludes = $excl_cats;
623
+ }
624
+ add_filter( 'get_terms_fields', array( $this, 'filter_terms_query' ), 20, 2 );
625
+ $category = get_terms(
626
+ 'product_cat',
627
+ array(
628
+ 'number' => $links_per_page,
629
+ 'offset' => $offset,
630
+ 'exclude' => $excludes,
631
+ )
632
+ );
633
+ remove_filter( 'get_terms_fields', array( $this, 'filter_terms_query' ), 20, 2 );
634
+ $cat_array = array();
635
+ if ( ! empty( $category ) && ! is_wp_error( $category ) ) {
636
+ $step = 1;
637
+ foreach ( $category as $cat ) {
638
+ $cat_array[] = $cat->name;
639
+ if ( $cat && wp_count_terms( $cat->name, array( 'hide_empty' => true ) ) > 0 ) {
640
+ $step++;
641
+ $url = get_term_link( $cat );
642
+ $gsg->add_url( $url, $cat->_mod_date, $gsg->get_option( 'cf_product_cat' ), $gsg->get_option( 'pr_product_cat' ), $cat->ID, array(), array(), '' );
643
+ }
644
+ }
645
+ }
646
+ }
647
+
648
+ /**
649
+ * Generates the external sitemap
650
+ *
651
+ * @param GoogleSitemapGenerator $gsg Instance of sitemap generator.
652
+ */
653
+ public function build_externals( $gsg ) {
654
+ $pages = $gsg->get_pages();
655
+ if ( $pages && is_array( $pages ) && count( $pages ) > 0 ) {
656
+ foreach ( $pages as $page ) {
657
+
658
+ /**
659
+ * Description for $page variable.
660
+ *
661
+ * @var $page GoogleSitemapGeneratorPage
662
+ */
663
+ $gsg->add_url( $page->get_url(), $page->get_last_mod(), $page->get_change_freq(), $page->get_priority() );
664
+ }
665
+ }
666
+ }
667
+
668
+ /**
669
+ * Generates the sitemap index
670
+ *
671
+ * @param GoogleSitemapGenerator $gsg Instance of sitemap generator.
672
+ */
673
+ public function index( $gsg ) {
674
+ /**
675
+ * Global variable for database.
676
+ *
677
+ * @var $wpdb wpdb
678
+ */
679
+ global $wpdb;
680
+ $blog_update = strtotime( get_lastpostmodified( 'gmt' ) );
681
+ $links_per_page = $gsg->get_option( 'links_page' );
682
+ if ( 0 === $links_per_page ) {
683
+ $links_per_page = 10;
684
+ $gsg->set_option( 'links_page', 10 );
685
+ }
686
+ $gsg->add_sitemap( 'misc', null, $blog_update );
687
+
688
+ $taxonomies = $this->get_enabled_taxonomies( $gsg );
689
+ $taxonomies_to_exclude = array( 'product_tag', 'product_cat' );
690
+ $excludes = array();
691
+ $excl_cats = $gsg->get_option( 'b_exclude_cats' ); // Excluded cats.
692
+
693
+ if ( $excl_cats ) {
694
+ $excludes = $excl_cats;
695
+ }
696
+
697
+ foreach ( $taxonomies as $tax ) {
698
+ if ( ! in_array( $tax, $taxonomies_to_exclude, true ) ) {
699
+ $step = 1;
700
+ $taxs = get_terms( $tax, array( 'exclude' => $excludes ) );
701
+ $size_of_taxs = count( $taxs );
702
+ for ( $tax_count = 0; $tax_count < $size_of_taxs; $tax_count++ ) {
703
+ if ( 0 === ( $tax_count % $links_per_page ) && '' !== $taxs[ $tax_count ]->taxonomy ) {
704
+ $gsg->add_sitemap( 'tax-' . $taxs[ $tax_count ]->taxonomy, $step, $blog_update );
705
+ $step = ++$step;
706
+ }
707
+ }
708
+ }
709
+ }
710
+
711
+ // If Product Tags is enabled from sitemap settings.
712
+ if ( true === $gsg->get_option( 'product_tags' ) ) {
713
+ $product_tags = get_terms( 'product_tag' );
714
+ if ( ! empty( $product_tags ) && ! is_wp_error( $product_tags ) ) {
715
+ $step = 1;
716
+ $product_tags_size_of = count( $product_tags );
717
+
718
+ for ( $product_count = 0; $product_count < $product_tags_size_of; $product_count++ ) {
719
+ if ( 0 === ( $product_count % $links_per_page ) ) {
720
+ $gsg->add_sitemap( 'producttags', $step, $blog_update );
721
+ $step = ++$step;
722
+ }
723
+ }
724
+ }
725
+ }
726
+
727
+ // If Product category is enabled from sitemap settings.
728
+ if ( true === $gsg->get_option( 'in_product_cat' ) ) {
729
+ $excludes = array();
730
+ $excl_cats = $gsg->get_option( 'b_exclude_cats' ); // Excluded cats.
731
+
732
+ if ( $excl_cats ) {
733
+ $excludes = $excl_cats;
734
+ }
735
+
736
+ $product_cat = get_terms( 'product_cat', array( 'exclude' => $excludes ) );
737
+
738
+ if ( ! empty( $product_cat ) && ! is_wp_error( $product_cat ) ) {
739
+ $step = 1;
740
+ $product_cat_count = count( $product_cat );
741
+ for ( $product_count = 0; $product_count < $product_cat_count; $product_count++ ) {
742
+ if ( 0 === ( $product_count % $links_per_page ) ) {
743
+ $gsg->add_sitemap( 'productcat', $step, $blog_update );
744
+ $step = ++$step;
745
+ }
746
+ }
747
+ }
748
+ }
749
+
750
+ $pages = $gsg->get_pages();
751
+ if ( count( $pages ) > 0 ) {
752
+ foreach ( $pages as $page ) {
753
+ if ( $page instanceof GoogleSitemapGeneratorPage && $page->get_url() ) {
754
+ $gsg->add_sitemap( 'externals', null, $blog_update );
755
+ break;
756
+ }
757
+ }
758
+ }
759
+
760
+ $enabled_post_types = $gsg->get_active_post_types();
761
+
762
+ $has_enabled_post_types_posts = false;
763
+ $has_posts = false;
764
+
765
+ if ( count( $enabled_post_types ) > 0 ) {
766
+
767
+ $excluded_post_ids = $gsg->get_excluded_post_i_ds( $gsg );
768
+ $not_allowed_slugs = $gsg->robots_disallowed();
769
+ $excluded_post_ids = array_unique( array_merge( $excluded_post_ids, $not_allowed_slugs ), SORT_REGULAR );
770
+ $gsg->set_option( 'b_exclude', $excluded_post_ids );
771
+ $gsg->save_options();
772
+ $ex_post_s_q_l = '';
773
+ $excluded_post_ids_count = count( $excluded_post_ids );
774
+ if ( $excluded_post_ids_count > 0 ) {
775
+ $ex_post_s_q_l = 'AND p.ID NOT IN (' . implode( ',', $excluded_post_ids ) . ')';
776
+ }
777
+ $excluded_category_i_d_s = $gsg->get_excluded_category_i_ds( $gsg );
778
+ $ex_cat_s_q_l = '';
779
+ $excluded_category_i_d_s_count = count( $excluded_category_i_d_s );
780
+ if ( $excluded_category_i_d_s_count > 0 ) {
781
+ $ex_cat_s_q_l = "AND ( p.ID NOT IN ( SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id IN (" . implode( ',', $excluded_category_i_d_s ) . ')))';
782
+ }
783
+ foreach ( $enabled_post_types as $post_type_custom ) {
784
+ // phpcs:disable
785
+ $prp = $wpdb->prepare(
786
+ "SELECT
787
+ YEAR(p.post_date_gmt) AS `year`,
788
+ MONTH(p.post_date_gmt) AS `month`,
789
+ COUNT(p.ID) AS `numposts`,
790
+ MAX(p.post_modified_gmt) as `last_mod`
791
+ FROM
792
+ {$wpdb->posts} p
793
+ WHERE
794
+ p.post_password = ''
795
+ AND p.post_type = '" . esc_sql( $post_type_custom ) . "'
796
+ AND p.post_status = 'publish'
797
+ " . $ex_post_s_q_l . ''
798
+ . $ex_cat_s_q_l . "
799
+ GROUP BY
800
+ YEAR(p.post_date_gmt),
801
+ MONTH(p.post_date_gmt)
802
+ ORDER BY
803
+ p.post_date_gmt DESC"
804
+ );
805
+ $posts = $wpdb->get_results($prp);
806
+ if ( $posts ) {
807
+ if ( 'post' === $post_type_custom ) {
808
+ $has_posts = true;
809
+ }
810
+
811
+ $has_enabled_post_types_posts = true;
812
+
813
+ foreach ( $posts as $post ) {
814
+ $gsg->add_sitemap( 'pt', $post_type_custom . '-' . sprintf( '%04d-%02d', $post->year, $post->month ), $gsg->get_timestamp_from_my_sql( $post->last_mod ) );
815
+ }
816
+ }
817
+ // phpcs:enable
818
+ }
819
+ }
820
+
821
+ // Only include authors if there is a public post with a enabled post type.
822
+ if ( $gsg->get_option( 'in_auth' ) && $has_enabled_post_types_posts ) {
823
+ $gsg->add_sitemap( 'authors', null, $blog_update );
824
+ }
825
+
826
+ // Only include archived if there are posts with postType post.
827
+ if ( $gsg->get_option( 'in_arch' ) && $has_posts ) {
828
+ $gsg->add_sitemap( 'archives', null, $blog_update );
829
+ }
830
+ }
831
+
832
+ /**
833
+ * Return the URL to the sitemap related to a specific post
834
+ *
835
+ * @param array $urls Post sitemap urls.
836
+ * @param GoogleSitemapGenerator $gsg Instance of google sitemap generator.
837
+ * @param int $post_id The post ID.
838
+ *
839
+ * @return string[]
840
+ */
841
+ public function get_sitemap_url_for_post( array $urls, $gsg, $post_id ) {
842
+ $post = get_post( $post_id );
843
+ if ( $post ) {
844
+ $last_modified = $gsg->get_timestamp_from_my_sql( $post->post_modified_gmt );
845
+
846
+ $url = $gsg->get_xml_url( 'pt', $post->post_type . '-' . gmdate( 'Y-m', $last_modified ) );
847
+ $urls[] = $url;
848
+ }
849
+
850
+ return $urls;
851
+ }
852
+ }
853
+
854
+ if ( defined( 'WPINC' ) ) {
855
+ new GoogleSitemapGeneratorStandardBuilder();
856
+ }
class-googlesitemapgeneratorstatus.php ADDED
@@ -0,0 +1,214 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Googlesitemapgeneratorstatus class file.
4
+ *
5
+ * @author Arne Brachhold
6
+ * @package sitemap
7
+ * @since 3.0b5
8
+ */
9
+
10
+ /**
11
+ * Represents the status (successes and failures) of a ping process
12
+ *
13
+ * @author Arne Brachhold
14
+ * @package sitemap
15
+ * @since 3.0b5
16
+ */
17
+ class GoogleSitemapGeneratorStatus {
18
+
19
+ /**
20
+ * Var start time of building process .
21
+ *
22
+ * @var float $_start_time The start time of the building process .
23
+ */
24
+ private $start_time = 0;
25
+
26
+ /**
27
+ * The end time of the building process.
28
+ *
29
+ * @var float $_end_time The end time of the building process
30
+ */
31
+ private $end_time = 0;
32
+
33
+ /**
34
+ * Holding an array with the results and information of the last ping .
35
+ *
36
+ * @var array Holding an array with the results and information of the last ping
37
+ */
38
+ private $ping_results = array();
39
+
40
+ /**
41
+ * If the status should be saved to the database automatically .
42
+ *
43
+ * @var bool If the status should be saved to the database automatically
44
+ */
45
+ private $auto_save = true;
46
+
47
+ /**
48
+ * Constructs a new status ued for saving the ping results
49
+ *
50
+ * @param string $auto_save .
51
+ */
52
+ public function __construct( $auto_save = true ) {
53
+ $this->start_time = microtime( true );
54
+
55
+ $this->auto_save = $auto_save;
56
+
57
+ if ( $auto_save ) {
58
+
59
+ $exists = get_option( 'sm_status' );
60
+
61
+ if ( false === $exists ) {
62
+ add_option( 'sm_status', '', '', 'no' );
63
+ }
64
+ $this->save();
65
+ }
66
+ }
67
+
68
+ /**
69
+ * Saves the status back to the database
70
+ */
71
+ public function save() {
72
+ update_option( 'sm_status', $this );
73
+ }
74
+
75
+ /**
76
+ * Returns the last saved status object or null
77
+ *
78
+ * @return GoogleSitemapGeneratorStatus
79
+ */
80
+ public static function load() {
81
+ $status = get_option( 'sm_status' );
82
+ if ( is_a( $status, 'GoogleSitemapGeneratorStatus' ) ) {
83
+ return $status;
84
+ } else {
85
+ return null;
86
+ }
87
+ }
88
+
89
+ /**
90
+ * Ends the ping process
91
+ */
92
+ public function end() {
93
+ $this->end_time = microtime( true );
94
+ if ( $this->auto_save ) {
95
+ $this->save();
96
+ }
97
+ }
98
+
99
+ /**
100
+ * Returns the duration of the ping process
101
+ *
102
+ * @return int
103
+ */
104
+ public function get_duration() {
105
+ return round( $this->end_time - $this->start_time, 2 );
106
+ }
107
+
108
+ /**
109
+ * Returns the time when the pings were started
110
+ *
111
+ * @return int
112
+ */
113
+ public function get_start_time() {
114
+ return round( $this->start_time, 2 );
115
+ }
116
+
117
+ /**
118
+ * Start ping .
119
+ *
120
+ * @param string $service string The internal name of the ping service .
121
+ * @param string $url string The URL to ping .
122
+ * @param string $name string The display name of the service .
123
+ * @return void
124
+ */
125
+ public function start_ping( $service, $url, $name = null ) {
126
+ $this->ping_results[ $service ] = array(
127
+ 'start_time' => microtime( true ),
128
+ 'end_time' => 0,
129
+ 'success' => false,
130
+ 'url' => $url,
131
+ 'name' => $name ? $name : $service,
132
+ );
133
+
134
+ if ( $this->auto_save ) {
135
+ $this->save();
136
+ }
137
+ }
138
+
139
+ /**
140
+ * End ping .
141
+ *
142
+ * @param string $service string The internal name of the ping service .
143
+ * @param string $success boolean If the ping was successful .
144
+ * @return void
145
+ */
146
+ public function end_ping( $service, $success ) {
147
+ $this->ping_results[ $service ]['end_time'] = microtime( true );
148
+ $this->ping_results[ $service ]['success'] = $success;
149
+
150
+ if ( $this->auto_save ) {
151
+ $this->save();
152
+ }
153
+ }
154
+
155
+ /**
156
+ * Returns the duration of the last ping of a specific ping service
157
+ *
158
+ * @param string $service string The internal name of the ping service .
159
+ * @return float
160
+ */
161
+ public function get_ping_duration( $service ) {
162
+ $res = $this->ping_results[ $service ];
163
+ return round( $res['end_time'] - $res['start_time'], 2 );
164
+ }
165
+
166
+ /**
167
+ * Returns the last result for a specific ping service
168
+ *
169
+ * @param string $service string The internal name of the ping service .
170
+ * @return array
171
+ */
172
+ public function get_ping_result( $service ) {
173
+ return $this->ping_results[ $service ]['success'];
174
+ }
175
+
176
+ /**
177
+ * Returns the URL for a specific ping service
178
+ *
179
+ * @param string $service string The internal name of the ping service .
180
+ * @return array
181
+ */
182
+ public function get_ping_url( $service ) {
183
+ return $this->ping_results[ $service ]['url'];
184
+ }
185
+
186
+ /**
187
+ * Returns the name for a specific ping service
188
+ *
189
+ * @param string $service string The internal name of the ping service .
190
+ * @return array
191
+ */
192
+ public function get_service_name( $service ) {
193
+ return $this->ping_results[ $service ]['name'];
194
+ }
195
+
196
+ /**
197
+ * Returns if a service was used in the last ping
198
+ *
199
+ * @param string $service string The internal name of the ping service .
200
+ * @return bool
201
+ */
202
+ public function used_ping_service( $service ) {
203
+ return array_key_exists( $service, $this->ping_results );
204
+ }
205
+
206
+ /**
207
+ * Returns the services which were used in the last ping
208
+ *
209
+ * @return array
210
+ */
211
+ public function get_used_ping_services() {
212
+ return array_keys( $this->ping_results );
213
+ }
214
+ }
class-googlesitemapgeneratorui.php ADDED
@@ -0,0 +1,1701 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * UI class for the sitemap.
4
+ *
5
+ * @author Arne Brachhold
6
+ * @package sitemap
7
+ */
8
+
9
+ /**
10
+ * $Id: class-googlesitemapgeneratorui.php 935247 2014-06-19 17:13:03Z arnee $
11
+ */
12
+ class GoogleSitemapGeneratorUI {
13
+
14
+ /**
15
+ * The Sitemap Generator Object
16
+ *
17
+ * @var GoogleSitemapGenerator
18
+ */
19
+ private $sg = null;
20
+
21
+ /**
22
+ * Constructor function.
23
+ *
24
+ * @param GoogleSitemapGenerator $sitemap_builder s .
25
+ */
26
+ public function __construct( GoogleSitemapGenerator $sitemap_builder ) {
27
+ $this->sg = $sitemap_builder;
28
+ }
29
+ /**
30
+ * Constructor function.
31
+ *
32
+ * @param string $id s .
33
+ * @param string $title .
34
+ */
35
+ private function html_print_box_header( $id, $title ) {
36
+ ?>
37
+ <div id='<?php echo esc_attr( $id ); ?>' class='postbox'>
38
+ <h3 class='hndle'><span><?php echo esc_html( $title ); ?> </span> </h3>
39
+ <div class='inside'>
40
+ <?php
41
+ }
42
+ /**
43
+ * Constructor function.
44
+ */
45
+ private function html_print_box_footer() {
46
+ ?>
47
+ </div>
48
+ </div>
49
+ <?php
50
+ }
51
+
52
+ /**
53
+ * Echos option fields for an select field containing the valid change frequencies
54
+ *
55
+ * @since 4.0
56
+ * @param string $current_val mixed The value which should be selected.
57
+ */
58
+ public function html_get_freq_names( $current_val ) {
59
+ foreach ( $this->sg->get_freq_names() as $k => $v ) {
60
+ echo "<option value='" . esc_attr( $k ) . "' " . esc_attr( self::html_get_selected( $k, $current_val ) ) . '>' . esc_attr( $v ) . ' </option>';
61
+ }
62
+ }
63
+
64
+ /**
65
+ * Echos option fields for an select field containing the valid priorities (0- 1.0)
66
+ *
67
+ * @since 4.0
68
+ * @param string $current_val string The value which should be selected.
69
+ * @return void
70
+ */
71
+ public static function html_get_priority_values( $current_val ) {
72
+ $current_val = (float) $current_val;
73
+ for ( $i = 0.0; $i <= 1.0; $i += 0.1 ) {
74
+ $v = number_format( $i, 1, '.', '' );
75
+ echo "<option value='" . esc_attr( $v ) . "' " . esc_attr( self::html_get_selected( $i, $current_val ) ) . '>';
76
+ echo esc_attr( number_format_i18n( $i, 1 ) );
77
+ echo '</option>';
78
+ }
79
+ }
80
+
81
+ /**
82
+ * Returns the checked attribute if the given values match
83
+ *
84
+ * @since 4.0
85
+ * @param string $val string The current value.
86
+ * @param string $equals string The value to match.
87
+ * @return string The checked attribute if the given values match, an empty string if not
88
+ */
89
+ public static function html_get_checked( $val, $equals ) {
90
+ $is_equals = $val === $equals;
91
+ if ( $is_equals ) {
92
+ return self::html_get_attribute( 'checked' );
93
+ } else {
94
+ return '';
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Returns the selected attribute if the given values match
100
+ *
101
+ * @since 4.0
102
+ * @param string $val string The current value.
103
+ * @param string $equals string The value to match.
104
+ * @return string The selected attribute if the given values match, an empty string if not
105
+ */
106
+ public static function html_get_selected( $val, $equals ) {
107
+ if ( is_numeric( $val ) && is_numeric( $equals ) ) {
108
+ $is_equals = ( round( $val * 10 ) === round( $equals * 10 ) );
109
+ } else {
110
+ $is_equals = $val === $equals;
111
+ }
112
+ if ( $is_equals ) {
113
+ return self::html_get_attribute( 'selected' );
114
+ } else {
115
+ return '';
116
+ }
117
+ }
118
+
119
+ /**
120
+ * Returns an formatted attribute. If the value is NULL, the name will be used.
121
+ *
122
+ * @since 4.0
123
+ * @param string $attr string The attribute name.
124
+ * @param string $value string The attribute value.
125
+ * @return string The formatted attribute
126
+ */
127
+ public static function html_get_attribute( $attr, $value = null ) {
128
+ if ( null === $value ) {
129
+ $value = $attr;
130
+ }
131
+ return ' ' . $attr . '=' . esc_attr( $value ) . ' ';
132
+ }
133
+
134
+ /**
135
+ * Returns an array with GoogleSitemapGeneratorPage objects which is generated from POST values
136
+ *
137
+ * @since 4.0
138
+ * @see GoogleSitemapGeneratorPage
139
+ * @return array An array with GoogleSitemapGeneratorPage objects
140
+ */
141
+ public function html_apply_pages() {
142
+ //phpcs:disable
143
+ // $pages_ur = ( ( ! isset( $_POST['sm_pages_ur'] ) ) ) && ( ! isset( $_POST['sm_pages_ur'] ) || ! is_array( $_POST['sm_pages_ur'] ) ? array() : esc_url_raw( wp_unslash( $_POST['sm_pages_ur'] ) ) );
144
+ // Array with all priorities.
145
+ $pages_ur = array();
146
+ $pages_pr = array();
147
+ $pages_cf = array();
148
+ $pages_lm = array();
149
+ $pages_ur = ( ! isset( $_POST['sm_pages_ur'] ) || ! is_array( $_POST['sm_pages_ur'] ) ) ? array() : array_map( 'sanitize_text_field', wp_unslash( $_POST['sm_pages_ur'] ) );
150
+ // if ( isset( $_POST['sm_pages_pr'] ) && wp_verify_nonce( array_map( 'sanitize_text_field', ( wp_unslash( $_POST['sm_pages_pr'] ) ) ) ) ) {
151
+ $pages_pr = ( ! isset( $_POST['sm_pages_pr'] ) || ! is_array( $_POST['sm_pages_pr'] ) ? array() : array_map( 'sanitize_text_field', wp_unslash( $_POST['sm_pages_pr'] ) ) );
152
+ // }
153
+ // if ( isset( $_POST['sm_pages_cf'] ) && wp_verify_nonce( array_map( 'sanitize_text_field', ( wp_unslash( $_POST['sm_pages_cf'] ) ) ) ) ) {
154
+ $pages_cf = ( ! isset( $_POST['sm_pages_cf'] ) || ! is_array( $_POST['sm_pages_cf'] ) ? array() : array_map( 'sanitize_text_field', wp_unslash( $_POST['sm_pages_cf'] ) ) );
155
+ // }
156
+ // if ( isset( $_POST['sm_pages_lm'] ) && wp_verify_nonce( array_map( 'sanitize_text_field', ( wp_unslash( $_POST['sm_pages_lm'] ) ) ) ) ) {
157
+ $pages_lm = ( ! isset( $_POST['sm_pages_lm'] ) || ! is_array( $_POST['sm_pages_lm'] ) ? array() : array_map( 'sanitize_text_field', wp_unslash( $_POST['sm_pages_lm'] ) ) );
158
+ // }
159
+ // Array where the new pages are stored.
160
+ $pages = array();
161
+ // Loop through all defined pages and set their properties into an object.
162
+ if ( isset( $_POST['sm_pages_mark'] ) && is_array( $_POST['sm_pages_mark'] ) ) {
163
+ $len = count( $_POST['sm_pages_mark'] );
164
+ // phpcs:enable
165
+ for ( $i = 0; $i < $len; $i++ ) {
166
+ // Create new object.
167
+ $p = new GoogleSitemapGeneratorPage();
168
+ if ( substr( $pages_ur[ $i ], 0, 4 ) === 'www.' ) {
169
+ $pages_ur[ $i ] = 'http://' . $pages_ur[ $i ];
170
+ }
171
+ $p->set_url( $pages_ur[ $i ] );
172
+ $p->set_priority( $pages_pr[ $i ] );
173
+ $p->set_change_freq( $pages_cf[ $i ] );
174
+ // Try to parse last modified, if -1 (note ===) automatic will be used (0).
175
+ $lm = ( ! empty( $pages_lm[ $i ] ) ? strtotime( $pages_lm[ $i ], time() ) : -1 );
176
+ if ( -1 === $lm ) {
177
+ $p->set_last_mod( 0 );
178
+ } else {
179
+ $p->set_last_mod( $lm );
180
+ }
181
+ // Add it to the array.
182
+ array_push( $pages, $p );
183
+ }
184
+ }
185
+ return $pages;
186
+ }
187
+ /**
188
+ * Escape.
189
+ *
190
+ * @param string $v String.
191
+ */
192
+ public static function escape( $v ) {
193
+ // prevent html tags in strings where they are not required.
194
+ return strtr( $v, '<>', '..' );
195
+ }
196
+ /**
197
+ * Array_map_r.
198
+ *
199
+ * @param array $func .
200
+ * @param array $arr .
201
+ */
202
+ public static function array_map_r( $func, $arr ) {
203
+ $new_arr = array();
204
+ foreach ( $arr as $key => $value ) {
205
+ $new_arr[ $key ] = ( is_array( $value ) ? self::array_map_r( $func, $value ) : ( is_array( $func ) ? call_user_func_array( $func, $value ) : $func( $value ) ) );
206
+ }
207
+ foreach ( $new_arr as $k => $v ) {
208
+ echo esc_html( ' [ ' . $k . ' ] => ' . $v );
209
+ echo '<br />';
210
+ }
211
+ }
212
+
213
+ /**
214
+ * Displays the option page
215
+ *
216
+ * @since 3.0
217
+ * @access public
218
+ * @author Arne Brachhold
219
+ */
220
+ public function html_show_options_page() {
221
+ global $wp_version;
222
+ $snl = false; // SNL.
223
+
224
+ $this->sg->initate();
225
+
226
+ $message = '';
227
+
228
+ if ( ! empty( $_REQUEST['sm_rebuild'] ) ) {
229
+ // Pressed Button: Rebuild Sitemap.
230
+ check_admin_referer( 'sitemap' );
231
+
232
+ if ( isset( $_GET['sm_do_debug'] ) && 'true' === $_GET['sm_do_debug'] ) {
233
+
234
+ // Check again, just for the case that something went wrong before.
235
+ if ( ! current_user_can( 'administrator' ) || ! is_super_admin() ) {
236
+ echo '<p>Please log in as admin</p>';
237
+ return;
238
+ }
239
+
240
+ echo "<div class='wrap'>";
241
+ echo '<h2>' . esc_html( __( 'XML Sitemap Generator for WordPress', 'sitemap' ) ) . ' ' . esc_html( $this->sg->get_version() ) . '</h2>';
242
+ echo '<p>This is the debug mode of the XML Sitemap Generator. It will show all PHP notices and warnings as well as the internal logs, messages and configuration.</p>';
243
+ echo "<p style='font-weight:bold; color:red; padding:5px; border:1px red solid; text-align:center;'>DO NOT POST THIS INFORMATION ON PUBLIC PAGES LIKE SUPPORT FORUMS AS IT MAY CONTAIN PASSWORDS OR SECRET SERVER INFORMATION!</p>";
244
+ echo '<h3>WordPress and PHP Information</h3>';
245
+ echo '<p>WordPress ' . esc_html( $GLOBALS['wp_version'] ) . ' with DB ' . esc_html( $GLOBALS['wp_db_version'] ) . ' on PHP ' . esc_html( phpversion() ) . '</p>';
246
+ echo '<p>Plugin version: ' . esc_html( $this->sg->get_version() ) . ' (' . esc_html( $this->sg->get_svn_version() ) . ')';
247
+ echo '<h4>Environment</h4>';
248
+ echo '<pre>';
249
+ $sc = $_SERVER;
250
+ $this->sg->get_svn_version();
251
+ unset( $sc['HTTP_COOKIE'] );
252
+ foreach ( $sc as $key => $value ) {
253
+ echo esc_html( ' [ ' . $key . ' ] => ' . $value );
254
+ echo '<br />';
255
+ }
256
+ echo '</pre>';
257
+ echo '<h4>WordPress Config</h4>';
258
+ echo '<pre>';
259
+ $opts = array();
260
+ if ( function_exists( 'wp_load_alloptions' ) ) {
261
+ $opts = wp_load_alloptions();
262
+ } else {
263
+ // @var $wpdb wpdb .
264
+ global $wpdb;
265
+ $os = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options" ); // db call ok; no-cache ok.
266
+ foreach ( (array) $os as $o ) {
267
+ $opts[ $o->option_name ] = $o->option_value;
268
+ }
269
+ }
270
+
271
+ $popts = array();
272
+ foreach ( $opts as $k => $v ) {
273
+ // Try to filter out passwords etc...
274
+ if ( preg_match( '/pass|login|pw|secret|user|usr|key|auth|token/si', $k ) ) {
275
+ continue;
276
+ }
277
+ $popts[ $k ] = htmlspecialchars( $v );
278
+ }
279
+ foreach ( $popts as $key => $value ) {
280
+ echo esc_html( ' [ ' . $key . ' ] => ' . $value );
281
+ echo '<br />';
282
+ }
283
+ echo '</pre>';
284
+ echo '<h4>Sitemap Config</h4>';
285
+ echo '<pre>';
286
+ self::array_map_r( 'strip_tags', $this->sg->get_options() );
287
+ echo '</pre>';
288
+ echo '<h3>Sitemap Content and Errors, Warnings, Notices</h3>';
289
+ echo '<div>';
290
+
291
+ $sitemaps = $this->sg->simulate_index();
292
+
293
+ foreach ( $sitemaps as $sitemap ) {
294
+
295
+ // @var $s GoogleSitemapGeneratorSitemapEntry .
296
+ $s = $sitemap['data'];
297
+ echo '<h4>Sitemap: <a href=\'' . esc_url( $s->get_url() ) . '\'>' . esc_html( $sitemap['type'] ) . '/' . ( esc_html( $sitemap['params'] ) ? esc_html( $sitemap['params'] ) : '(No parameters)' ) . '</a> by ' . esc_html( $sitemap['caller']['class'] ) . '</h4>';
298
+
299
+ $res = $this->sg->simulate_sitemap( $sitemap['type'], $sitemap['params'] );
300
+
301
+ echo "<ul style='padding-left:10px;'>";
302
+ foreach ( $res as $s ) {
303
+ // @var $d GoogleSitemapGeneratorSitemapEntry .
304
+ $d = $s['data'];
305
+ echo '<li>' . esc_html( $d->get_url() ) . '</li>';
306
+ }
307
+ echo '</ul>';
308
+ }
309
+
310
+ $status = GoogleSitemapGeneratorStatus::load();
311
+ echo '</div>';
312
+ echo '<h3>MySQL Queries</h3>';
313
+ if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES ) {
314
+ echo '<pre>';
315
+ // phpcs:disable.
316
+ var_dump( $GLOBALS['wpdb']->queries );
317
+ // phpcs:enable
318
+ echo '</pre>';
319
+
320
+ $total = 0;
321
+ foreach ( $GLOBALS['wpdb']->queries as $q ) {
322
+ $total += $q[1];
323
+ }
324
+ echo '<h4>Total Query Time</h4>';
325
+ echo '<pre>' . count( $GLOBALS['wpdb']->queries ) . ' queries in ' . esc_html( round( $total, 2 ) ) . ' seconds.</pre>';
326
+ } else {
327
+ echo '<p>Please edit wp-db.inc.php in wp-includes and set SAVEQUERIES to true if you want to see the queries.</p>';
328
+ }
329
+ echo '<h3>Build Process Results</h3>';
330
+ echo '<pre>';
331
+ echo '</pre>';
332
+ echo "<p>Done. <a href='" . esc_url( wp_nonce_url( $this->sg->get_back_link() ) . '&sm_rebuild=true&sm_do_debug=true', 'sitemap' ) . "'>Rebuild</a> or <a href='" . esc_url( $this->sg->get_back_link() ) . "'>Return</a></p>";
333
+ echo "<p style='font-weight:bold; color:red; padding:5px; border:1px red solid; text-align:center;'>DO NOT POST THIS INFORMATION ON PUBLIC PAGES LIKE SUPPORT FORUMS AS IT MAY CONTAIN PASSWORDS OR SECRET SERVER INFORMATION!</p>";
334
+ echo '</div>';
335
+ return;
336
+ } else {
337
+
338
+ $redir_url = $this->sg->get_back_link() . '&sm_fromrb=true';
339
+
340
+ // Redirect so the sm_rebuild GET parameter no longer exists.
341
+ header( 'location: ' . $redir_url );
342
+ // If there was already any other output, the header redirect will fail.
343
+ echo "<script type='text/javascript'>location.replace('" . esc_js( $redir_url ) . "');</script>";
344
+ echo "<noscript><a href='" . esc_url( $redir_url ) . "'>Click here to continue</a></noscript>";
345
+ exit;
346
+ }
347
+ } elseif ( ! empty( $_POST['sm_update'] ) ) { // Pressed Button: Update Config.
348
+ check_admin_referer( 'sitemap' );
349
+
350
+ if ( isset( $_POST['sm_b_style'] ) && $_POST['sm_b_style'] === $this->sg->get_default_style() ) {
351
+ $_POST['sm_b_style_default'] = true;
352
+ $_POST['sm_b_style'] = '';
353
+ }
354
+
355
+ foreach ( $this->sg->get_options() as $k => $v ) {
356
+ // Skip some options if the user is not super admin...
357
+ if ( ! is_super_admin() && in_array( $k, array( 'sm_b_time', 'sm_b_memory', 'sm_b_style', 'sm_b_style_default' ), true ) ) {
358
+ continue;
359
+ }
360
+
361
+ // Check vor values and convert them into their types, based on the category they are in.
362
+ if ( ! isset( $_POST[ $k ] ) ) {
363
+ $_POST[ $k ] = '';
364
+ } // Empty string will get false on 2bool and 0 on 2float
365
+ // Options of the category 'Basic Settings' are boolean, except the filename and the autoprio provider.
366
+ if ( substr( $k, 0, 5 ) === 'sm_b_' ) {
367
+ if ( 'sm_b_prio_provider' === $k || 'sm_b_style' === $k || 'sm_b_memory' === $k || 'sm_b_baseurl' === $k || 'sm_b_sitemap_name' === $k ) {
368
+ if ( 'sm_b_filename_manual' === $k && strpos( sanitize_text_field( wp_unslash( $_POST[ $k ] ) ), '\\' ) !== false ) {
369
+ $_POST[ $k ] = stripslashes( self::escape( sanitize_text_field( wp_unslash( $_POST[ $k ] ) ) ) );
370
+ } elseif ( 'sm_b_baseurl' === $k ) {
371
+ $_POST[ $k ] = esc_url_raw( trim( self::escape( sanitize_text_field( wp_unslash( $_POST[ $k ] ) ) ) ) );
372
+ if ( ! empty( $_POST[ $k ] ) ) {
373
+ $_POST[ $k ] = untrailingslashit( sanitize_text_field( wp_unslash( $_POST[ $k ] ) ) );
374
+ }
375
+ } elseif ( 'sm_b_style' === $k ) {
376
+ $_POST[ $k ] = esc_url_raw( trim( self::escape( sanitize_text_field( wp_unslash( $_POST[ $k ] ) ) ) ) );
377
+ if ( ! empty( $_POST[ $k ] ) ) {
378
+ $_POST[ $k ] = untrailingslashit( sanitize_text_field( wp_unslash( $_POST[ $k ] ) ) );
379
+ }
380
+ } elseif ( 'sm_b_sitemap_name' === $k ) {
381
+ if ( '' === $_POST[ $k ] ) {
382
+ $_POST[ $k ] = 'sitemap';
383
+ } else {
384
+ $_POST[ $k ] = trim( self::escape( sanitize_text_field( wp_unslash( $_POST[ $k ] ) ) ) );
385
+ if ( $this->sg->old_file_exists() ) {
386
+ $this->sg->delete_old_files();
387
+ }
388
+ }
389
+ }
390
+ $this->sg->set_option( $k, (string) sanitize_text_field( wp_unslash( $_POST[ $k ] ) ) );
391
+ } elseif ( 'sm_b_time' === $k ) {
392
+ if ( '' === $_POST[ $k ] ) {
393
+ $_POST[ $k ] = -1;
394
+ }
395
+ $this->sg->set_option( $k, intval( $_POST[ $k ] ) );
396
+ } elseif ( 'sm_i_install_date' === $k ) {
397
+ if ( $this->sg->get_option( 'i_install_date' ) <= 0 ) {
398
+ $this->sg->set_option( $k, time() );
399
+ }
400
+ } elseif ( 'sm_b_exclude' === $k ) {
401
+ $id_ss = array();
402
+ $id_s = explode( ',', sanitize_text_field( wp_unslash( $_POST[ $k ] ) ) );
403
+ $len = count( $id_s );
404
+ for ( $x = 0; $x < $len; $x++ ) {
405
+ $id = intval( trim( $id_s[ $x ] ) );
406
+ if ( $id > 0 ) {
407
+ $id_ss[] = $id;
408
+ }
409
+ }
410
+ $this->sg->set_option( $k, $id_ss );
411
+ } elseif ( 'sm_b_exclude_cats' === $k ) {
412
+ $ex_cats = array();
413
+ if ( isset( $_POST['post_category'] ) ) {
414
+ foreach ( (array) array_map( 'sanitize_text_field', ( wp_unslash( $_POST['post_category'] ) ) ) as $vv ) {
415
+ if ( ! empty( $vv ) && is_numeric( $vv ) ) {
416
+ $ex_cats[] = intval( $vv );
417
+ }
418
+ }
419
+ }
420
+ if ( isset( $_POST['tax_input'] ) && isset( $_POST['tax_input']['product_cat'] ) ) {
421
+ $prod_cat = array_map( 'sanitize_text_field', ( wp_unslash( $_POST['tax_input']['product_cat'] ) ) );
422
+ foreach ( (array) $prod_cat as $vv ) {
423
+ if ( ! empty( $vv ) && is_numeric( $vv ) ) {
424
+ $ex_cats[] = intval( $vv );
425
+ }
426
+ }
427
+ }
428
+ $taxonomies = $this->sg->get_custom_taxonomies();
429
+ foreach ( $taxonomies as $key => $taxonomy ) {
430
+ if ( isset( $_POST['tax_input'] ) && isset( $_POST['tax_input'][ $taxonomy ] ) ) {
431
+ $custom_cat = array_map( 'sanitize_text_field', ( wp_unslash( $_POST['tax_input'][ $taxonomy ] ) ) );
432
+ foreach ( (array) $custom_cat as $vv ) {
433
+ if ( ! empty( $vv ) && is_numeric( $vv ) ) {
434
+ $ex_cats[] = intval( $vv );
435
+ }
436
+ }
437
+ }
438
+ }
439
+ $this->sg->set_option( $k, $ex_cats );
440
+ } else {
441
+ $this->sg->set_option( $k, (bool) $_POST[ $k ] );
442
+ }
443
+ // Options of the category 'Includes' are boolean.
444
+ } elseif ( 'sm_i_tid' === $k ) {
445
+ // $_POST[ $k ] = trim( self::escape( sanitize_text_field( wp_unslash( $_POST[ $k ] ) ) ) );
446
+ $this->sg->set_option( $k, trim( self::escape( sanitize_text_field( wp_unslash( $_POST[ $k ] ) ) ) ) );
447
+ } elseif ( substr( $k, 0, 6 ) === 'sm_in_' ) {
448
+ if ( 'sm_in_tax' === $k ) {
449
+
450
+ $enabled_taxonomies = array();
451
+
452
+ foreach ( array_keys( (array) array_map( 'sanitize_text_field', ( wp_unslash( $_POST[ $k ] ) ) ) ) as $tax_name ) {
453
+ if ( empty( $tax_name ) || ! taxonomy_exists( $tax_name ) ) {
454
+ continue;
455
+ }
456
+
457
+ $enabled_taxonomies[] = self::escape( $tax_name );
458
+ }
459
+
460
+ $this->sg->set_option( $k, $enabled_taxonomies );
461
+ } elseif ( 'sm_in_customtypes' === $k ) {
462
+
463
+ $enabled_post_types = array();
464
+
465
+ foreach ( array_keys( (array) array_map( 'sanitize_text_field', wp_unslash( $_POST[ $k ] ) ) ) as $post_type_name ) {
466
+ if ( empty( $post_type_name ) || ! post_type_exists( $post_type_name ) ) {
467
+ continue;
468
+ }
469
+
470
+ $enabled_post_types[] = self::escape( $post_type_name );
471
+ }
472
+
473
+ $this->sg->set_option( $k, $enabled_post_types );
474
+ } else {
475
+ $this->sg->set_option( $k, (bool) $_POST[ $k ] );
476
+ }
477
+ // Options of the category 'Change frequencies' are string.
478
+ } elseif ( substr( $k, 0, 6 ) === 'sm_cf_' ) {
479
+ $this->sg->set_option( $k, (string) self::escape( sanitize_text_field( wp_unslash( $_POST[ $k ] ) ) ) );
480
+ // Options of the category 'Priorities' are float.
481
+ } elseif ( substr( $k, 0, 6 ) === 'sm_pr_' ) {
482
+ $this->sg->set_option( $k, (float) sanitize_text_field( wp_unslash( $_POST[ $k ] ) ) );
483
+ } elseif ( 'sm_links_page' === $k ) {
484
+ $this->sg->set_option( $k, (float) sanitize_text_field( wp_unslash( $_POST[ $k ] ) ) );
485
+ } elseif ( substr( $k, 0, 3 ) === 'sm_' ) {
486
+ $this->sg->set_option( $k, (bool) sanitize_text_field( wp_unslash( $_POST[ $k ] ) ) );
487
+ }
488
+ }
489
+
490
+ // Apply page changes from POST.
491
+ if ( is_super_admin() ) {
492
+ $this->sg->set_pages( $this->html_apply_pages() );
493
+ }
494
+
495
+ if ( $this->sg->save_options() ) {
496
+ $message .= __( 'Configuration updated', 'sitemap' ) . '<br />';
497
+ } else {
498
+ $message .= __( 'Error while saving options', 'sitemap' ) . '<br />';
499
+ }
500
+
501
+ if ( is_super_admin() ) {
502
+ if ( $this->sg->save_pages() ) {
503
+ $message .= __( 'Pages saved', 'sitemap' ) . '<br />';
504
+ } else {
505
+ $message .= __( 'Error while saving pages', 'sitemap' ) . '<br />';
506
+ }
507
+ }
508
+ } elseif ( ! empty( $_POST['sm_reset_config'] ) ) { // Pressed Button: Reset Config.
509
+ check_admin_referer( 'sitemap' );
510
+ $this->sg->init_options();
511
+ $this->sg->save_options();
512
+
513
+ $message .= __( 'The default configuration was restored.', 'sitemap' );
514
+ } elseif ( ! empty( $_GET['sm_delete_old'] ) ) { // Delete old sitemap files.
515
+ check_admin_referer( 'sitemap' );
516
+
517
+ // Check again, just for the case that something went wrong before.
518
+ if ( ! current_user_can( 'administrator' ) ) {
519
+ echo '<p>Please log in as admin</p>';
520
+ return;
521
+ }
522
+ if ( ! $this->sg->delete_old_files() ) {
523
+ $message = __( 'The old files could NOT be deleted. Please use an FTP program and delete them by yourself.', 'sitemap' );
524
+ } else {
525
+ $message = __( 'The old files were successfully deleted.', 'sitemap' );
526
+ }
527
+ } elseif ( ! empty( $_GET['sm_ping_all'] ) ) {
528
+ check_admin_referer( 'sitemap' );
529
+
530
+ // Check again, just for the case that something went wrong before.
531
+ if ( ! current_user_can( 'administrator' ) ) {
532
+ echo '<p>Please log in as admin</p>';
533
+ return;
534
+ }
535
+
536
+ ?>
537
+ <html>
538
+
539
+ <head>
540
+ <style type='text/css'>
541
+ html {
542
+ background: #f1f1f1;
543
+ }
544
+
545
+ body {
546
+ color: #444;
547
+ font-family: 'Open Sans', sans-serif;
548
+ font-size: 13px;
549
+ line-height: 1.4em;
550
+ min-width: 600px;
551
+ }
552
+
553
+ h2 {
554
+ font-size: 23px;
555
+ font-weight: 400;
556
+ padding: 9px 10px 4px 0;
557
+ line-height: 29px;
558
+ }
559
+ </style>
560
+ </head>
561
+
562
+ <body>
563
+ <?php
564
+ echo '<h2>' . esc_html( __( 'Notify Search Engines about all sitemaps', 'sitemap' ) ) . '</h2>';
565
+ echo '<p>' . esc_html( __( 'The plugin is notifying the selected search engines about your main sitemap and all sub-sitemaps. This might take a minute or two.', 'sitemaps' ) ) . '</p>';
566
+ flush();
567
+ $results = $this->sg->send_ping_all();
568
+
569
+ echo '<ul>';
570
+
571
+ foreach ( $results as $result ) {
572
+
573
+ $sitemap_url = $result['sitemap'];
574
+ // @var $status GoogleSitemapGeneratorStatus .
575
+ $status = $result['status'];
576
+
577
+ echo esc_html( '<li><a href=\'' . esc_url( $sitemap_url ) . '\'>' . $sitemap_url . '</a><ul>' );
578
+ $services = $status->get_used_ping_services();
579
+ foreach ( $services as $service_id ) {
580
+ echo '<li>';
581
+ echo esc_html( $status->get_service_name( $service_id ) . ': ' . ( $status->get_ping_result( $service_id ) === true ? 'OK' : 'ERROR' ) );
582
+ echo '</li>';
583
+ }
584
+ echo '</ul></li>';
585
+ }
586
+ echo '</ul>';
587
+ echo '<p>' . esc_html( __( 'All done!', 'sitemap' ) ) . '</p>';
588
+ ?>
589
+
590
+ </body>
591
+ <?php
592
+ exit;
593
+ } elseif ( ! empty( $_GET['sm_ping_main'] ) ) {
594
+
595
+ check_admin_referer( 'sitemap' );
596
+
597
+ // Check again, just for the case that something went wrong before.
598
+ if ( ! current_user_can( 'administrator' ) ) {
599
+ echo '<p>Please log in as admin</p>';
600
+ return;
601
+ }
602
+
603
+ $this->sg->send_ping();
604
+ $message = __( 'Ping was executed, please see below for the result.', 'sitemap' );
605
+ }
606
+
607
+ // Print out the message to the user, if any.
608
+ if ( '' !== $message ) {
609
+ ?>
610
+ <div class='updated'>
611
+ <p><strong>
612
+ <?php
613
+ $arr = array(
614
+ 'br' => array(),
615
+ 'p' => array(),
616
+ 'strong' => array(),
617
+ );
618
+ echo wp_kses( $message, $arr );
619
+ ?>
620
+ </strong></p>
621
+ </div>
622
+ <?php
623
+ }
624
+
625
+ if ( ! $snl ) {
626
+
627
+ if ( isset( $_GET['sm_hidedonate'] ) ) {
628
+ $this->sg->set_option( 'i_hide_donated', true );
629
+ $this->sg->save_options();
630
+ }
631
+ if ( isset( $_GET['sm_donated'] ) ) {
632
+ $this->sg->set_option( 'i_donated', true );
633
+ $this->sg->save_options();
634
+ }
635
+ if ( isset( $_GET['sm_hide_note'] ) ) {
636
+ $this->sg->set_option( 'i_hide_note', true );
637
+ $this->sg->save_options();
638
+ }
639
+ if ( isset( $_GET['sm_hide_survey'] ) ) {
640
+ $this->sg->set_option( 'i_hide_survey', true );
641
+ $this->sg->save_options();
642
+ }
643
+ if ( isset( $_GET['sm_hidedonors'] ) ) {
644
+ $this->sg->set_option( 'i_hide_donors', true );
645
+ $this->sg->save_options();
646
+ }
647
+ if ( isset( $_GET['sm_hide_works'] ) ) {
648
+ $this->sg->set_option( 'i_hide_works', true );
649
+ $this->sg->save_options();
650
+ }
651
+ if ( isset( $_GET['sm_disable_supportfeed'] ) ) {
652
+ $this->sg->set_option( 'i_supportfeed', 'true' === $_GET['sm_disable_supportfeed'] ? false : true );
653
+ $this->sg->save_options();
654
+ }
655
+
656
+ if ( isset( $_GET['sm_donated'] ) || ( $this->sg->get_option( 'i_donated' ) === true && $this->sg->get_option( 'i_hide_donated' ) !== true ) ) {
657
+ ?>
658
+ <!--
659
+ <div class='updated'>
660
+ <strong><p><?php esc_html_e( 'Thank you very much for your donation. You help me to continue support and development of this plugin and other free software!', 'sitemap' ); ?> <a href='<?php echo esc_url( $this->sg->get_back_link() ) . '&amp;sm_hidedonate=true'; ?>'><small style='font-weight:normal;'><?php esc_html_e( 'Hide this notice', 'sitemap' ); ?></small></a></p></strong>
661
+ </div>
662
+ -->
663
+ <?php
664
+ } elseif ( $this->sg->get_option( 'i_donated' ) !== true && $this->sg->get_option( 'i_install_date' ) > 0 && $this->sg->get_option( 'i_hide_note' ) !== true && time() > ( $this->sg->get_option( 'i_install_date' ) + ( 60 * 60 * 24 * 30 ) ) ) {
665
+ ?>
666
+ <!--
667
+ <div class="updated">
668
+ <strong><p><?php echo esc_html( str_replace( '%s', $this->sg->get_redirect_link( 'redir/sitemap-donate-note' ), __( 'Thanks for using this plugin! You\'ve installed this plugin over a month ago. If it works and you are satisfied with the results, isn\'t it worth at least a few dollar? <a href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-donate-note">Donations</a> help me to continue support and development of this <i>free</i> software! <a href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-donate-note">Sure, no problem!</a>', 'sitemap' ) ) ); ?> <a href="<?php echo esc_url( $this->sg->get_back_link() ) . '&amp;sm_donated=true'; ?>" style="float:right; display:block; border:none; margin-left:10px;"><small style="font-weight:normal; "><?php esc_html_e( 'Sure, but I already did!', 'sitemap' ); ?></small></a> <a href="<?php echo esc_url( $this->sg->get_back_link() ) . '&amp;sm_hide_note=true'; ?>" style="float:right; display:block; border:none;"><small style="font-weight:normal; "><?php esc_html_e( 'No thanks, please don\'t bug me anymore!', 'sitemap' ); ?></small></a></p></strong>
669
+ <div style="clear:right;"></div>
670
+ </div>
671
+ -->
672
+ <?php
673
+ } elseif ( $this->sg->get_option( 'i_install_date' ) > 0 && $this->sg->get_option( 'i_hide_works' ) !== true && time() > ( $this->sg->get_option( 'i_install_date' ) + ( 60 * 60 * 24 * 15 ) ) ) {
674
+ ?>
675
+ <div class='updated'>
676
+ <strong>
677
+ <?php /* translators: %s: search term */ ?>
678
+ <p><?php echo esc_html( str_replace( '%s', esc_html( $this->sg->get_redirect_link( 'redir/sitemap-works-note' ) ), esc_html( 'Thanks for using this plugin! You\'ve installed this plugin some time ago. If it works and your are satisfied, why not ' . esc_html( '<a href=\'%s\'>rate it</a>' ) . ' and <a href=\'%s\'>recommend it</a> to others? :-)' ) ) ); ?> <a href='<?php esc_url( $this->sg->get_back_link() ) . '&amp;sm_hide_works=true'; ?>' style='float:right; display:block; border:none;'><small style='font-weight:normal; '><?php esc_html_e( 'Don\'t show this me anymore', 'sitemap' ); ?></small></a></p>
679
+ </strong>
680
+ <div style='clear:right;'></div>
681
+ </div>
682
+ <?php
683
+ }
684
+
685
+ if ( $this->sg->show_survey() ) {
686
+ $this->sg->html_survey();
687
+ }
688
+ }
689
+
690
+ ?>
691
+
692
+ <style type='text/css'>
693
+ li.sm_hint {
694
+ color: green;
695
+ }
696
+
697
+ li.sm_optimize {
698
+ color: orange;
699
+ }
700
+
701
+ li.sm_error {
702
+ color: red;
703
+ }
704
+
705
+ input.sm_warning:hover {
706
+ background: #ce0000;
707
+ color: #fff;
708
+ }
709
+
710
+ a.sm_button {
711
+ padding: 4px;
712
+ display: block;
713
+ background-repeat: no-repeat;
714
+ background-position: 5px 50%;
715
+ text-decoration: none;
716
+ border: none;
717
+ }
718
+
719
+ a.sm_button:hover {
720
+ border-bottom-width: 1px;
721
+ }
722
+
723
+ a.sm_donatePayPal {
724
+ background-image: url(<?php echo esc_url( $this->sg->get_plugin_url() . 'img/icon-paypal.gif' ); ?>);
725
+ }
726
+
727
+ a.sm_donateAmazon {
728
+ background-image: url(<?php echo esc_url( $this->sg->get_plugin_url() . 'img/icon-amazon.gif' ); ?>);
729
+ }
730
+
731
+ a.sm_pluginHome {
732
+ background-image: url(<?php echo esc_url( $this->sg->get_plugin_url() . 'img/icon-arne.gif' ); ?>);
733
+ }
734
+
735
+ a.sm_pluginHelp {
736
+ background-image: url(<?php echo esc_url( $this->sg->get_plugin_url() . 'img/icon-help.png' ); ?>);
737
+ }
738
+
739
+ a.sm_pluginList {
740
+ background-image: url(<?php echo esc_url( $this->sg->get_plugin_url() . 'img/icon-email.gif' ); ?>);
741
+ }
742
+
743
+ a.sm_pluginSupport {
744
+ background-image: url(<?php echo esc_url( $this->sg->get_plugin_url() . 'img/icon-wordpress.gif' ); ?>);
745
+ }
746
+
747
+ a.sm_pluginBugs {
748
+ background-image: url(<?php echo esc_url( $this->sg->get_plugin_url() . 'img/icon-trac.gif' ); ?>);
749
+ }
750
+
751
+ a.sm_resGoogle {
752
+ background-image: url(<?php echo esc_url( $this->sg->get_plugin_url() . 'img/icon-google.gif' ); ?>);
753
+ }
754
+
755
+ a.sm_resYahoo {
756
+ background-image: url(<?php echo esc_url( $this->sg->get_plugin_url() . 'img/icon-yahoo.gif' ); ?>);
757
+ }
758
+
759
+ a.sm_resBing {
760
+ background-image: url(<?php echo esc_url( $this->sg->get_plugin_url() . 'img/icon-bing.gif' ); ?>);
761
+ }
762
+
763
+ div.sm-update-nag p {
764
+ margin: 5px;
765
+ }
766
+
767
+ .sm-padded .inside {
768
+ margin: 12px !important;
769
+ }
770
+
771
+ .sm-padded .inside ul {
772
+ margin: 6px 0 12px 0;
773
+ }
774
+
775
+ .sm-padded .inside input {
776
+ padding: 1px;
777
+ margin: 0;
778
+ }
779
+
780
+ .hndle {
781
+ cursor: auto !important;
782
+ -webkit-user-select: auto !important;
783
+ -moz-user-select: auto !important;
784
+ -ms-user-select: auto !important;
785
+ user-select: auto !important;
786
+ }
787
+
788
+
789
+ <?php
790
+ if ( version_compare( $wp_version, '3.4', '<' ) ) : // Fix style for WP 3.4 (dirty way for now..) .
791
+ ?>
792
+ .inner-sidebar #side-sortables,
793
+ .columns-2 .inner-sidebar #side-sortables {
794
+ min-height: 300px;
795
+ width: 280px;
796
+ padding: 0;
797
+ }
798
+
799
+ .has-right-sidebar .inner-sidebar {
800
+ display: block;
801
+ }
802
+
803
+ .inner-sidebar {
804
+ float: right;
805
+ clear: right;
806
+ display: none;
807
+ width: 281px;
808
+ position: relative;
809
+ }
810
+
811
+ .has-right-sidebar #post-body-content {
812
+ margin-right: 300px;
813
+ }
814
+
815
+ #post-body-content {
816
+ width: auto !important;
817
+ float: none !important;
818
+ }
819
+
820
+ <?php endif; ?>
821
+ </style>
822
+
823
+
824
+ <div class='wrap' id='sm_div'>
825
+ <form method='post' action='<?php echo esc_url( $this->sg->get_back_link() ); ?>'>
826
+ <h2>
827
+ <?php
828
+ esc_html_e( 'XML Sitemap Generator for WordPress', 'sitemap' );
829
+ echo ' ' . esc_html( $this->sg->get_version() );
830
+ ?>
831
+ </h2>
832
+ <?php
833
+
834
+ if ( get_option( 'blog_public' ) !== 1 ) {
835
+ ?>
836
+ <div class='error'>
837
+ <p>
838
+ <?php
839
+ $arr = array(
840
+ 'br' => array(),
841
+ 'p' => array(),
842
+ 'a' => array(
843
+ 'href' => array(),
844
+ ),
845
+ 'strong' => array(),
846
+ );
847
+ /* translators: %s: search term */
848
+ echo wp_kses( str_replace( '%s', 'options-reading.php#blog_public', __( 'Your site is currently blocking search engines! Visit the <a href=\'%s\'>Reading Settings</a> to change this.', 'sitemap' ) ), $arr );
849
+ ?>
850
+ </p>
851
+ </div>
852
+ <?php
853
+ }
854
+
855
+ ?>
856
+
857
+ <?php if ( ! $snl ) { ?>
858
+ <div id='poststuff' class='metabox-holder has-right-sidebar'>
859
+ <div class='inner-sidebar'>
860
+ <div id='side-sortables' class='meta-box-sortabless ui-sortable' style='position:relative;'>
861
+ <?php } else { ?>
862
+ <div id='poststuff' class='metabox-holder'>
863
+ <?php } ?>
864
+
865
+
866
+ <?php if ( ! $snl ) : ?>
867
+ <?php $this->html_print_box_header( 'sm_pnres', __( 'About this Plugin:', 'sitemap' ), true ); ?>
868
+ <a class='sm_button' href='<?php echo esc_url( $this->sg->get_redirect_link( 'redir/sitemap-home' ) ); ?>'><?php esc_html_e( 'Plugin Homepage', 'sitemap' ); ?></a>
869
+ <a class='sm_button' href='<?php echo esc_url( $this->sg->get_redirect_link( 'redir/sitemap-support' ) ); ?>'><?php esc_html_e( 'Suggest a Feature', 'sitemap' ); ?></a>
870
+ <a class='sm_button' href='<?php echo esc_url( $this->sg->get_redirect_link( 'redir/sitemap-help' ) ); ?>'><?php esc_html_e( 'Help / FAQ', 'sitemap' ); ?></a>
871
+ <a class='sm_button' href='<?php echo esc_url( $this->sg->get_redirect_link( 'redir/sitemap-list' ) ); ?>'><?php esc_html_e( 'Notify List', 'sitemap' ); ?></a>
872
+ <a class='sm_button' href='<?php echo esc_url( $this->sg->get_redirect_link( 'redir/sitemap-support' ) ); ?>'><?php esc_html_e( 'Support Forum', 'sitemap' ); ?></a>
873
+ <a class='sm_button' href='<?php echo esc_url( $this->sg->get_redirect_link( 'redir/sitemap-bugs' ) ); ?>'><?php esc_html_e( 'Report a Bug', 'sitemap' ); ?></a>
874
+ <?php
875
+ if ( __( 'translator_name', 'sitemap' ) !== 'translator_name' ) {
876
+ ?>
877
+ <a class='sm_button sm_pluginSupport' href='<?php esc_html_e( 'translator_url', 'sitemap' ); ?>'><?php esc_html_e( 'translator_name', 'sitemap' ); ?></a><?php } ?>
878
+ <?php $this->html_print_box_footer( true ); ?>
879
+
880
+ <?php $this->html_print_box_header( 'sm_smres', __( 'Sitemap Resources:', 'sitemap' ), true ); ?>
881
+ <a class='sm_button' href='<?php echo esc_url( $this->sg->get_redirect_link( 'redir/sitemap-gwt' ) ); ?>'><?php esc_html_e( 'Webmaster Tools', 'sitemap' ); ?></a>
882
+ <a class='sm_button' href='<?php echo esc_url( $this->sg->get_redirect_link( 'redir/sitemap-gwb' ) ); ?>'><?php esc_html_e( 'Webmaster Blog', 'sitemap' ); ?></a>
883
+ <a class='sm_button' href='<?php echo esc_url( $this->sg->get_redirect_link( 'redir/sitemap-ywb' ) ); ?>'><?php esc_html_e( 'Search Blog', 'sitemap' ); ?></a>
884
+ <a class='sm_button' href='<?php echo esc_url( $this->sg->get_redirect_link( 'redir/sitemap-lwt' ) ); ?>'><?php esc_html_e( 'Webmaster Tools', 'sitemap' ); ?></a>
885
+ <a class='sm_button' href='<?php echo esc_url( $this->sg->get_redirect_link( 'redir/sitemap-lswcb' ) ); ?>'><?php esc_html_e( 'Webmaster Center Blog', 'sitemap' ); ?></a>
886
+ <br />
887
+ <a class='sm_button' href='<?php echo esc_url( $this->sg->get_redirect_link( 'redir/sitemap-prot' ) ); ?>'><?php esc_html_e( 'Sitemaps Protocol', 'sitemap' ); ?></a>
888
+ <a class='sm_button' href='<?php echo esc_url( $this->sg->get_redirect_link( 'projects/wordpress-plugins/google-xml-sitemaps-generator/help' ) ); ?>'><?php esc_html_e( 'Official Sitemaps FAQ', 'sitemap' ); ?></a>
889
+ <a class='sm_button' href='<?php echo esc_url( $this->sg->get_redirect_link( 'projects/wordpress-plugins/google-xml-sitemaps-generator/help' ) ); ?>'><?php esc_html_e( 'My Sitemaps FAQ', 'sitemap' ); ?></a>
890
+ <?php $this->html_print_box_footer( true ); ?>
891
+
892
+
893
+ </div>
894
+ </div>
895
+ <?php endif; ?>
896
+
897
+ <div class='has-sidebar sm-padded'>
898
+
899
+ <div id='post-body-content' class='
900
+ <?php
901
+ if ( ! $snl ) :
902
+ ?>
903
+ has-sidebar-content<?php endif; ?>'>
904
+
905
+ <div class='meta-box-sortabless'>
906
+
907
+
908
+ <!-- Rebuild Area -->
909
+ <?php
910
+
911
+ $status = GoogleSitemapGeneratorStatus::Load();
912
+ $head = __( 'Search engines haven\'t been notified yet', 'sitemap' );
913
+ if ( null !== $status && 0 < $status->get_start_time() ) {
914
+ $opt = get_option( 'gmt_offset' );
915
+ $st = $status->get_start_time() + ( $opt * 3600 );
916
+ /* translators: %s: search term */
917
+ $head = str_replace( '%date%', date_i18n( get_option( 'date_format' ), $st ) . ' ' . date_i18n( get_option( 'time_format' ), $st ), esc_html__( 'Result of the last ping, started on %date%.', 'sitemap' ) );
918
+ }
919
+
920
+ $this->html_print_box_header( 'sm_rebuild', $head );
921
+ ?>
922
+
923
+
924
+ <div style='border-left: 1px #DFDFDF solid; float:right; padding-left:15px; margin-left:10px; width:35%;'>
925
+ <strong><?php esc_html_e( 'Recent Support Topics / News', 'sitemap' ); ?></strong>
926
+ <?php
927
+ if ( $this->sg->get_option( 'i_supportfeed' ) ) {
928
+
929
+ echo '<small><a href=\'' . esc_url( wp_nonce_url( $this->sg->get_back_link() ) . '&sm_disable_supportfeed=true' ) . '\'>' . esc_html__( 'Disable', 'sitemap' ) . '</a></small>';
930
+
931
+ $support_feed = $this->sg->get_support_feed();
932
+
933
+ if ( ! is_wp_error( $support_feed ) && $support_feed ) {
934
+ $support_items = $support_feed->get_items( 0, $support_feed->get_item_quantity( 3 ) );
935
+
936
+ if ( count( $support_items ) > 0 ) {
937
+ echo '<ul>';
938
+ foreach ( $support_items as $item ) {
939
+ $url = esc_url( $item->get_permalink() );
940
+ $title = esc_html( $item->get_title() );
941
+ echo '<li><a rel=\'external\' target=\'_blank\' href=' . esc_url( $url ) . '>' . esc_html( $title ) . '</a></li>';
942
+ }
943
+ echo '</ul>';
944
+ }
945
+ } else {
946
+ echo '<ul><li>' . esc_html__( 'No support topics available or an error occurred while fetching them.', 'sitemap' ) . '</li></ul>';
947
+ }
948
+ } else {
949
+ echo '<ul><li>' . esc_html__( 'Support Topics have been disabled. Enable them to see useful information regarding this plugin. No Ads or Spam!', 'sitemap' ) . ' <a href=\'' . esc_url( wp_nonce_url( $this->sg->get_back_link() ) . '&sm_disable_supportfeed=false' ) . '\'>' . esc_html__( 'Enable', 'sitemap' ) . '</a></li></ul>';
950
+ }
951
+ ?>
952
+ </div>
953
+
954
+
955
+ <div style='min-height:150px;'>
956
+ <ul>
957
+ <?php
958
+
959
+ if ( $this->sg->old_file_exists() ) {
960
+ /* translators: %s: search term */
961
+ echo '<li class=\'sm_error\'>' . esc_html( str_replace( '%s', ( $this->sg->get_back_link() ) . '&sm_delete_old=true', 'sitemap' ) ), esc_html__( 'There is still a sitemap.xml or sitemap.xml.gz file in your site directory. Please delete them as no static files are used anymore or <a href=\'%s\'>try to delete them automatically</a>.', 'sitemap' ) . '</li>';
962
+ }
963
+ $arr = array(
964
+ 'br' => array(),
965
+ 'p' => array(),
966
+ 'a' => array(
967
+ 'href' => array(),
968
+ ),
969
+ 'strong' => array(),
970
+ );
971
+ /* translators: %s: search term */
972
+ echo '<li>' . wp_kses( str_replace( array( '%1$s', '%2$s' ), $this->sg->get_xml_url(), __( 'The URL to your sitemap index file is: <a href=\'%1$s\'>%2$s</a>.', 'sitemap' ) ), $arr ) . '</li>';
973
+ if ( null === $status ) {
974
+ echo '<li>' . esc_html__( 'Search engines haven\'t been notified yet. Write a post to let them know about your sitemap.', 'sitemap' ) . '</li>';
975
+ } else {
976
+
977
+ $services = $status->get_used_ping_services();
978
+
979
+ foreach ( $services as $service ) {
980
+ $name = $status->get_service_name( $service );
981
+
982
+ if ( $status->get_ping_result( $service ) ) {
983
+ $arr = array(
984
+ 'b' => array(),
985
+ 'a' => array(
986
+ 'href' => array(),
987
+ ),
988
+ );
989
+ /* translators: %s: search term */
990
+
991
+ echo '<li>' . wp_kses( sprintf( __( '%s was <b>successfully notified</b> about changes.', 'sitemap' ), $name ), $arr ) . '</li>';
992
+ $dur = $status->get_ping_duration( $service );
993
+ if ( $dur > 4 ) {
994
+ echo '<li class=\sm_optimize\'>' . wp_kses( str_replace( array( '%time%', '%name%' ), array( $dur, $name ), __( 'It took %time% seconds to notify %name%, maybe you want to disable this feature to reduce the building time.', 'sitemap' ) ), $arr ) . '</li>';
995
+ }
996
+ } else {
997
+ /* translators: %s: search term */
998
+ echo '<li class=\'sm_error\'>' . wp_kses( str_replace( array( '%s', '%name%' ), array( wp_nonce_url( $this->sg->get_back_link() . '&sm_ping_service=' . $service . '&noheader=true', 'sitemap' ), $name ), __( 'There was a problem while notifying %name%. <a href=\'%s\' target=\'_blank\'>View result</a>', 'sitemap' ) ), $arr ) . '</li>';
999
+ }
1000
+ }
1001
+ }
1002
+
1003
+ ?>
1004
+ <?php if ( $this->sg->get_option( 'b_ping' ) || $this->sg->get_option( 'b_pingmsn' ) ) : ?>
1005
+ <li>
1006
+ Notify Search Engines about <a href='<?php echo esc_url( wp_nonce_url( $this->sg->get_back_link() . '&sm_ping_main=true', 'sitemap' ) ); ?>'>your sitemap </a> or <a href='#' onclick='window.open('<?php echo esc_html( wp_nonce_url( $this->sg->get_back_link() . '&sm_ping_all=true&noheader=true', 'sitemap' ) ); ?>','','width=650, height=500, resizable=yes'); return false;'>your main sitemap and all sub-sitemaps</a> now.
1007
+ </li>
1008
+ <?php endif; ?>
1009
+ <?php
1010
+ if ( is_super_admin() ) {
1011
+ $arr = array(
1012
+ 'br' => array(),
1013
+ 'p' => array(),
1014
+ 'a' => array(
1015
+ 'href' => array(),
1016
+ ),
1017
+ 'strong' => array(),
1018
+ );
1019
+ /* translators: %s: search term */
1020
+ echo '<li>' . wp_kses( str_replace( '%d', wp_nonce_url( $this->sg->get_back_link() . '&sm_rebuild=true&sm_do_debug=true', 'sitemap' ), __( 'If you encounter any problems with your sitemap you can use the <a href="%d">debug function</a> to get more information.', 'sitemap' ) ), $arr ) . '</li>';
1021
+ }
1022
+ ?>
1023
+ </ul>
1024
+ <ul>
1025
+ <li>
1026
+ <?php
1027
+ $arr = array(
1028
+ 'br' => array(),
1029
+ 'p' => array(),
1030
+ 'a' => array(
1031
+ 'href' => array(),
1032
+ ),
1033
+ 'strong' => array(),
1034
+ );
1035
+ /* translators: %s: search term */
1036
+ echo wp_kses( sprintf( __( 'If you like the plugin, please <a target="_blank" href="%s">rate it 5 stars</a>! :)', 'sitemap' ), $this->sg->get_redirect_link( 'redir/sitemap-works-note' ), $this->sg->get_redirect_link( 'redirsitemap-paypal' ) ), $arr );
1037
+ ?>
1038
+ </li>
1039
+ </ul>
1040
+ </div>
1041
+ <?php $this->html_print_box_footer(); ?>
1042
+
1043
+ <?php if ( $this->sg->is_nginx() && $this->sg->is_using_permalinks() ) : ?>
1044
+ <?php $this->html_print_box_header( 'ngin_x', __( 'Webserver Configuration', 'sitemap' ) ); ?>
1045
+ <?php esc_html_e( 'Since you are using Nginx as your web-server, please configure the following rewrite rules in case you get 404 Not Found errors for your sitemap:', 'sitemap' ); ?>
1046
+ <p>
1047
+ <code style='display:block; overflow-x:auto; white-space: nowrap;'>
1048
+ <?php
1049
+ $rules = GoogleSitemapGeneratorLoader::get_ngin_x_rules();
1050
+ foreach ( $rules as $rule ) {
1051
+ echo esc_html( $rule . '<br />' );
1052
+ }
1053
+ ?>
1054
+ </code>
1055
+ </p>
1056
+ <?php $this->html_print_box_footer(); ?>
1057
+ <?php endif; ?>
1058
+
1059
+
1060
+ <!-- Basic Options -->
1061
+ <?php $this->html_print_box_header( 'sm_basic_options', __( 'Basic Options', 'sitemap' ) ); ?>
1062
+
1063
+ <b><?php esc_html_e( 'Update notification:', 'sitemap' ); ?></b> <a href='<?php echo esc_url( $this->sg->get_redirect_link( 'redir/sitemap-help-options-ping' ) ); ?>'><?php esc_html_e( 'Learn more', 'sitemap' ); ?></a>
1064
+ <ul>
1065
+ <li>
1066
+ <input type='checkbox' id='sm_b_ping' name='sm_b_ping' <?php echo ( $this->sg->get_option( 'b_ping' ) === true ? 'checked=\'checked\'' : '' ); ?> />
1067
+ <label for='sm_b_ping'><?php esc_html_e( 'Notify Google about updates of your site', 'sitemap' ); ?></label><br />
1068
+ <small>
1069
+ <?php
1070
+ $arr = array(
1071
+ 'br' => array(),
1072
+ 'p' => array(),
1073
+ 'a' => array(
1074
+ 'href' => array(),
1075
+ ),
1076
+ 'strong' => array(),
1077
+ );
1078
+ /* translators: %s: search term */
1079
+ echo wp_kses( str_replace( '%s', $this->sg->get_redirect_link( 'redir/sitemap-gwt' ), __( 'No registration required, but you can join the <a href=\'%s\'>Google Webmaster Tools</a> to check crawling statistics.', 'sitemap' ) ), $arr );
1080
+ ?>
1081
+ </small>
1082
+ </li>
1083
+ <li>
1084
+ <input type='checkbox' id='sm_b_pingmsn' name='sm_b_pingmsn' <?php echo ( $this->sg->get_option( 'b_pingmsn' ) === true ? 'checked=\'checked\'' : '' ); ?> />
1085
+ <label for='sm_b_pingmsn'><?php esc_html_e( 'Notify Bing (formerly MSN Live Search) about updates of your site', 'sitemap' ); ?></label><br />
1086
+ <small>
1087
+ <?php
1088
+ $arr = array(
1089
+ 'br' => array(),
1090
+ 'p' => array(),
1091
+ 'a' => array(
1092
+ 'href' => array(),
1093
+ ),
1094
+ 'strong' => array(),
1095
+ );
1096
+ /* translators: %s: search term */
1097
+ echo wp_kses( str_replace( '%s', $this->sg->get_redirect_link( 'redir/sitemap-lwt' ), __( 'No registration required, but you can join the <a href=\'%s\'>Bing Webmaster Tools</a> to check crawling statistics.', 'sitemap' ) ), $arr );
1098
+ ?>
1099
+ </small>
1100
+ </li>
1101
+ <li>
1102
+ <label for='sm_b_robots'>
1103
+ <input type='checkbox' id='sm_b_robots' name='sm_b_robots' <?php echo ( $this->sg->get_option( 'b_robots' ) === true ? 'checked=\'checked\'' : '' ); ?> />
1104
+ <?php esc_html_e( 'Add sitemap URL to the virtual robots.txt file.', 'sitemap' ); ?>
1105
+ </label>
1106
+
1107
+ <br />
1108
+ <small><?php esc_html_e( 'The virtual robots.txt generated by WordPress is used. A real robots.txt file must NOT exist in the site directory!', 'sitemap' ); ?></small>
1109
+ </li>
1110
+ </ul>
1111
+
1112
+ <?php if ( is_super_admin() ) : ?>
1113
+
1114
+ <b><?php esc_html_e( 'Advanced options:', 'sitemap' ); ?></b> <a href='<?php echo esc_url( $this->sg->get_redirect_link( 'redir/sitemap-help-options-adv' ) ); ?>'><?php esc_html_e( 'Learn more', 'sitemap' ); ?></a>
1115
+ <ul>
1116
+ <li>
1117
+ <label for="sm_b_memory"><?php esc_html_e( 'Try to increase the memory limit to:', 'sitemap' ); ?> <input type="text" name="sm_b_memory" id="sm_b_memory" style="width:40px;" value="<?php echo esc_attr( $this->sg->get_option( 'b_memory' ) ); ?>" /></label> ( <?php echo esc_html( htmlspecialchars( esc_html__( 'e.g. \'4M\', \'16M\'', 'sitemap' ) ) ); ?>)
1118
+ </li>
1119
+ <li>
1120
+ <label for='sm_b_time'><?php esc_html_e( 'Try to increase the execution time limit to:', 'sitemap' ); ?> <input type='text' name='sm_b_time' id='sm_b_time' style='width:40px;' value='<?php echo esc_attr( ( $this->sg->get_option( 'b_time' ) === -1 ? '' : $this->sg->get_option( 'b_time' ) ) ); ?>' /></label> (<?php echo esc_html( htmlspecialchars( esc_html__( 'in seconds, e.g. \'60\' or \'0\' for unlimited', 'sitemap' ) ) ); ?>)
1121
+ </li>
1122
+ <li>
1123
+ <label for='sm_b_autozip'>
1124
+ <input type='checkbox' id='sm_b_autozip' name='sm_b_autozip' <?php echo ( $this->sg->get_option( 'b_autozip' ) === true ? 'checked=\'checked\'' : '' ); ?> />
1125
+ <?php esc_html_e( 'Try to automatically compress the sitemap if the requesting client supports it.', 'sitemap' ); ?>
1126
+ </label><br />
1127
+ <small><?php esc_html_e( 'Disable this option if you get garbled content or encoding errors in your sitemap.', 'sitemap' ); ?></small>
1128
+ </li>
1129
+ <li>
1130
+ <?php $use_def_style = ( $this->sg->get_default_style() && $this->sg->get_option( 'b_style_default' ) === true ); ?>
1131
+ <label for='sm_b_style'><?php esc_html_e( 'Include a XSLT stylesheet:', 'sitemap' ); ?> <input <?php echo ( $use_def_style ? 'disabled=\'disabled\' ' : '' ); ?> type='text' name='sm_b_style' id='sm_b_style' value='<?php echo esc_attr( $this->sg->get_option( 'b_style' ) ); ?>' /></label>
1132
+ (<?php esc_html_e( 'Full or relative URL to your .xsl file', 'sitemap' ); ?>)
1133
+ <?php
1134
+ if ( $this->sg->get_default_style() ) :
1135
+ ?>
1136
+ <label for='sm_b_style_default'><input <?php echo ( $use_def_style ? 'checked=\'checked\' ' : '' ); ?> type='checkbox' id='sm_b_style_default' name='sm_b_style_default' onclick='document.getElementById("sm_b_style").disabled = this.checked;' /> <?php esc_html_e( 'Use default', 'sitemap' ); ?></label> <?php endif; ?>
1137
+ </li>
1138
+ <li>
1139
+ <label for='sm_b_baseurl'><?php esc_html_e( 'Override the base URL of the sitemap:', 'sitemap' ); ?> <input type='text' name='sm_b_baseurl' id='sm_b_baseurl' value='<?php echo esc_attr( $this->sg->get_option( 'b_baseurl' ) ); ?>' /></label><br />
1140
+ <small><?php esc_html_e( 'Use this if your site is in a sub-directory, but you want the sitemap be located in the root. Requires .htaccess modification.', 'sitemap' ); ?> <a href='<?php echo esc_url( $this->sg->get_redirect_link( 'redir/sitemap-help-options-adv-baseurl' ) ); ?>'><?php esc_html_e( 'Learn more', 'sitemap' ); ?></a></small>
1141
+ </li>
1142
+ <li>
1143
+ <label for='sm_b_sitemap_name'><?php esc_html_e( 'Override the file name of the sitemap:', 'sitemap' ); ?> <input type='text' name='sm_b_sitemap_name' id='sm_b_sitemap_name' value='<?php echo esc_attr( $this->sg->get_option( 'b_sitemap_name' ) ); ?>' /></label><br />
1144
+ <small><?php esc_html_e( 'Use this if you want to change the sitemap file name', 'sitemap' ); ?> <a href='<?php echo esc_url( $this->sg->get_redirect_link( 'sitemap-help-options-adv-baseurl' ) ); ?>'><?php esc_html_e( 'Learn more', 'sitemap' ); ?></a></small>
1145
+ </li>
1146
+ <li>
1147
+ <label for='sm_i_tid'><?php esc_html_e( ' Add Google Analytics TID:', 'sitemap' ); ?> <input type='text' name='sm_i_tid' id='sm_i_tid' required value='<?php echo esc_attr( $this->sg->get_option( 'i_tid' ) ); ?>' /></label><br />
1148
+ </li>
1149
+ <li>
1150
+ <label for='sm_b_html'>
1151
+ <input type='checkbox' id='sm_b_html' name='sm_b_html'
1152
+ <?php
1153
+ if ( ! $this->sg->is_xsl_enabled() ) {
1154
+ echo 'disabled=\'disabled\'';
1155
+ }
1156
+ ?>
1157
+ <?php echo ( $this->sg->get_option( 'b_html' ) === true && $this->sg->is_xsl_enabled() ? 'checked=\'checked\'' : '' ); ?> />
1158
+ <?php esc_html_e( 'Include sitemap in HTML format', 'sitemap' ); ?>
1159
+ <?php
1160
+ if ( ! $this->sg->is_xsl_enabled() ) {
1161
+ esc_html_e( '(The required PHP XSL Module is not installed)', 'sitemap' );
1162
+ }
1163
+ ?>
1164
+ </label>
1165
+ </li>
1166
+ <li>
1167
+ <label for='sm_b_stats'>
1168
+ <input type='checkbox' id='sm_b_stats' name='sm_b_stats' <?php echo ( $this->sg->get_option( 'b_stats' ) === true ? 'checked=\'checked\'' : '' ); ?> />
1169
+ <?php esc_html_e( 'Allow anonymous statistics (no personal information)', 'sitemap' ); ?>
1170
+ </label> <label><a href='<?php echo esc_url( $this->sg->get_redirect_link( 'redir/sitemap-help-options-adv-stats' ) ); ?>'><?php esc_html_e( 'Learn more', 'sitemap' ); ?></a></label>
1171
+ </li>
1172
+ </ul>
1173
+ <?php endif; ?>
1174
+
1175
+ <?php $this->html_print_box_footer(); ?>
1176
+
1177
+ <?php if ( is_super_admin() ) : ?>
1178
+ <?php $this->html_print_box_header( 'sm_pages', __( 'Additional Pages', 'sitemap' ) ); ?>
1179
+
1180
+ <?php
1181
+ $arr = array(
1182
+ 'br' => array(),
1183
+ 'p' => array(),
1184
+ 'a' => array(),
1185
+ 'strong' => array(),
1186
+ );
1187
+ echo wp_kses( 'Here you can specify files or URLs which should be included in the sitemap, but do not belong to your Site/WordPress.<br />For example, if your domain is www.foo.com and your site is located on www.foo.com/site you might want to include your homepage at www.foo.com', $arr );
1188
+ echo '<ul><li>';
1189
+ echo '<strong>' . esc_html__( 'Note', 'sitemap' ) . '</strong>: ';
1190
+ esc_html_e( 'If your site is in a subdirectory and you want to add pages which are NOT in the site directory or beneath, you MUST place your sitemap file in the root directory (Look at the &quot;Location of your sitemap file&quot; section on this page)!', 'sitemap' );
1191
+ echo '</li><li>';
1192
+ echo '<strong>' . esc_html__( 'URL to the page', 'sitemap' ) . '</strong>: ';
1193
+ esc_html_e( 'Enter the URL to the page. Examples: http://www.foo.com/index.html or www.foo.com/home ', 'sitemap' );
1194
+ echo '</li><li>';
1195
+ echo '<strong>' . esc_html__( 'Priority', 'sitemap' ) . '</strong>: ';
1196
+ esc_html_e( 'Choose the priority of the page relative to the other pages. For example, your homepage might have a higher priority than your imprint.', 'sitemap' );
1197
+ echo '</li><li>';
1198
+ echo '<strong>' . esc_html__( 'Last Changed', 'sitemap' ) . '</strong>: ';
1199
+ esc_html_e( 'Enter the date of the last change as YYYY-MM-DD (2005-12-31 for example) (optional).', 'sitemap' );
1200
+
1201
+ echo '</li></ul>';
1202
+ ?>
1203
+ <script type='text/javascript'>
1204
+ //<![CDATA[
1205
+ <?php
1206
+
1207
+ $freq_vals = implode( ',', array_keys( $this->sg->get_freq_names() ) );
1208
+ $freq_names = implode( ',', array_values( $this->sg->get_freq_names() ) );
1209
+ ?>
1210
+ var changeFreqVals = '<?php echo esc_html( $freq_vals ); ?>';
1211
+ changeFreqVals = changeFreqVals.split(",")
1212
+ var changeFreqNames ='<?php echo esc_html( $freq_names ); ?>'
1213
+ changeFreqNames = changeFreqNames.split(",")
1214
+ var priorities = [0
1215
+ <?php
1216
+ for ( $i = 0.1; $i < 1; $i += 0.1 ) {
1217
+ echo ',' . number_format( $i, 1, '.', '' );
1218
+ }
1219
+ ?>
1220
+ ];
1221
+
1222
+ var pages = [
1223
+ <?php
1224
+ $pages = (array) $this->sg->get_pages();
1225
+ $fd = false;
1226
+ foreach ( $pages as $page ) {
1227
+ if ( $page instanceof GoogleSitemapGeneratorPage ) {
1228
+ if ( $fd ) {
1229
+ echo ',';
1230
+ } else {
1231
+ $fd = true;
1232
+ }
1233
+ echo '{url:"' . esc_url( $page->get_url() ) . '", priority:' . esc_html( number_format( $page->get_priority(), 1, '.', '' ) ) . ', changeFreq:\'' . esc_html( $page->get_change_freq() ) . '\', lastChanged:"' . esc_html( ( $page->get_last_mod() > 0 ? gmdate( 'Y-m-d', $page->get_last_mod() ) : '' ) ) . '"}';
1234
+ }
1235
+ }
1236
+ ?>
1237
+ ];
1238
+ //]]>
1239
+ </script>
1240
+ <?php
1241
+ wp_enqueue_script( 'sitemap-script', ( $this->sg->get_plugin_url() . 'img/sitemap.js' ), '', '1.0.0', false );
1242
+ ?>
1243
+ <table width='100%' cellpadding='3' cellspacing='3' id='sm_pageTable'>
1244
+ <tr>
1245
+ <th scope='col'><?php esc_html_e( 'URL to the page', 'sitemap' ); ?></th>
1246
+ <th scope='col'><?php esc_html_e( 'Priority', 'sitemap' ); ?></th>
1247
+ <th scope='col'><?php esc_html_e( 'Change Frequency', 'sitemap' ); ?></th>
1248
+ <th scope='col'><?php esc_html_e( 'Last Changed', 'sitemap' ); ?></th>
1249
+ <th scope='col'><?php esc_html_e( '#', 'sitemap' ); ?></th>
1250
+ </tr>
1251
+ <?php
1252
+ if ( count( $pages ) <= 0 ) {
1253
+ ?>
1254
+ <tr>
1255
+ <td colspan='5' align='center'><?php esc_html_e( 'No pages defined.', 'sitemap' ); ?></td>
1256
+ </tr>
1257
+ <?php
1258
+ }
1259
+ ?>
1260
+ </table>
1261
+ <a href='javascript:void(0);' onclick='sm_addPage();'><?php esc_html_e( 'Add new page', 'sitemap' ); ?></a>
1262
+ <?php $this->html_print_box_footer(); ?>
1263
+ <?php endif; ?>
1264
+
1265
+
1266
+ <!-- AutoPrio Options -->
1267
+ <?php $this->html_print_box_header( 'sm_postprio', __( 'Post Priority', 'sitemap' ) ); ?>
1268
+
1269
+ <p><?php esc_html_e( 'Please select how the priority of each post should be calculated:', 'sitemap' ); ?></p>
1270
+ <ul>
1271
+ <li>
1272
+ <p><input type='radio' name='sm_b_prio_provider' id='sm_b_prio_provider__0' value='' <?php esc_attr( $this->html_get_checked( $this->sg->get_option( 'b_prio_provider' ), '' ) ); ?> /> <label for='sm_b_prio_provider__0'><?php esc_html_e( 'Do not use automatic priority calculation', 'sitemap' ); ?></label><br /><?php esc_html_e( 'All posts will have the same priority which is defined in &quot;Priorities&quot;', 'sitemap' ); ?></p>
1273
+ </li>
1274
+ <?php
1275
+ $provs = $this->sg->get_prio_providers();
1276
+ $len = count( $provs );
1277
+ for ( $i = 0; $i < $len; $i++ ) {
1278
+ echo '<li><p><input type=\'radio\' id=\'sm_b_prio_provider_$i\' name=\'sm_b_prio_provider\' value=\'' . esc_attr( $provs[ $i ] ) . '\' ' . esc_attr( $this->html_get_checked( $this->sg->get_option( 'b_prio_provider' ), $provs[ $i ] ) ) . ' /> <label for=\'sm_b_prio_provider_$i\'>' . esc_html( call_user_func( array( $provs[ $i ], 'get_name' ) ) ) . '</label><br />' . esc_html( call_user_func( array( $provs[ $i ], 'get_description' ) ) ) . '</p></li>';
1279
+ }
1280
+ ?>
1281
+ </ul>
1282
+ <?php $this->html_print_box_footer(); ?>
1283
+
1284
+ <!-- Includes -->
1285
+ <?php $this->html_print_box_header( 'sm_includes', __( 'Sitemap Content', 'sitemap' ) ); ?>
1286
+ <b><?php esc_html_e( 'WordPress standard content', 'sitemap' ); ?>:</b>
1287
+ <ul>
1288
+ <li>
1289
+ <label for='sm_in_home'>
1290
+ <input type='checkbox' id='sm_in_home' name='sm_in_home' <?php echo ( $this->sg->get_option( 'in_home' ) === true ? 'checked=\'checked\'' : '' ); ?> />
1291
+ <?php esc_html_e( 'Include homepage', 'sitemap' ); ?>
1292
+ </label>
1293
+ </li>
1294
+ <li>
1295
+ <label for='sm_in_posts'>
1296
+ <input type='checkbox' id='sm_in_posts' name='sm_in_posts' <?php echo ( $this->sg->get_option( 'in_posts' ) === true ? 'checked=\'checked\'' : '' ); ?> />
1297
+ <?php esc_html_e( 'Include posts', 'sitemap' ); ?>
1298
+ </label>
1299
+ </li>
1300
+ <li>
1301
+ <label for='sm_in_product_cat'>
1302
+ <input type='checkbox' id='sm_in_product_cat' name='sm_in_product_cat' <?php echo ( $this->sg->get_option( 'in_product_cat' ) === true ? 'checked=\'checked\'' : '' ); ?> />
1303
+ <?php esc_html_e( 'Include product categories', 'sitemap' ); ?>
1304
+ </label>
1305
+ </li>
1306
+ <li>
1307
+ <label for='sm_product_tags'>
1308
+ <input type='checkbox' id='sm_product_tags' name='sm_product_tags' <?php echo ( $this->sg->get_option( 'product_tags' ) === true ? 'checked=\'checked\'' : '' ); ?> />
1309
+ <?php esc_html_e( 'Include product tags', 'sitemap' ); ?>
1310
+ </label>
1311
+ </li>
1312
+ <li>
1313
+ <label for='sm_in_pages'>
1314
+ <input type='checkbox' id='sm_in_pages' name='sm_in_pages' <?php echo ( $this->sg->get_option( 'in_pages' ) === true ? 'checked=\'checked\'' : '' ); ?> />
1315
+ <?php esc_html_e( 'Include static pages', 'sitemap' ); ?>
1316
+ </label>
1317
+ </li>
1318
+ <li>
1319
+ <label for='sm_in_cats'>
1320
+ <input type='checkbox' id='sm_in_cats' name='sm_in_cats' <?php echo ( $this->sg->get_option( 'in_cats' ) === true ? 'checked=\'checked\'' : '' ); ?> />
1321
+ <?php esc_html_e( 'Include categories', 'sitemap' ); ?>
1322
+ </label>
1323
+ </li>
1324
+ <li>
1325
+ <label for='sm_in_arch'>
1326
+ <input type='checkbox' id='sm_in_arch' name='sm_in_arch' <?php echo ( $this->sg->get_option( 'in_arch' ) === true ? 'checked=\'checked\'' : '' ); ?> />
1327
+ <?php esc_html_e( 'Include archives', 'sitemap' ); ?>
1328
+ </label>
1329
+ </li>
1330
+ <li>
1331
+ <label for='sm_in_auth'>
1332
+ <input type='checkbox' id='sm_in_auth' name='sm_in_auth' <?php echo ( $this->sg->get_option( 'in_auth' ) === true ? 'checked=\'checked\'' : '' ); ?> />
1333
+ <?php esc_html_e( 'Include author pages', 'sitemap' ); ?>
1334
+ </label>
1335
+ </li>
1336
+ <?php if ( $this->sg->is_taxonomy_supported() ) : ?>
1337
+ <li>
1338
+ <label for='sm_in_tags'>
1339
+ <input type='checkbox' id='sm_in_tags' name='sm_in_tags' <?php echo ( $this->sg->get_option( 'in_tags' ) === true ? 'checked=\'checked\'' : '' ); ?> />
1340
+ <?php esc_html_e( 'Include tag pages', 'sitemap' ); ?>
1341
+ </label>
1342
+ </li>
1343
+ <?php endif; ?>
1344
+ </ul>
1345
+
1346
+ <?php
1347
+
1348
+ if ( $this->sg->is_taxonomy_supported() ) {
1349
+ $taxonomies = $this->sg->get_custom_taxonomies();
1350
+
1351
+ $enabled_taxonomies = $this->sg->get_option( 'in_tax' );
1352
+
1353
+ if ( count( $taxonomies ) > 0 ) {
1354
+ ?>
1355
+ <b>
1356
+ <?php
1357
+ esc_html_e( 'Custom taxonomies', 'sitemap' );
1358
+ ?>
1359
+ :</b>
1360
+ <ul>
1361
+ <?php
1362
+
1363
+ foreach ( $taxonomies as $tax_name ) {
1364
+
1365
+ $taxonomy = get_taxonomy( $tax_name );
1366
+ $selected = in_array( $taxonomy->name, $enabled_taxonomies, true );
1367
+ ?>
1368
+ <li>
1369
+ <label for='sm_in_tax[<?php echo esc_attr( $taxonomy->name ); ?>]'>
1370
+ <input type='checkbox' id='sm_in_tax[<?php echo esc_attr( $taxonomy->name ); ?>]' name='sm_in_tax[<?php echo esc_attr( $taxonomy->name ); ?>]' <?php echo $selected ? 'checked=\'checked\'' : ''; ?> />
1371
+ <?php /* translators: %s: search term */ ?>
1372
+ <?php echo esc_html( str_replace( '%s', $taxonomy->label, __( 'Include taxonomy pages for %s', 'sitemap' ) ) ); ?>
1373
+ </label>
1374
+ </li>
1375
+ <?php
1376
+ }
1377
+
1378
+ ?>
1379
+ </ul>
1380
+ <?php
1381
+
1382
+ }
1383
+ }
1384
+
1385
+ if ( $this->sg->is_custom_post_types_supported() ) {
1386
+ $custom_post_types = $this->sg->get_custom_post_types();
1387
+ $enabled_post_types = $this->sg->get_option( 'in_customtypes' );
1388
+
1389
+ if ( count( $custom_post_types ) > 0 ) {
1390
+ ?>
1391
+ <b>
1392
+ <?php esc_html_e( 'Custom post types', 'sitemap' ); ?>:</b>
1393
+ <ul>
1394
+ <?php
1395
+
1396
+ foreach ( $custom_post_types as $post_type ) {
1397
+ $post_type_object = get_post_type_object( $post_type );
1398
+ if ( is_array( $enabled_post_types ) ) {
1399
+ $selected = in_array( $post_type_object->name, $enabled_post_types, true );
1400
+ }
1401
+
1402
+ ?>
1403
+ <li>
1404
+ <label for='sm_in_customtypes[<?php echo esc_html( $post_type_object->name ); ?>]'>
1405
+ <input type='checkbox' id='sm_in_customtypes[<?php echo esc_html( $post_type_object->name ); ?>]' name='sm_in_customtypes[<?php echo esc_html( $post_type_object->name ); ?>]' <?php echo $selected ? 'checked=\'checked\'' : ''; ?> />
1406
+ <?php /* translators: %s: search term */ ?>
1407
+ <?php echo esc_html( str_replace( '%s', $post_type_object->label, __( 'Include custom post type %s', 'sitemap' ) ) ); ?>
1408
+ </label>
1409
+ </li>
1410
+ <?php
1411
+ }
1412
+
1413
+ ?>
1414
+ </ul>
1415
+ <?php
1416
+ }
1417
+ }
1418
+
1419
+ ?>
1420
+
1421
+ <b><?php esc_html_e( 'Further options', 'sitemap' ); ?>:</b>
1422
+ <ul>
1423
+ <li>
1424
+ <label for='sm_in_lastmod'>
1425
+ <input type='checkbox' id='sm_in_lastmod' name='sm_in_lastmod' <?php echo ( $this->sg->get_option( 'in_lastmod' ) === true ? 'checked=\'checked\'' : '' ); ?> />
1426
+ <?php esc_html_e( 'Include the last modification time.', 'sitemap' ); ?>
1427
+ </label><br />
1428
+ <small>
1429
+ <?php
1430
+ $arr = array(
1431
+ 'i' => array(),
1432
+ );
1433
+ echo wp_kses( __( 'This is highly recommended and helps the search engines to know when your content has changed. This option affects <i>all</i> sitemap entries.', 'sitemap' ), $arr );
1434
+ ?>
1435
+ </small>
1436
+ </li>
1437
+ </ul>
1438
+ <ul>
1439
+ <li>
1440
+ <label for='sm_links_page'>
1441
+ <b><?php esc_html_e( 'Links per page', 'sitemap' ); ?>:</b>
1442
+ <input type='number' name='sm_links_page' id='sm_links_page' style='width:50px; margin-left:10px;' value='<?php echo esc_attr( $this->sg->get_option( 'links_page' ) ); ?>' />
1443
+ </label>
1444
+ </li>
1445
+ </ul>
1446
+
1447
+ <?php $this->html_print_box_footer(); ?>
1448
+
1449
+ <!-- Excluded Items -->
1450
+ <?php $this->html_print_box_header( 'sm_excludes', __( 'Excluded Items', 'sitemap' ) ); ?>
1451
+
1452
+ <b><?php esc_html_e( 'Excluded categories', 'sitemap' ); ?>:</b>
1453
+
1454
+ <div style='border-color:#CEE1EF; border-style:solid; border-width:2px; height:10em; margin:5px 0px 5px 40px; overflow:auto; padding:0.5em 0.5em;'>
1455
+ <ul>
1456
+ <?php wp_category_checklist( 0, 0, $this->sg->get_option( 'b_exclude_cats' ), false ); ?>
1457
+ </ul>
1458
+ <ul>
1459
+ <?php
1460
+ $defaults = array(
1461
+ 'descendants_and_self' => 0,
1462
+ 'selected_cats' => $this->sg->get_option( 'b_exclude_cats' ),
1463
+ 'popular_cats' => false,
1464
+ 'walker' => null,
1465
+ 'taxonomy' => 'product_cat',
1466
+ 'checked_ontop' => true,
1467
+ 'echo' => true,
1468
+ );
1469
+ wp_terms_checklist( 0, $defaults );
1470
+ ?>
1471
+ </ul>
1472
+ <?php
1473
+ $taxonomies = $this->sg->get_custom_taxonomies();
1474
+ foreach ( $taxonomies as $key => $taxonomy ) {
1475
+ ?>
1476
+ <ul>
1477
+ <?php
1478
+ $defaults = array(
1479
+ 'descendants_and_self' => 0,
1480
+ 'selected_cats' => $this->sg->get_option( 'b_exclude_cats' ),
1481
+ 'popular_cats' => false,
1482
+ 'walker' => null,
1483
+ 'taxonomy' => $taxonomy,
1484
+ 'checked_ontop' => true,
1485
+ 'echo' => true,
1486
+ );
1487
+ wp_terms_checklist( 0, $defaults );
1488
+ ?>
1489
+ </ul>
1490
+ <?php
1491
+
1492
+ }
1493
+ ?>
1494
+ </div>
1495
+ <b><?php esc_html_e( 'Exclude posts', 'sitemap' ); ?>:</b>
1496
+ <div style='margin:5px 0 13px 40px;'>
1497
+ <label for='sm_b_exclude'><?php esc_html_e( 'Exclude the following posts or pages:', 'sitemap' ); ?> <small><?php esc_html_e( 'List of IDs, separated by comma', 'sitemap' ); ?></small><br />
1498
+ <input name="sm_b_exclude" id="sm_b_exclude" type="text" style="width:400px;" value="<?php echo esc_attr( implode( ',', $this->sg->get_option( 'b_exclude' ) ) ); ?>" /></label><br />
1499
+ <cite><?php esc_html_e( 'Note', 'sitemap' ); ?>: <?php esc_html_e( 'Child posts won\'t be excluded automatically!', 'sitemap' ); ?></cite>
1500
+ </div>
1501
+
1502
+ <?php $this->html_print_box_footer(); ?>
1503
+
1504
+ <!-- Change frequencies -->
1505
+ <?php $this->html_print_box_header( 'sm_change_frequencies', __( 'Change Frequencies', 'sitemap' ) ); ?>
1506
+
1507
+ <p>
1508
+ <b><?php esc_html_e( 'Note', 'sitemap' ); ?>:</b>
1509
+ <?php esc_html_e( 'Please note that the value of this tag is considered a hint and not a command. Even though search engine crawlers consider this information when making decisions, they may crawl pages marked \'hourly\' less frequently than that, and they may crawl pages marked \'yearly\' more frequently than that. It is also likely that crawlers will periodically crawl pages marked \'never\' so that they can handle unexpected changes to those pages.', 'sitemap' ); ?>
1510
+ </p>
1511
+ <ul>
1512
+ <li>
1513
+ <label for='sm_cf_home'>
1514
+ <select id='sm_cf_home' name='sm_cf_home'><?php $this->html_get_freq_names( $this->sg->get_option( 'cf_home' ) ); ?></select>
1515
+ <?php esc_html_e( 'Homepage', 'sitemap' ); ?>
1516
+ </label>
1517
+ </li>
1518
+ <li>
1519
+ <label for='sm_cf_posts'>
1520
+ <select id='sm_cf_posts' name='sm_cf_posts'><?php $this->html_get_freq_names( $this->sg->get_option( 'cf_posts' ) ); ?></select>
1521
+ <?php esc_html_e( 'Posts', 'sitemap' ); ?>
1522
+ </label>
1523
+ </li>
1524
+ <li>
1525
+ <label for='sm_cf_pages'>
1526
+ <select id='sm_cf_pages' name='sm_cf_pages'><?php $this->html_get_freq_names( $this->sg->get_option( 'cf_pages' ) ); ?></select>
1527
+ <?php esc_html_e( 'Static pages', 'sitemap' ); ?>
1528
+ </label>
1529
+ </li>
1530
+ <li>
1531
+ <label for='sm_cf_cats'>
1532
+ <select id='sm_cf_cats' name='sm_cf_cats'><?php $this->html_get_freq_names( $this->sg->get_option( 'cf_cats' ) ); ?></select>
1533
+ <?php esc_html_e( 'Categories', 'sitemap' ); ?>
1534
+ </label>
1535
+ </li>
1536
+ <li>
1537
+ <label for='sm_cf_product_cat'>
1538
+ <select id='sm_cf_product_cat' name='sm_cf_product_cat'><?php $this->html_get_freq_names( $this->sg->get_option( 'cf_product_cat' ) ); ?></select>
1539
+ <?php esc_html_e( 'Product Categories', 'sitemap' ); ?>
1540
+ </label>
1541
+ </li>
1542
+ <li>
1543
+ <label for='sm_cf_arch_curr'>
1544
+ <select id='sm_cf_arch_curr' name='sm_cf_arch_curr'><?php $this->html_get_freq_names( $this->sg->get_option( 'cf_arch_curr' ) ); ?></select>
1545
+ <?php esc_html_e( 'The current archive of this month (Should be the same like your homepage)', 'sitemap' ); ?>
1546
+ </label>
1547
+ </li>
1548
+ <li>
1549
+ <label for='sm_cf_arch_old'>
1550
+ <select id='sm_cf_arch_old' name='sm_cf_arch_old'><?php $this->html_get_freq_names( $this->sg->get_option( 'cf_arch_old' ) ); ?></select>
1551
+ <?php esc_html_e( 'Older archives (Changes only if you edit an old post)', 'sitemap' ); ?>
1552
+ </label>
1553
+ </li>
1554
+ <?php if ( $this->sg->is_taxonomy_supported() ) : ?>
1555
+ <li>
1556
+ <label for='sm_cf_tags'>
1557
+ <select id='sm_cf_tags' name='sm_cf_tags'><?php $this->html_get_freq_names( $this->sg->get_option( 'cf_tags' ) ); ?></select>
1558
+ <?php esc_html_e( 'Tag pages', 'sitemap' ); ?>
1559
+ </label>
1560
+ </li>
1561
+ <?php endif; ?>
1562
+ <li>
1563
+ <label for='sm_cf_auth'>
1564
+ <select id='sm_cf_auth' name='sm_cf_auth'><?php $this->html_get_freq_names( $this->sg->get_option( 'cf_auth' ) ); ?></select>
1565
+ <?php esc_html_e( 'Author pages', 'sitemap' ); ?>
1566
+ </label>
1567
+ </li>
1568
+ </ul>
1569
+
1570
+ <?php $this->html_print_box_footer(); ?>
1571
+
1572
+ <!-- Priorities -->
1573
+ <?php $this->html_print_box_header( 'sm_priorities', __( 'Priorities', 'sitemap' ) ); ?>
1574
+ <ul>
1575
+ <li>
1576
+ <label for='sm_pr_home'>
1577
+ <select id='sm_pr_home' name='sm_pr_home'><?php $this->html_get_priority_values( $this->sg->get_option( 'pr_home' ) ); ?></select>
1578
+ <?php esc_html_e( 'Homepage', 'sitemap' ); ?>
1579
+ </label>
1580
+ </li>
1581
+ <li>
1582
+
1583
+ <label for='sm_pr_posts'>
1584
+ <select id='sm_pr_posts' name='sm_pr_posts'><?php $this->html_get_priority_values( $this->sg->get_option( 'pr_posts' ) ); ?></select>
1585
+ <?php esc_html_e( 'Posts (If auto calculation is disabled)', 'sitemap' ); ?>
1586
+ </label>
1587
+ </li>
1588
+ <li>
1589
+
1590
+ <label for='sm_pr_posts_min'>
1591
+ <select id='sm_pr_posts_min' name='sm_pr_posts_min'><?php $this->html_get_priority_values( $this->sg->get_option( 'pr_posts_min' ) ); ?></select>
1592
+ <?php esc_html_e( 'Minimum post priority (Even if auto calculation is enabled)', 'sitemap' ); ?>
1593
+ </label>
1594
+ </li>
1595
+ <li>
1596
+
1597
+ <label for='sm_pr_pages'>
1598
+ <select id='sm_pr_pages' name='sm_pr_pages'><?php $this->html_get_priority_values( $this->sg->get_option( 'pr_pages' ) ); ?></select>
1599
+ <?php esc_html_e( 'Static pages', 'sitemap' ); ?>
1600
+ </label>
1601
+ </li>
1602
+ <li>
1603
+ <label for='sm_pr_cats'>
1604
+ <select id='sm_pr_cats' name='sm_pr_cats'><?php $this->html_get_priority_values( $this->sg->get_option( 'pr_cats' ) ); ?></select>
1605
+ <?php esc_html_e( 'Categories', 'sitemap' ); ?>
1606
+ </label>
1607
+ </li>
1608
+ <li>
1609
+ <label for='sm_pr_product_cat'>
1610
+ <select id='sm_pr_product_cat' name='sm_pr_product_cat'><?php $this->html_get_priority_values( $this->sg->get_option( 'pr_product_cat' ) ); ?></select>
1611
+ <?php esc_html_e( 'Product Categories', 'sitemap' ); ?>
1612
+ </label>
1613
+ </li>
1614
+ <li>
1615
+ <label for='sm_pr_arch'>
1616
+ <select id='sm_pr_arch' name='sm_pr_arch'><?php $this->html_get_priority_values( $this->sg->get_option( 'pr_arch' ) ); ?></select>
1617
+ <?php esc_html_e( 'Archives', 'sitemap' ); ?>
1618
+ </label>
1619
+ </li>
1620
+ <?php if ( $this->sg->is_taxonomy_supported() ) : ?>
1621
+ <li>
1622
+ <label for='sm_pr_tags'>
1623
+ <select id='sm_pr_tags' name='sm_pr_tags'><?php $this->html_get_priority_values( $this->sg->get_option( 'pr_tags' ) ); ?></select>
1624
+ <?php esc_html_e( 'Tag pages', 'sitemap' ); ?>
1625
+ </label>
1626
+ </li>
1627
+ <?php endif; ?>
1628
+ <li>
1629
+
1630
+ <label for='sm_pr_auth'>
1631
+ <select id='sm_pr_auth' name='sm_pr_auth'><?php $this->html_get_priority_values( $this->sg->get_option( 'pr_auth' ) ); ?></select>
1632
+ <?php esc_html_e( 'Author pages', 'sitemap' ); ?>
1633
+ </label>
1634
+ </li>
1635
+ </ul>
1636
+
1637
+ <?php $this->html_print_box_footer(); ?>
1638
+
1639
+ </div>
1640
+ <div>
1641
+ <p class='submit'>
1642
+ <?php wp_nonce_field( 'sitemap' ); ?>
1643
+ <input type='submit' class='button-primary' name='sm_update' value='<?php esc_html_e( 'Update options', 'sitemap' ); ?>' />
1644
+ <input type='submit' onclick='return confirm('Do you really want to reset your configuration?');' class='sm_warning' name='sm_reset_config' value='<?php esc_html_e( 'Reset options', 'sitemap' ); ?>' />
1645
+ </p>
1646
+ </div>
1647
+
1648
+
1649
+ </div>
1650
+ </div>
1651
+ </div>
1652
+ <!-- <script type='text/javascript'>
1653
+ console.log('type of funiton', typeof sm_loadPages)
1654
+ if (typeof(sm_loadPages) == 'function') addLoadEvent(sm_loadPages);
1655
+ </script> -->
1656
+ </form>
1657
+ <form action='https://www.paypal.com/cgi-bin/webscr' method='post' id='sm_donate_form'>
1658
+ <?php
1659
+ $lc = array(
1660
+ 'en' => array(
1661
+ 'cc' => 'USD',
1662
+ 'lc' => 'US',
1663
+ ),
1664
+ 'en-GB' => array(
1665
+ 'cc' => 'GBP',
1666
+ 'lc' => 'GB',
1667
+ ),
1668
+ 'de' => array(
1669
+ 'cc' => 'EUR',
1670
+ 'lc' => 'DE',
1671
+ ),
1672
+ );
1673
+ $my_lc = $lc['en'];
1674
+ $wpl = get_bloginfo( 'language' );
1675
+ if ( ! empty( $wpl ) ) {
1676
+ if ( array_key_exists( $wpl, $lc ) ) {
1677
+ $my_lc = $lc[ $wpl ];
1678
+ } else {
1679
+ $wpl = substr( $wpl, 0, 2 );
1680
+ if ( array_key_exists( $wpl, $lc ) ) {
1681
+ $my_lc = $lc[ $wpl ];
1682
+ }
1683
+ }
1684
+ }
1685
+ ?>
1686
+ <input type='hidden' name='cmd' value='_donations' />
1687
+ <input type='hidden' name='business' value='<?php echo 'xmlsitemapgen' /* N O S P A M */ . '@gmail.com'; ?>' />
1688
+ <input type='hidden' name='item_name' value='Sitemap Generator for WordPress. Please tell me if if you don't want to be listed on the donator list.' />
1689
+ <input type='hidden' name='no_shipping' value='1' />
1690
+ <input type='hidden' name='return' value='<?php echo esc_attr( $this->sg->get_back_link( '&sm_donated=true' ) ); ?>' />
1691
+ <input type='hidden' name='currency_code' value='<?php echo esc_attr( $my_lc['cc'] ); ?>' />
1692
+ <input type='hidden' name='bn' value='PP-BuyNowBF' />
1693
+ <input type='hidden' name='lc' value='<?php echo esc_attr( $my_lc['lc'] ); ?>' />
1694
+ <input type='hidden' name='rm' value='2' />
1695
+ <input type='hidden' name='on0' value='Your Website' />
1696
+ <input type='hidden' name='os0' value='<?php echo esc_attr( get_bloginfo( 'url' ) ); ?>' />
1697
+ </form>
1698
+ </div>
1699
+ <?php
1700
+ }
1701
+ }
documentation.txt CHANGED
@@ -1,412 +1,414 @@
1
- Google XML Sitemaps Generator for WordPress
2
- ==============================================================================
3
-
4
- This generator will create a sitemaps.org compliant sitemap of your WordPress site.
5
- Currently homepage, posts, static pages, categories, archives and author pages are supported.
6
-
7
- The priority of a post depends on its comments. You can choose the way the priority
8
- is calculated in the options screen.
9
-
10
- Feel free to visit my website under www.arnebrachhold.de or contact me at
11
- himself [at] arnebrachhold [dot] de
12
-
13
- Have fun!
14
- Arne
15
-
16
- Installation:
17
- ==============================================================================
18
- 1. Upload the full directory into your wp-content/plugins directory
19
- 2. Activate the plugin at the plugin administration page
20
- 3. Open the plugin configuration page, which is located under Settings -> XML-Sitemap and customize settings like priorities and change frequencies.
21
- 4. The plugin will automatically update your sitemap of you publish a post, so theres nothing more to do :)
22
-
23
-
24
- Additional contributors:
25
- ==============================================================================
26
- Inspiration Michael Nguyen http://www.socialpatterns.com/
27
- SQL Improvements Rodney Shupe http://www.shupe.ca/
28
- Japanse Lang. File Hirosama http://hiromasa.zone.ne.jp/
29
- Spanish lang. File Omi http://equipajedemano.info/
30
- Italian lang. File Stefano Aglietti http://wordpress-it.it/
31
- Trad.Chinese File Kirin Lin http://kirin-lin.idv.tw/
32
- Simpl.Chinese File june6 http://www.june6.cn/
33
- Swedish Lang. File Tobias Bergius http://tobiasbergius.se/
34
- Czech Lang. File Peter Kahoun http://kahi.cz
35
- Finnish Lang. File Olli Jarva http://kuvat.blog.olli.jarva.fi/
36
- Belorussian Lang. File Marcis Gasuns
37
- Bulgarian Lang. File Alexander Dichev http://dichev.com
38
-
39
- Thanks to all contributors and bug reporters! There were much more people involved
40
- in testing this plugin and reporting bugs, either by email or in the WordPress forums.
41
-
42
- Unfortunately I can't maintain a whole list here, but thanks again to everybody not listed here!
43
-
44
-
45
- Release History:
46
- ==============================================================================
47
- 2005-06-05 1.0 First release
48
- 2005-06-05 1.1 Added archive support
49
- 2005-06-05 1.2 Added category support
50
- 2005-06-05 2.0a Beta: Real Plugin! Static file generation, Admin UI
51
- 2005-06-05 2.0 Various fixes, more help, more comments, configurable filename
52
- 2005-06-07 2.01 Fixed 2 Bugs: 147 is now _e(strval($i)); instead of _e($i); 344 uses a full < ?php instead of < ?
53
- Thanks to Christian Aust for reporting this :)
54
- 2005-06-07 2.1 Correct usage of last modification date for cats and archives (thx to Rodney Shupe (http://www.shupe.ca/))
55
- Added support for .gz generation
56
- Fixed bug which ignored different post/page priorities
57
- Should support now different wordpress/admin directories
58
- 2005-06-07 2.11 Fixed bug with hardcoded table table names instead of the $wpd vars
59
- 2005-06-07 2.12 Changed SQL Statement of the categories to get it work on MySQL 3
60
- 2005-06-08 2.2 Added language file support:
61
- - Japanese Language Files and code modifications by hiromasa (http://hiromasa.zone.ne.jp/)
62
- - German Language File by Arne Brachhold (http://www.arnebrachhold.de)
63
- 2005-06-14 2.5 Added support for external pages
64
- Added support for Google Ping
65
- Added the minimum Post Priority option
66
- Added Spanish Language File by César Gómez Martín (http://www.cesargomez.org/)
67
- Added Italian Language File by Stefano Aglietti (http://wordpress-it.it/)
68
- Added Traditional Chine Language File by Kirin Lin (http://kirin-lin.idv.tw/)
69
- 2005-07-03 2.6 Added support to store the files at a custom location
70
- Changed the home URL to have a slash at the end
71
- Required admin-functions.php so the script will work with external calls, wp-mail for example
72
- Added support for other plugins to add content to the sitemap via add_filter()
73
- 2005-07-20 2.7 Fixed wrong date format in additional pages
74
- Added Simplified Chinese Language Files by june6 (http://www.june6.cn/)
75
- Added Swedish Language File by Tobias Bergius (http://tobiasbergius.se/)
76
- 2006-01-07 3.0b Added different priority calculation modes and introduced an API to create custom ones
77
- Added support to use the Popularity Contest plugin by Alex King to calculate post priority
78
- Added Button to restore default configuration
79
- Added several links to homepage and support
80
- Added option to exclude password protected posts
81
- Added function to start sitemap creation via GET and a secret key
82
- Posts and pages marked for publish with a date in the future won't be included
83
- Improved compatiblity with other plugins
84
- Improved speed and optimized settings handling
85
- Improved user-interface
86
- Recoded plugin architecture which is now fully OOP
87
- 2006-01-07 3.0b1 Changed the way for hook support to be PHP5 and PHP4 compatible
88
- Readded support for tools like w.Bloggar
89
- Fixed "doubled-content" bug with WP2
90
- Added xmlns to enable validation
91
- 2006-03-01 3.0b3 More performance
92
- More caching
93
- Better support for Popularity Contest and WP 2.x
94
- 2006-11-16 3.0b4 Fixed bug with option SELECTS
95
- Decreased memory usage which should solve timeout and memory problems
96
- Updated namespace to support YAHOO and MSN
97
- 2007-01-19 3.0b5 Javascripted page editor
98
- WP 2 Design
99
- YAHOO notification
100
- New status report, removed ugly logfiles
101
- Better Popularity Contest Support
102
- Fixed double backslashes on windows systems
103
- Added option to specify time limit and memory limit
104
- Added option to define a XSLT stylesheet and added a default one
105
- Fixed bug with sub-pages. Thanks to:
106
- - Mike Baptiste (http://baptiste.us),
107
- - Peter Claus Lamprecht (http://fastagent.de)
108
- - Glenn Nicholas (http://publicityship.com.au)
109
- Improved file handling, thanks to VJTD3 (http://www.VJTD3.com)
110
- WP 2.1 improvements
111
- 2007-01-23 3.0b6 Use memory_get_peak_usage instead of memory_get_usage if available
112
- Removed the usage of REQUEST_URI since it not correct in all environments
113
- Fixed that sitemap.xml.gz was not compressed
114
- Added compat function "stripos" for PHP4 (Thanks to Joseph Abboud!)
115
- Streamlined some code
116
- 2007-05-17 3.0b7 Added option to include the author pages like /author/john
117
- Small enhancements, removed stripos dependency and the added compat function
118
- Added check to not build the sitemap if importing posts
119
- Fixed missing domain parameter for translator name
120
- Fixed WP 2.1 / Pre 2.1 post / pages database changes
121
- Fixed wrong XSLT location (Thanks froosh)
122
- Added Ask.com notification
123
- Removed unused javascript
124
- 2007-07-22 3.0b8 Changed category SQL to prevent unused cats from beeing included
125
- Plugin will be loaded on "init" instead of direclty after the file has been loaded.
126
- Added support for robots.txt modification
127
- Switched YAHOO ping API from YAHOO Web Services to the "normal" ping service which doesn't require an app id
128
- Search engines will only be pinged if the sitemap file has changed
129
- 2007-09-02 3.0b9 Added tag support for WordPress 2.3
130
- Now using post_date_gmt instead of post_date everywhere
131
- Fixed archive bug with static pages (Thanks to Peter Claus Lamprecht)
132
- Fixed some missing translation domains, thanks to Kirin Lin!
133
- Added Czech translation files for 2.7.1, thanks to Peter Kahoun (http://kahi.cz)
134
- 2007-09-04 3.0b10 Added category support for WordPress 2.3
135
- Fixed bug with empty URLs in sitemap
136
- Repaired GET building
137
- Added more info on debug mode
138
- 2007-09-23 3.0b11 Changed mysql queries to unbuffered queries
139
- Uses MUCH less memory
140
- Fixed really stupid bug with search engine pings
141
- Option to set how many posts will be included
142
- 2007-09-24 3.0 Yeah, 3.0 Final after one and a half year ;)
143
- Removed useless functions
144
- 2007-11-03 3.0.1 Using the Snoopy HTTP client for ping requests instead of wp_remote_fopen
145
- Fixed undefined translation strings
146
- Added "safemode" for SQL which doesn't use unbuffered results (old style)
147
- Added option to run the building process in background using wp-cron
148
- Removed unnecessary function_exists, Thanks to user00265
149
- Added links to test the ping if it failed.
150
- 2007-11-25 3.0.2 Fixed bug which caused that some settings were not saved correctly
151
- Added option to exclude pages or post by ID
152
- Restored YAHOO ping service with API key since the other one is to unreliable. (see 3.0b8)
153
- 2007-11-28 3.0.2.1 Fixed wrong XML Schema Location (Thanks to Emanuele Tessore)
154
- Added Russian Language files by Sergey http://ryvkin.ru
155
- 2007-12-30 3.0.3 Added Live Search Ping
156
- Removed some hooks which rebuilt the sitemap with every comment
157
- 2008-03-30 3.0.3.1 Added compatibility CSS for WP 2.5
158
- 2008-04-28 3.0.3.2 Improved WP 2.5 handling
159
- 2008-04-29 3.0.3.3 Fixed author pages
160
- Enhanced background building and increased delay to 15 seconds
161
- Background building is enabled by default
162
- 2008-04-28 3.1b1 Reorganized files in builder, loader and UI
163
- Added 2 step loader so only code that's needed will be loaded
164
- Improved WP 2.5 handling
165
- Secured all admin actions with nonces
166
- 2008-05-18 3.1b2 Fixed critical bug with the build in background option
167
- Added notification if a build is scheduled
168
- 2008-05-19 3.1b3 Cleaned up plugin directory and moved asset files to subfolders
169
- Fixed background building bug in WP 2.1
170
- Removed auto-update plugin link for WP < 2.5
171
- 2008-05-22 3.1 Marked as 3.1 stable, updated documentation
172
- 2008-05-27 3.1.0.1 Extracted UI JS to external file
173
- Enabled the option to include following pages of multi-page posts
174
- Script tries to raise memory and time limit if active
175
- 2008-12-21 3.1.1 Fixed redirect issue if wp-admin is rewritten via mod_rewrite, thanks to macjoost
176
- Fixed wrong path to assets, thanks PozHonks
177
- Fixed wrong plugin URL if wp-content was renamed / redirected, thanks to wnorris
178
- Updated WP User Interface for 2.7
179
- Various other small things
180
- 2008-12-26 3.1.2 Changed the way the stylesheet is saved (default / custom stylesheet)
181
- Sitemap is now build when page is published
182
- Removed support for static robots.txt files, this is now handled via WordPress
183
- Added compat. exceptions for WP 2.0 and WP 2.1
184
- 2009-06-07 3.1.3 Changed MSN Live Search to Bing
185
- Exclude categories also now exludes the category itself and not only the posts
186
- Pings now use the new WordPress HTTP API instead of Snoopy
187
- Fixed bug that in localized WP installations priorities could not be saved.
188
- The sitemap cron job is now cleared after a manual rebuild or after changing the config
189
- Adjusted style of admin area for WP 2.8 and refreshed icons
190
- Disabled the "Exclude categories" feature for WP 2.5.1, since it doesn't have the required functions yet
191
- 2009-06-22 3.1.4 Fixed bug which broke all pings in WP < 2.7
192
- Added more output in debug mode if pings fail
193
- Moved global post definitions for other plugins
194
- Added small icon for ozh admin menu
195
- Added more help links in UI
196
- 2009-08-24 3.1.5 Added option to completely disable the last modification time
197
- Fixed bug regarding the use of the HTTPS url for the XSL stylesheet if the sitemap was build via the admin panel
198
- Improved handling of homepage if a single page was set for it
199
- Fixed mktime warning which appeared sometimes
200
- Fixed bug which caused inf. reloads after rebuilding the sitemap via the admin panel
201
- Improved handling of missing sitemaps files if WP was moved to another location
202
- 2009-08-31 3.1.6 Fixed PHP error "Only variables can be passed by reference"
203
- Fixed wrong URLS of multi-page posts (Thanks artstorm!)
204
- 2009-10-21 3.1.7 Added support for custom taxonomies (Thanks to Lee!)
205
- 2009-11-07 3.1.8 Improved custom taxonomy handling and fixed wrong last modification date
206
- Changed readme and backlinks
207
- Fixed fatal error in WP < 2.3
208
- Fixed Update Notice in WP 2.8+
209
- Added warning if blog privacy is activated
210
- Fixed custom URLs priorities were shown as 0 instead of 1
211
- 2009-11-13 3.1.9 Fixed MySQL Error if author pages were included
212
- 2009-11-23 3.2 Added function to show the actual results of a ping instead of only linking to the url
213
- Added new hook (sm_rebuild) for third party plugins to start building the sitemap
214
- Fixed bug which showed the wrong URL for the latest Google ping result
215
- Added some missing phpdoc documentation
216
- Removed hardcoded php name for sitemap file for admin urls
217
- Uses KSES for showing ping test results
218
- Ping test fixed for WP < 2.3
219
- 2009-12-16 3.2.1 Notes and update messages could interfere with the redirect after manual build
220
- Help Links in the WP context help were not shown anymore since last update
221
- IE 7 sometimes displayed a cached admin page
222
- Removed invalid link to config page from the plugin description (This resulted in a "Not enough permission error")
223
- Improved performance of getting the current plugin version with caching
224
- Updated Spanish language files
225
- 2009-12-19 3.2.2 Fixed PHP4 problems
226
- 2010-04-02 3.2.3 Fixed that all pages were not included in the sitemap if the "Uncategorized" category was excluded
227
- 2010-05-29 3.2.4 Fixed more deprecated function calls
228
- Added (GMT) to sitemap xslt template to avoid confusion with time zone
229
- Added warning and don't activate plugin if multisite mode is enabled (this mode is NOT tested yet)
230
- Changed get_bloginfo('siteurl') to get_bloginfo('url') to avoid deprecation warning
231
- Changed has_cap(10) to has_cap('level_10') to avoid deprecation warning
232
- Fixed wrong SQL statement for author pages (Ticket #1108), thanks to twoenough
233
- 2010-07-11 3.2.5 Backported Bing ping success fix from beta
234
- Added friendly hint to try out the new beta
235
- 2010-09-19 3.2.6 Removed YAHOO ping since YAHOO uses bing now
236
- Removed deprecated function call
237
- 2012-04-24 3.2.7 Fixed custom post types, thanks to clearsite of the wordpress.org forum!
238
- Fixed broken admin layout on WP 3.4
239
- 2012-08-08 3.2.8 Fixed wrong custom taxonomy URLs, thanks to ramon fincken of the wordpress.org forum!
240
- Removed ASK ping since they shut down their service.
241
- Exclude post_format taxonomy from custom taxonomy list
242
- 2013-01-11 3.2.9 Fixed security issue with change frequencies and filename of sitemap file. Exploit was only possible for admin accounts.
243
- 2013-09-28 3.3 Fixed problem with file permission checking
244
- Filter out hashs (#) in URLs
245
- 2013-11-24 3.4 Fixed deprecation warnings in PHP 5.4, thanks to Dion Hulse!
246
- 2014-03-29 4.0 No static files anymore, sitemap is created on the fly
247
- Sitemap is split-up into sub-sitemaps by month, allowing up to 50.000 posts per month
248
- Support for custom post types and custom taxonomis!
249
- 100% Multisite compatible, including by-blog and network activation.
250
- Added support for mu-plugins forced-activation (see sitemap-wpmu.php for details)
251
- Reduced server resource usage due to less content per request.
252
- New API allows other plugins to add their own, separate sitemaps.
253
- Raised min requirements to PHP 5.1 and WordPress 3.3
254
- Note: This version will try to rename your old sitemap files to *-old.xml. If that doesn’t work, please delete them manually since no static files are needed anymore!
255
- Using only wpdb instead of unbuffered queries anymore
256
- Ping to search engines are done on WP ping
257
- Using PHP5 syntax instead of old PHP4 OOP style
258
- Added pre-loader which checks the requirements
259
- Avoid the main query of WordPress (based on plugin by Michael Adams)
260
- Avoid additional queries in post sitemaps
261
- Added custom post types
262
- Fixed include of static front page in pages index
263
- Do not list "#" permalinks from placeholder plugins
264
- Removed YAHOO pings since YAHOO doesn't have its own ping service anymore.
265
- Sitemap doesn't state it is a feed anymore
266
- Removed Ask.com ping since they shut down their service (who uses Ask anyway?)
267
- 2014-03-31 4.0.1 Fixed bug with custom post types including a "-"
268
- Changed rewrite-setup to happen on init and flushing on wp_loaded to better work with other plugins
269
- 2014-04-01 4.0.2 Fixed warning if an gzip handler is already active
270
- 2014-04-13 4.0.3 Fixed compression if an gzlib handler was already active
271
- Help regarding permalinks for Nginx users
272
- Fix with gzip compression in case there was other output before already
273
- Return 404 for HTML sitemaps if the option has been disabled
274
- 2014-04-19 4.0.4 Removed deprecated get_page call
275
- Changed last modification time of sub-sitemaps to the last modification date of the posts instead of the publish date
276
- Removed information window if the statistic option has not been activated
277
- Added link regarding new sitemap format
278
- Updated Portuguese translation, thanks to Pedro Martinho
279
- Updated German translation
280
- 2014-05-18 4.0.5 Fixed issue with empty post sitemaps (related to GMT/local time offset)
281
- Fixed some timing issues in archives
282
- Improved check for possible problems before gzipping
283
- Fixed empty Archives and Authors in case there were no posts
284
- Changed content type to text/xml to improve compatibility with caching plugins
285
- Changed query parameters to is_feed=true to improve compatibility with caching plugins
286
- Switched from using WP_Query to load posts to a custom SQL statement to avoid problems with other plugin filters
287
- Fixed bug which caused the Priority Provider to disappear in recent PHP versions
288
- Cleaned up code and renamed variables to be more readable
289
- Added caching of some SQL statements
290
- Added support feed for more help topics
291
- Added support for changing the base of the sitemap url to another URL (for WP installations in sub-folders)
292
- Changed text in XSL template to be more clear about sitemap-index and sub-sitemaps
293
- Added link to new help page
294
- Plugin will also ping with the corresponding sub-sitemap in case a post was modified
295
- Added function to manually start ping for main-sitemap or all sub-sitemaps
296
- Better checking for empty externals
297
- Updated Japanese Translation, thanks to Daisuke Takahashi
298
- 2014-06-03 4.0.6 Added option to disable automatic gzipping
299
- Fixed bug with duplicated external sitemap entries
300
- Updated language file template
301
- Don't gzip if behind Varnish
302
- Improved compatibility with caches
303
- Ping on post edit
304
- 2014-06-23 4.0.7 Better compatibility with managed GoDaddy hosting (clear alloptions cache when generating the sitemap)
305
- Improved checking if the sitemap should be gzipped or not (depending on ob levels)
306
- Removed WordPress version from the sitemap
307
- Corrected link to WordPress privacy settings
308
- Changed hook which is being used for sitemap pings
309
- 2014-09-02 4.0.7.1Added icon for the new WP Add-Plugin page
310
- Changed "Tested up to" to 4.0
311
- 2014-11-15 4.0.8 Fixed bug with excluded categories, thanks to Claus Schöffel!
312
- 2017-03-22 4.0.9 Fixed security issue with donation submission.
313
- 2018-12-18 4.1.0 Fixed security issues related to forms and external URLs
314
-
315
-
316
-
317
-
318
-
319
- Todo:
320
- ==============================================================================
321
- - Your wishes :)
322
-
323
-
324
- License:
325
- ==============================================================================
326
- Copyright 2005 - 2018 ARNE BRACHHOLD (email : himself - arnebrachhold - de)
327
-
328
- This program is free software; you can redistribute it and/or modify
329
- it under the terms of the GNU General Public License as published by
330
- the Free Software Foundation; either version 2 of the License, or
331
- (at your option) any later version.
332
-
333
- This program is distributed in the hope that it will be useful,
334
- but WITHOUT ANY WARRANTY; without even the implied warranty of
335
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
336
- GNU General Public License for more details.
337
-
338
- You should have received a copy of the GNU General Public License
339
- along with this program; if not, write to the Free Software
340
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
341
-
342
- Please see license.txt for the full license.
343
-
344
-
345
- Developer Documentation
346
- ==============================================================================
347
-
348
- Adding other pages to the sitemap via other plugins
349
-
350
- This plugin uses the action system of WordPress to allow other plugins
351
- to add urls to the sitemap. Simply add your function with add_action to
352
- the list and the plugin will execute yours every time the sitemap is build.
353
- Use the static method "GetInstance" to get the generator and AddUrl method
354
- to add your content.
355
-
356
- Sample:
357
-
358
- function your_pages() {
359
- $generatorObject = &GoogleSitemapGenerator::GetInstance();
360
- if($generatorObject!=null) $generatorObject->AddUrl("http://blog.uri/tags/hello/",time(),"daily",0.5);
361
- }
362
- add_action("sm_buildmap", "your_pages");
363
-
364
- Parameters:
365
- - The URL to the page
366
- - The last modified data, as a UNIX timestamp (optional)
367
- - The Change Frequency (daily, hourly, weekly and so on) (optional)
368
- - The priority 0.0 to 1.0 (optional)
369
-
370
-
371
- Rebuilding the sitemap on request
372
-
373
- If you want to rebuild the sitemap because dynamic content from your plugin has changed,
374
- please use the "sm_rebuild" hook which is available since 3.1.9.
375
- All other methods, like calling the Build method directly are highly unrecommended and might
376
- not work anymore with the next version of the plugin. Using this hook, the sitemap plugin will
377
- take care of everything like loading the required classes and so on.
378
-
379
- Sample:
380
-
381
- do_action("sm_rebuild");
382
-
383
- The sitemap might not be rebuild immediately, since newer versions use a background WP-Cron
384
- job by default to prevent that the user has to wait and avoid multiple rebuilds within a very short time.
385
- In case the sitemap plugin is not installed, nothing will happen and no errors will be thrown.
386
-
387
- ===============================================
388
-
389
- Adding additional PriorityProviders
390
-
391
- This plugin uses several classes to calculate the post priority.
392
- You can register your own provider and choose it at the options screen.
393
-
394
- Your class has to extend the GoogleSitemapGeneratorPrioProviderBase class
395
- which has a default constructor and a method called GetPostPriority
396
- which you can override.
397
-
398
- Look at the GoogleSitemapGeneratorPrioByPopularityContestProvider class
399
- for an example.
400
-
401
- To register your provider to the sitemap generator, use the following filter:
402
-
403
- add_filter("sm_add_prio_provider","AddMyProvider");
404
-
405
- Your function could look like this:
406
-
407
- function AddMyProvider($providers) {
408
- array_push($providers,"MyProviderClass");
409
- return $providers;
410
- }
411
-
 
 
412
  Note that you have to return the modified list!
1
+ Google XML Sitemaps Generator for WordPress
2
+ ==============================================================================
3
+
4
+ This generator will create a sitemaps.org compliant sitemap of your WordPress site.
5
+ Currently homepage, posts, static pages, categories, archives and author pages are supported.
6
+
7
+ The priority of a post depends on its comments. You can choose the way the priority
8
+ is calculated in the options screen.
9
+
10
+ Feel free to visit my website under www.arnebrachhold.de or contact me at
11
+ himself [at] arnebrachhold [dot] de
12
+
13
+ Have fun!
14
+ Arne
15
+
16
+ Installation:
17
+ ==============================================================================
18
+ 1. Upload the full directory into your wp-content/plugins directory
19
+ 2. Activate the plugin at the plugin administration page
20
+ 3. Open the plugin configuration page, which is located under Settings -> XML-Sitemap and customize settings like priorities and change frequencies.
21
+ 4. The plugin will automatically update your sitemap of you publish a post, so theres nothing more to do :)
22
+
23
+
24
+ Additional contributors:
25
+ ==============================================================================
26
+ Inspiration Michael Nguyen http://www.socialpatterns.com/
27
+ SQL Improvements Rodney Shupe http://www.shupe.ca/
28
+ Japanse Lang. File Hirosama http://hiromasa.zone.ne.jp/
29
+ Spanish lang. File Omi http://equipajedemano.info/
30
+ Italian lang. File Stefano Aglietti http://wordpress-it.it/
31
+ Trad.Chinese File Kirin Lin http://kirin-lin.idv.tw/
32
+ Simpl.Chinese File june6 http://www.june6.cn/
33
+ Swedish Lang. File Tobias Bergius http://tobiasbergius.se/
34
+ Czech Lang. File Peter Kahoun http://kahi.cz
35
+ Finnish Lang. File Olli Jarva http://kuvat.blog.olli.jarva.fi/
36
+ Belorussian Lang. File Marcis Gasuns
37
+ Bulgarian Lang. File Alexander Dichev http://dichev.com
38
+
39
+ Thanks to all contributors and bug reporters! There were much more people involved
40
+ in testing this plugin and reporting bugs, either by email or in the WordPress forums.
41
+
42
+ Unfortunately I can't maintain a whole list here, but thanks again to everybody not listed here!
43
+
44
+
45
+ Release History:
46
+ ==============================================================================
47
+ 2005-06-05 1.0 First release
48
+ 2005-06-05 1.1 Added archive support
49
+ 2005-06-05 1.2 Added category support
50
+ 2005-06-05 2.0a Beta: Real Plugin! Static file generation, Admin UI
51
+ 2005-06-05 2.0 Various fixes, more help, more comments, configurable filename
52
+ 2005-06-07 2.01 Fixed 2 Bugs: 147 is now _e(strval($i)); instead of _e($i); 344 uses a full < ?php instead of < ?
53
+ Thanks to Christian Aust for reporting this :)
54
+ 2005-06-07 2.1 Correct usage of last modification date for cats and archives (thx to Rodney Shupe (http://www.shupe.ca/))
55
+ Added support for .gz generation
56
+ Fixed bug which ignored different post/page priorities
57
+ Should support now different wordpress/admin directories
58
+ 2005-06-07 2.11 Fixed bug with hardcoded table table names instead of the $wpd vars
59
+ 2005-06-07 2.12 Changed SQL Statement of the categories to get it work on MySQL 3
60
+ 2005-06-08 2.2 Added language file support:
61
+ - Japanese Language Files and code modifications by hiromasa (http://hiromasa.zone.ne.jp/)
62
+ - German Language File by Arne Brachhold (http://www.arnebrachhold.de)
63
+ 2005-06-14 2.5 Added support for external pages
64
+ Added support for Google Ping
65
+ Added the minimum Post Priority option
66
+ Added Spanish Language File by César Gómez Martín (http://www.cesargomez.org/)
67
+ Added Italian Language File by Stefano Aglietti (http://wordpress-it.it/)
68
+ Added Traditional Chine Language File by Kirin Lin (http://kirin-lin.idv.tw/)
69
+ 2005-07-03 2.6 Added support to store the files at a custom location
70
+ Changed the home URL to have a slash at the end
71
+ Required admin-functions.php so the script will work with external calls, wp-mail for example
72
+ Added support for other plugins to add content to the sitemap via add_filter()
73
+ 2005-07-20 2.7 Fixed wrong date format in additional pages
74
+ Added Simplified Chinese Language Files by june6 (http://www.june6.cn/)
75
+ Added Swedish Language File by Tobias Bergius (http://tobiasbergius.se/)
76
+ 2006-01-07 3.0b Added different priority calculation modes and introduced an API to create custom ones
77
+ Added support to use the Popularity Contest plugin by Alex King to calculate post priority
78
+ Added Button to restore default configuration
79
+ Added several links to homepage and support
80
+ Added option to exclude password protected posts
81
+ Added function to start sitemap creation via GET and a secret key
82
+ Posts and pages marked for publish with a date in the future won't be included
83
+ Improved compatiblity with other plugins
84
+ Improved speed and optimized settings handling
85
+ Improved user-interface
86
+ Recoded plugin architecture which is now fully OOP
87
+ 2006-01-07 3.0b1 Changed the way for hook support to be PHP5 and PHP4 compatible
88
+ Readded support for tools like w.Bloggar
89
+ Fixed "doubled-content" bug with WP2
90
+ Added xmlns to enable validation
91
+ 2006-03-01 3.0b3 More performance
92
+ More caching
93
+ Better support for Popularity Contest and WP 2.x
94
+ 2006-11-16 3.0b4 Fixed bug with option SELECTS
95
+ Decreased memory usage which should solve timeout and memory problems
96
+ Updated namespace to support YAHOO and MSN
97
+ 2007-01-19 3.0b5 Javascripted page editor
98
+ WP 2 Design
99
+ YAHOO notification
100
+ New status report, removed ugly logfiles
101
+ Better Popularity Contest Support
102
+ Fixed double backslashes on windows systems
103
+ Added option to specify time limit and memory limit
104
+ Added option to define a XSLT stylesheet and added a default one
105
+ Fixed bug with sub-pages. Thanks to:
106
+ - Mike Baptiste (http://baptiste.us),
107
+ - Peter Claus Lamprecht (http://fastagent.de)
108
+ - Glenn Nicholas (http://publicityship.com.au)
109
+ Improved file handling, thanks to VJTD3 (http://www.VJTD3.com)
110
+ WP 2.1 improvements
111
+ 2007-01-23 3.0b6 Use memory_get_peak_usage instead of memory_get_usage if available
112
+ Removed the usage of REQUEST_URI since it not correct in all environments
113
+ Fixed that sitemap.xml.gz was not compressed
114
+ Added compat function "stripos" for PHP4 (Thanks to Joseph Abboud!)
115
+ Streamlined some code
116
+ 2007-05-17 3.0b7 Added option to include the author pages like /author/john
117
+ Small enhancements, removed stripos dependency and the added compat function
118
+ Added check to not build the sitemap if importing posts
119
+ Fixed missing domain parameter for translator name
120
+ Fixed WP 2.1 / Pre 2.1 post / pages database changes
121
+ Fixed wrong XSLT location (Thanks froosh)
122
+ Added Ask.com notification
123
+ Removed unused javascript
124
+ 2007-07-22 3.0b8 Changed category SQL to prevent unused cats from beeing included
125
+ Plugin will be loaded on "init" instead of direclty after the file has been loaded.
126
+ Added support for robots.txt modification
127
+ Switched YAHOO ping API from YAHOO Web Services to the "normal" ping service which doesn't require an app id
128
+ Search engines will only be pinged if the sitemap file has changed
129
+ 2007-09-02 3.0b9 Added tag support for WordPress 2.3
130
+ Now using post_date_gmt instead of post_date everywhere
131
+ Fixed archive bug with static pages (Thanks to Peter Claus Lamprecht)
132
+ Fixed some missing translation domains, thanks to Kirin Lin!
133
+ Added Czech translation files for 2.7.1, thanks to Peter Kahoun (http://kahi.cz)
134
+ 2007-09-04 3.0b10 Added category support for WordPress 2.3
135
+ Fixed bug with empty URLs in sitemap
136
+ Repaired GET building
137
+ Added more info on debug mode
138
+ 2007-09-23 3.0b11 Changed mysql queries to unbuffered queries
139
+ Uses MUCH less memory
140
+ Fixed really stupid bug with search engine pings
141
+ Option to set how many posts will be included
142
+ 2007-09-24 3.0 Yeah, 3.0 Final after one and a half year ;)
143
+ Removed useless functions
144
+ 2007-11-03 3.0.1 Using the Snoopy HTTP client for ping requests instead of wp_remote_fopen
145
+ Fixed undefined translation strings
146
+ Added "safemode" for SQL which doesn't use unbuffered results (old style)
147
+ Added option to run the building process in background using wp-cron
148
+ Removed unnecessary function_exists, Thanks to user00265
149
+ Added links to test the ping if it failed.
150
+ 2007-11-25 3.0.2 Fixed bug which caused that some settings were not saved correctly
151
+ Added option to exclude pages or post by ID
152
+ Restored YAHOO ping service with API key since the other one is to unreliable. (see 3.0b8)
153
+ 2007-11-28 3.0.2.1 Fixed wrong XML Schema Location (Thanks to Emanuele Tessore)
154
+ Added Russian Language files by Sergey http://ryvkin.ru
155
+ 2007-12-30 3.0.3 Added Live Search Ping
156
+ Removed some hooks which rebuilt the sitemap with every comment
157
+ 2008-03-30 3.0.3.1 Added compatibility CSS for WP 2.5
158
+ 2008-04-28 3.0.3.2 Improved WP 2.5 handling
159
+ 2008-04-29 3.0.3.3 Fixed author pages
160
+ Enhanced background building and increased delay to 15 seconds
161
+ Background building is enabled by default
162
+ 2008-04-28 3.1b1 Reorganized files in builder, loader and UI
163
+ Added 2 step loader so only code that's needed will be loaded
164
+ Improved WP 2.5 handling
165
+ Secured all admin actions with nonces
166
+ 2008-05-18 3.1b2 Fixed critical bug with the build in background option
167
+ Added notification if a build is scheduled
168
+ 2008-05-19 3.1b3 Cleaned up plugin directory and moved asset files to subfolders
169
+ Fixed background building bug in WP 2.1
170
+ Removed auto-update plugin link for WP < 2.5
171
+ 2008-05-22 3.1 Marked as 3.1 stable, updated documentation
172
+ 2008-05-27 3.1.0.1 Extracted UI JS to external file
173
+ Enabled the option to include following pages of multi-page posts
174
+ Script tries to raise memory and time limit if active
175
+ 2008-12-21 3.1.1 Fixed redirect issue if wp-admin is rewritten via mod_rewrite, thanks to macjoost
176
+ Fixed wrong path to assets, thanks PozHonks
177
+ Fixed wrong plugin URL if wp-content was renamed / redirected, thanks to wnorris
178
+ Updated WP User Interface for 2.7
179
+ Various other small things
180
+ 2008-12-26 3.1.2 Changed the way the stylesheet is saved (default / custom stylesheet)
181
+ Sitemap is now build when page is published
182
+ Removed support for static robots.txt files, this is now handled via WordPress
183
+ Added compat. exceptions for WP 2.0 and WP 2.1
184
+ 2009-06-07 3.1.3 Changed MSN Live Search to Bing
185
+ Exclude categories also now exludes the category itself and not only the posts
186
+ Pings now use the new WordPress HTTP API instead of Snoopy
187
+ Fixed bug that in localized WP installations priorities could not be saved.
188
+ The sitemap cron job is now cleared after a manual rebuild or after changing the config
189
+ Adjusted style of admin area for WP 2.8 and refreshed icons
190
+ Disabled the "Exclude categories" feature for WP 2.5.1, since it doesn't have the required functions yet
191
+ 2009-06-22 3.1.4 Fixed bug which broke all pings in WP < 2.7
192
+ Added more output in debug mode if pings fail
193
+ Moved global post definitions for other plugins
194
+ Added small icon for ozh admin menu
195
+ Added more help links in UI
196
+ 2009-08-24 3.1.5 Added option to completely disable the last modification time
197
+ Fixed bug regarding the use of the HTTPS url for the XSL stylesheet if the sitemap was build via the admin panel
198
+ Improved handling of homepage if a single page was set for it
199
+ Fixed mktime warning which appeared sometimes
200
+ Fixed bug which caused inf. reloads after rebuilding the sitemap via the admin panel
201
+ Improved handling of missing sitemaps files if WP was moved to another location
202
+ 2009-08-31 3.1.6 Fixed PHP error "Only variables can be passed by reference"
203
+ Fixed wrong URLS of multi-page posts (Thanks artstorm!)
204
+ 2009-10-21 3.1.7 Added support for custom taxonomies (Thanks to Lee!)
205
+ 2009-11-07 3.1.8 Improved custom taxonomy handling and fixed wrong last modification date
206
+ Changed readme and backlinks
207
+ Fixed fatal error in WP < 2.3
208
+ Fixed Update Notice in WP 2.8+
209
+ Added warning if blog privacy is activated
210
+ Fixed custom URLs priorities were shown as 0 instead of 1
211
+ 2009-11-13 3.1.9 Fixed MySQL Error if author pages were included
212
+ 2009-11-23 3.2 Added function to show the actual results of a ping instead of only linking to the url
213
+ Added new hook (sm_rebuild) for third party plugins to start building the sitemap
214
+ Fixed bug which showed the wrong URL for the latest Google ping result
215
+ Added some missing phpdoc documentation
216
+ Removed hardcoded php name for sitemap file for admin urls
217
+ Uses KSES for showing ping test results
218
+ Ping test fixed for WP < 2.3
219
+ 2009-12-16 3.2.1 Notes and update messages could interfere with the redirect after manual build
220
+ Help Links in the WP context help were not shown anymore since last update
221
+ IE 7 sometimes displayed a cached admin page
222
+ Removed invalid link to config page from the plugin description (This resulted in a "Not enough permission error")
223
+ Improved performance of getting the current plugin version with caching
224
+ Updated Spanish language files
225
+ 2009-12-19 3.2.2 Fixed PHP4 problems
226
+ 2010-04-02 3.2.3 Fixed that all pages were not included in the sitemap if the "Uncategorized" category was excluded
227
+ 2010-05-29 3.2.4 Fixed more deprecated function calls
228
+ Added (GMT) to sitemap xslt template to avoid confusion with time zone
229
+ Added warning and don't activate plugin if multisite mode is enabled (this mode is NOT tested yet)
230
+ Changed get_bloginfo('siteurl') to get_bloginfo('url') to avoid deprecation warning
231
+ Changed has_cap(10) to has_cap('level_10') to avoid deprecation warning
232
+ Fixed wrong SQL statement for author pages (Ticket #1108), thanks to twoenough
233
+ 2010-07-11 3.2.5 Backported Bing ping success fix from beta
234
+ Added friendly hint to try out the new beta
235
+ 2010-09-19 3.2.6 Removed YAHOO ping since YAHOO uses bing now
236
+ Removed deprecated function call
237
+ 2012-04-24 3.2.7 Fixed custom post types, thanks to clearsite of the wordpress.org forum!
238
+ Fixed broken admin layout on WP 3.4
239
+ 2012-08-08 3.2.8 Fixed wrong custom taxonomy URLs, thanks to ramon fincken of the wordpress.org forum!
240
+ Removed ASK ping since they shut down their service.
241
+ Exclude post_format taxonomy from custom taxonomy list
242
+ 2013-01-11 3.2.9 Fixed security issue with change frequencies and filename of sitemap file. Exploit was only possible for admin accounts.
243
+ 2013-09-28 3.3 Fixed problem with file permission checking
244
+ Filter out hashs (#) in URLs
245
+ 2013-11-24 3.4 Fixed deprecation warnings in PHP 5.4, thanks to Dion Hulse!
246
+ 2014-03-29 4.0 No static files anymore, sitemap is created on the fly
247
+ Sitemap is split-up into sub-sitemaps by month, allowing up to 50.000 posts per month
248
+ Support for custom post types and custom taxonomis!
249
+ 100% Multisite compatible, including by-blog and network activation.
250
+ Added support for mu-plugins forced-activation (see sitemap-wpmu.php for details)
251
+ Reduced server resource usage due to less content per request.
252
+ New API allows other plugins to add their own, separate sitemaps.
253
+ Raised min requirements to PHP 5.1 and WordPress 3.3
254
+ Note: This version will try to rename your old sitemap files to *-old.xml. If that doesn’t work, please delete them manually since no static files are needed anymore!
255
+ Using only wpdb instead of unbuffered queries anymore
256
+ Ping to search engines are done on WP ping
257
+ Using PHP5 syntax instead of old PHP4 OOP style
258
+ Added pre-loader which checks the requirements
259
+ Avoid the main query of WordPress (based on plugin by Michael Adams)
260
+ Avoid additional queries in post sitemaps
261
+ Added custom post types
262
+ Fixed include of static front page in pages index
263
+ Do not list "#" permalinks from placeholder plugins
264
+ Removed YAHOO pings since YAHOO doesn't have its own ping service anymore.
265
+ Sitemap doesn't state it is a feed anymore
266
+ Removed Ask.com ping since they shut down their service (who uses Ask anyway?)
267
+ 2014-03-31 4.0.1 Fixed bug with custom post types including a "-"
268
+ Changed rewrite-setup to happen on init and flushing on wp_loaded to better work with other plugins
269
+ 2014-04-01 4.0.2 Fixed warning if an gzip handler is already active
270
+ 2014-04-13 4.0.3 Fixed compression if an gzlib handler was already active
271
+ Help regarding permalinks for Nginx users
272
+ Fix with gzip compression in case there was other output before already
273
+ Return 404 for HTML sitemaps if the option has been disabled
274
+ 2014-04-19 4.0.4 Removed deprecated get_page call
275
+ Changed last modification time of sub-sitemaps to the last modification date of the posts instead of the publish date
276
+ Removed information window if the statistic option has not been activated
277
+ Added link regarding new sitemap format
278
+ Updated Portuguese translation, thanks to Pedro Martinho
279
+ Updated German translation
280
+ 2014-05-18 4.0.5 Fixed issue with empty post sitemaps (related to GMT/local time offset)
281
+ Fixed some timing issues in archives
282
+ Improved check for possible problems before gzipping
283
+ Fixed empty Archives and Authors in case there were no posts
284
+ Changed content type to text/xml to improve compatibility with caching plugins
285
+ Changed query parameters to is_feed=true to improve compatibility with caching plugins
286
+ Switched from using WP_Query to load posts to a custom SQL statement to avoid problems with other plugin filters
287
+ Fixed bug which caused the Priority Provider to disappear in recent PHP versions
288
+ Cleaned up code and renamed variables to be more readable
289
+ Added caching of some SQL statements
290
+ Added support feed for more help topics
291
+ Added support for changing the base of the sitemap url to another URL (for WP installations in sub-folders)
292
+ Changed text in XSL template to be more clear about sitemap-index and sub-sitemaps
293
+ Added link to new help page
294
+ Plugin will also ping with the corresponding sub-sitemap in case a post was modified
295
+ Added function to manually start ping for main-sitemap or all sub-sitemaps
296
+ Better checking for empty externals
297
+ Updated Japanese Translation, thanks to Daisuke Takahashi
298
+ 2014-06-03 4.0.6 Added option to disable automatic gzipping
299
+ Fixed bug with duplicated external sitemap entries
300
+ Updated language file template
301
+ Don't gzip if behind Varnish
302
+ Improved compatibility with caches
303
+ Ping on post edit
304
+ 2014-06-23 4.0.7 Better compatibility with managed GoDaddy hosting (clear alloptions cache when generating the sitemap)
305
+ Improved checking if the sitemap should be gzipped or not (depending on ob levels)
306
+ Removed WordPress version from the sitemap
307
+ Corrected link to WordPress privacy settings
308
+ Changed hook which is being used for sitemap pings
309
+ 2014-09-02 4.0.7.1Added icon for the new WP Add-Plugin page
310
+ Changed "Tested up to" to 4.0
311
+ 2014-11-15 4.0.8 Fixed bug with excluded categories, thanks to Claus Schöffel!
312
+ 2017-03-22 4.0.9 Fixed security issue with donation submission.
313
+ 2018-12-18 4.1.0 Fixed security issues related to forms and external URLs
314
+ 2022-04-07 4.1.1 Fixed security issues and added support for WooCommerce based sitemap
315
+ 2022-04-07 4.1.2 Fixed security issues and features like support for WooCommerce based sitemap
316
+
317
+
318
+
319
+
320
+
321
+ Todo:
322
+ ==============================================================================
323
+ - Your wishes :)
324
+
325
+
326
+ License:
327
+ ==============================================================================
328
+ Copyright 2005 - 2018 ARNE BRACHHOLD (email : himself - arnebrachhold - de)
329
+
330
+ This program is free software; you can redistribute it and/or modify
331
+ it under the terms of the GNU General Public License as published by
332
+ the Free Software Foundation; either version 2 of the License, or
333
+ (at your option) any later version.
334
+
335
+ This program is distributed in the hope that it will be useful,
336
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
337
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
338
+ GNU General Public License for more details.
339
+
340
+ You should have received a copy of the GNU General Public License
341
+ along with this program; if not, write to the Free Software
342
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
343
+
344
+ Please see license.txt for the full license.
345
+
346
+
347
+ Developer Documentation
348
+ ==============================================================================
349
+
350
+ Adding other pages to the sitemap via other plugins
351
+
352
+ This plugin uses the action system of WordPress to allow other plugins
353
+ to add urls to the sitemap. Simply add your function with add_action to
354
+ the list and the plugin will execute yours every time the sitemap is build.
355
+ Use the static method "GetInstance" to get the generator and AddUrl method
356
+ to add your content.
357
+
358
+ Sample:
359
+
360
+ function your_pages() {
361
+ $generatorObject = &GoogleSitemapGenerator::GetInstance();
362
+ if($generatorObject!=null) $generatorObject->AddUrl("http://blog.uri/tags/hello/",time(),"daily",0.5);
363
+ }
364
+ add_action("sm_buildmap", "your_pages");
365
+
366
+ Parameters:
367
+ - The URL to the page
368
+ - The last modified data, as a UNIX timestamp (optional)
369
+ - The Change Frequency (daily, hourly, weekly and so on) (optional)
370
+ - The priority 0.0 to 1.0 (optional)
371
+
372
+
373
+ Rebuilding the sitemap on request
374
+
375
+ If you want to rebuild the sitemap because dynamic content from your plugin has changed,
376
+ please use the "sm_rebuild" hook which is available since 3.1.9.
377
+ All other methods, like calling the Build method directly are highly unrecommended and might
378
+ not work anymore with the next version of the plugin. Using this hook, the sitemap plugin will
379
+ take care of everything like loading the required classes and so on.
380
+
381
+ Sample:
382
+
383
+ do_action("sm_rebuild");
384
+
385
+ The sitemap might not be rebuild immediately, since newer versions use a background WP-Cron
386
+ job by default to prevent that the user has to wait and avoid multiple rebuilds within a very short time.
387
+ In case the sitemap plugin is not installed, nothing will happen and no errors will be thrown.
388
+
389
+ ===============================================
390
+
391
+ Adding additional PriorityProviders
392
+
393
+ This plugin uses several classes to calculate the post priority.
394
+ You can register your own provider and choose it at the options screen.
395
+
396
+ Your class has to extend the GoogleSitemapGeneratorPrioProviderBase class
397
+ which has a default constructor and a method called GetPostPriority
398
+ which you can override.
399
+
400
+ Look at the GoogleSitemapGeneratorPrioByPopularityContestProvider class
401
+ for an example.
402
+
403
+ To register your provider to the sitemap generator, use the following filter:
404
+
405
+ add_filter("sm_add_prio_provider","AddMyProvider");
406
+
407
+ Your function could look like this:
408
+
409
+ function AddMyProvider($providers) {
410
+ array_push($providers,"MyProviderClass");
411
+ return $providers;
412
+ }
413
+
414
  Note that you have to return the modified list!
google-sitemap-generator-prio-provider-base.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * External interface .
4
+ *
5
+ * @author Arne Brachhold
6
+ * @package sitemap
7
+ * @since 3.0
8
+ */
9
+
10
+ /**
11
+ * Interface for all priority providers
12
+ *
13
+ * @author Arne Brachhold
14
+ * @package sitemap
15
+ * @since 3.0
16
+ */
17
+ interface Google_Sitemap_Generator_Prio_Provider_Base {
18
+
19
+ /**
20
+ * Initializes a new priority provider
21
+ *
22
+ * @param int $total_comments int The total number of comments of all posts .
23
+ * @param int $total_posts int The total number of posts .
24
+ * @since 3.0
25
+ */
26
+ public function __construct( $total_comments, $total_posts );
27
+
28
+ /**
29
+ * Returns the (translated) name of this priority provider
30
+ *
31
+ * @since 3.0
32
+ * @return string The translated name
33
+ */
34
+ public static function get_name();
35
+
36
+ /**
37
+ * Returns the (translated) description of this priority provider
38
+ *
39
+ * @since 3.0
40
+ * @return string The translated description
41
+ */
42
+ public static function get_description();
43
+
44
+ /**
45
+ * Returns the priority for a specified post
46
+ *
47
+ * @param int $post_id int The ID of the post .
48
+ * @param int $comment_count int The number of comments for this post .
49
+ * @since 3.0
50
+ * @return int The calculated priority
51
+ */
52
+ public function get_post_priority( $post_id, $comment_count );
53
+ }
54
+
img/sitemap.js CHANGED
@@ -1,109 +1,110 @@
1
- /*
2
-
3
- $Id: sitemap.js 48032 2008-05-27 14:32:06Z arnee $
4
-
5
- */
6
-
7
- function sm_addPage(url,priority,changeFreq,lastChanged) {
8
-
9
- var table = document.getElementById('sm_pageTable').getElementsByTagName('TBODY')[0];
10
- var ce = function(ele) { return document.createElement(ele) };
11
- var tr = ce('TR');
12
-
13
- var td = ce('TD');
14
- var iUrl = ce('INPUT');
15
- iUrl.type="text";
16
- iUrl.style.width='95%';
17
- iUrl.name="sm_pages_ur[]";
18
- if(url) iUrl.value=url;
19
- td.appendChild(iUrl);
20
- tr.appendChild(td);
21
-
22
- td = ce('TD');
23
- td.style.width='150px';
24
- var iPrio = ce('SELECT');
25
- iPrio.style.width='95%';
26
- iPrio.name="sm_pages_pr[]";
27
- for(var i=0; i <priorities.length; i++) {
28
- var op = ce('OPTION');
29
- op.text = priorities[i];
30
- op.value = priorities[i];
31
- try {
32
- iPrio.add(op, null); // standards compliant; doesn't work in IE
33
- } catch(ex) {
34
- iPrio.add(op); // IE only
35
- }
36
- if(priority && priority == op.value) {
37
- iPrio.selectedIndex = i;
38
- }
39
- }
40
- td.appendChild(iPrio);
41
- tr.appendChild(td);
42
-
43
- td = ce('TD');
44
- td.style.width='150px';
45
- var iFreq = ce('SELECT');
46
- iFreq.name="sm_pages_cf[]";
47
- iFreq.style.width='95%';
48
- for(var i=0; i<changeFreqVals.length; i++) {
49
- var op = ce('OPTION');
50
- op.text = changeFreqNames[i];
51
- op.value = changeFreqVals[i];
52
- try {
53
- iFreq.add(op, null); // standards compliant; doesn't work in IE
54
- } catch(ex) {
55
- iFreq.add(op); // IE only
56
- }
57
-
58
- if(changeFreq && changeFreq == op.value) {
59
- iFreq.selectedIndex = i;
60
- }
61
- }
62
- td.appendChild(iFreq);
63
- tr.appendChild(td);
64
-
65
- var td = ce('TD');
66
- td.style.width='150px';
67
- var iChanged = ce('INPUT');
68
- iChanged.type="text";
69
- iChanged.name="sm_pages_lm[]";
70
- iChanged.style.width='95%';
71
- if(lastChanged) iChanged.value=lastChanged;
72
- td.appendChild(iChanged);
73
- tr.appendChild(td);
74
-
75
- var td = ce('TD');
76
- td.style.textAlign="center";
77
- td.style.width='5px';
78
- var iAction = ce('A');
79
- iAction.innerHTML = 'X';
80
- iAction.href="javascript:void(0);"
81
- iAction.onclick = function() { table.removeChild(tr); };
82
- td.appendChild(iAction);
83
- tr.appendChild(td);
84
-
85
- var mark = ce('INPUT');
86
- mark.type="hidden";
87
- mark.name="sm_pages_mark[]";
88
- mark.value="true";
89
- tr.appendChild(mark);
90
-
91
-
92
- var firstRow = table.getElementsByTagName('TR')[1];
93
- if(firstRow) {
94
- var firstCol = (firstRow.childNodes[1]?firstRow.childNodes[1]:firstRow.childNodes[0]);
95
- if(firstCol.colSpan>1) {
96
- firstRow.parentNode.removeChild(firstRow);
97
- }
98
- }
99
- var cnt = table.getElementsByTagName('TR').length;
100
- if(cnt%2) tr.className="alternate";
101
-
102
- table.appendChild(tr);
103
- }
104
-
105
- function sm_loadPages() {
106
- for(var i=0; i<pages.length; i++) {
107
- sm_addPage(pages[i].url,pages[i].priority,pages[i].changeFreq,pages[i].lastChanged);
108
- }
109
- }
 
1
+ /*
2
+
3
+ $Id: sitemap.js 48032 2008-05-27 14:32:06Z arnee $
4
+
5
+ */
6
+
7
+ function sm_addPage(url,priority,changeFreq,lastChanged) {
8
+
9
+ var table = document.getElementById('sm_pageTable').getElementsByTagName('TBODY')[0];
10
+ var ce = function(ele) { return document.createElement(ele) };
11
+ var tr = ce('TR');
12
+
13
+ var td = ce('TD');
14
+ var iUrl = ce('INPUT');
15
+ iUrl.type="text";
16
+ iUrl.style.width='95%';
17
+ iUrl.name="sm_pages_ur[]";
18
+ if(url) iUrl.value=url;
19
+ td.appendChild(iUrl);
20
+ tr.appendChild(td);
21
+
22
+ td = ce('TD');
23
+ td.style.width='150px';
24
+ var iPrio = ce('SELECT');
25
+ iPrio.style.width='95%';
26
+ iPrio.name="sm_pages_pr[]";
27
+ for(var i=0; i <priorities.length; i++) {
28
+ var op = ce('OPTION');
29
+ op.text = priorities[i];
30
+ op.value = priorities[i];
31
+ try {
32
+ iPrio.add(op, null); // standards compliant; doesn't work in IE
33
+ } catch(ex) {
34
+ iPrio.add(op); // IE only
35
+ }
36
+ if(priority && priority == op.value) {
37
+ iPrio.selectedIndex = i;
38
+ }
39
+ }
40
+ td.appendChild(iPrio);
41
+ tr.appendChild(td);
42
+
43
+ td = ce('TD');
44
+ td.style.width='150px';
45
+ var iFreq = ce('SELECT');
46
+ iFreq.name="sm_pages_cf[]";
47
+ iFreq.style.width='95%';
48
+ for(var i=0; i<changeFreqVals.length; i++) {
49
+ var op = ce('OPTION');
50
+ op.text = changeFreqNames[i];
51
+ op.value = changeFreqVals[i];
52
+ try {
53
+ iFreq.add(op, null); // standards compliant; doesn't work in IE
54
+ } catch(ex) {
55
+ iFreq.add(op); // IE only
56
+ }
57
+
58
+ if(changeFreq && changeFreq == op.value) {
59
+ iFreq.selectedIndex = i;
60
+ }
61
+ }
62
+ td.appendChild(iFreq);
63
+ tr.appendChild(td);
64
+
65
+ var td = ce('TD');
66
+ td.style.width='150px';
67
+ var iChanged = ce('INPUT');
68
+ iChanged.type="text";
69
+ iChanged.name="sm_pages_lm[]";
70
+ iChanged.style.width='95%';
71
+ if(lastChanged) iChanged.value=lastChanged;
72
+ td.appendChild(iChanged);
73
+ tr.appendChild(td);
74
+
75
+ var td = ce('TD');
76
+ td.style.textAlign="center";
77
+ td.style.width='5px';
78
+ var iAction = ce('A');
79
+ iAction.innerHTML = 'X';
80
+ iAction.href="javascript:void(0);"
81
+ iAction.onclick = function() { table.removeChild(tr); };
82
+ td.appendChild(iAction);
83
+ tr.appendChild(td);
84
+
85
+ var mark = ce('INPUT');
86
+ mark.type="hidden";
87
+ mark.name="sm_pages_mark[]";
88
+ mark.value="true";
89
+ tr.appendChild(mark);
90
+
91
+
92
+ var firstRow = table.getElementsByTagName('TR')[1];
93
+ if(firstRow) {
94
+ var firstCol = (firstRow.childNodes[1]?firstRow.childNodes[1]:firstRow.childNodes[0]);
95
+ if(firstCol.colSpan>1) {
96
+ firstRow.parentNode.removeChild(firstRow);
97
+ }
98
+ }
99
+ var cnt = table.getElementsByTagName('TR').length;
100
+ if(cnt%2) tr.className="alternate";
101
+
102
+ table.appendChild(tr);
103
+ }
104
+
105
+ function sm_loadPages() {
106
+ for(var i=0; i<pages.length; i++) {
107
+ sm_addPage(pages[i].url,pages[i].priority,pages[i].changeFreq,pages[i].lastChanged);
108
+ }
109
+ }
110
+ if (typeof(sm_loadPages) == 'function') addLoadEvent(sm_loadPages);
lang/sitemap-ja_EUC.po CHANGED
@@ -1,322 +1,322 @@
1
- # Japanese Language File for sitemap (sitemap-ja_JP.UTF-8.po)
2
- # Copyright (C) 2005 hiromasa : http://hiromasa.zone.ne.jp/
3
- # This file is distributed under the same license as the WordPress package.
4
- # hiromasa <webmaster@hiromasa.zone.ne.jp>, 2005.
5
- #
6
- msgid ""
7
- msgstr ""
8
- "Project-Id-Version: sitemap\n"
9
- "Report-Msgid-Bugs-To: <webmaster@hiromasa.zone.ne.jp>\n"
10
- "POT-Creation-Date: 2005-06-09 02:00+0900\n"
11
- "PO-Revision-Date: 2005-07-03 23:17+0900\n"
12
- "Last-Translator: hiromasa <webmaster@hiromasa.zone.ne.jp>\n"
13
- "MIME-Version: 1.0\n"
14
- "Content-Type: text/plain; charset=EUC-JP\n"
15
- "Content-Transfer-Encoding: 8bit\n"
16
- "Language-Team: \n"
17
-
18
- #: sitemap.php:375
19
- msgid "always"
20
- msgstr "���Ĥ�"
21
-
22
- msgid "hourly"
23
- msgstr "���"
24
-
25
- msgid "daily"
26
- msgstr "����"
27
-
28
- msgid "weekly"
29
- msgstr "�轵"
30
-
31
- msgid "monthly"
32
- msgstr "���"
33
-
34
- msgid "yearly"
35
- msgstr "��ǯ"
36
-
37
- msgid "never"
38
- msgstr "��������ʤ�"
39
-
40
- msgid "Detected Path"
41
- msgstr "�ѥ���ľ������"
42
-
43
- msgid "Example"
44
- msgstr "��"
45
-
46
- msgid "Absolute or relative path to the sitemap file, including name."
47
- msgstr "�ե�����̾��ޤ� Sitemap �ե�����ؤ����Ф⤷�������Хѥ�"
48
-
49
- msgid "Complete URL to the sitemap file, including name."
50
- msgstr "�ե�����̾��ޤ� Sitemap �ե�����ؤδ����� URL"
51
-
52
- msgid "Automatic location"
53
- msgstr "��ư����"
54
-
55
- msgid "Manual location"
56
- msgstr "��ư����"
57
-
58
- msgid "OR"
59
- msgstr "�⤷����"
60
-
61
- msgid "Location of your sitemap file"
62
- msgstr "Sitemap �ե�����ξ��"
63
-
64
- msgid "If your blog is in a subdirectory and you want to add pages which are NOT in the blog directory or beneath, you MUST place your sitemap file in the root directory (Look at the &quot;Location of your sitemap file&quot; section on this page)!"
65
- msgstr "�⤷���ʤ��Υ֥��������֥ǥ��쥯�ȥ�����֤���Ƥ�����ˡ��֥����ǥ��쥯�ȥ�ʳ��Υڡ����� Sitemap �˴ޤ᤿���Ȥ��ϡ�Sitemap �ե������롼�ȥǥ��쥯�ȥ�����֤��٤��Ǥ����ʤ��Υڡ����� &quot;Sitemap �ե�����ξ��&quot; ������ǧ���Ʋ�������"
66
-
67
- #: sitemap.php:512
68
- msgid "Configuration updated"
69
- msgstr "����򹹿����ޤ�����"
70
-
71
- #: sitemap.php:513
72
- msgid "Error"
73
- msgstr "���顼�Ǥ���"
74
-
75
- #: sitemap.php:521
76
- msgid "A new page was added. Click on &quot;Save page changes&quot; to save your changes."
77
- msgstr "�������ɲåڡ����ʤ�������ˤ��ä��ޤ����� �ʥڡ����ξ�������ϸ��&quot;�ѹ�����¸&quot �򲡲������������¸���Ʋ�������"
78
-
79
- #: sitemap.php:527
80
- msgid "Pages saved"
81
- msgstr "�ɲåڡ������������¸���ޤ�����"
82
-
83
- #: sitemap.php:528
84
- msgid "Error while saving pages"
85
- msgstr "�ɲåڡ������������¸��˥��顼��ȯ�����ޤ�����"
86
-
87
- #: sitemap.php:539
88
- msgid "The page was deleted. Click on &quot;Save page changes&quot; to save your changes."
89
- msgstr "���ꤵ�줿�ɲåڡ����ʤ�������ˤ������ޤ����� &quot;�ѹ�����¸&quot �򲡲������������¸���Ʋ�������"
90
-
91
- #: sitemap.php:542
92
- msgid "You changes have been cleared."
93
- msgstr "�ѹ��ϴ��˺������Ƥ��ޤ���"
94
-
95
- #: sitemap.php:555
96
- msgid "Sitemap Generator"
97
- msgstr "Sitemap Generator"
98
-
99
- #: sitemap.php:558
100
- msgid "Manual rebuild"
101
- msgstr "��ư�ˤ�� Sitemap �ե�����κƹ���"
102
-
103
- #: sitemap.php:559
104
- msgid "If you want to build the sitemap without editing a post, click on here!"
105
- msgstr "�⤷��Ƥ��Խ��ʤ��� Sitemap �ե������ƹ��ۤ��������Ϥ��Υܥ���򲡲����Ƥ�������!"
106
-
107
- #: sitemap.php:560
108
- msgid "Rebuild Sitemap"
109
- msgstr "Sitemap �κƹ���"
110
-
111
- #: sitemap.php:564
112
- msgid "Additional pages"
113
- msgstr "�ɲåڡ���������"
114
-
115
- #: sitemap.php:566
116
- msgid "Here you can specify files or URLs which should be included in the sitemap, but do not belong to your Blog/WordPress.<br />For example, if your domain is www.foo.com and your blog is located on www.foo.com/blog you might want to include your homepage at www.foo.com"
117
- msgstr "�����ǡ�Sitemap �˴ޤޤ��٤��Ǥ��� URL ����ꤹ�뤳�Ȥ��Ǥ��ޤ��� �������������ǻ��ꤹ�� URL �� WordPress/Blog ��°���ƤϤ����ޤ���<br />�㤨�Хɥᥤ�� www.foo.com �ǥ֥����� www.foo.com/blog ���ä���硢���ʤ��� www.foo.com �� Sitemap �˴ޤߤ����Ȼפ����⤷��ޤ��󡣡�����: ���ι��ܤ� WordPress �ʳ��� URL ����ꤷ���ץ饰����ǽ��Ϥ��� Sitemap �˴ޤ�뤳�Ȥ��Ǥ��ޤ���"
118
-
119
- #: sitemap.php:568
120
- msgid "URL to the page"
121
- msgstr "���Υڡ�����URL"
122
-
123
- #: sitemap.php:569
124
- msgid "Enter the URL to the page. Examples: http://www.foo.com/index.html or www.foo.com/home "
125
- msgstr "���Υڡ�����URL �����Ϥ��Ʋ������� ��: http://www.foo.com/index.html �� www.foo.com/home "
126
-
127
- #: sitemap.php:571
128
- msgid "Priority"
129
- msgstr "ͥ����(priority)������"
130
-
131
- #: sitemap.php:572
132
- msgid "Choose the priority of the page relative to the other pages. For example, your homepage might have a higher priority than your imprint."
133
- msgstr "¾�Υڡ��������㤷���ڡ�����ͥ����(priority)������Ǥ��������� �㤨�С����ʤ��Υۡ���ڡ����ϡ��õ��Υڡ������⤤ͥ���٤����뤫�⤷��ޤ���"
134
-
135
- #: sitemap.php:574
136
- msgid "Last Changed"
137
- msgstr "�ǽ�������"
138
-
139
- #: sitemap.php:575
140
- msgid "Enter the date of the last change as YYYY-MM-DD (2005-12-31 for example) (optional)."
141
- msgstr "�ǽ��������� YYYY-MM-DD ���������Ϥ��Ʋ�������"
142
-
143
- #: sitemap.php:583
144
- msgid "Change Frequency"
145
- msgstr "��������(changefreq)������"
146
-
147
- #: sitemap.php:585
148
- msgid "#"
149
- msgstr "#"
150
-
151
- #: sitemap.php:609
152
- msgid "No pages defined."
153
- msgstr "�ɲåڡ������������Ƥ��ޤ���"
154
-
155
- #: sitemap.php:616
156
- msgid "Add new page"
157
- msgstr "�������ڡ������ɲ�"
158
-
159
- #: sitemap.php:617
160
- msgid "Save page changes"
161
- msgstr "�ѹ�����¸"
162
-
163
- #: sitemap.php:618
164
- msgid "Undo all page changes"
165
- msgstr "�ڡ������ѹ��򸵤��᤹"
166
-
167
- #: sitemap.php:621
168
- msgid "Delete marked page"
169
- msgstr "�ޡ������줿�ڡ����κ��"
170
-
171
- #: sitemap.php:627
172
- msgid "Basic Options"
173
- msgstr "����Ū������"
174
-
175
- #: sitemap.php:632
176
- msgid "Enable automatic priority calculation for posts based on comment count"
177
- msgstr "��Ƥ��Ф��륳���ȿ��ǡ���ơʳƥ���ȥ�ˤ�ͥ����(priority)��ư�׻����뵡ǽ��ͭ���ˤ���"
178
-
179
- #: sitemap.php:638
180
- msgid "Write debug comments"
181
- msgstr "�ǥХå��ѥ����Ƚ��Ϥ�Ԥ�"
182
-
183
- #: sitemap.php:643
184
- msgid "Filename of the sitemap file"
185
- msgstr "Sitemap �Υե�����̾"
186
-
187
- #: sitemap.php:650
188
- msgid "Write a normal XML file (your filename)"
189
- msgstr "ɸ��� XML �ե��������Ϥ��� (filename)"
190
-
191
- #: sitemap.php:652
192
- msgid "Detected URL"
193
- msgstr "Detected URL"
194
-
195
- #: sitemap.php:657
196
- msgid "Write a gzipped file (your filename + .gz)"
197
- msgstr "gz ���̤��줿�ե��������Ϥ��� (filename + .gz)"
198
-
199
- #: sitemap.php:664
200
- msgid "Auto-Ping Google Sitemaps"
201
- msgstr "Google Sitemap �˹��� ping ������"
202
-
203
- #: sitemap.php:665
204
- msgid "This option will automatically tell Google about changes."
205
- msgstr "���Υ��ץ����ϡ��ѹ��� Google �˼�ưŪ�����Τ��ޤ���"
206
-
207
- #: sitemap.php:672
208
- msgid "Includings"
209
- msgstr "Sitemap �˴ޤ�� ���ܤ�����"
210
-
211
- #: sitemap.php:677
212
- msgid "Include homepage"
213
- msgstr "�ۡ���ڡ���"
214
-
215
- #: sitemap.php:683
216
- msgid "Include posts"
217
- msgstr "��ơʳƥ���ȥ��"
218
-
219
- #: sitemap.php:689
220
- msgid "Include static pages"
221
- msgstr "��Ū�ʥڡ���"
222
-
223
- #: sitemap.php:695
224
- msgid "Include categories"
225
- msgstr "���ƥ�����"
226
-
227
- #: sitemap.php:701
228
- msgid "Include archives"
229
- msgstr "������������"
230
-
231
- #: sitemap.php:708
232
- msgid "Change frequencies"
233
- msgstr "��������(changefreq)������"
234
-
235
- #: sitemap.php:709
236
- msgid "Note"
237
- msgstr "���"
238
-
239
- #: sitemap.php:710
240
- msgid "Please note that the value of this tag is considered a hint and not a command. Even though search engine crawlers consider this information when making decisions, they may crawl pages marked \"hourly\" less frequently than that, and they may crawl pages marked \"yearly\" more frequently than that. It is also likely that crawlers will periodically crawl pages marked \"never\" so that they can handle unexpected changes to those pages."
241
- msgstr "���Υ������ͤ�̿��ǤϤʤ��ҥ�Ȥ��ȹͤ����ޤ������������󥸥�Υ�������Ϥ���������θ������ޤ�����\"1���֤���\" ������ˤ��Ƥ⤽�����٤ǥ������뤷�ʤ����⤷��ʤ�����\"ǯ���٤�\" ����ˤ��Ƥ⤽�������ˤ˥������뤵��뤫�⤷��ޤ��󡣤ޤ� \"��������ʤ�\" �����ꤵ�줿�ڡ����⡢�פ������ʤ��Ѳ��򤳤��Υڡ����������뤿��ˡ������餯������������Ū�˥������뤹��Ǥ��礦��"
242
-
243
- #: sitemap.php:715
244
- msgid "Homepage"
245
- msgstr "�ۡ���ڡ���"
246
-
247
- #: sitemap.php:721
248
- msgid "Posts"
249
- msgstr "��ơʳƥ���ȥ��"
250
-
251
- #: sitemap.php:727
252
- msgid "Static pages"
253
- msgstr "��Ū�ʥڡ���"
254
-
255
- #: sitemap.php:733
256
- msgid "Categories"
257
- msgstr "���ƥ�����"
258
-
259
- #: sitemap.php:739
260
- msgid "The current archive of this month (Should be the same like your homepage)"
261
- msgstr "����Υ��������� (\"�ۡ���ڡ���\" �������Ʊ���ˤ��٤��Ǥ�)"
262
-
263
- #: sitemap.php:745
264
- msgid "Older archives (Changes only if you edit an old post)"
265
- msgstr "�Ť����������� (�Ť���Ƥ��Խ������Ȥ������ѹ����Ƥ�������)"
266
-
267
- #: sitemap.php:752
268
- msgid "Priorities"
269
- msgstr "ͥ����(priority)������"
270
-
271
- #: sitemap.php:763
272
- msgid "Posts (If auto calculation is disabled)"
273
- msgstr "��ơʳƥ���ȥ�� (\"����Ū������\"�Ǽ�ư�׻������ꤷ�Ƥ��ʤ�����ͭ��)"
274
-
275
- #: sitemap.php:769
276
- msgid "Minimum post priority (Even if auto calculation is enabled)"
277
- msgstr "��ơʳƥ���ȥ�ˤκǾ��� (\"����Ū������\"�Ǽ�ư�׻������ꤷ�Ƥ������ͭ��)"
278
-
279
- #: sitemap.php:787
280
- msgid "Archives"
281
- msgstr "������������"
282
-
283
- #: sitemap.php:793
284
- msgid "Informations and support"
285
- msgstr "����ȥ��ݡ���"
286
-
287
- #: sitemap.php:794
288
- msgid "Check %s for updates and comment there if you have any problems / questions / suggestions."
289
- msgstr "�⤷������䵿�䡢��Ƥ������ %s �Υ��åץǡ��Ⱦ���䥳���Ȥ��ǧ���Ʋ�������"
290
-
291
- #: sitemap.php:797
292
- msgid "Update options"
293
- msgstr "����򹹿� &raquo;"
294
-
295
- #: sitemap.php:1033
296
- msgid "URL:"
297
- msgstr "URL:"
298
-
299
- #: sitemap.php:1034
300
- msgid "Path:"
301
- msgstr "Path:"
302
-
303
- #: sitemap.php:1037
304
- msgid "Could not write into %s"
305
- msgstr "%s �˽񤭹��ळ�Ȥ��Ǥ��ޤ���"
306
-
307
- #: sitemap.php:1048
308
- msgid "Successfully built sitemap file:"
309
- msgstr "���ۤ��������� Sitemap �ե�����:"
310
-
311
- #: sitemap.php:1048
312
- msgid "Successfully built gzipped sitemap file:"
313
- msgstr "���ۤ��������� gz ���̤��줿 Sitemap �ե�����:"
314
-
315
- #: sitemap.php:1062
316
- msgid "Could not ping to Google at %s"
317
- msgstr "Google �ؤι��� ping ���������Ǥ��ޤ���Ǥ����� %s"
318
-
319
- #: sitemap.php:1064
320
- msgid "Successfully pinged Google at %s"
321
- msgstr "Google �ؤι��� ping ���������������ޤ����� %s"
322
-
1
+ # Japanese Language File for sitemap (sitemap-ja_JP.UTF-8.po)
2
+ # Copyright (C) 2005 hiromasa : http://hiromasa.zone.ne.jp/
3
+ # This file is distributed under the same license as the WordPress package.
4
+ # hiromasa <webmaster@hiromasa.zone.ne.jp>, 2005.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: sitemap\n"
9
+ "Report-Msgid-Bugs-To: <webmaster@hiromasa.zone.ne.jp>\n"
10
+ "POT-Creation-Date: 2005-06-09 02:00+0900\n"
11
+ "PO-Revision-Date: 2005-07-03 23:17+0900\n"
12
+ "Last-Translator: hiromasa <webmaster@hiromasa.zone.ne.jp>\n"
13
+ "MIME-Version: 1.0\n"
14
+ "Content-Type: text/plain; charset=EUC-JP\n"
15
+ "Content-Transfer-Encoding: 8bit\n"
16
+ "Language-Team: \n"
17
+
18
+ #: sitemap.php:375
19
+ msgid "always"
20
+ msgstr "���Ĥ�"
21
+
22
+ msgid "hourly"
23
+ msgstr "���"
24
+
25
+ msgid "daily"
26
+ msgstr "����"
27
+
28
+ msgid "weekly"
29
+ msgstr "�轵"
30
+
31
+ msgid "monthly"
32
+ msgstr "���"
33
+
34
+ msgid "yearly"
35
+ msgstr "��ǯ"
36
+
37
+ msgid "never"
38
+ msgstr "��������ʤ�"
39
+
40
+ msgid "Detected Path"
41
+ msgstr "�ѥ���ľ������"
42
+
43
+ msgid "Example"
44
+ msgstr "��"
45
+
46
+ msgid "Absolute or relative path to the sitemap file, including name."
47
+ msgstr "�ե�����̾��ޤ� Sitemap �ե�����ؤ����Ф⤷�������Хѥ�"
48
+
49
+ msgid "Complete URL to the sitemap file, including name."
50
+ msgstr "�ե�����̾��ޤ� Sitemap �ե�����ؤδ����� URL"
51
+
52
+ msgid "Automatic location"
53
+ msgstr "��ư����"
54
+
55
+ msgid "Manual location"
56
+ msgstr "��ư����"
57
+
58
+ msgid "OR"
59
+ msgstr "�⤷����"
60
+
61
+ msgid "Location of your sitemap file"
62
+ msgstr "Sitemap �ե�����ξ��"
63
+
64
+ msgid "If your blog is in a subdirectory and you want to add pages which are NOT in the blog directory or beneath, you MUST place your sitemap file in the root directory (Look at the &quot;Location of your sitemap file&quot; section on this page)!"
65
+ msgstr "�⤷���ʤ��Υ֥��������֥ǥ��쥯�ȥ�����֤���Ƥ�����ˡ��֥����ǥ��쥯�ȥ�ʳ��Υڡ����� Sitemap �˴ޤ᤿���Ȥ��ϡ�Sitemap �ե������롼�ȥǥ��쥯�ȥ�����֤��٤��Ǥ����ʤ��Υڡ����� &quot;Sitemap �ե�����ξ��&quot; ������ǧ���Ʋ�������"
66
+
67
+ #: sitemap.php:512
68
+ msgid "Configuration updated"
69
+ msgstr "����򹹿����ޤ�����"
70
+
71
+ #: sitemap.php:513
72
+ msgid "Error"
73
+ msgstr "���顼�Ǥ���"
74
+
75
+ #: sitemap.php:521
76
+ msgid "A new page was added. Click on &quot;Save page changes&quot; to save your changes."
77
+ msgstr "�������ɲåڡ����ʤ�������ˤ��ä��ޤ����� �ʥڡ����ξ�������ϸ��&quot;�ѹ�����¸&quot �򲡲������������¸���Ʋ�������"
78
+
79
+ #: sitemap.php:527
80
+ msgid "Pages saved"
81
+ msgstr "�ɲåڡ������������¸���ޤ�����"
82
+
83
+ #: sitemap.php:528
84
+ msgid "Error while saving pages"
85
+ msgstr "�ɲåڡ������������¸��˥��顼��ȯ�����ޤ�����"
86
+
87
+ #: sitemap.php:539
88
+ msgid "The page was deleted. Click on &quot;Save page changes&quot; to save your changes."
89
+ msgstr "���ꤵ�줿�ɲåڡ����ʤ�������ˤ������ޤ����� &quot;�ѹ�����¸&quot �򲡲������������¸���Ʋ�������"
90
+
91
+ #: sitemap.php:542
92
+ msgid "You changes have been cleared."
93
+ msgstr "�ѹ��ϴ��˺������Ƥ��ޤ���"
94
+
95
+ #: sitemap.php:555
96
+ msgid "Sitemap Generator"
97
+ msgstr "Sitemap Generator"
98
+
99
+ #: sitemap.php:558
100
+ msgid "Manual rebuild"
101
+ msgstr "��ư�ˤ�� Sitemap �ե�����κƹ���"
102
+
103
+ #: sitemap.php:559
104
+ msgid "If you want to build the sitemap without editing a post, click on here!"
105
+ msgstr "�⤷��Ƥ��Խ��ʤ��� Sitemap �ե������ƹ��ۤ��������Ϥ��Υܥ���򲡲����Ƥ�������!"
106
+
107
+ #: sitemap.php:560
108
+ msgid "Rebuild Sitemap"
109
+ msgstr "Sitemap �κƹ���"
110
+
111
+ #: sitemap.php:564
112
+ msgid "Additional pages"
113
+ msgstr "�ɲåڡ���������"
114
+
115
+ #: sitemap.php:566
116
+ msgid "Here you can specify files or URLs which should be included in the sitemap, but do not belong to your Blog/WordPress.<br />For example, if your domain is www.foo.com and your blog is located on www.foo.com/blog you might want to include your homepage at www.foo.com"
117
+ msgstr "�����ǡ�Sitemap �˴ޤޤ��٤��Ǥ��� URL ����ꤹ�뤳�Ȥ��Ǥ��ޤ��� �������������ǻ��ꤹ�� URL �� WordPress/Blog ��°���ƤϤ����ޤ���<br />�㤨�Хɥᥤ�� www.foo.com �ǥ֥����� www.foo.com/blog ���ä���硢���ʤ��� www.foo.com �� Sitemap �˴ޤߤ����Ȼפ����⤷��ޤ��󡣡�����: ���ι��ܤ� WordPress �ʳ��� URL ����ꤷ���ץ饰����ǽ��Ϥ��� Sitemap �˴ޤ�뤳�Ȥ��Ǥ��ޤ���"
118
+
119
+ #: sitemap.php:568
120
+ msgid "URL to the page"
121
+ msgstr "���Υڡ�����URL"
122
+
123
+ #: sitemap.php:569
124
+ msgid "Enter the URL to the page. Examples: http://www.foo.com/index.html or www.foo.com/home "
125
+ msgstr "���Υڡ�����URL �����Ϥ��Ʋ������� ��: http://www.foo.com/index.html �� www.foo.com/home "
126
+
127
+ #: sitemap.php:571
128
+ msgid "Priority"
129
+ msgstr "ͥ����(priority)������"
130
+
131
+ #: sitemap.php:572
132
+ msgid "Choose the priority of the page relative to the other pages. For example, your homepage might have a higher priority than your imprint."
133
+ msgstr "¾�Υڡ��������㤷���ڡ�����ͥ����(priority)������Ǥ��������� �㤨�С����ʤ��Υۡ���ڡ����ϡ��õ��Υڡ������⤤ͥ���٤����뤫�⤷��ޤ���"
134
+
135
+ #: sitemap.php:574
136
+ msgid "Last Changed"
137
+ msgstr "�ǽ�������"
138
+
139
+ #: sitemap.php:575
140
+ msgid "Enter the date of the last change as YYYY-MM-DD (2005-12-31 for example) (optional)."
141
+ msgstr "�ǽ��������� YYYY-MM-DD ���������Ϥ��Ʋ�������"
142
+
143
+ #: sitemap.php:583
144
+ msgid "Change Frequency"
145
+ msgstr "��������(changefreq)������"
146
+
147
+ #: sitemap.php:585
148
+ msgid "#"
149
+ msgstr "#"
150
+
151
+ #: sitemap.php:609
152
+ msgid "No pages defined."
153
+ msgstr "�ɲåڡ������������Ƥ��ޤ���"
154
+
155
+ #: sitemap.php:616
156
+ msgid "Add new page"
157
+ msgstr "�������ڡ������ɲ�"
158
+
159
+ #: sitemap.php:617
160
+ msgid "Save page changes"
161
+ msgstr "�ѹ�����¸"
162
+
163
+ #: sitemap.php:618
164
+ msgid "Undo all page changes"
165
+ msgstr "�ڡ������ѹ��򸵤��᤹"
166
+
167
+ #: sitemap.php:621
168
+ msgid "Delete marked page"
169
+ msgstr "�ޡ������줿�ڡ����κ��"
170
+
171
+ #: sitemap.php:627
172
+ msgid "Basic Options"
173
+ msgstr "����Ū������"
174
+
175
+ #: sitemap.php:632
176
+ msgid "Enable automatic priority calculation for posts based on comment count"
177
+ msgstr "��Ƥ��Ф��륳���ȿ��ǡ���ơʳƥ���ȥ�ˤ�ͥ����(priority)��ư�׻����뵡ǽ��ͭ���ˤ���"
178
+
179
+ #: sitemap.php:638
180
+ msgid "Write debug comments"
181
+ msgstr "�ǥХå��ѥ����Ƚ��Ϥ�Ԥ�"
182
+
183
+ #: sitemap.php:643
184
+ msgid "Filename of the sitemap file"
185
+ msgstr "Sitemap �Υե�����̾"
186
+
187
+ #: sitemap.php:650
188
+ msgid "Write a normal XML file (your filename)"
189
+ msgstr "ɸ��� XML �ե��������Ϥ��� (filename)"
190
+
191
+ #: sitemap.php:652
192
+ msgid "Detected URL"
193
+ msgstr "Detected URL"
194
+
195
+ #: sitemap.php:657
196
+ msgid "Write a gzipped file (your filename + .gz)"
197
+ msgstr "gz ���̤��줿�ե��������Ϥ��� (filename + .gz)"
198
+
199
+ #: sitemap.php:664
200
+ msgid "Auto-Ping Google Sitemaps"
201
+ msgstr "Google Sitemap �˹��� ping ������"
202
+
203
+ #: sitemap.php:665
204
+ msgid "This option will automatically tell Google about changes."
205
+ msgstr "���Υ��ץ����ϡ��ѹ��� Google �˼�ưŪ�����Τ��ޤ���"
206
+
207
+ #: sitemap.php:672
208
+ msgid "Includings"
209
+ msgstr "Sitemap �˴ޤ�� ���ܤ�����"
210
+
211
+ #: sitemap.php:677
212
+ msgid "Include homepage"
213
+ msgstr "�ۡ���ڡ���"
214
+
215
+ #: sitemap.php:683
216
+ msgid "Include posts"
217
+ msgstr "��ơʳƥ���ȥ��"
218
+
219
+ #: sitemap.php:689
220
+ msgid "Include static pages"
221
+ msgstr "��Ū�ʥڡ���"
222
+
223
+ #: sitemap.php:695
224
+ msgid "Include categories"
225
+ msgstr "���ƥ�����"
226
+
227
+ #: sitemap.php:701
228
+ msgid "Include archives"
229
+ msgstr "������������"
230
+
231
+ #: sitemap.php:708
232
+ msgid "Change frequencies"
233
+ msgstr "��������(changefreq)������"
234
+
235
+ #: sitemap.php:709
236
+ msgid "Note"
237
+ msgstr "���"
238
+
239
+ #: sitemap.php:710
240
+ msgid "Please note that the value of this tag is considered a hint and not a command. Even though search engine crawlers consider this information when making decisions, they may crawl pages marked \"hourly\" less frequently than that, and they may crawl pages marked \"yearly\" more frequently than that. It is also likely that crawlers will periodically crawl pages marked \"never\" so that they can handle unexpected changes to those pages."
241
+ msgstr "���Υ������ͤ�̿��ǤϤʤ��ҥ�Ȥ��ȹͤ����ޤ������������󥸥�Υ�������Ϥ���������θ������ޤ�����\"1���֤���\" ������ˤ��Ƥ⤽�����٤ǥ������뤷�ʤ����⤷��ʤ�����\"ǯ���٤�\" ����ˤ��Ƥ⤽�������ˤ˥������뤵��뤫�⤷��ޤ��󡣤ޤ� \"��������ʤ�\" �����ꤵ�줿�ڡ����⡢�פ������ʤ��Ѳ��򤳤��Υڡ����������뤿��ˡ������餯������������Ū�˥������뤹��Ǥ��礦��"
242
+
243
+ #: sitemap.php:715
244
+ msgid "Homepage"
245
+ msgstr "�ۡ���ڡ���"
246
+
247
+ #: sitemap.php:721
248
+ msgid "Posts"
249
+ msgstr "��ơʳƥ���ȥ��"
250
+
251
+ #: sitemap.php:727
252
+ msgid "Static pages"
253
+ msgstr "��Ū�ʥڡ���"
254
+
255
+ #: sitemap.php:733
256
+ msgid "Categories"
257
+ msgstr "���ƥ�����"
258
+
259
+ #: sitemap.php:739
260
+ msgid "The current archive of this month (Should be the same like your homepage)"
261
+ msgstr "����Υ��������� (\"�ۡ���ڡ���\" �������Ʊ���ˤ��٤��Ǥ�)"
262
+
263
+ #: sitemap.php:745
264
+ msgid "Older archives (Changes only if you edit an old post)"
265
+ msgstr "�Ť����������� (�Ť���Ƥ��Խ������Ȥ������ѹ����Ƥ�������)"
266
+
267
+ #: sitemap.php:752
268
+ msgid "Priorities"
269
+ msgstr "ͥ����(priority)������"
270
+
271
+ #: sitemap.php:763
272
+ msgid "Posts (If auto calculation is disabled)"
273
+ msgstr "��ơʳƥ���ȥ�� (\"����Ū������\"�Ǽ�ư�׻������ꤷ�Ƥ��ʤ�����ͭ��)"
274
+
275
+ #: sitemap.php:769
276
+ msgid "Minimum post priority (Even if auto calculation is enabled)"
277
+ msgstr "��ơʳƥ���ȥ�ˤκǾ��� (\"����Ū������\"�Ǽ�ư�׻������ꤷ�Ƥ������ͭ��)"
278
+
279
+ #: sitemap.php:787
280
+ msgid "Archives"
281
+ msgstr "������������"
282
+
283
+ #: sitemap.php:793
284
+ msgid "Informations and support"
285
+ msgstr "����ȥ��ݡ���"
286
+
287
+ #: sitemap.php:794
288
+ msgid "Check %s for updates and comment there if you have any problems / questions / suggestions."
289
+ msgstr "�⤷������䵿�䡢��Ƥ������ %s �Υ��åץǡ��Ⱦ���䥳���Ȥ��ǧ���Ʋ�������"
290
+
291
+ #: sitemap.php:797
292
+ msgid "Update options"
293
+ msgstr "����򹹿� &raquo;"
294
+
295
+ #: sitemap.php:1033
296
+ msgid "URL:"
297
+ msgstr "URL:"
298
+
299
+ #: sitemap.php:1034
300
+ msgid "Path:"
301
+ msgstr "Path:"
302
+
303
+ #: sitemap.php:1037
304
+ msgid "Could not write into %s"
305
+ msgstr "%s �˽񤭹��ळ�Ȥ��Ǥ��ޤ���"
306
+
307
+ #: sitemap.php:1048
308
+ msgid "Successfully built sitemap file:"
309
+ msgstr "���ۤ��������� Sitemap �ե�����:"
310
+
311
+ #: sitemap.php:1048
312
+ msgid "Successfully built gzipped sitemap file:"
313
+ msgstr "���ۤ��������� gz ���̤��줿 Sitemap �ե�����:"
314
+
315
+ #: sitemap.php:1062
316
+ msgid "Could not ping to Google at %s"
317
+ msgstr "Google �ؤι��� ping ���������Ǥ��ޤ���Ǥ����� %s"
318
+
319
+ #: sitemap.php:1064
320
+ msgid "Successfully pinged Google at %s"
321
+ msgstr "Google �ؤι��� ping ���������������ޤ����� %s"
322
+
lang/sitemap-ja_SJIS.po CHANGED
@@ -1,322 +1,322 @@
1
- # Japanese Language File for sitemap (sitemap-ja_JP.UTF-8.po)
2
- # Copyright (C) 2005 hiromasa : http://hiromasa.zone.ne.jp/
3
- # This file is distributed under the same license as the WordPress package.
4
- # hiromasa <webmaster@hiromasa.zone.ne.jp>, 2005.
5
- #
6
- msgid ""
7
- msgstr ""
8
- "Project-Id-Version: sitemap\n"
9
- "Report-Msgid-Bugs-To: <webmaster@hiromasa.zone.ne.jp>\n"
10
- "POT-Creation-Date: 2005-06-09 02:00+0900\n"
11
- "PO-Revision-Date: 2005-07-03 23:17+0900\n"
12
- "Last-Translator: hiromasa <webmaster@hiromasa.zone.ne.jp>\n"
13
- "MIME-Version: 1.0\n"
14
- "Content-Type: text/plain; charset=Shift_JIS\n"
15
- "Content-Transfer-Encoding: 8bit\n"
16
- "Language-Team: \n"
17
-
18
- #: sitemap.php:375
19
- msgid "always"
20
- msgstr "���‚�"
21
-
22
- msgid "hourly"
23
- msgstr "����"
24
-
25
- msgid "daily"
26
- msgstr "����"
27
-
28
- msgid "weekly"
29
- msgstr "���T"
30
-
31
- msgid "monthly"
32
- msgstr "����"
33
-
34
- msgid "yearly"
35
- msgstr "���N"
36
-
37
- msgid "never"
38
- msgstr "�X�V����Ȃ�"
39
-
40
- msgid "Detected Path"
41
- msgstr "�p�X�̒��ڐݒ�"
42
-
43
- msgid "Example"
44
- msgstr "��"
45
-
46
- msgid "Absolute or relative path to the sitemap file, including name."
47
- msgstr "�t�@�C�������܂� Sitemap �t�@�C���ւ̑��΂������͐�΃p�X"
48
-
49
- msgid "Complete URL to the sitemap file, including name."
50
- msgstr "�t�@�C�������܂� Sitemap �t�@�C���ւ̊��S�� URL"
51
-
52
- msgid "Automatic location"
53
- msgstr "�����z�u"
54
-
55
- msgid "Manual location"
56
- msgstr "�蓮�z�u"
57
-
58
- msgid "OR"
59
- msgstr "��������"
60
-
61
- msgid "Location of your sitemap file"
62
- msgstr "Sitemap �t�@�C���̏ꏊ"
63
-
64
- msgid "If your blog is in a subdirectory and you want to add pages which are NOT in the blog directory or beneath, you MUST place your sitemap file in the root directory (Look at the &quot;Location of your sitemap file&quot; section on this page)!"
65
- msgstr "�������Ȃ��̃u���O���T�u�f�B���N�g���ɔz�u����Ă���ꍇ�ɁA�u���O�f�B���N�g���ȊO�̃y�[�W�� Sitemap �Ɋ܂߂����Ƃ��́ASitemap �t�@�C�������[�g�f�B���N�g���ɔz�u���ׂ��ł��B�i���̃y�[�W�� &quot;Sitemap �t�@�C���̏ꏊ&quot; �ݒ���m�F���ĉ������j"
66
-
67
- #: sitemap.php:512
68
- msgid "Configuration updated"
69
- msgstr "�ݒ���X�V���܂����B"
70
-
71
- #: sitemap.php:513
72
- msgid "Error"
73
- msgstr "�G���[�ł��B"
74
-
75
- #: sitemap.php:521
76
- msgid "A new page was added. Click on &quot;Save page changes&quot; to save your changes."
77
- msgstr "�V�����lj��y�[�W�i�̐ݒ藓�j�������܂����B �i�y�[�W�̏�����͌�j&quot;�ύX�̕ۑ�&quot ���������Đݒ��ۑ����ĉ������B"
78
-
79
- #: sitemap.php:527
80
- msgid "Pages saved"
81
- msgstr "�lj��y�[�W�̐ݒ��ۑ����܂����B"
82
-
83
- #: sitemap.php:528
84
- msgid "Error while saving pages"
85
- msgstr "�lj��y�[�W�̐ݒ�̕ۑ����ɃG���[���������܂����B"
86
-
87
- #: sitemap.php:539
88
- msgid "The page was deleted. Click on &quot;Save page changes&quot; to save your changes."
89
- msgstr "�w�肳�ꂽ�lj��y�[�W�i�̐ݒ藓�j���폜���܂����B &quot;�ύX�̕ۑ�&quot ���������Đݒ��ۑ����ĉ������B"
90
-
91
- #: sitemap.php:542
92
- msgid "You changes have been cleared."
93
- msgstr "�ύX�͊��ɍ폜����Ă��܂��B"
94
-
95
- #: sitemap.php:555
96
- msgid "Sitemap Generator"
97
- msgstr "Sitemap Generator"
98
-
99
- #: sitemap.php:558
100
- msgid "Manual rebuild"
101
- msgstr "�蓮�ɂ�� Sitemap �t�@�C���̍č\�z"
102
-
103
- #: sitemap.php:559
104
- msgid "If you want to build the sitemap without editing a post, click on here!"
105
- msgstr "�������e�̕ҏW�Ȃ��� Sitemap �t�@�C�����č\�z�������ꍇ�͂��̃{�^�����������Ă�������!"
106
-
107
- #: sitemap.php:560
108
- msgid "Rebuild Sitemap"
109
- msgstr "Sitemap �̍č\�z"
110
-
111
- #: sitemap.php:564
112
- msgid "Additional pages"
113
- msgstr "�lj��y�[�W�̐ݒ�"
114
-
115
- #: sitemap.php:566
116
- msgid "Here you can specify files or URLs which should be included in the sitemap, but do not belong to your Blog/WordPress.<br />For example, if your domain is www.foo.com and your blog is located on www.foo.com/blog you might want to include your homepage at www.foo.com"
117
- msgstr "�����ŁASitemap �Ɋ܂܂��ׂ��ł��� URL ���w�肷�邱�Ƃ��ł��܂��B �������A�����Ŏw�肷�� URL �� WordPress/Blog �ɑ����Ă͂����܂���B<br />�Ⴆ�΃h���C���� www.foo.com �Ńu���O�� www.foo.com/blog �������ꍇ�A���Ȃ��� www.foo.com �� Sitemap �Ɋ܂݂����Ǝv����������܂���B�i��: ���̍��ڂ� WordPress �ȊO�� URL ���w�肵�A�v���O�C���ŏo�͂��� Sitemap �Ɋ܂߂邱�Ƃ��ł��܂��j"
118
-
119
- #: sitemap.php:568
120
- msgid "URL to the page"
121
- msgstr "���̃y�[�W��URL"
122
-
123
- #: sitemap.php:569
124
- msgid "Enter the URL to the page. Examples: http://www.foo.com/index.html or www.foo.com/home "
125
- msgstr "���̃y�[�W��URL ����͂��ĉ������B ��: http://www.foo.com/index.html �� www.foo.com/home "
126
-
127
- #: sitemap.php:571
128
- msgid "Priority"
129
- msgstr "�D�揇��(priority)�̐ݒ�"
130
-
131
- #: sitemap.php:572
132
- msgid "Choose the priority of the page relative to the other pages. For example, your homepage might have a higher priority than your imprint."
133
- msgstr "���̃y�[�W�ɔ�Ⴕ���y�[�W�̗D�揇��(priority)��I��ł��������B �Ⴆ�΁A���Ȃ��̃z�[���y�[�W�́A���L�̃y�[�W��荂���D��x�����邩������܂���B"
134
-
135
- #: sitemap.php:574
136
- msgid "Last Changed"
137
- msgstr "�ŏI�X�V��"
138
-
139
- #: sitemap.php:575
140
- msgid "Enter the date of the last change as YYYY-MM-DD (2005-12-31 for example) (optional)."
141
- msgstr "�ŏI�X�V���� YYYY-MM-DD �`���œ��͂��ĉ������B"
142
-
143
- #: sitemap.php:583
144
- msgid "Change Frequency"
145
- msgstr "�X�V�p�x(changefreq)�̐ݒ�"
146
-
147
- #: sitemap.php:585
148
- msgid "#"
149
- msgstr "#"
150
-
151
- #: sitemap.php:609
152
- msgid "No pages defined."
153
- msgstr "�lj��y�[�W�͒�`����Ă��܂���B"
154
-
155
- #: sitemap.php:616
156
- msgid "Add new page"
157
- msgstr "�V�����y�[�W�̒lj�"
158
-
159
- #: sitemap.php:617
160
- msgid "Save page changes"
161
- msgstr "�ύX�̕ۑ�"
162
-
163
- #: sitemap.php:618
164
- msgid "Undo all page changes"
165
- msgstr "�y�[�W�̕ύX�����ɖ߂�"
166
-
167
- #: sitemap.php:621
168
- msgid "Delete marked page"
169
- msgstr "�}�[�N���ꂽ�y�[�W�̍폜"
170
-
171
- #: sitemap.php:627
172
- msgid "Basic Options"
173
- msgstr "��{�I�Ȑݒ�"
174
-
175
- #: sitemap.php:632
176
- msgid "Enable automatic priority calculation for posts based on comment count"
177
- msgstr "���e�ɑ΂���R�����g���ŁA���e�i�e�G���g���j�̗D�揇��(priority)�������v�Z����@�\��L���ɂ���"
178
-
179
- #: sitemap.php:638
180
- msgid "Write debug comments"
181
- msgstr "�f�o�b�O�p�R�����g�o�͂��s��"
182
-
183
- #: sitemap.php:643
184
- msgid "Filename of the sitemap file"
185
- msgstr "Sitemap �̃t�@�C����"
186
-
187
- #: sitemap.php:650
188
- msgid "Write a normal XML file (your filename)"
189
- msgstr "�W���� XML �t�@�C�����o�͂��� (filename)"
190
-
191
- #: sitemap.php:652
192
- msgid "Detected URL"
193
- msgstr "Detected URL"
194
-
195
- #: sitemap.php:657
196
- msgid "Write a gzipped file (your filename + .gz)"
197
- msgstr "gz ���k���ꂽ�t�@�C�����o�͂��� (filename + .gz)"
198
-
199
- #: sitemap.php:664
200
- msgid "Auto-Ping Google Sitemaps"
201
- msgstr "Google Sitemap �ɍX�V ping �𑗂�"
202
-
203
- #: sitemap.php:665
204
- msgid "This option will automatically tell Google about changes."
205
- msgstr "���̃I�v�V�����́A�ύX�� Google �Ɏ����I�ɒʒm���܂��B"
206
-
207
- #: sitemap.php:672
208
- msgid "Includings"
209
- msgstr "Sitemap �Ɋ܂߂� ���ڂ̐ݒ�"
210
-
211
- #: sitemap.php:677
212
- msgid "Include homepage"
213
- msgstr "�z�[���y�[�W"
214
-
215
- #: sitemap.php:683
216
- msgid "Include posts"
217
- msgstr "���e�i�e�G���g���j"
218
-
219
- #: sitemap.php:689
220
- msgid "Include static pages"
221
- msgstr "�ÓI�ȃy�[�W"
222
-
223
- #: sitemap.php:695
224
- msgid "Include categories"
225
- msgstr "�J�e�S����"
226
-
227
- #: sitemap.php:701
228
- msgid "Include archives"
229
- msgstr "�A�[�J�C�u��"
230
-
231
- #: sitemap.php:708
232
- msgid "Change frequencies"
233
- msgstr "�X�V�p�x(changefreq)�̐ݒ�"
234
-
235
- #: sitemap.php:709
236
- msgid "Note"
237
- msgstr "����"
238
-
239
- #: sitemap.php:710
240
- msgid "Please note that the value of this tag is considered a hint and not a command. Even though search engine crawlers consider this information when making decisions, they may crawl pages marked \"hourly\" less frequently than that, and they may crawl pages marked \"yearly\" more frequently than that. It is also likely that crawlers will periodically crawl pages marked \"never\" so that they can handle unexpected changes to those pages."
241
- msgstr "���̃^�O�̒l�͖��߂ł͂Ȃ��q���g���ƍl�����܂��B�T�[�`�G���W���̃N���[���͂��̐ݒ���l���ɓ���܂����A\"1���Ԃ���\" �̐ݒ�ɂ��Ă����̕p�x�ŃN���[�����Ȃ���������Ȃ����A\"�N��x��\" �ݒ�ɂ��Ă�������p�ɂɃN���[������邩������܂���B�܂� \"�X�V����Ȃ�\" �ɐݒ肳�ꂽ�y�[�W���A�v�������Ȃ��ω��������̃y�[�W���瓾�邽�߂ɁA�����炭�N���[���͒���I�ɃN���[������ł��傤�B"
242
-
243
- #: sitemap.php:715
244
- msgid "Homepage"
245
- msgstr "�z�[���y�[�W"
246
-
247
- #: sitemap.php:721
248
- msgid "Posts"
249
- msgstr "���e�i�e�G���g���j"
250
-
251
- #: sitemap.php:727
252
- msgid "Static pages"
253
- msgstr "�ÓI�ȃy�[�W"
254
-
255
- #: sitemap.php:733
256
- msgid "Categories"
257
- msgstr "�J�e�S����"
258
-
259
- #: sitemap.php:739
260
- msgid "The current archive of this month (Should be the same like your homepage)"
261
- msgstr "�����̃A�[�J�C�u (\"�z�[���y�[�W\" �̐ݒ�Ɠ����ɂ��ׂ��ł�)"
262
-
263
- #: sitemap.php:745
264
- msgid "Older archives (Changes only if you edit an old post)"
265
- msgstr "�Â��A�[�J�C�u (�Â����e��ҏW�����Ƃ������ύX���Ă�������)"
266
-
267
- #: sitemap.php:752
268
- msgid "Priorities"
269
- msgstr "�D�揇��(priority)�̐ݒ�"
270
-
271
- #: sitemap.php:763
272
- msgid "Posts (If auto calculation is disabled)"
273
- msgstr "���e�i�e�G���g���j (\"��{�I�Ȑݒ�\"�Ŏ����v�Z�ɐݒ肵�Ă��Ȃ��ꍇ�ɗL��)"
274
-
275
- #: sitemap.php:769
276
- msgid "Minimum post priority (Even if auto calculation is enabled)"
277
- msgstr "���e�i�e�G���g���j�̍ŏ��l (\"��{�I�Ȑݒ�\"�Ŏ����v�Z�ɐݒ肵�Ă���ꍇ�ɗL��)"
278
-
279
- #: sitemap.php:787
280
- msgid "Archives"
281
- msgstr "�A�[�J�C�u��"
282
-
283
- #: sitemap.php:793
284
- msgid "Informations and support"
285
- msgstr "���ƃT�|�[�g"
286
-
287
- #: sitemap.php:794
288
- msgid "Check %s for updates and comment there if you have any problems / questions / suggestions."
289
- msgstr "�����A����^��A��Ă������ %s �̃A�b�v�f�[�g����R�����g���m�F���ĉ������B"
290
-
291
- #: sitemap.php:797
292
- msgid "Update options"
293
- msgstr "�ݒ���X�V &raquo;"
294
-
295
- #: sitemap.php:1033
296
- msgid "URL:"
297
- msgstr "URL:"
298
-
299
- #: sitemap.php:1034
300
- msgid "Path:"
301
- msgstr "Path:"
302
-
303
- #: sitemap.php:1037
304
- msgid "Could not write into %s"
305
- msgstr "%s �ɏ������ނ��Ƃ��ł��܂���B"
306
-
307
- #: sitemap.php:1048
308
- msgid "Successfully built sitemap file:"
309
- msgstr "�\�z�ɐ������� Sitemap �t�@�C��:"
310
-
311
- #: sitemap.php:1048
312
- msgid "Successfully built gzipped sitemap file:"
313
- msgstr "�\�z�ɐ������� gz ���k���ꂽ Sitemap �t�@�C��:"
314
-
315
- #: sitemap.php:1062
316
- msgid "Could not ping to Google at %s"
317
- msgstr "Google �ւ̍X�V ping �̑��M���ł��܂���ł����B %s"
318
-
319
- #: sitemap.php:1064
320
- msgid "Successfully pinged Google at %s"
321
- msgstr "Google �ւ̍X�V ping �̑��M���������܂����B %s"
322
-
1
+ # Japanese Language File for sitemap (sitemap-ja_JP.UTF-8.po)
2
+ # Copyright (C) 2005 hiromasa : http://hiromasa.zone.ne.jp/
3
+ # This file is distributed under the same license as the WordPress package.
4
+ # hiromasa <webmaster@hiromasa.zone.ne.jp>, 2005.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: sitemap\n"
9
+ "Report-Msgid-Bugs-To: <webmaster@hiromasa.zone.ne.jp>\n"
10
+ "POT-Creation-Date: 2005-06-09 02:00+0900\n"
11
+ "PO-Revision-Date: 2005-07-03 23:17+0900\n"
12
+ "Last-Translator: hiromasa <webmaster@hiromasa.zone.ne.jp>\n"
13
+ "MIME-Version: 1.0\n"
14
+ "Content-Type: text/plain; charset=Shift_JIS\n"
15
+ "Content-Transfer-Encoding: 8bit\n"
16
+ "Language-Team: \n"
17
+
18
+ #: sitemap.php:375
19
+ msgid "always"
20
+ msgstr "���‚�"
21
+
22
+ msgid "hourly"
23
+ msgstr "����"
24
+
25
+ msgid "daily"
26
+ msgstr "����"
27
+
28
+ msgid "weekly"
29
+ msgstr "���T"
30
+
31
+ msgid "monthly"
32
+ msgstr "����"
33
+
34
+ msgid "yearly"
35
+ msgstr "���N"
36
+
37
+ msgid "never"
38
+ msgstr "�X�V����Ȃ�"
39
+
40
+ msgid "Detected Path"
41
+ msgstr "�p�X�̒��ڐݒ�"
42
+
43
+ msgid "Example"
44
+ msgstr "��"
45
+
46
+ msgid "Absolute or relative path to the sitemap file, including name."
47
+ msgstr "�t�@�C�������܂� Sitemap �t�@�C���ւ̑��΂������͐�΃p�X"
48
+
49
+ msgid "Complete URL to the sitemap file, including name."
50
+ msgstr "�t�@�C�������܂� Sitemap �t�@�C���ւ̊��S�� URL"
51
+
52
+ msgid "Automatic location"
53
+ msgstr "�����z�u"
54
+
55
+ msgid "Manual location"
56
+ msgstr "�蓮�z�u"
57
+
58
+ msgid "OR"
59
+ msgstr "��������"
60
+
61
+ msgid "Location of your sitemap file"
62
+ msgstr "Sitemap �t�@�C���̏ꏊ"
63
+
64
+ msgid "If your blog is in a subdirectory and you want to add pages which are NOT in the blog directory or beneath, you MUST place your sitemap file in the root directory (Look at the &quot;Location of your sitemap file&quot; section on this page)!"
65
+ msgstr "�������Ȃ��̃u���O���T�u�f�B���N�g���ɔz�u����Ă���ꍇ�ɁA�u���O�f�B���N�g���ȊO�̃y�[�W�� Sitemap �Ɋ܂߂����Ƃ��́ASitemap �t�@�C�������[�g�f�B���N�g���ɔz�u���ׂ��ł��B�i���̃y�[�W�� &quot;Sitemap �t�@�C���̏ꏊ&quot; �ݒ���m�F���ĉ������j"
66
+
67
+ #: sitemap.php:512
68
+ msgid "Configuration updated"
69
+ msgstr "�ݒ���X�V���܂����B"
70
+
71
+ #: sitemap.php:513
72
+ msgid "Error"
73
+ msgstr "�G���[�ł��B"
74
+
75
+ #: sitemap.php:521
76
+ msgid "A new page was added. Click on &quot;Save page changes&quot; to save your changes."
77
+ msgstr "�V�����lj��y�[�W�i�̐ݒ藓�j�������܂����B �i�y�[�W�̏�����͌�j&quot;�ύX�̕ۑ�&quot ���������Đݒ��ۑ����ĉ������B"
78
+
79
+ #: sitemap.php:527
80
+ msgid "Pages saved"
81
+ msgstr "�lj��y�[�W�̐ݒ��ۑ����܂����B"
82
+
83
+ #: sitemap.php:528
84
+ msgid "Error while saving pages"
85
+ msgstr "�lj��y�[�W�̐ݒ�̕ۑ����ɃG���[���������܂����B"
86
+
87
+ #: sitemap.php:539
88
+ msgid "The page was deleted. Click on &quot;Save page changes&quot; to save your changes."
89
+ msgstr "�w�肳�ꂽ�lj��y�[�W�i�̐ݒ藓�j���폜���܂����B &quot;�ύX�̕ۑ�&quot ���������Đݒ��ۑ����ĉ������B"
90
+
91
+ #: sitemap.php:542
92
+ msgid "You changes have been cleared."
93
+ msgstr "�ύX�͊��ɍ폜����Ă��܂��B"
94
+
95
+ #: sitemap.php:555
96
+ msgid "Sitemap Generator"
97
+ msgstr "Sitemap Generator"
98
+
99
+ #: sitemap.php:558
100
+ msgid "Manual rebuild"
101
+ msgstr "�蓮�ɂ�� Sitemap �t�@�C���̍č\�z"
102
+
103
+ #: sitemap.php:559
104
+ msgid "If you want to build the sitemap without editing a post, click on here!"
105
+ msgstr "�������e�̕ҏW�Ȃ��� Sitemap �t�@�C�����č\�z�������ꍇ�͂��̃{�^�����������Ă�������!"
106
+
107
+ #: sitemap.php:560
108
+ msgid "Rebuild Sitemap"
109
+ msgstr "Sitemap �̍č\�z"
110
+
111
+ #: sitemap.php:564
112
+ msgid "Additional pages"
113
+ msgstr "�lj��y�[�W�̐ݒ�"
114
+
115
+ #: sitemap.php:566
116
+ msgid "Here you can specify files or URLs which should be included in the sitemap, but do not belong to your Blog/WordPress.<br />For example, if your domain is www.foo.com and your blog is located on www.foo.com/blog you might want to include your homepage at www.foo.com"
117
+ msgstr "�����ŁASitemap �Ɋ܂܂��ׂ��ł��� URL ���w�肷�邱�Ƃ��ł��܂��B �������A�����Ŏw�肷�� URL �� WordPress/Blog �ɑ����Ă͂����܂���B<br />�Ⴆ�΃h���C���� www.foo.com �Ńu���O�� www.foo.com/blog �������ꍇ�A���Ȃ��� www.foo.com �� Sitemap �Ɋ܂݂����Ǝv����������܂���B�i��: ���̍��ڂ� WordPress �ȊO�� URL ���w�肵�A�v���O�C���ŏo�͂��� Sitemap �Ɋ܂߂邱�Ƃ��ł��܂��j"
118
+
119
+ #: sitemap.php:568
120
+ msgid "URL to the page"
121
+ msgstr "���̃y�[�W��URL"
122
+
123
+ #: sitemap.php:569
124
+ msgid "Enter the URL to the page. Examples: http://www.foo.com/index.html or www.foo.com/home "
125
+ msgstr "���̃y�[�W��URL ����͂��ĉ������B ��: http://www.foo.com/index.html �� www.foo.com/home "
126
+
127
+ #: sitemap.php:571
128
+ msgid "Priority"
129
+ msgstr "�D�揇��(priority)�̐ݒ�"
130
+
131
+ #: sitemap.php:572
132
+ msgid "Choose the priority of the page relative to the other pages. For example, your homepage might have a higher priority than your imprint."
133
+ msgstr "���̃y�[�W�ɔ�Ⴕ���y�[�W�̗D�揇��(priority)��I��ł��������B �Ⴆ�΁A���Ȃ��̃z�[���y�[�W�́A���L�̃y�[�W��荂���D��x�����邩������܂���B"
134
+
135
+ #: sitemap.php:574
136
+ msgid "Last Changed"
137
+ msgstr "�ŏI�X�V��"
138
+
139
+ #: sitemap.php:575
140
+ msgid "Enter the date of the last change as YYYY-MM-DD (2005-12-31 for example) (optional)."
141
+ msgstr "�ŏI�X�V���� YYYY-MM-DD �`���œ��͂��ĉ������B"
142
+
143
+ #: sitemap.php:583
144
+ msgid "Change Frequency"
145
+ msgstr "�X�V�p�x(changefreq)�̐ݒ�"
146
+
147
+ #: sitemap.php:585
148
+ msgid "#"
149
+ msgstr "#"
150
+
151
+ #: sitemap.php:609
152
+ msgid "No pages defined."
153
+ msgstr "�lj��y�[�W�͒�`����Ă��܂���B"
154
+
155
+ #: sitemap.php:616
156
+ msgid "Add new page"
157
+ msgstr "�V�����y�[�W�̒lj�"
158
+
159
+ #: sitemap.php:617
160
+ msgid "Save page changes"
161
+ msgstr "�ύX�̕ۑ�"
162
+
163
+ #: sitemap.php:618
164
+ msgid "Undo all page changes"
165
+ msgstr "�y�[�W�̕ύX�����ɖ߂�"
166
+
167
+ #: sitemap.php:621
168
+ msgid "Delete marked page"
169
+ msgstr "�}�[�N���ꂽ�y�[�W�̍폜"
170
+
171
+ #: sitemap.php:627
172
+ msgid "Basic Options"
173
+ msgstr "��{�I�Ȑݒ�"
174
+
175
+ #: sitemap.php:632
176
+ msgid "Enable automatic priority calculation for posts based on comment count"
177
+ msgstr "���e�ɑ΂���R�����g���ŁA���e�i�e�G���g���j�̗D�揇��(priority)�������v�Z����@�\��L���ɂ���"
178
+
179
+ #: sitemap.php:638
180
+ msgid "Write debug comments"
181
+ msgstr "�f�o�b�O�p�R�����g�o�͂��s��"
182
+
183
+ #: sitemap.php:643
184
+ msgid "Filename of the sitemap file"
185
+ msgstr "Sitemap �̃t�@�C����"
186
+
187
+ #: sitemap.php:650
188
+ msgid "Write a normal XML file (your filename)"
189
+ msgstr "�W���� XML �t�@�C�����o�͂��� (filename)"
190
+
191
+ #: sitemap.php:652
192
+ msgid "Detected URL"
193
+ msgstr "Detected URL"
194
+
195
+ #: sitemap.php:657
196
+ msgid "Write a gzipped file (your filename + .gz)"
197
+ msgstr "gz ���k���ꂽ�t�@�C�����o�͂��� (filename + .gz)"
198
+
199
+ #: sitemap.php:664
200
+ msgid "Auto-Ping Google Sitemaps"
201
+ msgstr "Google Sitemap �ɍX�V ping �𑗂�"
202
+
203
+ #: sitemap.php:665
204
+ msgid "This option will automatically tell Google about changes."
205
+ msgstr "���̃I�v�V�����́A�ύX�� Google �Ɏ����I�ɒʒm���܂��B"
206
+
207
+ #: sitemap.php:672
208
+ msgid "Includings"
209
+ msgstr "Sitemap �Ɋ܂߂� ���ڂ̐ݒ�"
210
+
211
+ #: sitemap.php:677
212
+ msgid "Include homepage"
213
+ msgstr "�z�[���y�[�W"
214
+
215
+ #: sitemap.php:683
216
+ msgid "Include posts"
217
+ msgstr "���e�i�e�G���g���j"
218
+
219
+ #: sitemap.php:689
220
+ msgid "Include static pages"
221
+ msgstr "�ÓI�ȃy�[�W"
222
+
223
+ #: sitemap.php:695
224
+ msgid "Include categories"
225
+ msgstr "�J�e�S����"
226
+
227
+ #: sitemap.php:701
228
+ msgid "Include archives"
229
+ msgstr "�A�[�J�C�u��"
230
+
231
+ #: sitemap.php:708
232
+ msgid "Change frequencies"
233
+ msgstr "�X�V�p�x(changefreq)�̐ݒ�"
234
+
235
+ #: sitemap.php:709
236
+ msgid "Note"
237
+ msgstr "����"
238
+
239
+ #: sitemap.php:710
240
+ msgid "Please note that the value of this tag is considered a hint and not a command. Even though search engine crawlers consider this information when making decisions, they may crawl pages marked \"hourly\" less frequently than that, and they may crawl pages marked \"yearly\" more frequently than that. It is also likely that crawlers will periodically crawl pages marked \"never\" so that they can handle unexpected changes to those pages."
241
+ msgstr "���̃^�O�̒l�͖��߂ł͂Ȃ��q���g���ƍl�����܂��B�T�[�`�G���W���̃N���[���͂��̐ݒ���l���ɓ���܂����A\"1���Ԃ���\" �̐ݒ�ɂ��Ă����̕p�x�ŃN���[�����Ȃ���������Ȃ����A\"�N��x��\" �ݒ�ɂ��Ă�������p�ɂɃN���[������邩������܂���B�܂� \"�X�V����Ȃ�\" �ɐݒ肳�ꂽ�y�[�W���A�v�������Ȃ��ω��������̃y�[�W���瓾�邽�߂ɁA�����炭�N���[���͒���I�ɃN���[������ł��傤�B"
242
+
243
+ #: sitemap.php:715
244
+ msgid "Homepage"
245
+ msgstr "�z�[���y�[�W"
246
+
247
+ #: sitemap.php:721
248
+ msgid "Posts"
249
+ msgstr "���e�i�e�G���g���j"
250
+
251
+ #: sitemap.php:727
252
+ msgid "Static pages"
253
+ msgstr "�ÓI�ȃy�[�W"
254
+
255
+ #: sitemap.php:733
256
+ msgid "Categories"
257
+ msgstr "�J�e�S����"
258
+
259
+ #: sitemap.php:739
260
+ msgid "The current archive of this month (Should be the same like your homepage)"
261
+ msgstr "�����̃A�[�J�C�u (\"�z�[���y�[�W\" �̐ݒ�Ɠ����ɂ��ׂ��ł�)"
262
+
263
+ #: sitemap.php:745
264
+ msgid "Older archives (Changes only if you edit an old post)"
265
+ msgstr "�Â��A�[�J�C�u (�Â����e��ҏW�����Ƃ������ύX���Ă�������)"
266
+
267
+ #: sitemap.php:752
268
+ msgid "Priorities"
269
+ msgstr "�D�揇��(priority)�̐ݒ�"
270
+
271
+ #: sitemap.php:763
272
+ msgid "Posts (If auto calculation is disabled)"
273
+ msgstr "���e�i�e�G���g���j (\"��{�I�Ȑݒ�\"�Ŏ����v�Z�ɐݒ肵�Ă��Ȃ��ꍇ�ɗL��)"
274
+
275
+ #: sitemap.php:769
276
+ msgid "Minimum post priority (Even if auto calculation is enabled)"
277
+ msgstr "���e�i�e�G���g���j�̍ŏ��l (\"��{�I�Ȑݒ�\"�Ŏ����v�Z�ɐݒ肵�Ă���ꍇ�ɗL��)"
278
+
279
+ #: sitemap.php:787
280
+ msgid "Archives"
281
+ msgstr "�A�[�J�C�u��"
282
+
283
+ #: sitemap.php:793
284
+ msgid "Informations and support"
285
+ msgstr "���ƃT�|�[�g"
286
+
287
+ #: sitemap.php:794
288
+ msgid "Check %s for updates and comment there if you have any problems / questions / suggestions."
289
+ msgstr "�����A����^��A��Ă������ %s �̃A�b�v�f�[�g����R�����g���m�F���ĉ������B"
290
+
291
+ #: sitemap.php:797
292
+ msgid "Update options"
293
+ msgstr "�ݒ���X�V &raquo;"
294
+
295
+ #: sitemap.php:1033
296
+ msgid "URL:"
297
+ msgstr "URL:"
298
+
299
+ #: sitemap.php:1034
300
+ msgid "Path:"
301
+ msgstr "Path:"
302
+
303
+ #: sitemap.php:1037
304
+ msgid "Could not write into %s"
305
+ msgstr "%s �ɏ������ނ��Ƃ��ł��܂���B"
306
+
307
+ #: sitemap.php:1048
308
+ msgid "Successfully built sitemap file:"
309
+ msgstr "�\�z�ɐ������� Sitemap �t�@�C��:"
310
+
311
+ #: sitemap.php:1048
312
+ msgid "Successfully built gzipped sitemap file:"
313
+ msgstr "�\�z�ɐ������� gz ���k���ꂽ Sitemap �t�@�C��:"
314
+
315
+ #: sitemap.php:1062
316
+ msgid "Could not ping to Google at %s"
317
+ msgstr "Google �ւ̍X�V ping �̑��M���ł��܂���ł����B %s"
318
+
319
+ #: sitemap.php:1064
320
+ msgid "Successfully pinged Google at %s"
321
+ msgstr "Google �ւ̍X�V ping �̑��M���������܂����B %s"
322
+
lang/sitemap-ja_UTF.po CHANGED
@@ -1,322 +1,322 @@
1
- # Japanese Language File for sitemap (sitemap-ja_JP.UTF-8.po)
2
- # Copyright (C) 2005 hiromasa : http://hiromasa.zone.ne.jp/
3
- # This file is distributed under the same license as the WordPress package.
4
- # hiromasa <webmaster@hiromasa.zone.ne.jp>, 2005.
5
- #
6
- msgid ""
7
- msgstr ""
8
- "Project-Id-Version: sitemap\n"
9
- "Report-Msgid-Bugs-To: <webmaster@hiromasa.zone.ne.jp>\n"
10
- "POT-Creation-Date: 2005-06-09 02:00+0900\n"
11
- "PO-Revision-Date: 2005-07-03 23:17+0900\n"
12
- "Last-Translator: hiromasa <webmaster@hiromasa.zone.ne.jp>\n"
13
- "MIME-Version: 1.0\n"
14
- "Content-Type: text/plain; charset=UTF-8\n"
15
- "Content-Transfer-Encoding: 8bit\n"
16
- "Language-Team: \n"
17
-
18
- #: sitemap.php:375
19
- msgid "always"
20
- msgstr "いつも"
21
-
22
- msgid "hourly"
23
- msgstr "毎時"
24
-
25
- msgid "daily"
26
- msgstr "毎日"
27
-
28
- msgid "weekly"
29
- msgstr "毎週"
30
-
31
- msgid "monthly"
32
- msgstr "毎月"
33
-
34
- msgid "yearly"
35
- msgstr "毎年"
36
-
37
- msgid "never"
38
- msgstr "更新されない"
39
-
40
- msgid "Detected Path"
41
- msgstr "パスの直接設定"
42
-
43
- msgid "Example"
44
- msgstr "例"
45
-
46
- msgid "Absolute or relative path to the sitemap file, including name."
47
- msgstr "ファイル名を含む Sitemap ファイルへの相対もしくは絶対パス"
48
-
49
- msgid "Complete URL to the sitemap file, including name."
50
- msgstr "ファイル名を含む Sitemap ファイルへの完全な URL"
51
-
52
- msgid "Automatic location"
53
- msgstr "自動配置"
54
-
55
- msgid "Manual location"
56
- msgstr "手動配置"
57
-
58
- msgid "OR"
59
- msgstr "もしくは"
60
-
61
- msgid "Location of your sitemap file"
62
- msgstr "Sitemap ファイルの場所"
63
-
64
- msgid "If your blog is in a subdirectory and you want to add pages which are NOT in the blog directory or beneath, you MUST place your sitemap file in the root directory (Look at the &quot;Location of your sitemap file&quot; section on this page)!"
65
- msgstr "もしあなたのブログがサブディレクトリに配置されている場合に、ブログディレクトリ以外のページを Sitemap に含めたいときは、Sitemap ファイルをルートディレクトリに配置すべきです。(このページの &quot;Sitemap ファイルの場所&quot; 設定を確認して下さい)"
66
-
67
- #: sitemap.php:512
68
- msgid "Configuration updated"
69
- msgstr "設定を更新しました。"
70
-
71
- #: sitemap.php:513
72
- msgid "Error"
73
- msgstr "エラーです。"
74
-
75
- #: sitemap.php:521
76
- msgid "A new page was added. Click on &quot;Save page changes&quot; to save your changes."
77
- msgstr "新しい追加ページ(の設定欄)が加わりました。 (ページの情報を入力後)&quot;変更の保存&quot を押下して設定を保存して下さい。"
78
-
79
- #: sitemap.php:527
80
- msgid "Pages saved"
81
- msgstr "追加ページの設定を保存しました。"
82
-
83
- #: sitemap.php:528
84
- msgid "Error while saving pages"
85
- msgstr "追加ページの設定の保存中にエラーが発生しました。"
86
-
87
- #: sitemap.php:539
88
- msgid "The page was deleted. Click on &quot;Save page changes&quot; to save your changes."
89
- msgstr "指定された追加ページ(の設定欄)を削除しました。 &quot;変更の保存&quot を押下して設定を保存して下さい。"
90
-
91
- #: sitemap.php:542
92
- msgid "You changes have been cleared."
93
- msgstr "変更は既に削除されています。"
94
-
95
- #: sitemap.php:555
96
- msgid "Sitemap Generator"
97
- msgstr "Sitemap Generator"
98
-
99
- #: sitemap.php:558
100
- msgid "Manual rebuild"
101
- msgstr "手動による Sitemap ファイルの再構築"
102
-
103
- #: sitemap.php:559
104
- msgid "If you want to build the sitemap without editing a post, click on here!"
105
- msgstr "もし投稿の編集なしに Sitemap ファイルを再構築したい場合はこのボタンを押下してください!"
106
-
107
- #: sitemap.php:560
108
- msgid "Rebuild Sitemap"
109
- msgstr "Sitemap の再構築"
110
-
111
- #: sitemap.php:564
112
- msgid "Additional pages"
113
- msgstr "追加ページの設定"
114
-
115
- #: sitemap.php:566
116
- msgid "Here you can specify files or URLs which should be included in the sitemap, but do not belong to your Blog/WordPress.<br />For example, if your domain is www.foo.com and your blog is located on www.foo.com/blog you might want to include your homepage at www.foo.com"
117
- msgstr "ここで、Sitemap に含まれるべきである URL を指定することができます。 しかし、ここで指定する URL は WordPress/Blog に属してはいけません。<br />例えばドメインが www.foo.com でブログが www.foo.com/blog だった場合、あなたは www.foo.com を Sitemap に含みたいと思うかもしれません。(訳注: この項目で WordPress 以外の URL を指定し、プラグインで出力する Sitemap に含めることができます)"
118
-
119
- #: sitemap.php:568
120
- msgid "URL to the page"
121
- msgstr "そのページのURL"
122
-
123
- #: sitemap.php:569
124
- msgid "Enter the URL to the page. Examples: http://www.foo.com/index.html or www.foo.com/home "
125
- msgstr "そのページのURL を入力して下さい。 例: http://www.foo.com/index.html や www.foo.com/home "
126
-
127
- #: sitemap.php:571
128
- msgid "Priority"
129
- msgstr "優先順位(priority)の設定"
130
-
131
- #: sitemap.php:572
132
- msgid "Choose the priority of the page relative to the other pages. For example, your homepage might have a higher priority than your imprint."
133
- msgstr "他のページに比例したページの優先順位(priority)を選んでください。 例えば、あなたのホームページは、銘記のページより高い優先度があるかもしれません。"
134
-
135
- #: sitemap.php:574
136
- msgid "Last Changed"
137
- msgstr "最終更新日"
138
-
139
- #: sitemap.php:575
140
- msgid "Enter the date of the last change as YYYY-MM-DD (2005-12-31 for example) (optional)."
141
- msgstr "最終更新日を YYYY-MM-DD 形式で入力して下さい。"
142
-
143
- #: sitemap.php:583
144
- msgid "Change Frequency"
145
- msgstr "更新頻度(changefreq)の設定"
146
-
147
- #: sitemap.php:585
148
- msgid "#"
149
- msgstr "#"
150
-
151
- #: sitemap.php:609
152
- msgid "No pages defined."
153
- msgstr "追加ページは定義されていません。"
154
-
155
- #: sitemap.php:616
156
- msgid "Add new page"
157
- msgstr "新しいページの追加"
158
-
159
- #: sitemap.php:617
160
- msgid "Save page changes"
161
- msgstr "変更の保存"
162
-
163
- #: sitemap.php:618
164
- msgid "Undo all page changes"
165
- msgstr "ページの変更を元に戻す"
166
-
167
- #: sitemap.php:621
168
- msgid "Delete marked page"
169
- msgstr "マークされたページの削除"
170
-
171
- #: sitemap.php:627
172
- msgid "Basic Options"
173
- msgstr "基本的な設定"
174
-
175
- #: sitemap.php:632
176
- msgid "Enable automatic priority calculation for posts based on comment count"
177
- msgstr "投稿に対するコメント数で、投稿(各エントリ)の優先順位(priority)を自動計算する機能を有効にする"
178
-
179
- #: sitemap.php:638
180
- msgid "Write debug comments"
181
- msgstr "デバッグ用コメント出力を行う"
182
-
183
- #: sitemap.php:643
184
- msgid "Filename of the sitemap file"
185
- msgstr "Sitemap のファイル名"
186
-
187
- #: sitemap.php:650
188
- msgid "Write a normal XML file (your filename)"
189
- msgstr "標準の XML ファイルを出力する (filename)"
190
-
191
- #: sitemap.php:652
192
- msgid "Detected URL"
193
- msgstr "Detected URL"
194
-
195
- #: sitemap.php:657
196
- msgid "Write a gzipped file (your filename + .gz)"
197
- msgstr "gz 圧縮されたファイルを出力する (filename + .gz)"
198
-
199
- #: sitemap.php:664
200
- msgid "Auto-Ping Google Sitemaps"
201
- msgstr "Google Sitemap に更新 ping を送る"
202
-
203
- #: sitemap.php:665
204
- msgid "This option will automatically tell Google about changes."
205
- msgstr "このオプションは、変更を Google に自動的に通知します。"
206
-
207
- #: sitemap.php:672
208
- msgid "Includings"
209
- msgstr "Sitemap に含める 項目の設定"
210
-
211
- #: sitemap.php:677
212
- msgid "Include homepage"
213
- msgstr "ホームページ"
214
-
215
- #: sitemap.php:683
216
- msgid "Include posts"
217
- msgstr "投稿(各エントリ)"
218
-
219
- #: sitemap.php:689
220
- msgid "Include static pages"
221
- msgstr "静的なページ"
222
-
223
- #: sitemap.php:695
224
- msgid "Include categories"
225
- msgstr "カテゴリ別"
226
-
227
- #: sitemap.php:701
228
- msgid "Include archives"
229
- msgstr "アーカイブ別"
230
-
231
- #: sitemap.php:708
232
- msgid "Change frequencies"
233
- msgstr "更新頻度(changefreq)の設定"
234
-
235
- #: sitemap.php:709
236
- msgid "Note"
237
- msgstr "メモ"
238
-
239
- #: sitemap.php:710
240
- msgid "Please note that the value of this tag is considered a hint and not a command. Even though search engine crawlers consider this information when making decisions, they may crawl pages marked \"hourly\" less frequently than that, and they may crawl pages marked \"yearly\" more frequently than that. It is also likely that crawlers will periodically crawl pages marked \"never\" so that they can handle unexpected changes to those pages."
241
- msgstr "このタグの値は命令ではなくヒントだと考えられます。サーチエンジンのクローラはこの設定を考慮に入れますが、\"1時間おき\" の設定にしてもその頻度でクロールしないかもしれないし、\"年一度の\" 設定にしてもそれより頻繁にクロールされるかもしれません。また \"更新されない\" に設定されたページも、思いがけない変化をこれらのページから得るために、おそらくクローラは定期的にクロールするでしょう。"
242
-
243
- #: sitemap.php:715
244
- msgid "Homepage"
245
- msgstr "ホームページ"
246
-
247
- #: sitemap.php:721
248
- msgid "Posts"
249
- msgstr "投稿(各エントリ)"
250
-
251
- #: sitemap.php:727
252
- msgid "Static pages"
253
- msgstr "静的なページ"
254
-
255
- #: sitemap.php:733
256
- msgid "Categories"
257
- msgstr "カテゴリ別"
258
-
259
- #: sitemap.php:739
260
- msgid "The current archive of this month (Should be the same like your homepage)"
261
- msgstr "当月のアーカイブ (\"ホームページ\" の設定と同じにすべきです)"
262
-
263
- #: sitemap.php:745
264
- msgid "Older archives (Changes only if you edit an old post)"
265
- msgstr "古いアーカイブ (古い投稿を編集したときだけ変更してください)"
266
-
267
- #: sitemap.php:752
268
- msgid "Priorities"
269
- msgstr "優先順位(priority)の設定"
270
-
271
- #: sitemap.php:763
272
- msgid "Posts (If auto calculation is disabled)"
273
- msgstr "投稿(各エントリ) (\"基本的な設定\"で自動計算に設定していない場合に有効)"
274
-
275
- #: sitemap.php:769
276
- msgid "Minimum post priority (Even if auto calculation is enabled)"
277
- msgstr "投稿(各エントリ)の最小値 (\"基本的な設定\"で自動計算に設定している場合に有効)"
278
-
279
- #: sitemap.php:787
280
- msgid "Archives"
281
- msgstr "アーカイブ別"
282
-
283
- #: sitemap.php:793
284
- msgid "Informations and support"
285
- msgstr "情報とサポート"
286
-
287
- #: sitemap.php:794
288
- msgid "Check %s for updates and comment there if you have any problems / questions / suggestions."
289
- msgstr "もし、問題や疑問、提案があれば %s のアップデート情報やコメントを確認して下さい。"
290
-
291
- #: sitemap.php:797
292
- msgid "Update options"
293
- msgstr "設定を更新 &raquo;"
294
-
295
- #: sitemap.php:1033
296
- msgid "URL:"
297
- msgstr "URL:"
298
-
299
- #: sitemap.php:1034
300
- msgid "Path:"
301
- msgstr "Path:"
302
-
303
- #: sitemap.php:1037
304
- msgid "Could not write into %s"
305
- msgstr "%s に書き込むことができません。"
306
-
307
- #: sitemap.php:1048
308
- msgid "Successfully built sitemap file:"
309
- msgstr "構築に成功した Sitemap ファイル:"
310
-
311
- #: sitemap.php:1048
312
- msgid "Successfully built gzipped sitemap file:"
313
- msgstr "構築に成功した gz 圧縮された Sitemap ファイル:"
314
-
315
- #: sitemap.php:1062
316
- msgid "Could not ping to Google at %s"
317
- msgstr "Google への更新 ping の送信ができませんでした。 %s"
318
-
319
- #: sitemap.php:1064
320
- msgid "Successfully pinged Google at %s"
321
- msgstr "Google への更新 ping の送信が成功しました。 %s"
322
-
1
+ # Japanese Language File for sitemap (sitemap-ja_JP.UTF-8.po)
2
+ # Copyright (C) 2005 hiromasa : http://hiromasa.zone.ne.jp/
3
+ # This file is distributed under the same license as the WordPress package.
4
+ # hiromasa <webmaster@hiromasa.zone.ne.jp>, 2005.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: sitemap\n"
9
+ "Report-Msgid-Bugs-To: <webmaster@hiromasa.zone.ne.jp>\n"
10
+ "POT-Creation-Date: 2005-06-09 02:00+0900\n"
11
+ "PO-Revision-Date: 2005-07-03 23:17+0900\n"
12
+ "Last-Translator: hiromasa <webmaster@hiromasa.zone.ne.jp>\n"
13
+ "MIME-Version: 1.0\n"
14
+ "Content-Type: text/plain; charset=UTF-8\n"
15
+ "Content-Transfer-Encoding: 8bit\n"
16
+ "Language-Team: \n"
17
+
18
+ #: sitemap.php:375
19
+ msgid "always"
20
+ msgstr "いつも"
21
+
22
+ msgid "hourly"
23
+ msgstr "毎時"
24
+
25
+ msgid "daily"
26
+ msgstr "毎日"
27
+
28
+ msgid "weekly"
29
+ msgstr "毎週"
30
+
31
+ msgid "monthly"
32
+ msgstr "毎月"
33
+
34
+ msgid "yearly"
35
+ msgstr "毎年"
36
+
37
+ msgid "never"
38
+ msgstr "更新されない"
39
+
40
+ msgid "Detected Path"
41
+ msgstr "パスの直接設定"
42
+
43
+ msgid "Example"
44
+ msgstr "例"
45
+
46
+ msgid "Absolute or relative path to the sitemap file, including name."
47
+ msgstr "ファイル名を含む Sitemap ファイルへの相対もしくは絶対パス"
48
+
49
+ msgid "Complete URL to the sitemap file, including name."
50
+ msgstr "ファイル名を含む Sitemap ファイルへの完全な URL"
51
+
52
+ msgid "Automatic location"
53
+ msgstr "自動配置"
54
+
55
+ msgid "Manual location"
56
+ msgstr "手動配置"
57
+
58
+ msgid "OR"
59
+ msgstr "もしくは"
60
+
61
+ msgid "Location of your sitemap file"
62
+ msgstr "Sitemap ファイルの場所"
63
+
64
+ msgid "If your blog is in a subdirectory and you want to add pages which are NOT in the blog directory or beneath, you MUST place your sitemap file in the root directory (Look at the &quot;Location of your sitemap file&quot; section on this page)!"
65
+ msgstr "もしあなたのブログがサブディレクトリに配置されている場合に、ブログディレクトリ以外のページを Sitemap に含めたいときは、Sitemap ファイルをルートディレクトリに配置すべきです。(このページの &quot;Sitemap ファイルの場所&quot; 設定を確認して下さい)"
66
+
67
+ #: sitemap.php:512
68
+ msgid "Configuration updated"
69
+ msgstr "設定を更新しました。"
70
+
71
+ #: sitemap.php:513
72
+ msgid "Error"
73
+ msgstr "エラーです。"
74
+
75
+ #: sitemap.php:521
76
+ msgid "A new page was added. Click on &quot;Save page changes&quot; to save your changes."
77
+ msgstr "新しい追加ページ(の設定欄)が加わりました。 (ページの情報を入力後)&quot;変更の保存&quot を押下して設定を保存して下さい。"
78
+
79
+ #: sitemap.php:527
80
+ msgid "Pages saved"
81
+ msgstr "追加ページの設定を保存しました。"
82
+
83
+ #: sitemap.php:528
84
+ msgid "Error while saving pages"
85
+ msgstr "追加ページの設定の保存中にエラーが発生しました。"
86
+
87
+ #: sitemap.php:539
88
+ msgid "The page was deleted. Click on &quot;Save page changes&quot; to save your changes."
89
+ msgstr "指定された追加ページ(の設定欄)を削除しました。 &quot;変更の保存&quot を押下して設定を保存して下さい。"
90
+
91
+ #: sitemap.php:542
92
+ msgid "You changes have been cleared."
93
+ msgstr "変更は既に削除されています。"
94
+
95
+ #: sitemap.php:555
96
+ msgid "Sitemap Generator"
97
+ msgstr "Sitemap Generator"
98
+
99
+ #: sitemap.php:558
100
+ msgid "Manual rebuild"
101
+ msgstr "手動による Sitemap ファイルの再構築"
102
+
103
+ #: sitemap.php:559
104
+ msgid "If you want to build the sitemap without editing a post, click on here!"
105
+ msgstr "もし投稿の編集なしに Sitemap ファイルを再構築したい場合はこのボタンを押下してください!"
106
+
107
+ #: sitemap.php:560
108
+ msgid "Rebuild Sitemap"
109
+ msgstr "Sitemap の再構築"
110
+
111
+ #: sitemap.php:564
112
+ msgid "Additional pages"
113
+ msgstr "追加ページの設定"
114
+
115
+ #: sitemap.php:566
116
+ msgid "Here you can specify files or URLs which should be included in the sitemap, but do not belong to your Blog/WordPress.<br />For example, if your domain is www.foo.com and your blog is located on www.foo.com/blog you might want to include your homepage at www.foo.com"
117
+ msgstr "ここで、Sitemap に含まれるべきである URL を指定することができます。 しかし、ここで指定する URL は WordPress/Blog に属してはいけません。<br />例えばドメインが www.foo.com でブログが www.foo.com/blog だった場合、あなたは www.foo.com を Sitemap に含みたいと思うかもしれません。(訳注: この項目で WordPress 以外の URL を指定し、プラグインで出力する Sitemap に含めることができます)"
118
+
119
+ #: sitemap.php:568
120
+ msgid "URL to the page"
121
+ msgstr "そのページのURL"
122
+
123
+ #: sitemap.php:569
124
+ msgid "Enter the URL to the page. Examples: http://www.foo.com/index.html or www.foo.com/home "
125
+ msgstr "そのページのURL を入力して下さい。 例: http://www.foo.com/index.html や www.foo.com/home "
126
+
127
+ #: sitemap.php:571
128
+ msgid "Priority"
129
+ msgstr "優先順位(priority)の設定"
130
+
131
+ #: sitemap.php:572
132
+ msgid "Choose the priority of the page relative to the other pages. For example, your homepage might have a higher priority than your imprint."
133
+ msgstr "他のページに比例したページの優先順位(priority)を選んでください。 例えば、あなたのホームページは、銘記のページより高い優先度があるかもしれません。"
134
+
135
+ #: sitemap.php:574
136
+ msgid "Last Changed"
137
+ msgstr "最終更新日"
138
+
139
+ #: sitemap.php:575
140
+ msgid "Enter the date of the last change as YYYY-MM-DD (2005-12-31 for example) (optional)."
141
+ msgstr "最終更新日を YYYY-MM-DD 形式で入力して下さい。"
142
+
143
+ #: sitemap.php:583
144
+ msgid "Change Frequency"
145
+ msgstr "更新頻度(changefreq)の設定"
146
+
147
+ #: sitemap.php:585
148
+ msgid "#"
149
+ msgstr "#"
150
+
151
+ #: sitemap.php:609
152
+ msgid "No pages defined."
153
+ msgstr "追加ページは定義されていません。"
154
+
155
+ #: sitemap.php:616
156
+ msgid "Add new page"
157
+ msgstr "新しいページの追加"
158
+
159
+ #: sitemap.php:617
160
+ msgid "Save page changes"
161
+ msgstr "変更の保存"
162
+
163
+ #: sitemap.php:618
164
+ msgid "Undo all page changes"
165
+ msgstr "ページの変更を元に戻す"
166
+
167
+ #: sitemap.php:621
168
+ msgid "Delete marked page"
169
+ msgstr "マークされたページの削除"
170
+
171
+ #: sitemap.php:627
172
+ msgid "Basic Options"
173
+ msgstr "基本的な設定"
174
+
175
+ #: sitemap.php:632
176
+ msgid "Enable automatic priority calculation for posts based on comment count"
177
+ msgstr "投稿に対するコメント数で、投稿(各エントリ)の優先順位(priority)を自動計算する機能を有効にする"
178
+
179
+ #: sitemap.php:638
180
+ msgid "Write debug comments"
181
+ msgstr "デバッグ用コメント出力を行う"
182
+
183
+ #: sitemap.php:643
184
+ msgid "Filename of the sitemap file"
185
+ msgstr "Sitemap のファイル名"
186
+
187
+ #: sitemap.php:650
188
+ msgid "Write a normal XML file (your filename)"
189
+ msgstr "標準の XML ファイルを出力する (filename)"
190
+
191
+ #: sitemap.php:652
192
+ msgid "Detected URL"
193
+ msgstr "Detected URL"
194
+
195
+ #: sitemap.php:657
196
+ msgid "Write a gzipped file (your filename + .gz)"
197
+ msgstr "gz 圧縮されたファイルを出力する (filename + .gz)"
198
+
199
+ #: sitemap.php:664
200
+ msgid "Auto-Ping Google Sitemaps"
201
+ msgstr "Google Sitemap に更新 ping を送る"
202
+
203
+ #: sitemap.php:665
204
+ msgid "This option will automatically tell Google about changes."
205
+ msgstr "このオプションは、変更を Google に自動的に通知します。"
206
+
207
+ #: sitemap.php:672
208
+ msgid "Includings"
209
+ msgstr "Sitemap に含める 項目の設定"
210
+
211
+ #: sitemap.php:677
212
+ msgid "Include homepage"
213
+ msgstr "ホームページ"
214
+
215
+ #: sitemap.php:683
216
+ msgid "Include posts"
217
+ msgstr "投稿(各エントリ)"
218
+
219
+ #: sitemap.php:689
220
+ msgid "Include static pages"
221
+ msgstr "静的なページ"
222
+
223
+ #: sitemap.php:695
224
+ msgid "Include categories"
225
+ msgstr "カテゴリ別"
226
+
227
+ #: sitemap.php:701
228
+ msgid "Include archives"
229
+ msgstr "アーカイブ別"
230
+
231
+ #: sitemap.php:708
232
+ msgid "Change frequencies"
233
+ msgstr "更新頻度(changefreq)の設定"
234
+
235
+ #: sitemap.php:709
236
+ msgid "Note"
237
+ msgstr "メモ"
238
+
239
+ #: sitemap.php:710
240
+ msgid "Please note that the value of this tag is considered a hint and not a command. Even though search engine crawlers consider this information when making decisions, they may crawl pages marked \"hourly\" less frequently than that, and they may crawl pages marked \"yearly\" more frequently than that. It is also likely that crawlers will periodically crawl pages marked \"never\" so that they can handle unexpected changes to those pages."
241
+ msgstr "このタグの値は命令ではなくヒントだと考えられます。サーチエンジンのクローラはこの設定を考慮に入れますが、\"1時間おき\" の設定にしてもその頻度でクロールしないかもしれないし、\"年一度の\" 設定にしてもそれより頻繁にクロールされるかもしれません。また \"更新されない\" に設定されたページも、思いがけない変化をこれらのページから得るために、おそらくクローラは定期的にクロールするでしょう。"
242
+
243
+ #: sitemap.php:715
244
+ msgid "Homepage"
245
+ msgstr "ホームページ"
246
+
247
+ #: sitemap.php:721
248
+ msgid "Posts"
249
+ msgstr "投稿(各エントリ)"
250
+
251
+ #: sitemap.php:727
252
+ msgid "Static pages"
253
+ msgstr "静的なページ"
254
+
255
+ #: sitemap.php:733
256
+ msgid "Categories"
257
+ msgstr "カテゴリ別"
258
+
259
+ #: sitemap.php:739
260
+ msgid "The current archive of this month (Should be the same like your homepage)"
261
+ msgstr "当月のアーカイブ (\"ホームページ\" の設定と同じにすべきです)"
262
+
263
+ #: sitemap.php:745
264
+ msgid "Older archives (Changes only if you edit an old post)"
265
+ msgstr "古いアーカイブ (古い投稿を編集したときだけ変更してください)"
266
+
267
+ #: sitemap.php:752
268
+ msgid "Priorities"
269
+ msgstr "優先順位(priority)の設定"
270
+
271
+ #: sitemap.php:763
272
+ msgid "Posts (If auto calculation is disabled)"
273
+ msgstr "投稿(各エントリ) (\"基本的な設定\"で自動計算に設定していない場合に有効)"
274
+
275
+ #: sitemap.php:769
276
+ msgid "Minimum post priority (Even if auto calculation is enabled)"
277
+ msgstr "投稿(各エントリ)の最小値 (\"基本的な設定\"で自動計算に設定している場合に有効)"
278
+
279
+ #: sitemap.php:787
280
+ msgid "Archives"
281
+ msgstr "アーカイブ別"
282
+
283
+ #: sitemap.php:793
284
+ msgid "Informations and support"
285
+ msgstr "情報とサポート"
286
+
287
+ #: sitemap.php:794
288
+ msgid "Check %s for updates and comment there if you have any problems / questions / suggestions."
289
+ msgstr "もし、問題や疑問、提案があれば %s のアップデート情報やコメントを確認して下さい。"
290
+
291
+ #: sitemap.php:797
292
+ msgid "Update options"
293
+ msgstr "設定を更新 &raquo;"
294
+
295
+ #: sitemap.php:1033
296
+ msgid "URL:"
297
+ msgstr "URL:"
298
+
299
+ #: sitemap.php:1034
300
+ msgid "Path:"
301
+ msgstr "Path:"
302
+
303
+ #: sitemap.php:1037
304
+ msgid "Could not write into %s"
305
+ msgstr "%s に書き込むことができません。"
306
+
307
+ #: sitemap.php:1048
308
+ msgid "Successfully built sitemap file:"
309
+ msgstr "構築に成功した Sitemap ファイル:"
310
+
311
+ #: sitemap.php:1048
312
+ msgid "Successfully built gzipped sitemap file:"
313
+ msgstr "構築に成功した gz 圧縮された Sitemap ファイル:"
314
+
315
+ #: sitemap.php:1062
316
+ msgid "Could not ping to Google at %s"
317
+ msgstr "Google への更新 ping の送信ができませんでした。 %s"
318
+
319
+ #: sitemap.php:1064
320
+ msgid "Successfully pinged Google at %s"
321
+ msgstr "Google への更新 ping の送信が成功しました。 %s"
322
+
lang/sitemap-sr_RS.po CHANGED
@@ -1,964 +1,964 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: Google XML Sitemaps v4.0beta9\n"
4
- "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2012-05-05 20:24+0100\n"
6
- "PO-Revision-Date: 2012-06-02 14:54:30+0000\n"
7
- "Last-Translator: Arne Brachhold <himself-arnebrachhold-de>\n"
8
- "Language-Team: \n"
9
- "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=UTF-8\n"
11
- "Content-Transfer-Encoding: 8bit\n"
12
- "Plural-Forms: nplurals=2; plural=n != 1;\n"
13
- "X-Poedit-Language: \n"
14
- "X-Poedit-Country: \n"
15
- "X-Poedit-SourceCharset: utf-8\n"
16
- "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;\n"
17
- "X-Poedit-Basepath: .\n"
18
- "X-Poedit-Bookmarks: \n"
19
- "X-Poedit-SearchPath-0: C:/Inetpub/wwwroot/wp_plugins/sitemap_beta\n"
20
- "X-Textdomain-Support: yes"
21
-
22
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:846
23
- #: sitemap-core.php:527
24
- #@ sitemap
25
- msgid "Comment Count"
26
- msgstr "Broj Komentara"
27
-
28
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:858
29
- #: sitemap-core.php:537
30
- #@ sitemap
31
- msgid "Uses the number of comments of the post to calculate the priority"
32
- msgstr "Koristi broj komentara na postu za kalkulaciju prioriteta"
33
-
34
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:918
35
- #: sitemap-core.php:590
36
- #@ sitemap
37
- msgid "Comment Average"
38
- msgstr "Prosečan Broj Komentara"
39
-
40
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:930
41
- #: sitemap-core.php:600
42
- #@ sitemap
43
- msgid "Uses the average comment count to calculate the priority"
44
- msgstr "Koristi prosečan broj komentara za računanje prioriteta"
45
-
46
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:993
47
- #: sitemap-core.php:661
48
- #@ sitemap
49
- msgid "Popularity Contest"
50
- msgstr "Takmičenje Popularnosti"
51
-
52
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:1005
53
- #: sitemap-core.php:671
54
- #, php-format
55
- #@ sitemap
56
- msgid "Uses the activated <a href=\"%1\">Popularity Contest Plugin</a> from <a href=\"%2\">Alex King</a>. See <a href=\"%3\">Settings</a> and <a href=\"%4\">Most Popular Posts</a>"
57
- msgstr "Koristi aktivirani <a href=\"%1\">Takmičenje Popularnosti plugin</a> od <a href=\"%2\">Alex King-a</a>. Proveri <a href=\"%3\">Podešavanja</a> i <a href=\"%4\">Najpopularnije Postove</a>"
58
-
59
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-core.php:1118
60
- #: sitemap-core.php:840
61
- #@ sitemap
62
- msgid "Always"
63
- msgstr "Uvek"
64
-
65
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-core.php:1119
66
- #: sitemap-core.php:841
67
- #@ sitemap
68
- msgid "Hourly"
69
- msgstr "Svakog sata"
70
-
71
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-core.php:1120
72
- #: sitemap-core.php:842
73
- #@ sitemap
74
- msgid "Daily"
75
- msgstr "Dnevno"
76
-
77
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-core.php:1121
78
- #: sitemap-core.php:843
79
- #@ sitemap
80
- msgid "Weekly"
81
- msgstr "Nedeljno"
82
-
83
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-core.php:1122
84
- #: sitemap-core.php:844
85
- #@ sitemap
86
- msgid "Monthly"
87
- msgstr "Mesečno"
88
-
89
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-core.php:1123
90
- #: sitemap-core.php:845
91
- #@ sitemap
92
- msgid "Yearly"
93
- msgstr "Godišnje"
94
-
95
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-core.php:1124
96
- #: sitemap-core.php:846
97
- #@ sitemap
98
- msgid "Never"
99
- msgstr "Nikad"
100
-
101
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2415
102
- #: sitemap-loader.php:212
103
- #@ sitemap
104
- msgid "XML-Sitemap Generator"
105
- msgstr "XML-Sitemap Generator"
106
-
107
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2415
108
- #: sitemap-loader.php:212
109
- #@ sitemap
110
- msgid "XML-Sitemap"
111
- msgstr "XML-Sitemap"
112
-
113
- #: sitemap-loader.php:239
114
- #@ sitemap
115
- msgid "Settings"
116
- msgstr "Podešavanja"
117
-
118
- #: sitemap-loader.php:240
119
- #@ sitemap
120
- msgid "FAQ"
121
- msgstr "FAQ"
122
-
123
- #: sitemap-loader.php:241
124
- #@ sitemap
125
- msgid "Support"
126
- msgstr "Podrška"
127
-
128
- #: sitemap-loader.php:242
129
- #@ sitemap
130
- msgid "Donate"
131
- msgstr "Donacije"
132
-
133
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2886
134
- #: sitemap-loader.php:328
135
- #: sitemap-ui.php:630
136
- #@ sitemap
137
- msgid "Plugin Homepage"
138
- msgstr "Homepage Plugin-a"
139
-
140
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2905
141
- #: sitemap-loader.php:329
142
- #: sitemap-ui.php:652
143
- #@ sitemap
144
- msgid "My Sitemaps FAQ"
145
- msgstr "Česta pitanja o Sitemap-ima"
146
-
147
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2635
148
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2835
149
- #: sitemap-ui.php:198
150
- #: sitemap-ui.php:585
151
- #@ sitemap
152
- msgid "XML Sitemap Generator for WordPress"
153
- msgstr "XML Sitemap Generator za WordPress"
154
-
155
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2740
156
- #: sitemap-ui.php:374
157
- #@ sitemap
158
- msgid "Configuration updated"
159
- msgstr "Konfiguracije ažurirane"
160
-
161
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2741
162
- #: sitemap-ui.php:375
163
- #@ sitemap
164
- msgid "Error while saving options"
165
- msgstr "Greška prilikom snimanja opcija"
166
-
167
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2743
168
- #: sitemap-ui.php:378
169
- #@ sitemap
170
- msgid "Pages saved"
171
- msgstr "Stranice snimljene"
172
-
173
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2744
174
- #: sitemap-ui.php:379
175
- #@ sitemap
176
- msgid "Error while saving pages"
177
- msgstr "Greška za vreme snimanja stranica"
178
-
179
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2758
180
- #: sitemap-ui.php:387
181
- #@ sitemap
182
- msgid "The default configuration was restored."
183
- msgstr "Osnovna podešavanja su vraćena"
184
-
185
- #: sitemap-ui.php:397
186
- #@ sitemap
187
- msgid "The old files could NOT be deleted. Please use an FTP program and delete them by yourself."
188
- msgstr "Nismo mogli izbrisati stare fajlove. Molimo vas da koristite FTP program i obrišete ih lično."
189
-
190
- #: sitemap-ui.php:399
191
- #@ sitemap
192
- msgid "The old files were successfully deleted."
193
- msgstr "Stari fajlovi su uspešno obrisani."
194
-
195
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2600
196
- #: sitemap-ui.php:439
197
- #@ sitemap
198
- msgid "Thank you very much for your donation. You help me to continue support and development of this plugin and other free software!"
199
- msgstr "Hvala vam na donaciji. Pomažete mi da nastavim rad i razvoj ovog plugin-a i drugih besplatnih programa."
200
-
201
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2600
202
- #: sitemap-ui.php:439
203
- #@ sitemap
204
- msgid "Hide this notice"
205
- msgstr "Sakrijte ovo obaveštenje"
206
-
207
- #: sitemap-ui.php:445
208
- #, php-format
209
- #@ sitemap
210
- msgid "Thanks for using this plugin! You've installed this plugin over a month ago. If it works and you are satisfied with the results, isn't it worth at least a few dollar? <a href=\"%s\">Donations</a> help me to continue support and development of this <i>free</i> software! <a href=\"%s\">Sure, no problem!</a>"
211
- msgstr "Hvala vam što koristite ovaj plugin. Instalirali ste plugin pre meseca dana. Ako plugin radi i zadovoljni ste rezultatima, nadam se da je vredno makar par dolara? <a href=\"%s\">Donacije</a> mi pomažu da nastavim rad na ovom <i>besplatnom</i> softveru! <a href=\"%s\">Naravno, nema problema!</a>"
212
-
213
- #: sitemap-ui.php:445
214
- #@ sitemap
215
- msgid "Sure, but I already did!"
216
- msgstr "Naravno, ali već sam donirao!"
217
-
218
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2657
219
- #: sitemap-ui.php:445
220
- #@ sitemap
221
- msgid "No thanks, please don't bug me anymore!"
222
- msgstr "Ne hvala, molim vas ne uznemiravajte me više!"
223
-
224
- #: sitemap-ui.php:452
225
- #, php-format
226
- #@ sitemap
227
- msgid "Thanks for using this plugin! You've installed this plugin some time ago. If it works and your are satisfied, why not <a href=\"%s\">rate it</a> and <a href=\"%s\">recommend it</a> to others? :-)"
228
- msgstr "Hvala vam što koristite ovaj plugin! Instalirali ste ovaj plugin pre nekog vremena. Ako radi i zadovoljni ste, zašto ne biste <a href=\"%s\">dali ocenu</a> i <a href=\"%s\">preporučili ga</a> drugima? :-)"
229
-
230
- #: sitemap-ui.php:452
231
- #@ sitemap
232
- msgid "Don't show this anymore"
233
- msgstr "Ne pokazuj više"
234
-
235
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-ui.php:374
236
- #: sitemap-ui.php:601
237
- #, php-format
238
- #@ default
239
- msgid "There is a new version of %1$s available. <a href=\"%2$s\">Download version %3$s here</a>."
240
- msgstr "Postoji nova verzija %1$s. <a href=\"%2$s\">Skinite verziju %3$s ovde</a>."
241
-
242
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-ui.php:376
243
- #: sitemap-ui.php:603
244
- #, php-format
245
- #@ default
246
- msgid "There is a new version of %1$s available. <a href=\"%2$s\">Download version %3$s here</a> <em>automatic upgrade unavailable for this plugin</em>."
247
- msgstr "Postoji nova verzija %1$s. <a href=\"%2$s\">Skinite novu verziju %3$s ovde</a> <em>automatsko osvežavanje verzije nije dostupno za ovaj plugin</em>."
248
-
249
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-ui.php:378
250
- #: sitemap-ui.php:605
251
- #, php-format
252
- #@ default
253
- msgid "There is a new version of %1$s available. <a href=\"%2$s\">Download version %3$s here</a> or <a href=\"%4$s\">upgrade automatically</a>."
254
- msgstr "Postoji nova verzija %1$s. <a href=\"%2$s\">Skinite verziju %3$s ovde</a> ili <a href=\"%4$s\">uradite update automatski</a>."
255
-
256
- #: sitemap-ui.php:613
257
- #, php-format
258
- #@ sitemap
259
- msgid "Your blog is currently blocking search engines! Visit the <a href=\"%s\">privacy settings</a> to change this."
260
- msgstr "Vaš blog trenutno blokira pretraživače! Posetite <a href=\"%s\">podešavanja privatnosti</a> da bi ste promenili."
261
-
262
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2884
263
- #: sitemap-ui.php:629
264
- #@ sitemap
265
- msgid "About this Plugin:"
266
- msgstr "O ovom plugin-u:"
267
-
268
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-ui.php:421
269
- #: sitemap-ui.php:631
270
- #@ sitemap
271
- msgid "Suggest a Feature"
272
- msgstr "Predložite Funkciju"
273
-
274
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2887
275
- #: sitemap-ui.php:632
276
- #@ sitemap
277
- msgid "Notify List"
278
- msgstr "Lista Notifikacija"
279
-
280
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2888
281
- #: sitemap-ui.php:633
282
- #@ sitemap
283
- msgid "Support Forum"
284
- msgstr "Forum za Podršku"
285
-
286
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-ui.php:424
287
- #: sitemap-ui.php:634
288
- #@ sitemap
289
- msgid "Report a Bug"
290
- msgstr "Prijavite Grešku"
291
-
292
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2889
293
- #: sitemap-ui.php:636
294
- #@ sitemap
295
- msgid "Donate with PayPal"
296
- msgstr "Donirajte putem PayPal-a"
297
-
298
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2890
299
- #: sitemap-ui.php:637
300
- #@ sitemap
301
- msgid "My Amazon Wish List"
302
- msgstr "Moje želje na Amazon-u"
303
-
304
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2891
305
- #: sitemap-ui.php:638
306
- #@ sitemap
307
- msgid "translator_name"
308
- msgstr "ime_prevodioca"
309
-
310
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2891
311
- #: sitemap-ui.php:638
312
- #@ sitemap
313
- msgid "translator_url"
314
- msgstr "url_prevodioca"
315
-
316
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2895
317
- #: sitemap-ui.php:641
318
- #@ sitemap
319
- msgid "Sitemap Resources:"
320
- msgstr "Više o Sitemap-u"
321
-
322
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2897
323
- #: sitemap-ui.php:642
324
- #: sitemap-ui.php:647
325
- #@ sitemap
326
- msgid "Webmaster Tools"
327
- msgstr "Alatke za Webmastere"
328
-
329
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2898
330
- #: sitemap-ui.php:643
331
- #@ sitemap
332
- msgid "Webmaster Blog"
333
- msgstr "Webmaster Blog"
334
-
335
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2901
336
- #: sitemap-ui.php:645
337
- #@ sitemap
338
- msgid "Search Blog"
339
- msgstr "Pretražite Blog"
340
-
341
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3010
342
- #: sitemap-ui.php:648
343
- #@ sitemap
344
- msgid "Webmaster Center Blog"
345
- msgstr "Webmaster Central Blog"
346
-
347
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2903
348
- #: sitemap-ui.php:650
349
- #@ sitemap
350
- msgid "Sitemaps Protocol"
351
- msgstr "Sitemap Protokol"
352
-
353
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2904
354
- #: sitemap-ui.php:651
355
- #@ sitemap
356
- msgid "Official Sitemaps FAQ"
357
- msgstr "Oficijalni Sitemap FAW"
358
-
359
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2910
360
- #: sitemap-ui.php:655
361
- #@ sitemap
362
- msgid "Recent Donations:"
363
- msgstr "Zadnje Donacije:"
364
-
365
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2914
366
- #: sitemap-ui.php:658
367
- #@ sitemap
368
- msgid "List of the donors"
369
- msgstr "Lista Donatora"
370
-
371
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2916
372
- #: sitemap-ui.php:660
373
- #@ sitemap
374
- msgid "Hide this list"
375
- msgstr "Sakrijte listu"
376
-
377
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2919
378
- #: sitemap-ui.php:663
379
- #@ sitemap
380
- msgid "Thanks for your support!"
381
- msgstr "Hvala vam na podršci!"
382
-
383
- #: sitemap-ui.php:683
384
- #@ sitemap
385
- msgid "Search engines haven't been notified yet"
386
- msgstr "Pretraživači još uvek nisu obavešteni"
387
-
388
- #: sitemap-ui.php:687
389
- #, php-format
390
- #@ sitemap
391
- msgid "Result of the last ping, started on %date%."
392
- msgstr "Rezultati zadnjeg ping-a, započeto %date%."
393
-
394
- #: sitemap-ui.php:702
395
- #, php-format
396
- #@ sitemap
397
- msgid "There is still a sitemap.xml or sitemap.xml.gz file in your blog directory. Please delete them as no static files are used anymore or <a href=\"%s\">try to delete them automatically</a>."
398
- msgstr "Još uvek postoji sitemap.xml ili sitemap.xml.gz fajl na vašem blog direktorijumu. Molimo vas da ih obrišete jer se više ne koristi ni jeda statični fajl ili <a href=\"%s\">pokušajte da ih obrišete automatski</a>."
399
-
400
- #: sitemap-ui.php:705
401
- #, php-format
402
- #@ sitemap
403
- msgid "The URL to your sitemap index file is: <a href=\"%s\">%s</a>."
404
- msgstr "URL do vašeg sitemap index fajl-a je: <a href=\"%s\">%s</a>."
405
-
406
- #: sitemap-ui.php:708
407
- #@ sitemap
408
- msgid "Search engines haven't been notified yet. Write a post to let them know about your sitemap."
409
- msgstr "Pretraživači još uvek nisu obavešteni. Napišite post da bi ste ih obavestili o vašem sitemap-u."
410
-
411
- #: sitemap-ui.php:717
412
- #, php-format
413
- #@ sitemap
414
- msgid "%s was <b>successfully notified</b> about changes."
415
- msgstr "%s je <b>uspešno obavešten</b> o promenama."
416
-
417
- #: sitemap-ui.php:720
418
- #, php-format
419
- #@ sitemap
420
- msgid "It took %time% seconds to notify %name%, maybe you want to disable this feature to reduce the building time."
421
- msgstr "Trebalo je %time% sekundi da obavestimo %name%, možda želite da onesposobite ovu funkciju da bi ste smanjili vreme izgradnje."
422
-
423
- #: sitemap-ui.php:723
424
- #, php-format
425
- #@ sitemap
426
- msgid "There was a problem while notifying %name%. <a href=\"%s\">View result</a>"
427
- msgstr "Imali smo problem sa obaveštavanjem %name%. <a href=\"%s\">Pogledajte rezultate</a>"
428
-
429
- #: sitemap-ui.php:727
430
- #, php-format
431
- #@ sitemap
432
- msgid "If you encounter any problems with your sitemap you can use the <a href=\"%d\">debug function</a> to get more information."
433
- msgstr "Ako naiđete na neke probleme u vezi sa sitemap-om možete iskoristiti <a href=\"%d\">debug funkciju</a> da bi ste dobili više podataka."
434
-
435
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3040
436
- #: sitemap-ui.php:735
437
- #@ sitemap
438
- msgid "Basic Options"
439
- msgstr "Onsovne Opcije"
440
-
441
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3079
442
- #: sitemap-ui.php:737
443
- #@ sitemap
444
- msgid "Update notification:"
445
- msgstr "Ažurirajte notifikacije:"
446
-
447
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3044
448
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3059
449
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3079
450
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3104
451
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3121
452
- #: sitemap-ui.php:737
453
- #: sitemap-ui.php:765
454
- #@ sitemap
455
- msgid "Learn more"
456
- msgstr "Saznajte više"
457
-
458
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3083
459
- #: sitemap-ui.php:741
460
- #@ sitemap
461
- msgid "Notify Google about updates of your Blog"
462
- msgstr "Obavestite Google o promenama na vašem Blogu"
463
-
464
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3084
465
- #: sitemap-ui.php:742
466
- #, php-format
467
- #@ sitemap
468
- msgid "No registration required, but you can join the <a href=\"%s\">Google Webmaster Tools</a> to check crawling statistics."
469
- msgstr "Registracija nije potrebna, ali možete otovriti nalog na <a href=\"%s\">Google Webmaster Tools</a> da bi ste preverili statistiku."
470
-
471
- #: sitemap-ui.php:746
472
- #@ sitemap
473
- msgid "Notify Bing (formerly MSN Live Search) about updates of your Blog"
474
- msgstr "Obavestite Bing (bivši MSN Live Search) o promenama na vašem Blogu"
475
-
476
- #: sitemap-ui.php:747
477
- #, php-format
478
- #@ sitemap
479
- msgid "No registration required, but you can join the <a href=\"%s\">Bing Webmaster Tools</a> to check crawling statistics."
480
- msgstr "Registracija nije potrebna, ali možete napraviti nalog na <a href=\"%s\">Bing Webmaster Tools</a> da proverite statistiku."
481
-
482
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3088
483
- #: sitemap-ui.php:751
484
- #@ sitemap
485
- msgid "Notify Ask.com about updates of your Blog"
486
- msgstr "Obavestite Ask.com o promenama na vašem Blogu"
487
-
488
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3089
489
- #: sitemap-ui.php:752
490
- #@ sitemap
491
- msgid "No registration required."
492
- msgstr "Registracija nije potrebna."
493
-
494
- #: sitemap-ui.php:757
495
- #@ sitemap
496
- msgid "Add sitemap URL to the virtual robots.txt file."
497
- msgstr "Dodajte URL vašeg sitemap-a u robots.txt fajl."
498
-
499
- #: sitemap-ui.php:761
500
- #@ sitemap
501
- msgid "The virtual robots.txt generated by WordPress is used. A real robots.txt file must NOT exist in the blog directory!"
502
- msgstr "Virtualni robots.txt fajl generisan od strane WordPress-a je iskorišćen. Pravi robots.txt fajl NE SME postojati u direktorijumu vašeg bloga!"
503
-
504
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3121
505
- #: sitemap-ui.php:765
506
- #@ sitemap
507
- msgid "Advanced options:"
508
- msgstr "Napredne opcija:"
509
-
510
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3127
511
- #: sitemap-ui.php:768
512
- #@ sitemap
513
- msgid "Try to increase the memory limit to:"
514
- msgstr "Pokušajte da povećate limit memorije na:"
515
-
516
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3127
517
- #: sitemap-ui.php:768
518
- #@ sitemap
519
- msgid "e.g. \"4M\", \"16M\""
520
- msgstr "npr. \"4M\", \"16M\""
521
-
522
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3130
523
- #: sitemap-ui.php:771
524
- #@ sitemap
525
- msgid "Try to increase the execution time limit to:"
526
- msgstr "Pokušajte da povećate vreme izvršenja na:"
527
-
528
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3130
529
- #: sitemap-ui.php:771
530
- #@ sitemap
531
- msgid "in seconds, e.g. \"60\" or \"0\" for unlimited"
532
- msgstr "u sekundama, npr. \"60\" or \"0\" za neograničeno"
533
-
534
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3133
535
- #: sitemap-ui.php:775
536
- #@ sitemap
537
- msgid "Include a XSLT stylesheet:"
538
- msgstr "Dodajte XSLT stylesheet:"
539
-
540
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3133
541
- #: sitemap-ui.php:776
542
- #@ sitemap
543
- msgid "Full or relative URL to your .xsl file"
544
- msgstr "Absolutni ili relativni URL do vasšeg .xsl fajla."
545
-
546
- #: sitemap-ui.php:776
547
- #@ sitemap
548
- msgid "Use default"
549
- msgstr "Koristite default-ni"
550
-
551
- #: sitemap-ui.php:781
552
- #@ sitemap
553
- msgid "Include sitemap in HTML format"
554
- msgstr "Dodajte sitemap u HTML formatu"
555
-
556
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3144
557
- #: sitemap-ui.php:790
558
- #@ sitemap
559
- msgid "Additional pages"
560
- msgstr "Dodatne stranice"
561
-
562
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3149
563
- #: sitemap-ui.php:793
564
- #@ sitemap
565
- msgid "Here you can specify files or URLs which should be included in the sitemap, but do not belong to your Blog/WordPress.<br />For example, if your domain is www.foo.com and your blog is located on www.foo.com/blog you might want to include your homepage at www.foo.com"
566
- msgstr "Ovde možete specificirati fajlove ili URL-ove koje bi trebalo dodati u sitemap, ali ne pripadaju vašem Blog-u/WordPress-u. <br />Na primer, ako je vaš domen www.foo.com a vaš blog se nalazi na www.foo.com-blog mozda želite da dodate vašu početnu stranu www.foo.com"
567
-
568
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3151
569
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3462
570
- #: sitemap-ui.php:795
571
- #: sitemap-ui.php:999
572
- #: sitemap-ui.php:1010
573
- #: sitemap-ui.php:1019
574
- #@ sitemap
575
- msgid "Note"
576
- msgstr "Opazite"
577
-
578
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3152
579
- #: sitemap-ui.php:796
580
- #@ sitemap
581
- msgid "If your blog is in a subdirectory and you want to add pages which are NOT in the blog directory or beneath, you MUST place your sitemap file in the root directory (Look at the &quot;Location of your sitemap file&quot; section on this page)!"
582
- msgstr "Ako se vaš blog nalazi u pod direktorijumu i ako želite da doddate stranice koje se ne nalaze u blog direktorijumu ili ispod, MORATE staviti sitemap fajl u korenu direktorijuma (Pogledajte &quot;Lokaciju vašeg sitemap-a &quot; sekciju na ovoj stranici)!"
583
-
584
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3154
585
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3300
586
- #: sitemap-ui.php:798
587
- #: sitemap-ui.php:837
588
- #@ sitemap
589
- msgid "URL to the page"
590
- msgstr "URL do stranice"
591
-
592
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3155
593
- #: sitemap-ui.php:799
594
- #@ sitemap
595
- msgid "Enter the URL to the page. Examples: http://www.foo.com/index.html or www.foo.com/home "
596
- msgstr "Unesite URL do stranice. Primeri: http://www.foo.com/index.html ili www.foo.com/home "
597
-
598
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3157
599
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3301
600
- #: sitemap-ui.php:801
601
- #: sitemap-ui.php:838
602
- #@ sitemap
603
- msgid "Priority"
604
- msgstr "Prioritet"
605
-
606
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3158
607
- #: sitemap-ui.php:802
608
- #@ sitemap
609
- msgid "Choose the priority of the page relative to the other pages. For example, your homepage might have a higher priority than your imprint."
610
- msgstr "Izaberite prioritet stranice u odnosu na druge stranice. Na primer, vaša početna stranica može imati veći prioritet nego niće stranice."
611
-
612
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3160
613
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3303
614
- #: sitemap-ui.php:804
615
- #: sitemap-ui.php:840
616
- #@ sitemap
617
- msgid "Last Changed"
618
- msgstr "Zadjne promene"
619
-
620
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3161
621
- #: sitemap-ui.php:805
622
- #@ sitemap
623
- msgid "Enter the date of the last change as YYYY-MM-DD (2005-12-31 for example) (optional)."
624
- msgstr "Unesti datum zadnje prmene u formatu YYYY-MM-DD (2005-12-31 na primer) (opciono)."
625
-
626
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3302
627
- #: sitemap-ui.php:839
628
- #@ sitemap
629
- msgid "Change Frequency"
630
- msgstr "Promente Učestalost"
631
-
632
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3304
633
- #: sitemap-ui.php:841
634
- #@ sitemap
635
- msgid "#"
636
- msgstr "#"
637
-
638
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3309
639
- #: sitemap-ui.php:846
640
- #@ sitemap
641
- msgid "No pages defined."
642
- msgstr "Stranice nisu definisane."
643
-
644
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3314
645
- #: sitemap-ui.php:851
646
- #@ sitemap
647
- msgid "Add new page"
648
- msgstr "Dodajte novu stranicu"
649
-
650
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3325
651
- #: sitemap-ui.php:857
652
- #@ sitemap
653
- msgid "Post Priority"
654
- msgstr "Prioritet postova"
655
-
656
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3329
657
- #: sitemap-ui.php:859
658
- #@ sitemap
659
- msgid "Please select how the priority of each post should be calculated:"
660
- msgstr "Molimo vas izaberite kako se računa prioritet postova:"
661
-
662
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3331
663
- #: sitemap-ui.php:861
664
- #@ sitemap
665
- msgid "Do not use automatic priority calculation"
666
- msgstr "Ne koristi automatsku kalkulaciju prioriteta"
667
-
668
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3331
669
- #: sitemap-ui.php:861
670
- #@ sitemap
671
- msgid "All posts will have the same priority which is defined in &quot;Priorities&quot;"
672
- msgstr "Svi postovi će imati isti prioritet koji je definisan u &quot;Priorities&quot;"
673
-
674
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3397
675
- #: sitemap-ui.php:872
676
- #@ sitemap
677
- msgid "Sitemap Content"
678
- msgstr "Sadržaj sitemap-a"
679
-
680
- #: sitemap-ui.php:873
681
- #@ sitemap
682
- msgid "WordPress standard content"
683
- msgstr "WordPress standardni sadržaj"
684
-
685
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3405
686
- #: sitemap-ui.php:878
687
- #@ sitemap
688
- msgid "Include homepage"
689
- msgstr "Dodajte početnu "
690
-
691
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3411
692
- #: sitemap-ui.php:884
693
- #@ sitemap
694
- msgid "Include posts"
695
- msgstr "Dodajte postove"
696
-
697
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3417
698
- #: sitemap-ui.php:890
699
- #@ sitemap
700
- msgid "Include static pages"
701
- msgstr "Dodajte statičke stranice"
702
-
703
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3423
704
- #: sitemap-ui.php:896
705
- #@ sitemap
706
- msgid "Include categories"
707
- msgstr "Dodajte kategorije"
708
-
709
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3429
710
- #: sitemap-ui.php:902
711
- #@ sitemap
712
- msgid "Include archives"
713
- msgstr "Dodajte arhive"
714
-
715
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3443
716
- #: sitemap-ui.php:908
717
- #@ sitemap
718
- msgid "Include author pages"
719
- msgstr "Dodajte stranice autora"
720
-
721
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3436
722
- #: sitemap-ui.php:915
723
- #@ sitemap
724
- msgid "Include tag pages"
725
- msgstr "Dodajte tag stranice"
726
-
727
- #: sitemap-ui.php:929
728
- #@ sitemap
729
- msgid "Custom taxonomies"
730
- msgstr "Uobičajene taxonomije"
731
-
732
- #: sitemap-ui.php:940
733
- #, php-format
734
- #@ sitemap
735
- msgid "Include taxonomy pages for %s"
736
- msgstr "Dodajte stranice taxonomije za %s"
737
-
738
- #: sitemap-ui.php:958
739
- #@ sitemap
740
- msgid "Custom post types"
741
- msgstr "Uobičajeni tipovi postova"
742
-
743
- #: sitemap-ui.php:969
744
- #, php-format
745
- #@ sitemap
746
- msgid "Include custom post type %s"
747
- msgstr "Dodajte uobičajene tipove postova %s"
748
-
749
- #: sitemap-ui.php:981
750
- #@ sitemap
751
- msgid "Further options"
752
- msgstr "Još opcija"
753
-
754
- #: sitemap-ui.php:986
755
- #@ sitemap
756
- msgid "Include the last modification time."
757
- msgstr "Dodajte vreme zadnje modifikacije"
758
-
759
- #: sitemap-ui.php:988
760
- #@ sitemap
761
- msgid "This is highly recommended and helps the search engines to know when your content has changed. This option affects <i>all</i> sitemap entries."
762
- msgstr "Ovo je preporučljivo jer govori pretraživačima kada se vaš sadržaj promeni. Ova opcija utiče <i>sve</i> unose u sitemap."
763
-
764
- #: sitemap-ui.php:995
765
- #@ sitemap
766
- msgid "Excluded items"
767
- msgstr "Uklonite"
768
-
769
- #: sitemap-ui.php:997
770
- #@ sitemap
771
- msgid "Excluded categories"
772
- msgstr "Uklonite kategorije"
773
-
774
- #: sitemap-ui.php:999
775
- #@ sitemap
776
- msgid "Using this feature will increase build time and memory usage!"
777
- msgstr "Korišćenje ove funkcije će povećati vreme pravljenja i korišćenje memorije."
778
-
779
- #: sitemap-ui.php:1006
780
- #@ sitemap
781
- msgid "Exclude posts"
782
- msgstr "Uklonite postove"
783
-
784
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3206
785
- #: sitemap-ui.php:1008
786
- #@ sitemap
787
- msgid "Exclude the following posts or pages:"
788
- msgstr "Uklonite sledeće postove ili stranice:"
789
-
790
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3206
791
- #: sitemap-ui.php:1008
792
- #@ sitemap
793
- msgid "List of IDs, separated by comma"
794
- msgstr "Lista ID-a, odvojene zarezom"
795
-
796
- #: sitemap-ui.php:1010
797
- #@ sitemap
798
- msgid "Child posts won't be excluded automatically!"
799
- msgstr "Pod postovi neće biti uključeni automatski!"
800
-
801
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3457
802
- #: sitemap-ui.php:1016
803
- #@ sitemap
804
- msgid "Change frequencies"
805
- msgstr "Promenite učestalost"
806
-
807
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3463
808
- #: sitemap-ui.php:1020
809
- #@ sitemap
810
- msgid "Please note that the value of this tag is considered a hint and not a command. Even though search engine crawlers consider this information when making decisions, they may crawl pages marked \"hourly\" less frequently than that, and they may crawl pages marked \"yearly\" more frequently than that. It is also likely that crawlers will periodically crawl pages marked \"never\" so that they can handle unexpected changes to those pages."
811
- msgstr "Molimo vas da zapamtite da vrednost ovog tag-a je koristi kao predlog a ne kao komanda. Iako pretraživači razmatraju ovu infomaciju kada donose odluke, možda će proći kroz stranice obeležene \"hourly\" ređe nego naznačeno, a možda će stranice naznačene \"yearly\" posećivati češće. Isto tako je verovatno da će s'vremena na vreme prolaziti kroz stranice naznačene sa \"never\" da bi mogli da reaguju na neočekivane promene na tim stranicama."
812
-
813
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3469
814
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3535
815
- #: sitemap-ui.php:1026
816
- #: sitemap-ui.php:1083
817
- #@ sitemap
818
- msgid "Homepage"
819
- msgstr "Početna"
820
-
821
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3475
822
- #: sitemap-ui.php:1032
823
- #@ sitemap
824
- msgid "Posts"
825
- msgstr "Postovi"
826
-
827
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3481
828
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3553
829
- #: sitemap-ui.php:1038
830
- #: sitemap-ui.php:1101
831
- #@ sitemap
832
- msgid "Static pages"
833
- msgstr "Statične stranice"
834
-
835
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3487
836
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3559
837
- #: sitemap-ui.php:1044
838
- #: sitemap-ui.php:1107
839
- #@ sitemap
840
- msgid "Categories"
841
- msgstr "Kategorije"
842
-
843
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3493
844
- #: sitemap-ui.php:1050
845
- #@ sitemap
846
- msgid "The current archive of this month (Should be the same like your homepage)"
847
- msgstr "Trenutna arhiva za ovaj mesec (Treba biti ista kao i vaša početna stranica)"
848
-
849
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3499
850
- #: sitemap-ui.php:1056
851
- #@ sitemap
852
- msgid "Older archives (Changes only if you edit an old post)"
853
- msgstr "Starije arhive (Menja se samo ako promenti stariji post)"
854
-
855
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3506
856
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3572
857
- #: sitemap-ui.php:1063
858
- #: sitemap-ui.php:1120
859
- #@ sitemap
860
- msgid "Tag pages"
861
- msgstr "Tag stranice"
862
-
863
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3513
864
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3579
865
- #: sitemap-ui.php:1070
866
- #: sitemap-ui.php:1127
867
- #@ sitemap
868
- msgid "Author pages"
869
- msgstr "Stranice autora"
870
-
871
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3527
872
- #: sitemap-ui.php:1078
873
- #@ sitemap
874
- msgid "Priorities"
875
- msgstr "Prioriteti"
876
-
877
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3541
878
- #: sitemap-ui.php:1089
879
- #@ sitemap
880
- msgid "Posts (If auto calculation is disabled)"
881
- msgstr "Postovi (ako je auto kalkulacija isključena)"
882
-
883
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3547
884
- #: sitemap-ui.php:1095
885
- #@ sitemap
886
- msgid "Minimum post priority (Even if auto calculation is enabled)"
887
- msgstr "Minimalni prioritet za postove (Čak iako je auto kalkulacija uključena)"
888
-
889
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3565
890
- #: sitemap-ui.php:1113
891
- #@ sitemap
892
- msgid "Archives"
893
- msgstr "Arhive"
894
-
895
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3590
896
- #: sitemap-ui.php:1138
897
- #@ sitemap
898
- msgid "Update options"
899
- msgstr "Opcije ažuriranja"
900
-
901
- # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3591
902
- #: sitemap-ui.php:1139
903
- #@ sitemap
904
- msgid "Reset options"
905
- msgstr "Opcije za resetovanje"
906
-
907
- #: sitemap.php:82
908
- #@ sitemap
909
- msgid "Your WordPress version is too old for XML Sitemaps."
910
- msgstr "Vaša verzija WordPress-a je previše stara za XML Sitemap."
911
-
912
- #: sitemap.php:82
913
- #, php-format
914
- #@ sitemap
915
- msgid "Unfortunately this release of Google XML Sitemaps requires at least WordPress %4$s. You are using Wordpress %2$s, which is out-dated and insecure. Please upgrade or go to <a href=\"%1$s\">active plugins</a> and deactivate the Google XML Sitemaps plugin to hide this message. You can download an older version of this plugin from the <a href=\"%3$s\">plugin website</a>."
916
- msgstr "Nažalost ova verzija Google XML Sitemap-a zahteva barem WordPress verziju %4$s. Vi koristite WordPress verziju %2$s, koja je zastarela i nesigurna. Molimo vas da update-ujete ili odete na <a href=\"%1$s\">aktivne plugin-ove</a> i deaktivirate Google XML Sitemap plugin da bi ste sakrili ovu poruku. Možete skinuti stariju verziju ovog plugin-a sa <a href=\"%3$s\">našeg sajta</a>."
917
-
918
- #: sitemap.php:92
919
- #@ sitemap
920
- msgid "Your PHP version is too old for XML Sitemaps."
921
- msgstr "PHP verzija koju koristite je previše stara za XML sitemap."
922
-
923
- #: sitemap.php:92
924
- #, php-format
925
- #@ sitemap
926
- msgid "Unfortunately this release of Google XML Sitemaps requires at least PHP %4$s. You are using PHP %2$s, which is out-dated and insecure. Please ask your web host to update your PHP installation or go to <a href=\"%1$s\">active plugins</a> and deactivate the Google XML Sitemaps plugin to hide this message. You can download an older version of this plugin from the <a href=\"%3$s\">plugin website</a>."
927
- msgstr "nažalost ova verzija Google XML Sitemap-a zahteva najmanje verziju PHP %4$s. Vi koristite PHP %2$s, koji je zastareo i nesiguran. Zamolite vaš hosting da ažuriraju verziju PHP instalacije ili idite na <a href=\"%1$s\">aktivne plugin-ove</a> i deaktivirajte Google XML Sitemap plugin da bi ste sakrili ovu poruku. Možete skinuti straiju verziju ovog plugin-a sa <a href=\"%3$s\">našeg sajta</a>."
928
-
929
- #. translators: plugin header field 'Name'
930
- #: sitemap.php:0
931
- #@ sitemap
932
- msgid "Google XML Sitemaps"
933
- msgstr ""
934
-
935
- #. translators: plugin header field 'PluginURI'
936
- #: sitemap.php:0
937
- #@ sitemap
938
- msgid "http://www.arnebrachhold.de/redir/sitemap-home/"
939
- msgstr ""
940
-
941
- #. translators: plugin header field 'Description'
942
- #: sitemap.php:0
943
- #@ sitemap
944
- msgid "This plugin will generate a special XML sitemap which will help search engines like Google, Yahoo, Bing and Ask.com to better index your blog."
945
- msgstr ""
946
-
947
- #. translators: plugin header field 'Author'
948
- #: sitemap.php:0
949
- #@ sitemap
950
- msgid "Arne Brachhold"
951
- msgstr ""
952
-
953
- #. translators: plugin header field 'AuthorURI'
954
- #: sitemap.php:0
955
- #@ sitemap
956
- msgid "http://www.arnebrachhold.de/"
957
- msgstr ""
958
-
959
- #. translators: plugin header field 'Version'
960
- #: sitemap.php:0
961
- #@ sitemap
962
- msgid "4.0beta9"
963
- msgstr ""
964
-
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Google XML Sitemaps v4.0beta9\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2012-05-05 20:24+0100\n"
6
+ "PO-Revision-Date: 2012-06-02 14:54:30+0000\n"
7
+ "Last-Translator: Arne Brachhold <himself-arnebrachhold-de>\n"
8
+ "Language-Team: \n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
13
+ "X-Poedit-Language: \n"
14
+ "X-Poedit-Country: \n"
15
+ "X-Poedit-SourceCharset: utf-8\n"
16
+ "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;\n"
17
+ "X-Poedit-Basepath: .\n"
18
+ "X-Poedit-Bookmarks: \n"
19
+ "X-Poedit-SearchPath-0: C:/Inetpub/wwwroot/wp_plugins/sitemap_beta\n"
20
+ "X-Textdomain-Support: yes"
21
+
22
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:846
23
+ #: sitemap-core.php:527
24
+ #@ sitemap
25
+ msgid "Comment Count"
26
+ msgstr "Broj Komentara"
27
+
28
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:858
29
+ #: sitemap-core.php:537
30
+ #@ sitemap
31
+ msgid "Uses the number of comments of the post to calculate the priority"
32
+ msgstr "Koristi broj komentara na postu za kalkulaciju prioriteta"
33
+
34
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:918
35
+ #: sitemap-core.php:590
36
+ #@ sitemap
37
+ msgid "Comment Average"
38
+ msgstr "Prosečan Broj Komentara"
39
+
40
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:930
41
+ #: sitemap-core.php:600
42
+ #@ sitemap
43
+ msgid "Uses the average comment count to calculate the priority"
44
+ msgstr "Koristi prosečan broj komentara za računanje prioriteta"
45
+
46
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:993
47
+ #: sitemap-core.php:661
48
+ #@ sitemap
49
+ msgid "Popularity Contest"
50
+ msgstr "Takmičenje Popularnosti"
51
+
52
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:1005
53
+ #: sitemap-core.php:671
54
+ #, php-format
55
+ #@ sitemap
56
+ msgid "Uses the activated <a href=\"%1\">Popularity Contest Plugin</a> from <a href=\"%2\">Alex King</a>. See <a href=\"%3\">Settings</a> and <a href=\"%4\">Most Popular Posts</a>"
57
+ msgstr "Koristi aktivirani <a href=\"%1\">Takmičenje Popularnosti plugin</a> od <a href=\"%2\">Alex King-a</a>. Proveri <a href=\"%3\">Podešavanja</a> i <a href=\"%4\">Najpopularnije Postove</a>"
58
+
59
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-core.php:1118
60
+ #: sitemap-core.php:840
61
+ #@ sitemap
62
+ msgid "Always"
63
+ msgstr "Uvek"
64
+
65
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-core.php:1119
66
+ #: sitemap-core.php:841
67
+ #@ sitemap
68
+ msgid "Hourly"
69
+ msgstr "Svakog sata"
70
+
71
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-core.php:1120
72
+ #: sitemap-core.php:842
73
+ #@ sitemap
74
+ msgid "Daily"
75
+ msgstr "Dnevno"
76
+
77
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-core.php:1121
78
+ #: sitemap-core.php:843
79
+ #@ sitemap
80
+ msgid "Weekly"
81
+ msgstr "Nedeljno"
82
+
83
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-core.php:1122
84
+ #: sitemap-core.php:844
85
+ #@ sitemap
86
+ msgid "Monthly"
87
+ msgstr "Mesečno"
88
+
89
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-core.php:1123
90
+ #: sitemap-core.php:845
91
+ #@ sitemap
92
+ msgid "Yearly"
93
+ msgstr "Godišnje"
94
+
95
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-core.php:1124
96
+ #: sitemap-core.php:846
97
+ #@ sitemap
98
+ msgid "Never"
99
+ msgstr "Nikad"
100
+
101
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2415
102
+ #: sitemap-loader.php:212
103
+ #@ sitemap
104
+ msgid "XML-Sitemap Generator"
105
+ msgstr "XML-Sitemap Generator"
106
+
107
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2415
108
+ #: sitemap-loader.php:212
109
+ #@ sitemap
110
+ msgid "XML-Sitemap"
111
+ msgstr "XML-Sitemap"
112
+
113
+ #: sitemap-loader.php:239
114
+ #@ sitemap
115
+ msgid "Settings"
116
+ msgstr "Podešavanja"
117
+
118
+ #: sitemap-loader.php:240
119
+ #@ sitemap
120
+ msgid "FAQ"
121
+ msgstr "FAQ"
122
+
123
+ #: sitemap-loader.php:241
124
+ #@ sitemap
125
+ msgid "Support"
126
+ msgstr "Podrška"
127
+
128
+ #: sitemap-loader.php:242
129
+ #@ sitemap
130
+ msgid "Donate"
131
+ msgstr "Donacije"
132
+
133
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2886
134
+ #: sitemap-loader.php:328
135
+ #: sitemap-ui.php:630
136
+ #@ sitemap
137
+ msgid "Plugin Homepage"
138
+ msgstr "Homepage Plugin-a"
139
+
140
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2905
141
+ #: sitemap-loader.php:329
142
+ #: sitemap-ui.php:652
143
+ #@ sitemap
144
+ msgid "My Sitemaps FAQ"
145
+ msgstr "Česta pitanja o Sitemap-ima"
146
+
147
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2635
148
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2835
149
+ #: sitemap-ui.php:198
150
+ #: sitemap-ui.php:585
151
+ #@ sitemap
152
+ msgid "XML Sitemap Generator for WordPress"
153
+ msgstr "XML Sitemap Generator za WordPress"
154
+
155
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2740
156
+ #: sitemap-ui.php:374
157
+ #@ sitemap
158
+ msgid "Configuration updated"
159
+ msgstr "Konfiguracije ažurirane"
160
+
161
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2741
162
+ #: sitemap-ui.php:375
163
+ #@ sitemap
164
+ msgid "Error while saving options"
165
+ msgstr "Greška prilikom snimanja opcija"
166
+
167
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2743
168
+ #: sitemap-ui.php:378
169
+ #@ sitemap
170
+ msgid "Pages saved"
171
+ msgstr "Stranice snimljene"
172
+
173
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2744
174
+ #: sitemap-ui.php:379
175
+ #@ sitemap
176
+ msgid "Error while saving pages"
177
+ msgstr "Greška za vreme snimanja stranica"
178
+
179
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2758
180
+ #: sitemap-ui.php:387
181
+ #@ sitemap
182
+ msgid "The default configuration was restored."
183
+ msgstr "Osnovna podešavanja su vraćena"
184
+
185
+ #: sitemap-ui.php:397
186
+ #@ sitemap
187
+ msgid "The old files could NOT be deleted. Please use an FTP program and delete them by yourself."
188
+ msgstr "Nismo mogli izbrisati stare fajlove. Molimo vas da koristite FTP program i obrišete ih lično."
189
+
190
+ #: sitemap-ui.php:399
191
+ #@ sitemap
192
+ msgid "The old files were successfully deleted."
193
+ msgstr "Stari fajlovi su uspešno obrisani."
194
+
195
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2600
196
+ #: sitemap-ui.php:439
197
+ #@ sitemap
198
+ msgid "Thank you very much for your donation. You help me to continue support and development of this plugin and other free software!"
199
+ msgstr "Hvala vam na donaciji. Pomažete mi da nastavim rad i razvoj ovog plugin-a i drugih besplatnih programa."
200
+
201
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2600
202
+ #: sitemap-ui.php:439
203
+ #@ sitemap
204
+ msgid "Hide this notice"
205
+ msgstr "Sakrijte ovo obaveštenje"
206
+
207
+ #: sitemap-ui.php:445
208
+ #, php-format
209
+ #@ sitemap
210
+ msgid "Thanks for using this plugin! You've installed this plugin over a month ago. If it works and you are satisfied with the results, isn't it worth at least a few dollar? <a href=\"%s\">Donations</a> help me to continue support and development of this <i>free</i> software! <a href=\"%s\">Sure, no problem!</a>"
211
+ msgstr "Hvala vam što koristite ovaj plugin. Instalirali ste plugin pre meseca dana. Ako plugin radi i zadovoljni ste rezultatima, nadam se da je vredno makar par dolara? <a href=\"%s\">Donacije</a> mi pomažu da nastavim rad na ovom <i>besplatnom</i> softveru! <a href=\"%s\">Naravno, nema problema!</a>"
212
+
213
+ #: sitemap-ui.php:445
214
+ #@ sitemap
215
+ msgid "Sure, but I already did!"
216
+ msgstr "Naravno, ali već sam donirao!"
217
+
218
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2657
219
+ #: sitemap-ui.php:445
220
+ #@ sitemap
221
+ msgid "No thanks, please don't bug me anymore!"
222
+ msgstr "Ne hvala, molim vas ne uznemiravajte me više!"
223
+
224
+ #: sitemap-ui.php:452
225
+ #, php-format
226
+ #@ sitemap
227
+ msgid "Thanks for using this plugin! You've installed this plugin some time ago. If it works and your are satisfied, why not <a href=\"%s\">rate it</a> and <a href=\"%s\">recommend it</a> to others? :-)"
228
+ msgstr "Hvala vam što koristite ovaj plugin! Instalirali ste ovaj plugin pre nekog vremena. Ako radi i zadovoljni ste, zašto ne biste <a href=\"%s\">dali ocenu</a> i <a href=\"%s\">preporučili ga</a> drugima? :-)"
229
+
230
+ #: sitemap-ui.php:452
231
+ #@ sitemap
232
+ msgid "Don't show this anymore"
233
+ msgstr "Ne pokazuj više"
234
+
235
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-ui.php:374
236
+ #: sitemap-ui.php:601
237
+ #, php-format
238
+ #@ default
239
+ msgid "There is a new version of %1$s available. <a href=\"%2$s\">Download version %3$s here</a>."
240
+ msgstr "Postoji nova verzija %1$s. <a href=\"%2$s\">Skinite verziju %3$s ovde</a>."
241
+
242
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-ui.php:376
243
+ #: sitemap-ui.php:603
244
+ #, php-format
245
+ #@ default
246
+ msgid "There is a new version of %1$s available. <a href=\"%2$s\">Download version %3$s here</a> <em>automatic upgrade unavailable for this plugin</em>."
247
+ msgstr "Postoji nova verzija %1$s. <a href=\"%2$s\">Skinite novu verziju %3$s ovde</a> <em>automatsko osvežavanje verzije nije dostupno za ovaj plugin</em>."
248
+
249
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-ui.php:378
250
+ #: sitemap-ui.php:605
251
+ #, php-format
252
+ #@ default
253
+ msgid "There is a new version of %1$s available. <a href=\"%2$s\">Download version %3$s here</a> or <a href=\"%4$s\">upgrade automatically</a>."
254
+ msgstr "Postoji nova verzija %1$s. <a href=\"%2$s\">Skinite verziju %3$s ovde</a> ili <a href=\"%4$s\">uradite update automatski</a>."
255
+
256
+ #: sitemap-ui.php:613
257
+ #, php-format
258
+ #@ sitemap
259
+ msgid "Your blog is currently blocking search engines! Visit the <a href=\"%s\">privacy settings</a> to change this."
260
+ msgstr "Vaš blog trenutno blokira pretraživače! Posetite <a href=\"%s\">podešavanja privatnosti</a> da bi ste promenili."
261
+
262
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2884
263
+ #: sitemap-ui.php:629
264
+ #@ sitemap
265
+ msgid "About this Plugin:"
266
+ msgstr "O ovom plugin-u:"
267
+
268
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-ui.php:421
269
+ #: sitemap-ui.php:631
270
+ #@ sitemap
271
+ msgid "Suggest a Feature"
272
+ msgstr "Predložite Funkciju"
273
+
274
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2887
275
+ #: sitemap-ui.php:632
276
+ #@ sitemap
277
+ msgid "Notify List"
278
+ msgstr "Lista Notifikacija"
279
+
280
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2888
281
+ #: sitemap-ui.php:633
282
+ #@ sitemap
283
+ msgid "Support Forum"
284
+ msgstr "Forum za Podršku"
285
+
286
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap-ui.php:424
287
+ #: sitemap-ui.php:634
288
+ #@ sitemap
289
+ msgid "Report a Bug"
290
+ msgstr "Prijavite Grešku"
291
+
292
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2889
293
+ #: sitemap-ui.php:636
294
+ #@ sitemap
295
+ msgid "Donate with PayPal"
296
+ msgstr "Donirajte putem PayPal-a"
297
+
298
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2890
299
+ #: sitemap-ui.php:637
300
+ #@ sitemap
301
+ msgid "My Amazon Wish List"
302
+ msgstr "Moje želje na Amazon-u"
303
+
304
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2891
305
+ #: sitemap-ui.php:638
306
+ #@ sitemap
307
+ msgid "translator_name"
308
+ msgstr "ime_prevodioca"
309
+
310
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2891
311
+ #: sitemap-ui.php:638
312
+ #@ sitemap
313
+ msgid "translator_url"
314
+ msgstr "url_prevodioca"
315
+
316
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2895
317
+ #: sitemap-ui.php:641
318
+ #@ sitemap
319
+ msgid "Sitemap Resources:"
320
+ msgstr "Više o Sitemap-u"
321
+
322
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2897
323
+ #: sitemap-ui.php:642
324
+ #: sitemap-ui.php:647
325
+ #@ sitemap
326
+ msgid "Webmaster Tools"
327
+ msgstr "Alatke za Webmastere"
328
+
329
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2898
330
+ #: sitemap-ui.php:643
331
+ #@ sitemap
332
+ msgid "Webmaster Blog"
333
+ msgstr "Webmaster Blog"
334
+
335
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2901
336
+ #: sitemap-ui.php:645
337
+ #@ sitemap
338
+ msgid "Search Blog"
339
+ msgstr "Pretražite Blog"
340
+
341
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3010
342
+ #: sitemap-ui.php:648
343
+ #@ sitemap
344
+ msgid "Webmaster Center Blog"
345
+ msgstr "Webmaster Central Blog"
346
+
347
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2903
348
+ #: sitemap-ui.php:650
349
+ #@ sitemap
350
+ msgid "Sitemaps Protocol"
351
+ msgstr "Sitemap Protokol"
352
+
353
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2904
354
+ #: sitemap-ui.php:651
355
+ #@ sitemap
356
+ msgid "Official Sitemaps FAQ"
357
+ msgstr "Oficijalni Sitemap FAW"
358
+
359
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2910
360
+ #: sitemap-ui.php:655
361
+ #@ sitemap
362
+ msgid "Recent Donations:"
363
+ msgstr "Zadnje Donacije:"
364
+
365
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2914
366
+ #: sitemap-ui.php:658
367
+ #@ sitemap
368
+ msgid "List of the donors"
369
+ msgstr "Lista Donatora"
370
+
371
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2916
372
+ #: sitemap-ui.php:660
373
+ #@ sitemap
374
+ msgid "Hide this list"
375
+ msgstr "Sakrijte listu"
376
+
377
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:2919
378
+ #: sitemap-ui.php:663
379
+ #@ sitemap
380
+ msgid "Thanks for your support!"
381
+ msgstr "Hvala vam na podršci!"
382
+
383
+ #: sitemap-ui.php:683
384
+ #@ sitemap
385
+ msgid "Search engines haven't been notified yet"
386
+ msgstr "Pretraživači još uvek nisu obavešteni"
387
+
388
+ #: sitemap-ui.php:687
389
+ #, php-format
390
+ #@ sitemap
391
+ msgid "Result of the last ping, started on %date%."
392
+ msgstr "Rezultati zadnjeg ping-a, započeto %date%."
393
+
394
+ #: sitemap-ui.php:702
395
+ #, php-format
396
+ #@ sitemap
397
+ msgid "There is still a sitemap.xml or sitemap.xml.gz file in your blog directory. Please delete them as no static files are used anymore or <a href=\"%s\">try to delete them automatically</a>."
398
+ msgstr "Još uvek postoji sitemap.xml ili sitemap.xml.gz fajl na vašem blog direktorijumu. Molimo vas da ih obrišete jer se više ne koristi ni jeda statični fajl ili <a href=\"%s\">pokušajte da ih obrišete automatski</a>."
399
+
400
+ #: sitemap-ui.php:705
401
+ #, php-format
402
+ #@ sitemap
403
+ msgid "The URL to your sitemap index file is: <a href=\"%s\">%s</a>."
404
+ msgstr "URL do vašeg sitemap index fajl-a je: <a href=\"%s\">%s</a>."
405
+
406
+ #: sitemap-ui.php:708
407
+ #@ sitemap
408
+ msgid "Search engines haven't been notified yet. Write a post to let them know about your sitemap."
409
+ msgstr "Pretraživači još uvek nisu obavešteni. Napišite post da bi ste ih obavestili o vašem sitemap-u."
410
+
411
+ #: sitemap-ui.php:717
412
+ #, php-format
413
+ #@ sitemap
414
+ msgid "%s was <b>successfully notified</b> about changes."
415
+ msgstr "%s je <b>uspešno obavešten</b> o promenama."
416
+
417
+ #: sitemap-ui.php:720
418
+ #, php-format
419
+ #@ sitemap
420
+ msgid "It took %time% seconds to notify %name%, maybe you want to disable this feature to reduce the building time."
421
+ msgstr "Trebalo je %time% sekundi da obavestimo %name%, možda želite da onesposobite ovu funkciju da bi ste smanjili vreme izgradnje."
422
+
423
+ #: sitemap-ui.php:723
424
+ #, php-format
425
+ #@ sitemap
426
+ msgid "There was a problem while notifying %name%. <a href=\"%s\">View result</a>"
427
+ msgstr "Imali smo problem sa obaveštavanjem %name%. <a href=\"%s\">Pogledajte rezultate</a>"
428
+
429
+ #: sitemap-ui.php:727
430
+ #, php-format
431
+ #@ sitemap
432
+ msgid "If you encounter any problems with your sitemap you can use the <a href=\"%d\">debug function</a> to get more information."
433
+ msgstr "Ako naiđete na neke probleme u vezi sa sitemap-om možete iskoristiti <a href=\"%d\">debug funkciju</a> da bi ste dobili više podataka."
434
+
435
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3040
436
+ #: sitemap-ui.php:735
437
+ #@ sitemap
438
+ msgid "Basic Options"
439
+ msgstr "Onsovne Opcije"
440
+
441
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3079
442
+ #: sitemap-ui.php:737
443
+ #@ sitemap
444
+ msgid "Update notification:"
445
+ msgstr "Ažurirajte notifikacije:"
446
+
447
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3044
448
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3059
449
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3079
450
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3104
451
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3121
452
+ #: sitemap-ui.php:737
453
+ #: sitemap-ui.php:765
454
+ #@ sitemap
455
+ msgid "Learn more"
456
+ msgstr "Saznajte više"
457
+
458
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3083
459
+ #: sitemap-ui.php:741
460
+ #@ sitemap
461
+ msgid "Notify Google about updates of your Blog"
462
+ msgstr "Obavestite Google o promenama na vašem Blogu"
463
+
464
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3084
465
+ #: sitemap-ui.php:742
466
+ #, php-format
467
+ #@ sitemap
468
+ msgid "No registration required, but you can join the <a href=\"%s\">Google Webmaster Tools</a> to check crawling statistics."
469
+ msgstr "Registracija nije potrebna, ali možete otovriti nalog na <a href=\"%s\">Google Webmaster Tools</a> da bi ste preverili statistiku."
470
+
471
+ #: sitemap-ui.php:746
472
+ #@ sitemap
473
+ msgid "Notify Bing (formerly MSN Live Search) about updates of your Blog"
474
+ msgstr "Obavestite Bing (bivši MSN Live Search) o promenama na vašem Blogu"
475
+
476
+ #: sitemap-ui.php:747
477
+ #, php-format
478
+ #@ sitemap
479
+ msgid "No registration required, but you can join the <a href=\"%s\">Bing Webmaster Tools</a> to check crawling statistics."
480
+ msgstr "Registracija nije potrebna, ali možete napraviti nalog na <a href=\"%s\">Bing Webmaster Tools</a> da proverite statistiku."
481
+
482
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3088
483
+ #: sitemap-ui.php:751
484
+ #@ sitemap
485
+ msgid "Notify Ask.com about updates of your Blog"
486
+ msgstr "Obavestite Ask.com o promenama na vašem Blogu"
487
+
488
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3089
489
+ #: sitemap-ui.php:752
490
+ #@ sitemap
491
+ msgid "No registration required."
492
+ msgstr "Registracija nije potrebna."
493
+
494
+ #: sitemap-ui.php:757
495
+ #@ sitemap
496
+ msgid "Add sitemap URL to the virtual robots.txt file."
497
+ msgstr "Dodajte URL vašeg sitemap-a u robots.txt fajl."
498
+
499
+ #: sitemap-ui.php:761
500
+ #@ sitemap
501
+ msgid "The virtual robots.txt generated by WordPress is used. A real robots.txt file must NOT exist in the blog directory!"
502
+ msgstr "Virtualni robots.txt fajl generisan od strane WordPress-a je iskorišćen. Pravi robots.txt fajl NE SME postojati u direktorijumu vašeg bloga!"
503
+
504
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3121
505
+ #: sitemap-ui.php:765
506
+ #@ sitemap
507
+ msgid "Advanced options:"
508
+ msgstr "Napredne opcija:"
509
+
510
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3127
511
+ #: sitemap-ui.php:768
512
+ #@ sitemap
513
+ msgid "Try to increase the memory limit to:"
514
+ msgstr "Pokušajte da povećate limit memorije na:"
515
+
516
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3127
517
+ #: sitemap-ui.php:768
518
+ #@ sitemap
519
+ msgid "e.g. \"4M\", \"16M\""
520
+ msgstr "npr. \"4M\", \"16M\""
521
+
522
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3130
523
+ #: sitemap-ui.php:771
524
+ #@ sitemap
525
+ msgid "Try to increase the execution time limit to:"
526
+ msgstr "Pokušajte da povećate vreme izvršenja na:"
527
+
528
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3130
529
+ #: sitemap-ui.php:771
530
+ #@ sitemap
531
+ msgid "in seconds, e.g. \"60\" or \"0\" for unlimited"
532
+ msgstr "u sekundama, npr. \"60\" or \"0\" za neograničeno"
533
+
534
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3133
535
+ #: sitemap-ui.php:775
536
+ #@ sitemap
537
+ msgid "Include a XSLT stylesheet:"
538
+ msgstr "Dodajte XSLT stylesheet:"
539
+
540
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3133
541
+ #: sitemap-ui.php:776
542
+ #@ sitemap
543
+ msgid "Full or relative URL to your .xsl file"
544
+ msgstr "Absolutni ili relativni URL do vasšeg .xsl fajla."
545
+
546
+ #: sitemap-ui.php:776
547
+ #@ sitemap
548
+ msgid "Use default"
549
+ msgstr "Koristite default-ni"
550
+
551
+ #: sitemap-ui.php:781
552
+ #@ sitemap
553
+ msgid "Include sitemap in HTML format"
554
+ msgstr "Dodajte sitemap u HTML formatu"
555
+
556
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3144
557
+ #: sitemap-ui.php:790
558
+ #@ sitemap
559
+ msgid "Additional pages"
560
+ msgstr "Dodatne stranice"
561
+
562
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3149
563
+ #: sitemap-ui.php:793
564
+ #@ sitemap
565
+ msgid "Here you can specify files or URLs which should be included in the sitemap, but do not belong to your Blog/WordPress.<br />For example, if your domain is www.foo.com and your blog is located on www.foo.com/blog you might want to include your homepage at www.foo.com"
566
+ msgstr "Ovde možete specificirati fajlove ili URL-ove koje bi trebalo dodati u sitemap, ali ne pripadaju vašem Blog-u/WordPress-u. <br />Na primer, ako je vaš domen www.foo.com a vaš blog se nalazi na www.foo.com-blog mozda želite da dodate vašu početnu stranu www.foo.com"
567
+
568
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3151
569
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3462
570
+ #: sitemap-ui.php:795
571
+ #: sitemap-ui.php:999
572
+ #: sitemap-ui.php:1010
573
+ #: sitemap-ui.php:1019
574
+ #@ sitemap
575
+ msgid "Note"
576
+ msgstr "Opazite"
577
+
578
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3152
579
+ #: sitemap-ui.php:796
580
+ #@ sitemap
581
+ msgid "If your blog is in a subdirectory and you want to add pages which are NOT in the blog directory or beneath, you MUST place your sitemap file in the root directory (Look at the &quot;Location of your sitemap file&quot; section on this page)!"
582
+ msgstr "Ako se vaš blog nalazi u pod direktorijumu i ako želite da doddate stranice koje se ne nalaze u blog direktorijumu ili ispod, MORATE staviti sitemap fajl u korenu direktorijuma (Pogledajte &quot;Lokaciju vašeg sitemap-a &quot; sekciju na ovoj stranici)!"
583
+
584
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3154
585
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3300
586
+ #: sitemap-ui.php:798
587
+ #: sitemap-ui.php:837
588
+ #@ sitemap
589
+ msgid "URL to the page"
590
+ msgstr "URL do stranice"
591
+
592
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3155
593
+ #: sitemap-ui.php:799
594
+ #@ sitemap
595
+ msgid "Enter the URL to the page. Examples: http://www.foo.com/index.html or www.foo.com/home "
596
+ msgstr "Unesite URL do stranice. Primeri: http://www.foo.com/index.html ili www.foo.com/home "
597
+
598
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3157
599
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3301
600
+ #: sitemap-ui.php:801
601
+ #: sitemap-ui.php:838
602
+ #@ sitemap
603
+ msgid "Priority"
604
+ msgstr "Prioritet"
605
+
606
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3158
607
+ #: sitemap-ui.php:802
608
+ #@ sitemap
609
+ msgid "Choose the priority of the page relative to the other pages. For example, your homepage might have a higher priority than your imprint."
610
+ msgstr "Izaberite prioritet stranice u odnosu na druge stranice. Na primer, vaša početna stranica može imati veći prioritet nego niće stranice."
611
+
612
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3160
613
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3303
614
+ #: sitemap-ui.php:804
615
+ #: sitemap-ui.php:840
616
+ #@ sitemap
617
+ msgid "Last Changed"
618
+ msgstr "Zadjne promene"
619
+
620
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3161
621
+ #: sitemap-ui.php:805
622
+ #@ sitemap
623
+ msgid "Enter the date of the last change as YYYY-MM-DD (2005-12-31 for example) (optional)."
624
+ msgstr "Unesti datum zadnje prmene u formatu YYYY-MM-DD (2005-12-31 na primer) (opciono)."
625
+
626
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3302
627
+ #: sitemap-ui.php:839
628
+ #@ sitemap
629
+ msgid "Change Frequency"
630
+ msgstr "Promente Učestalost"
631
+
632
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3304
633
+ #: sitemap-ui.php:841
634
+ #@ sitemap
635
+ msgid "#"
636
+ msgstr "#"
637
+
638
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3309
639
+ #: sitemap-ui.php:846
640
+ #@ sitemap
641
+ msgid "No pages defined."
642
+ msgstr "Stranice nisu definisane."
643
+
644
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3314
645
+ #: sitemap-ui.php:851
646
+ #@ sitemap
647
+ msgid "Add new page"
648
+ msgstr "Dodajte novu stranicu"
649
+
650
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3325
651
+ #: sitemap-ui.php:857
652
+ #@ sitemap
653
+ msgid "Post Priority"
654
+ msgstr "Prioritet postova"
655
+
656
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3329
657
+ #: sitemap-ui.php:859
658
+ #@ sitemap
659
+ msgid "Please select how the priority of each post should be calculated:"
660
+ msgstr "Molimo vas izaberite kako se računa prioritet postova:"
661
+
662
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3331
663
+ #: sitemap-ui.php:861
664
+ #@ sitemap
665
+ msgid "Do not use automatic priority calculation"
666
+ msgstr "Ne koristi automatsku kalkulaciju prioriteta"
667
+
668
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3331
669
+ #: sitemap-ui.php:861
670
+ #@ sitemap
671
+ msgid "All posts will have the same priority which is defined in &quot;Priorities&quot;"
672
+ msgstr "Svi postovi će imati isti prioritet koji je definisan u &quot;Priorities&quot;"
673
+
674
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3397
675
+ #: sitemap-ui.php:872
676
+ #@ sitemap
677
+ msgid "Sitemap Content"
678
+ msgstr "Sadržaj sitemap-a"
679
+
680
+ #: sitemap-ui.php:873
681
+ #@ sitemap
682
+ msgid "WordPress standard content"
683
+ msgstr "WordPress standardni sadržaj"
684
+
685
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3405
686
+ #: sitemap-ui.php:878
687
+ #@ sitemap
688
+ msgid "Include homepage"
689
+ msgstr "Dodajte početnu "
690
+
691
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3411
692
+ #: sitemap-ui.php:884
693
+ #@ sitemap
694
+ msgid "Include posts"
695
+ msgstr "Dodajte postove"
696
+
697
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3417
698
+ #: sitemap-ui.php:890
699
+ #@ sitemap
700
+ msgid "Include static pages"
701
+ msgstr "Dodajte statičke stranice"
702
+
703
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3423
704
+ #: sitemap-ui.php:896
705
+ #@ sitemap
706
+ msgid "Include categories"
707
+ msgstr "Dodajte kategorije"
708
+
709
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3429
710
+ #: sitemap-ui.php:902
711
+ #@ sitemap
712
+ msgid "Include archives"
713
+ msgstr "Dodajte arhive"
714
+
715
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3443
716
+ #: sitemap-ui.php:908
717
+ #@ sitemap
718
+ msgid "Include author pages"
719
+ msgstr "Dodajte stranice autora"
720
+
721
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3436
722
+ #: sitemap-ui.php:915
723
+ #@ sitemap
724
+ msgid "Include tag pages"
725
+ msgstr "Dodajte tag stranice"
726
+
727
+ #: sitemap-ui.php:929
728
+ #@ sitemap
729
+ msgid "Custom taxonomies"
730
+ msgstr "Uobičajene taxonomije"
731
+
732
+ #: sitemap-ui.php:940
733
+ #, php-format
734
+ #@ sitemap
735
+ msgid "Include taxonomy pages for %s"
736
+ msgstr "Dodajte stranice taxonomije za %s"
737
+
738
+ #: sitemap-ui.php:958
739
+ #@ sitemap
740
+ msgid "Custom post types"
741
+ msgstr "Uobičajeni tipovi postova"
742
+
743
+ #: sitemap-ui.php:969
744
+ #, php-format
745
+ #@ sitemap
746
+ msgid "Include custom post type %s"
747
+ msgstr "Dodajte uobičajene tipove postova %s"
748
+
749
+ #: sitemap-ui.php:981
750
+ #@ sitemap
751
+ msgid "Further options"
752
+ msgstr "Još opcija"
753
+
754
+ #: sitemap-ui.php:986
755
+ #@ sitemap
756
+ msgid "Include the last modification time."
757
+ msgstr "Dodajte vreme zadnje modifikacije"
758
+
759
+ #: sitemap-ui.php:988
760
+ #@ sitemap
761
+ msgid "This is highly recommended and helps the search engines to know when your content has changed. This option affects <i>all</i> sitemap entries."
762
+ msgstr "Ovo je preporučljivo jer govori pretraživačima kada se vaš sadržaj promeni. Ova opcija utiče <i>sve</i> unose u sitemap."
763
+
764
+ #: sitemap-ui.php:995
765
+ #@ sitemap
766
+ msgid "Excluded items"
767
+ msgstr "Uklonite"
768
+
769
+ #: sitemap-ui.php:997
770
+ #@ sitemap
771
+ msgid "Excluded categories"
772
+ msgstr "Uklonite kategorije"
773
+
774
+ #: sitemap-ui.php:999
775
+ #@ sitemap
776
+ msgid "Using this feature will increase build time and memory usage!"
777
+ msgstr "Korišćenje ove funkcije će povećati vreme pravljenja i korišćenje memorije."
778
+
779
+ #: sitemap-ui.php:1006
780
+ #@ sitemap
781
+ msgid "Exclude posts"
782
+ msgstr "Uklonite postove"
783
+
784
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3206
785
+ #: sitemap-ui.php:1008
786
+ #@ sitemap
787
+ msgid "Exclude the following posts or pages:"
788
+ msgstr "Uklonite sledeće postove ili stranice:"
789
+
790
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3206
791
+ #: sitemap-ui.php:1008
792
+ #@ sitemap
793
+ msgid "List of IDs, separated by comma"
794
+ msgstr "Lista ID-a, odvojene zarezom"
795
+
796
+ #: sitemap-ui.php:1010
797
+ #@ sitemap
798
+ msgid "Child posts won't be excluded automatically!"
799
+ msgstr "Pod postovi neće biti uključeni automatski!"
800
+
801
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3457
802
+ #: sitemap-ui.php:1016
803
+ #@ sitemap
804
+ msgid "Change frequencies"
805
+ msgstr "Promenite učestalost"
806
+
807
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3463
808
+ #: sitemap-ui.php:1020
809
+ #@ sitemap
810
+ msgid "Please note that the value of this tag is considered a hint and not a command. Even though search engine crawlers consider this information when making decisions, they may crawl pages marked \"hourly\" less frequently than that, and they may crawl pages marked \"yearly\" more frequently than that. It is also likely that crawlers will periodically crawl pages marked \"never\" so that they can handle unexpected changes to those pages."
811
+ msgstr "Molimo vas da zapamtite da vrednost ovog tag-a je koristi kao predlog a ne kao komanda. Iako pretraživači razmatraju ovu infomaciju kada donose odluke, možda će proći kroz stranice obeležene \"hourly\" ređe nego naznačeno, a možda će stranice naznačene \"yearly\" posećivati češće. Isto tako je verovatno da će s'vremena na vreme prolaziti kroz stranice naznačene sa \"never\" da bi mogli da reaguju na neočekivane promene na tim stranicama."
812
+
813
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3469
814
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3535
815
+ #: sitemap-ui.php:1026
816
+ #: sitemap-ui.php:1083
817
+ #@ sitemap
818
+ msgid "Homepage"
819
+ msgstr "Početna"
820
+
821
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3475
822
+ #: sitemap-ui.php:1032
823
+ #@ sitemap
824
+ msgid "Posts"
825
+ msgstr "Postovi"
826
+
827
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3481
828
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3553
829
+ #: sitemap-ui.php:1038
830
+ #: sitemap-ui.php:1101
831
+ #@ sitemap
832
+ msgid "Static pages"
833
+ msgstr "Statične stranice"
834
+
835
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3487
836
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3559
837
+ #: sitemap-ui.php:1044
838
+ #: sitemap-ui.php:1107
839
+ #@ sitemap
840
+ msgid "Categories"
841
+ msgstr "Kategorije"
842
+
843
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3493
844
+ #: sitemap-ui.php:1050
845
+ #@ sitemap
846
+ msgid "The current archive of this month (Should be the same like your homepage)"
847
+ msgstr "Trenutna arhiva za ovaj mesec (Treba biti ista kao i vaša početna stranica)"
848
+
849
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3499
850
+ #: sitemap-ui.php:1056
851
+ #@ sitemap
852
+ msgid "Older archives (Changes only if you edit an old post)"
853
+ msgstr "Starije arhive (Menja se samo ako promenti stariji post)"
854
+
855
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3506
856
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3572
857
+ #: sitemap-ui.php:1063
858
+ #: sitemap-ui.php:1120
859
+ #@ sitemap
860
+ msgid "Tag pages"
861
+ msgstr "Tag stranice"
862
+
863
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3513
864
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3579
865
+ #: sitemap-ui.php:1070
866
+ #: sitemap-ui.php:1127
867
+ #@ sitemap
868
+ msgid "Author pages"
869
+ msgstr "Stranice autora"
870
+
871
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3527
872
+ #: sitemap-ui.php:1078
873
+ #@ sitemap
874
+ msgid "Priorities"
875
+ msgstr "Prioriteti"
876
+
877
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3541
878
+ #: sitemap-ui.php:1089
879
+ #@ sitemap
880
+ msgid "Posts (If auto calculation is disabled)"
881
+ msgstr "Postovi (ako je auto kalkulacija isključena)"
882
+
883
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3547
884
+ #: sitemap-ui.php:1095
885
+ #@ sitemap
886
+ msgid "Minimum post priority (Even if auto calculation is enabled)"
887
+ msgstr "Minimalni prioritet za postove (Čak iako je auto kalkulacija uključena)"
888
+
889
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3565
890
+ #: sitemap-ui.php:1113
891
+ #@ sitemap
892
+ msgid "Archives"
893
+ msgstr "Arhive"
894
+
895
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3590
896
+ #: sitemap-ui.php:1138
897
+ #@ sitemap
898
+ msgid "Update options"
899
+ msgstr "Opcije ažuriranja"
900
+
901
+ # C:Inetpubwwwrootwpwp-contentpluginssitemap_beta/sitemap.php:3591
902
+ #: sitemap-ui.php:1139
903
+ #@ sitemap
904
+ msgid "Reset options"
905
+ msgstr "Opcije za resetovanje"
906
+
907
+ #: sitemap.php:82
908
+ #@ sitemap
909
+ msgid "Your WordPress version is too old for XML Sitemaps."
910
+ msgstr "Vaša verzija WordPress-a je previše stara za XML Sitemap."
911
+
912
+ #: sitemap.php:82
913
+ #, php-format
914
+ #@ sitemap
915
+ msgid "Unfortunately this release of Google XML Sitemaps requires at least WordPress %4$s. You are using Wordpress %2$s, which is out-dated and insecure. Please upgrade or go to <a href=\"%1$s\">active plugins</a> and deactivate the Google XML Sitemaps plugin to hide this message. You can download an older version of this plugin from the <a href=\"%3$s\">plugin website</a>."
916
+ msgstr "Nažalost ova verzija Google XML Sitemap-a zahteva barem WordPress verziju %4$s. Vi koristite WordPress verziju %2$s, koja je zastarela i nesigurna. Molimo vas da update-ujete ili odete na <a href=\"%1$s\">aktivne plugin-ove</a> i deaktivirate Google XML Sitemap plugin da bi ste sakrili ovu poruku. Možete skinuti stariju verziju ovog plugin-a sa <a href=\"%3$s\">našeg sajta</a>."
917
+
918
+ #: sitemap.php:92
919
+ #@ sitemap
920
+ msgid "Your PHP version is too old for XML Sitemaps."
921
+ msgstr "PHP verzija koju koristite je previše stara za XML sitemap."
922
+
923
+ #: sitemap.php:92
924
+ #, php-format
925
+ #@ sitemap
926
+ msgid "Unfortunately this release of Google XML Sitemaps requires at least PHP %4$s. You are using PHP %2$s, which is out-dated and insecure. Please ask your web host to update your PHP installation or go to <a href=\"%1$s\">active plugins</a> and deactivate the Google XML Sitemaps plugin to hide this message. You can download an older version of this plugin from the <a href=\"%3$s\">plugin website</a>."
927
+ msgstr "nažalost ova verzija Google XML Sitemap-a zahteva najmanje verziju PHP %4$s. Vi koristite PHP %2$s, koji je zastareo i nesiguran. Zamolite vaš hosting da ažuriraju verziju PHP instalacije ili idite na <a href=\"%1$s\">aktivne plugin-ove</a> i deaktivirajte Google XML Sitemap plugin da bi ste sakrili ovu poruku. Možete skinuti straiju verziju ovog plugin-a sa <a href=\"%3$s\">našeg sajta</a>."
928
+
929
+ #. translators: plugin header field 'Name'
930
+ #: sitemap.php:0
931
+ #@ sitemap
932
+ msgid "Google XML Sitemaps"
933
+ msgstr ""
934
+
935
+ #. translators: plugin header field 'PluginURI'
936
+ #: sitemap.php:0
937
+ #@ sitemap
938
+ msgid "http://www.arnebrachhold.de/redir/sitemap-home/"
939
+ msgstr ""
940
+
941
+ #. translators: plugin header field 'Description'
942
+ #: sitemap.php:0
943
+ #@ sitemap
944
+ msgid "This plugin will generate a special XML sitemap which will help search engines like Google, Yahoo, Bing and Ask.com to better index your blog."
945
+ msgstr ""
946
+
947
+ #. translators: plugin header field 'Author'
948
+ #: sitemap.php:0
949
+ #@ sitemap
950
+ msgid "Arne Brachhold"
951
+ msgstr ""
952
+
953
+ #. translators: plugin header field 'AuthorURI'
954
+ #: sitemap.php:0
955
+ #@ sitemap
956
+ msgid "http://www.arnebrachhold.de/"
957
+ msgstr ""
958
+
959
+ #. translators: plugin header field 'Version'
960
+ #: sitemap.php:0
961
+ #@ sitemap
962
+ msgid "4.0beta9"
963
+ msgstr ""
964
+
readme.txt CHANGED
@@ -1,467 +1,487 @@
1
- === XML Sitemaps ===
2
- Contributors: auctollo
3
- Tags: seo, google, bing, yahoo, msn, ask, live, sitemaps, google sitemaps, xml sitemap, xml
4
- Requires at least: 3.3
5
- Tested up to: 5.7
6
- Stable tag: 4.1.1
7
- License: GPLv2
8
- License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
-
10
- This plugin will improve SEO by helping search enginess better index your site using sitemaps.
11
-
12
- == Description ==
13
-
14
- Use this plugin to greatly improve SEO to create special XML sitemaps which will help search engines like Google, Bing, Yahoo and Ask.com to better index your site.
15
-
16
- With such a sitemap, it's much easier for the crawlers to see the complete structure of your site and retrieve it more efficiently. The plugin supports all kinds of WordPress generated pages as well as custom URLs. Additionally it notifies all major search engines every time you create a post about the new content.
17
-
18
- Supported since *over 9 years* and rated as the [best WordPress plugin](http://wordpress.org/plugins/browse/top-rated/), it will do exactly what it's supposed to do - providing a complete XML sitemap for search engines. It will not break your site, slow it down or annoy you. Guaranteed!
19
-
20
- > If you like the plugin, feel free to rate it (on the right side of this page)! :)
21
-
22
- Related Links:
23
-
24
- * <a href="http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/" title="XML Sitemaps Plugin for WordPress">Plugin Homepage</a>
25
- * <a href="http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/changelog/" title="Changelog of the XML Sitemaps Plugin for WordPress">Changelog</a>
26
- * <a href="http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/help/" title="Sitemaps FAQ">Plugin help and sitemaps FAQ</a>
27
- * <a href="http://wordpress.org/support/topic/read-before-opening-a-new-support-topic">Support Forum</a>
28
-
29
- == Installation ==
30
-
31
- 1. Install the plugin like you always install plugins, either by uploading it via FTP or by using the "Add Plugin" function of WordPress.
32
- 2. Activate the plugin at the plugin administration page
33
- 3. If you want: Open the plugin configuration page, which is located under Settings -> XML-Sitemap and customize settings like priorities and change frequencies.
34
- 4. The plugin will automatically update your sitemap of you publish a post, so there is nothing more to do :)
35
-
36
- == Frequently Asked Questions ==
37
-
38
- = Where can I find the options page of the plugin? =
39
-
40
- It is under Settings > XML Sitemap. I know nowadays many plugins add top-level menu items, but in most of the cases it is just not necessary. I've seen WP installations which looked like an Internet Explorer ten years ago with 20 toolbars installed. ;-)
41
-
42
- = Do I have to create a sitemap.xml and sitemap.xml.gz by myself? =
43
-
44
- Not anymore. Since version 4, these files are dynamically generated. *There must be no sitemap.xml or sitemap.xml.gz in your site directory anymore!* The plugin will try to rename them to sitemap.xml.bak if they still exists.
45
-
46
- = Does this plugin use static files or "I can't find the sitemap.xml file!" =
47
-
48
- Not anymore. Since version 4, these files are dynamically generated just like any other WordPress content.
49
-
50
- = There are no comments yet (or I've disabled them) and all my postings have a priority of zero! =
51
-
52
- Please disable automatic priority calculation and define a static priority for posts.
53
-
54
- = So many configuration options... Do I need to change them? =
55
-
56
- No, only if you want to. Default values are ok for most sites.
57
-
58
- = Does this plugin work with all WordPress versions? =
59
-
60
- This version works with WordPress 3.3 and better. If you're using an older version, please check the [Sitemaps Plugin Homepage](http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/ "XML Sitemap Generator Plugin Homepage") for the legacy releases. There is a working release for every WordPress version since 1.5, but you really should consider updating your WordPress installation!
61
-
62
- = My question isn't answered here =
63
-
64
- Most of the plugin options are described at the [plugin homepage](http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/) as well as the dedicated [Sitemaps FAQ](http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/help/ "List of common questions / problems regarding XML Sitemaps").
65
-
66
- = My question isn't even answered there =
67
-
68
- Please post your question at the [WordPress support forum](http://wordpress.org/support/topic/read-before-opening-a-new-support-topic) and tag your post with "google-sitemap-generator".
69
-
70
- = What's new in the latest version? =
71
-
72
- The changelog is maintained [here](http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/changelog/ "XML Sitemap Generator Plugin Changelog")
73
-
74
- = Why is the changelog on a separate page and not here? =
75
-
76
- The WordPress.org repository is just another place to download this plugin. I don't want to maintain too many pages with the same content. Thank you for your understanding!
77
-
78
- == Changelog ==
79
-
80
- = 4.1.1 (2020-08-11) =
81
- * Fixed security issue related to trailing slashes
82
-
83
- = 4.1.0 (2018-12-18) =
84
- * Fixed security issue related to escaping external URLs
85
- * Fixed security issue related to option tags in forms
86
-
87
- = 4.0.9 (2017-07-24) =
88
- * Fixed security issue related to donation functionality.
89
-
90
- = 4.0.8 (2014-11-15) =
91
- * Fixed bug regarding the exclude categories feature, thanks to Claus Schöffel!
92
-
93
- = 4.0.7.1 (2014-09-02) =
94
- * Sorry, no new features this time… This release only updates the Compatibility-Tag to WordPress 4.0. Unfortunately there is no way to do this anymore without a new version
95
-
96
- = 4.0.7 (2014-06-23) =
97
- * Better compatibility with GoDaddy managed WP hosting
98
- * Better compatibility with QuickCache
99
- * Removed WordPress version from the sitemap
100
- * Corrected link to WordPress privacy settings (if search engines are blocked)
101
- * Changed hook which is being used for sitemap pings to avoid pings on draft edit
102
-
103
- = 4.0.6 (2014-06-03) =
104
- * Added option to disable automatic gzipping
105
- * Fixed bug with duplicated external sitemap entries
106
- * Don’t gzip if behind Varnish since Varnish can do that
107
-
108
- = 4.0.5 (2014-05-18) =
109
- * Added function to manually start ping for main-sitemap or all sub-sitemaps
110
- * Added support for changing the base of the sitemap URL to another URL (for WP installations in sub-folders)
111
- * Fixed issue with empty post sitemaps (related to GMT/local time offset)
112
- * Fixed some timing issues in archives
113
- * Improved check for possible problems before gzipping
114
- * Fixed empty archives and author sitemaps in case there were no posts
115
- * Fixed bug which caused the Priority Provider to disappear in recent PHP versions
116
- * Plugin will also ping with the corresponding sub-sitemap in case a post was modified
117
- * Better checking for empty external urls
118
- * Changed text in XSL template to be more clear about sitemap-index and sub-sitemaps
119
- * Changed content type to text/xml to improve compatibility with caching plugins
120
- * Changed query parameters to is_feed=true to improve compatibility with caching plugins
121
- * Switched from using WP_Query to load posts to a custom SQL statement to avoid problems with other plugin filters
122
- * Added caching of some SQL statements
123
- * Added support feed for more help topics
124
- * Added link to new help page
125
- * Cleaned up code and renamed variables to be more readable
126
- * Updated Japanese Translation, thanks to Daisuke Takahashi
127
-
128
- = 4.0.4 (2014-04-19) =
129
- * Removed deprecated get_page call
130
- * Changed last modification time of sub-sitemaps to the last modification date of the posts instead of the publish date
131
- * Removed information window if the statistic option has not been activated
132
- * Added link regarding new sitemap format
133
- * Updated Portuguese translation, thanks to Pedro Martinho
134
- * Updated German translation
135
-
136
- = 4.0.3 (2014-04-13) =
137
- * Fixed compression if an gzlib handler was already active
138
- * Help regarding permalinks for Nginx users
139
- * Fix with gzip compression in case there was other output before already
140
- * Return 404 for HTML sitemaps if the option has been disabled
141
- * Updated translations
142
-
143
- = 4.0.2 (2014-04-01) =
144
- * Fixed warning if an gzip handler is already active
145
-
146
- = 4.0.1 (2014-03-31) =
147
- * Fixed bug with custom post types including a "-"
148
- * Fixed some 404 Not Found Errors
149
-
150
- = 4.0 (2014-03-30) =
151
- * No static files anymore, sitemap is created on the fly!
152
- * Sitemap is split-up into sub-sitemaps by month, allowing up to 50.000 posts per month! [More information](http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/google-xml-sitemap-generator-new-sitemap-format/)
153
- * Support for custom post types and custom taxonomis!
154
- * 100% Multisite compatible, including by-blog and network activation.
155
- * Reduced server resource usage due to less content per request.
156
- * New API allows other plugins to add their own, separate sitemaps.
157
- * Note: PHP 5.1 and WordPress 3.3 is required! The plugin will not work with lower versions!
158
- * Note: This version will try to rename your old sitemap files to *-old.xml. If that doesn’t work, please delete them manually since no static files are needed anymore!
159
-
160
- = 3.4.1 (2014-04-10) =
161
- * Compatibility with mysqli
162
-
163
- = Version 3.4 (2013-11-24) =
164
- * Fixed deprecation warnings in PHP 5.4, thanks to Dion Hulse!
165
-
166
- = 3.3 (2013-09-28) =
167
- * Fixed problem with file permission checking
168
- * Filter out hashs (#) in URLs
169
-
170
- = 3.2.9 (2013-01-11) =
171
- * Fixed security issue with change frequencies and filename of sitemap file. Exploit was only possible with admin account.
172
-
173
- = 3.2.8 (2012-08-08) =
174
- * Fixed wrong custom taxonomy URLs, thanks to ramon fincken of the wordpress.org forum!
175
- * Removed ASK ping since they shut down their service.
176
- * Exclude post_format taxonomy from custom taxonomy list
177
-
178
- = 3.2.7 (2012-04-24) =
179
- * Fixed custom post types, thanks to clearsite of the wordpress.org forum!
180
- * Fixed broken admin layout on WP 3.4
181
-
182
- = 3.2.6 (2011-09-19) =
183
- * Removed YAHOO ping since YAHOO uses bing now
184
- * Removed deprecated function call
185
-
186
- = 3.2.5 (2011-07-11) =
187
- * Backported Bing ping success fix from beta
188
- * Added friendly hint to try out the new beta
189
-
190
- = 3.2.4 (2010-05-29) =
191
- * Added (GMT) to date column in sitemap xslt template to avoid confusion with different time zones
192
- * Fixed wrong SQL statement for author pages, thanks to twoenoug
193
- * Fixed several deprecated function calls
194
- * Note: This release does not support the new multisite feature of WordPress yet and will not be active when multisite is enabled.
195
-
196
- = 3.2.3 (2010-04-02) =
197
- * Fixed that all pages were missing in the sitemap if the “Uncategorized” category was excluded
198
-
199
- = 3.2.2 (2009-12-19) =
200
- * Updated compatibility tag to WordPress 2.9
201
- * Fixed PHP4 problems
202
-
203
- = 3.2.1 (2009-12-16) =
204
- * Notes and update messages at the top of the admin page could interfere with the manual build function
205
- * Help links in the WP contextual help were not shown anymore since the last update
206
- * IE 7 sometimes displayed a cached admin page
207
- * Removed invalid link to config page from the plugin description (The link lead to a "Not enough permission error")
208
- * Improved performance of getting the current plugin version by caching
209
- * Updated Spanish language files
210
-
211
- = 3.2 (2009-11-23) =
212
- * Added function to show the actual results of a ping instead of only linking to the url
213
- * Added new hook (sm_rebuild) for third party plugins to start building the sitemap
214
- * Fixed bug which showed the wrong URL for the latest Google ping result
215
- * Added some missing documentation
216
- * Removed hardcoded php name for sitemap file in admin urls
217
- * Uses KSES for showing ping test results
218
- * Ping test fixed for WP < 2.3
219
-
220
- = 3.1.9 (2009-11-13) =
221
- * Fixed MySQL Error if author pages were included
222
-
223
- = 3.1.8 (2009-11-07) =
224
- * Improved custom taxonomy handling and fixed wrong last modification date
225
- * Fixed fatal error in WordPress versions lower than 2.3
226
- * Fixed Update Notice for WordPress 2.8 and higher
227
- * Added warning if blog privacy is activated
228
- * Fixed priorities of additional pages were shown as 0 instead of 1
229
-
230
- = 3.1.7 (2009-10-21) =
231
- * Added support for custom taxonomies. Thanks to Lee!
232
-
233
- = 3.1.6 (2009-08-31) =
234
- * Fixed PHP error “Only variables can be passed by reference”
235
- * Fixed wrong URLS of multi-page posts (Thanks artstorm!)
236
- * Updated many language files
237
-
238
- = 3.1.5 (2009-08-24) =
239
- * Added option to completely disable the last modification time
240
- * Fixed problem with HTTPS url for the XSL stylesheet if the sitemap was build via the admin panel
241
- * Improved handling of homepage entry if a single page was set for it
242
- * Fixed mktime warning which appeared sometimes
243
- * Fixed bug which caused inf. reloads after rebuilding the sitemap via the admin panel
244
- * Improved handling of missing sitemaps files if WP was moved to another location
245
-
246
- = 3.1.4 (2009-06-22) =
247
- * Fixed bug which broke all pings in WP older than 2.7
248
- * Added more output in debug mode if pings fail
249
- * Moved global post variable so other plugins can use it in get_permalink()
250
- * Added small icon for ozh admin menu
251
- * Added more help links in UI
252
-
253
- = 3.1.3 (2009-06-07) =
254
- * Changed MSN Live Search to Bing
255
- * Exclude categories also now exludes the category itself and not only the posts
256
- * Pings now use the new WordPress HTTP API instead of Snoopy
257
- * Fixed bug that in localized WP installations priorities could not be saved
258
- * The sitemap cron job is now cleared after a manual rebuild or after changing the config
259
- * Adjusted style of admin area for WP 2.8 and refreshed icons
260
- * Disabled the “Exclude categories” feature for WP 2.5.1, since it doesn’t have the required functions yet
261
-
262
- = 3.1.2 (2008-12-26) =
263
- * Changed the way the stylesheet is saved (default / custom stylesheet)
264
- * Sitemap is now rebuild when a page is published
265
- * Removed support for static robots.txt files, this is now handled via WordPress functions
266
- * Added compat. exceptions for WP 2.0 and WP 2.1
267
-
268
- = 3.1.1 (2008-12-21) =
269
- * Fixed redirect issue if wp-admin is rewritten via mod_rewrite, thanks to macjoost
270
- * Fixed wrong path to assets, thanks PozHonks
271
- * Fixed wrong plugin URL if wp-content was renamed / redirected, thanks to wnorris
272
- * Updated WP User Interface for 2.7
273
- * Various other small things
274
-
275
- = 3.1.0.1 (2008-05-27) =
276
- * Extracted UI JS to external file
277
- * Enabled the option to include following pages of multi-page posts
278
- * Script tries to raise memory and time limit if active
279
-
280
- = 3.1 (2008-05-22) =
281
- * Marked as stable
282
-
283
- = 3.1b3 (2008-05-19) =
284
- * Cleaned up plugin directory and moved img files to subfolders
285
- * Fixed background building bug in WP 2.1
286
- * Removed auto-update plugin link for WP < 2.5
287
-
288
- = 3.1b2 (2008-05-18) =
289
- * Fixed critical bug with the build in background option
290
- * Added notification if a build is scheduled
291
-
292
- = 3.1b1 (2008-05-08) =
293
- * Splitted plugin in loader, generator and user interface to save memory
294
- * Generator and UI will only be loaded when needed
295
- * Secured all admin actions with nonces
296
- * Improved WP 2.5 handling
297
- * New "Suggest a Feature" link
298
-
299
- = 3.0.3.3 (2008-04-29) =
300
- * Fixed author pages
301
- * Enhanced background building and increased delay to 15 seconds
302
- * Enabled background building by default
303
-
304
- = 3.0.3.2 (2008-04-28) =
305
- * Improved WP 2.5 handling (fixes blank screens and timeouts)
306
-
307
- = 3.0.3.1 (2008-03-30) =
308
- * Added compatibility CSS for WP 2.5
309
-
310
- = 3.0.3 (2007-12-30) =
311
- * Added option to ping MSN Live Search
312
- * Removed some WordPress hooks (the sitemap isn’t updates with every comment anymore)
313
-
314
- = 3.0.2.1 (2007-11-28) =
315
- * Fixed wrong XML Schema Location (Thanks to Emanuele Tessore)
316
- * Added Russian Language files by Sergey http://ryvkin.ru
317
-
318
- = 3.0.2 (2007-11-25) =
319
- * Fixed bug which caused that some settings were not saved correctly
320
- * Added option to exclude pages or post by ID
321
- * Restored YAHOO ping service with API key since the other one is to unreliable
322
-
323
- = 3.0.1 (2007-11-03) =
324
- * Changed HTTP client for ping requests to Snoopy
325
- * Added "safemode" for SQL which doesn’t use unbuffered results
326
- * Added option to run the building process in background using wp-cron
327
- * Added links to test the ping if it failed
328
-
329
- = 3.0 final (2007-09-24) =
330
- * Marked as stable
331
- * Removed useless functions
332
-
333
- = 3.0b11 (2007-09-23) =
334
- * Changed mysql queries to unbuffered queries
335
- * Uses MUCH less memory
336
- * Option to limit the number of posts
337
-
338
- = 3.0b10 (2007-09-04) =
339
- * Added category support for WordPress 2.3
340
- * Fixed bug with empty URLs in sitemap
341
- * Repaired GET building
342
-
343
- = 3.0b9 (2007-09-02) =
344
- * Added tag support for WordPress 2.3
345
- * Fixed archive bug with static pages (Thanks to Peter Claus Lamprecht)
346
- * Fixed some missing translation strings, thanks to Kirin Lin
347
-
348
- = 3.0b8 (2007-07-22) =
349
- * Fixed bug with empty categories
350
- * Fixed bug with translation plugins
351
- * Added support for robots.txt
352
- * Switched YAHOO ping API from YAHOO Web Services to the “normal” ping service
353
- * Search engines will only be pinged if the sitemap file has changed
354
-
355
- = 3.0b7 (2007-05-17) =
356
- * Added Ask.com notification
357
- * Added option to include the author pages like /author/john
358
- * Fixed WP 2.1 / Pre 2.1 post / pages database changes
359
- * Added check to not build the sitemap if importing posts
360
- * Fixed wrong XSLT location (Thanks froosh)
361
- * Small enhancements and bug fixes
362
-
363
- = 3.0b6 (2007-01-23) =
364
- * sitemap.xml.gz was not compressed
365
- * YAHOO update-notification was PHP5 only (Thanks to Joseph Abboud!)
366
- * More WP 2.1 optimizations
367
- * Reduced memory usage with PHP5
368
-
369
- = 3.0b5 (2007-01-19) =
370
- * WordPress 2 Design
371
- * YAHOO update notification
372
- * New status report, removed ugly logfiles
373
- * Added option to define a XSLT stylesheet and added a default one
374
- * Fixed bug with sub-pages, thanks to [Mike](http://baptiste.us/), [Peter](http://fastagent.de/) and [Glenn](http://publicityship.com.au/)
375
- * Improved file handling, thanks to [VJTD3](http://www.vjtd3.com/)
376
- * WP 2.1 improvements
377
-
378
- = 3.0b4 (2006-11-16) =
379
- * Fixed some smaller bugs
380
- * Decreased memory usage which should solve timeout and memory problems
381
- * Updated namespace to support YAHOO and MSN
382
-
383
- = 3.0b2 (2006-01-14) =
384
- * Fixed several bugs reported by users
385
-
386
- = 3.0b (2005-11-25) =
387
- * WordPress 2.0 (Beta, RC1) compatible
388
- * Added different priority calculation modes and introduced an API to create custom ones (Some people didn’t like the way to calculate the post priority based on the count of user comments. This will give you the possibility to develop custom priority providers which fit your needs.)
389
- * Added support to use the [Popularity Contest](http://www.alexking.org/blog/2005/07/27/popularity-contest-11/) plugin by [Alex King](http://www.alexking.org/) to calculate post priority (If you are already using the Popularity Contest plugin, this will be the best way to determine the priority of the posts. Uses to new priority API noted above.)
390
- * Added option to exclude password protected posts (This was one of the most requested features.)
391
- * Posts and pages marked for publish with a date in the future won’t be included
392
- * Added function to start sitemap creation via GET and a secret key (If you are using external software which directly writes into the database without using the WordPress API, you can rebuild the sitemap with a simple HTTP Request. This can be made with a cron job for example.)
393
- * Improved compatibility with other plugins (There should no longer be problems with other plugins now which checked for existence of a specified function to determine if you are in the control panel or not.)
394
- * Recoded plugin architecture which is now fully OOP (The code is now cleaner and better to understand which makes it easier to modify. This should also avoid namespace problems.)
395
- * Improved speed and optimized settings handling (Settings and pages are only loaded if the sitemap generation process starts and not every time a page loads. This saves one MySQL Query on every request.)
396
- * Added Button to restore default configuration (Messed up the config? You’ll need just one click to restore all settings.)
397
- * Added log file to check everything is running (In the new log window you can see when your sitemap was rebuilt or if there was any error.)
398
- * Improved user-interface
399
- * Added several links to homepage and support (This includes the Notify List about new releases and the WordPress support forum.)
400
-
401
- = 2.7 (2005-11-25) =
402
- * Added Polish Translation by [kuba](http://kubazwolinski.com/)
403
-
404
- = 2.7 (2005-11-01) =
405
- * Added French Translation by [Thierry Lanfranchi](http://www.chezthierry.info/)
406
-
407
- = 2.7 (2005-07-21) =
408
- * Fixed bug with incorrect date in additional pages (wrong format)
409
- * Added Swedish Translation by [Tobias Bergius](http://tobiasbergius.se/)
410
-
411
- = 2.6 (2005-07-16) =
412
- * Included Chinese (Simplified) language files by [june6](http://www.june6.cn/)
413
-
414
- = 2.6 (2005-07-04) =
415
- * Added support to store the files at a custom location
416
- * Changed the home URL to have a slash at the end
417
- * Fixed errors with wp-mail
418
- * Added support for other plugins to add content to the sitemap
419
-
420
- = 2.5 (2005-06-15) =
421
- * You can include now external pages which aren’t generated by WordPress or are not recognized by this plugin
422
- * You can define a minimum post priority, which will overrride the calculated value if it’s too low
423
- * The plugin will automatically ping Google whenever the sitemap gets regenerated
424
- * Update 1: Included Spanish translations by [Cesar Gomez Martin](http://www.cesargomez.org/)
425
- * Update 2: Included Italian translations by [Stefano Aglietti](http://wordpress-it.it/)
426
- * Update 3: Included Traditional Chinese translations by [Kirin Lin](http://kirin-lin.idv.tw/)
427
-
428
- = 2.2 (2005-06-08) =
429
- * Language file support: [Hiromasa](http://hiromasa.zone.ne.jp/) from [http://hiromasa.zone.ne.jp](http://hiromasa.zone.ne.jp/) sent me a japanese version of the user interface and modified the script to support it! Thanks for this! Check [the WordPress Codex](http://codex.wordpress.org/WordPress_Localization) how to set the language in WordPress.
430
- * Added Japanese user interface by [Hiromasa](http://hiromasa.zone.ne.jp/)
431
- * Added German user interface by me
432
-
433
- = 2.12 (2005-06-07) =
434
- * Changed SQL Statement for categories that it also works on MySQL 3
435
-
436
- = 2.11 (2005-06-07) =
437
- * Fixed a hardcoded tablename which made a SQL error
438
-
439
- = 2.1 (2005-06-07) =
440
- * Can also generate a gzipped version of the xml file (sitemap.xml.gz)
441
- * Uses correct last modification dates for categories and archives. (Thanks to thx [Rodney Shupe](http://www.shupe.ca/) for the SQL)
442
- * Supports now different WordPress / Blog directories
443
- * Fixed bug which ignored different post/page priorities (Reported by [Brad](http://h3h.net/))
444
-
445
- = 2.01 (2005-06-07) =
446
- * Fixed compatibility for PHP installations which are not configured to use short open tags
447
- * Changed Line 147 from _e($i); to _e(strval($i));
448
- * Thanks to [Christian Aust](http://publicvoidblog.de/) for reporting this!
449
-
450
- == Screenshots ==
451
-
452
- 1. Plugin options page
453
- 2. Sample XML sitemap (with a stylesheet for making it readable)
454
- 3. Sample XML sitemap (without stylesheet)
455
-
456
- == License ==
457
-
458
- Good news, this plugin is free for everyone! Since it's released under the GPL, you can use it free of charge on your personal or commercial site.
459
-
460
- == Translations ==
461
-
462
- The plugin comes with various translations, please refer to the [WordPress Codex](http://codex.wordpress.org/Installing_WordPress_in_Your_Language "Installing WordPress in Your Language") for more information about activating the translation. If you want to help to translate the plugin to your language, please have a look at the sitemap.pot file which contains all definitions and may be used with a [gettext](http://www.gnu.org/software/gettext/) editor like [Poedit](http://www.poedit.net/) (Windows).
463
-
464
- == Upgrade Notice ==
465
-
466
- = 4.0.9 =
467
- Thanks for using XML Sitemaps! This release includes an important security fix that has been reported.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === XML Sitemaps ===
2
+ Contributors: arnee
3
+ Tags: seo, google, bing, yahoo, msn, ask, live, sitemaps, google sitemaps, xml sitemap, xml
4
+ Requires at least: 3.3
5
+ Tested up to: 5.9.3
6
+ Stable tag: 4.1.2
7
+ License: GPLv2
8
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
+
10
+ This plugin will improve SEO by helping search enginess better index your site using sitemaps.
11
+
12
+ == Description ==
13
+
14
+ Use this plugin to greatly improve SEO to create special XML sitemaps which will help search engines like Google, Bing, Yahoo and Ask.com to better index your site.
15
+
16
+ With such a sitemap, it's much easier for the crawlers to see the complete structure of your site and retrieve it more efficiently. The plugin supports all kinds of WordPress generated pages as well as custom URLs. Additionally it notifies all major search engines every time you create a post about the new content.
17
+
18
+ Supported since *over 9 years* and rated as the [best WordPress plugin](http://wordpress.org/plugins/browse/top-rated/), it will do exactly what it's supposed to do - providing a complete XML sitemap for search engines. It will not break your site, slow it down or annoy you. Guaranteed!
19
+
20
+ > If you like the plugin, feel free to rate it (on the right side of this page)! :)
21
+
22
+ Related Links:
23
+
24
+ * <a href="http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/" title="XML Sitemaps Plugin for WordPress">Plugin Homepage</a>
25
+ * <a href="http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/changelog/" title="Changelog of the XML Sitemaps Plugin for WordPress">Changelog</a>
26
+ * <a href="http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/help/" title="Sitemaps FAQ">Plugin help and sitemaps FAQ</a>
27
+ * <a href="http://wordpress.org/support/topic/read-before-opening-a-new-support-topic">Support Forum</a>
28
+
29
+ == Installation ==
30
+
31
+ 1. Install the plugin like you always install plugins, either by uploading it via FTP or by using the "Add Plugin" function of WordPress.
32
+ 2. Activate the plugin at the plugin administration page
33
+ 3. If you want: Open the plugin configuration page, which is located under Settings -> XML-Sitemap and customize settings like priorities and change frequencies.
34
+ 4. The plugin will automatically update your sitemap of you publish a post, so there is nothing more to do :)
35
+
36
+ == Frequently Asked Questions ==
37
+
38
+ = Where can I find the options page of the plugin? =
39
+
40
+ It is under Settings > XML Sitemap. I know nowadays many plugins add top-level menu items, but in most of the cases it is just not necessary. I've seen WP installations which looked like an Internet Explorer ten years ago with 20 toolbars installed. ;-)
41
+
42
+ = Do I have to create a sitemap.xml and sitemap.xml.gz by myself? =
43
+
44
+ Not anymore. Since version 4, these files are dynamically generated. *There must be no sitemap.xml or sitemap.xml.gz in your site directory anymore!* The plugin will try to rename them to sitemap.xml.bak if they still exists.
45
+
46
+ = Does this plugin use static files or "I can't find the sitemap.xml file!" =
47
+
48
+ Not anymore. Since version 4, these files are dynamically generated just like any other WordPress content.
49
+
50
+ = There are no comments yet (or I've disabled them) and all my postings have a priority of zero! =
51
+
52
+ Please disable automatic priority calculation and define a static priority for posts.
53
+
54
+ = So many configuration options... Do I need to change them? =
55
+
56
+ No, only if you want to. Default values are ok for most sites.
57
+
58
+ = Does this plugin work with all WordPress versions? =
59
+
60
+ This version works with WordPress 3.3 and better. If you're using an older version, please check the [Sitemaps Plugin Homepage](http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/ "XML Sitemap Generator Plugin Homepage") for the legacy releases. There is a working release for every WordPress version since 1.5, but you really should consider updating your WordPress installation!
61
+
62
+ = My question isn't answered here =
63
+
64
+ Most of the plugin options are described at the [plugin homepage](http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/) as well as the dedicated [Sitemaps FAQ](http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/help/ "List of common questions / problems regarding XML Sitemaps").
65
+
66
+ = My question isn't even answered there =
67
+
68
+ Please post your question at the [WordPress support forum](http://wordpress.org/support/topic/read-before-opening-a-new-support-topic) and tag your post with "google-sitemap-generator".
69
+
70
+ = What's new in the latest version? =
71
+
72
+ The changelog is maintained [here](http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/changelog/ "XML Sitemap Generator Plugin Changelog")
73
+
74
+ = Why is the changelog on a separate page and not here? =
75
+
76
+ The WordPress.org repository is just another place to download this plugin. I don't want to maintain too many pages with the same content. Thank you for your understanding!
77
+
78
+ == Changelog ==
79
+
80
+ = 4.1.2 (2022-04-15) =
81
+ * Fixed security issue related to Cross-Site Scripting attacks on debug page
82
+ * Fixed HTTP error while generating sitemap (because of conflict of www and now www site)
83
+ * Fixed handling WordPress core sitemap entry from robots.txt
84
+ * Added option to flush database rewrite on plugin deactivation
85
+ * Added option to split the custom categories into multiple sitemaps by custom taxonomy
86
+ * Added option to omit the posts specified as disallow in robots.txt
87
+ * Added option to set links per page for tags and categories
88
+ * Added option to set a custom filename for the sitemap
89
+ * Added option to list custom post in the archive sitemap
90
+
91
+ = 4.1.1 (2022-04-07) =
92
+ * fix security issue related to Cross-Site Scripting attacks on debug page
93
+ * fix HTTP error while generating sitemap (because of conflict of www and now www site)
94
+ * fix handles the removal of Wordpress native sitemap entry from robots.txt
95
+ * added option for flush database rewrite on deactivate plugin
96
+ * added options for split the custom categories into multiple sitemap by custom taxonomy
97
+ * added options to omit the posts which added in robots.txt to disallow
98
+ * added option to set links per page for tags and categories
99
+ * added option for provide the custom name for the sitemap.xml file
100
+ * added option for custom post type's list into the archive sitemap
101
+ * added support of manage priorities and frequencies for products category
102
+
103
+ = 4.1.0 (2018-12-18) =
104
+ * Fixed security issue related to escaping external URLs
105
+ * Fixed security issue related to option tags in forms
106
+
107
+ = 4.0.9 (2017-07-24) =
108
+ * Fixed security issue related to donation functionality.
109
+
110
+ = 4.0.8 (2014-11-15) =
111
+ * Fixed bug regarding the exclude categories feature, thanks to Claus Schöffel!
112
+
113
+ = 4.0.7.1 (2014-09-02) =
114
+ * Sorry, no new features this time… This release only updates the Compatibility-Tag to WordPress 4.0. Unfortunately there is no way to do this anymore without a new version
115
+
116
+ = 4.0.7 (2014-06-23) =
117
+ * Better compatibility with GoDaddy managed WP hosting
118
+ * Better compatibility with QuickCache
119
+ * Removed WordPress version from the sitemap
120
+ * Corrected link to WordPress privacy settings (if search engines are blocked)
121
+ * Changed hook which is being used for sitemap pings to avoid pings on draft edit
122
+
123
+ = 4.0.6 (2014-06-03) =
124
+ * Added option to disable automatic gzipping
125
+ * Fixed bug with duplicated external sitemap entries
126
+ * Don’t gzip if behind Varnish since Varnish can do that
127
+
128
+ = 4.0.5 (2014-05-18) =
129
+ * Added function to manually start ping for main-sitemap or all sub-sitemaps
130
+ * Added support for changing the base of the sitemap URL to another URL (for WP installations in sub-folders)
131
+ * Fixed issue with empty post sitemaps (related to GMT/local time offset)
132
+ * Fixed some timing issues in archives
133
+ * Improved check for possible problems before gzipping
134
+ * Fixed empty archives and author sitemaps in case there were no posts
135
+ * Fixed bug which caused the Priority Provider to disappear in recent PHP versions
136
+ * Plugin will also ping with the corresponding sub-sitemap in case a post was modified
137
+ * Better checking for empty external urls
138
+ * Changed text in XSL template to be more clear about sitemap-index and sub-sitemaps
139
+ * Changed content type to text/xml to improve compatibility with caching plugins
140
+ * Changed query parameters to is_feed=true to improve compatibility with caching plugins
141
+ * Switched from using WP_Query to load posts to a custom SQL statement to avoid problems with other plugin filters
142
+ * Added caching of some SQL statements
143
+ * Added support feed for more help topics
144
+ * Added link to new help page
145
+ * Cleaned up code and renamed variables to be more readable
146
+ * Updated Japanese Translation, thanks to Daisuke Takahashi
147
+
148
+ = 4.0.4 (2014-04-19) =
149
+ * Removed deprecated get_page call
150
+ * Changed last modification time of sub-sitemaps to the last modification date of the posts instead of the publish date
151
+ * Removed information window if the statistic option has not been activated
152
+ * Added link regarding new sitemap format
153
+ * Updated Portuguese translation, thanks to Pedro Martinho
154
+ * Updated German translation
155
+
156
+ = 4.0.3 (2014-04-13) =
157
+ * Fixed compression if an gzlib handler was already active
158
+ * Help regarding permalinks for Nginx users
159
+ * Fix with gzip compression in case there was other output before already
160
+ * Return 404 for HTML sitemaps if the option has been disabled
161
+ * Updated translations
162
+
163
+ = 4.0.2 (2014-04-01) =
164
+ * Fixed warning if an gzip handler is already active
165
+
166
+ = 4.0.1 (2014-03-31) =
167
+ * Fixed bug with custom post types including a "-"
168
+ * Fixed some 404 Not Found Errors
169
+
170
+ = 4.0 (2014-03-30) =
171
+ * No static files anymore, sitemap is created on the fly!
172
+ * Sitemap is split-up into sub-sitemaps by month, allowing up to 50.000 posts per month! [More information](http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/google-xml-sitemap-generator-new-sitemap-format/)
173
+ * Support for custom post types and custom taxonomis!
174
+ * 100% Multisite compatible, including by-blog and network activation.
175
+ * Reduced server resource usage due to less content per request.
176
+ * New API allows other plugins to add their own, separate sitemaps.
177
+ * Note: PHP 5.1 and WordPress 3.3 is required! The plugin will not work with lower versions!
178
+ * Note: This version will try to rename your old sitemap files to *-old.xml. If that doesn’t work, please delete them manually since no static files are needed anymore!
179
+
180
+ = 3.4.1 (2014-04-10) =
181
+ * Compatibility with mysqli
182
+
183
+ = Version 3.4 (2013-11-24) =
184
+ * Fixed deprecation warnings in PHP 5.4, thanks to Dion Hulse!
185
+
186
+ = 3.3 (2013-09-28) =
187
+ * Fixed problem with file permission checking
188
+ * Filter out hashs (#) in URLs
189
+
190
+ = 3.2.9 (2013-01-11) =
191
+ * Fixed security issue with change frequencies and filename of sitemap file. Exploit was only possible with admin account.
192
+
193
+ = 3.2.8 (2012-08-08) =
194
+ * Fixed wrong custom taxonomy URLs, thanks to ramon fincken of the wordpress.org forum!
195
+ * Removed ASK ping since they shut down their service.
196
+ * Exclude post_format taxonomy from custom taxonomy list
197
+
198
+ = 3.2.7 (2012-04-24) =
199
+ * Fixed custom post types, thanks to clearsite of the wordpress.org forum!
200
+ * Fixed broken admin layout on WP 3.4
201
+
202
+ = 3.2.6 (2011-09-19) =
203
+ * Removed YAHOO ping since YAHOO uses bing now
204
+ * Removed deprecated function call
205
+
206
+ = 3.2.5 (2011-07-11) =
207
+ * Backported Bing ping success fix from beta
208
+ * Added friendly hint to try out the new beta
209
+
210
+ = 3.2.4 (2010-05-29) =
211
+ * Added (GMT) to date column in sitemap xslt template to avoid confusion with different time zones
212
+ * Fixed wrong SQL statement for author pages, thanks to twoenoug
213
+ * Fixed several deprecated function calls
214
+ * Note: This release does not support the new multisite feature of WordPress yet and will not be active when multisite is enabled.
215
+
216
+ = 3.2.3 (2010-04-02) =
217
+ * Fixed that all pages were missing in the sitemap if the “Uncategorized” category was excluded
218
+
219
+ = 3.2.2 (2009-12-19) =
220
+ * Updated compatibility tag to WordPress 2.9
221
+ * Fixed PHP4 problems
222
+
223
+ = 3.2.1 (2009-12-16) =
224
+ * Notes and update messages at the top of the admin page could interfere with the manual build function
225
+ * Help links in the WP contextual help were not shown anymore since the last update
226
+ * IE 7 sometimes displayed a cached admin page
227
+ * Removed invalid link to config page from the plugin description (The link lead to a "Not enough permission error")
228
+ * Improved performance of getting the current plugin version by caching
229
+ * Updated Spanish language files
230
+
231
+ = 3.2 (2009-11-23) =
232
+ * Added function to show the actual results of a ping instead of only linking to the url
233
+ * Added new hook (sm_rebuild) for third party plugins to start building the sitemap
234
+ * Fixed bug which showed the wrong URL for the latest Google ping result
235
+ * Added some missing documentation
236
+ * Removed hardcoded php name for sitemap file in admin urls
237
+ * Uses KSES for showing ping test results
238
+ * Ping test fixed for WP < 2.3
239
+
240
+ = 3.1.9 (2009-11-13) =
241
+ * Fixed MySQL Error if author pages were included
242
+
243
+ = 3.1.8 (2009-11-07) =
244
+ * Improved custom taxonomy handling and fixed wrong last modification date
245
+ * Fixed fatal error in WordPress versions lower than 2.3
246
+ * Fixed Update Notice for WordPress 2.8 and higher
247
+ * Added warning if blog privacy is activated
248
+ * Fixed priorities of additional pages were shown as 0 instead of 1
249
+
250
+ = 3.1.7 (2009-10-21) =
251
+ * Added support for custom taxonomies. Thanks to Lee!
252
+
253
+ = 3.1.6 (2009-08-31) =
254
+ * Fixed PHP error “Only variables can be passed by reference”
255
+ * Fixed wrong URLS of multi-page posts (Thanks artstorm!)
256
+ * Updated many language files
257
+
258
+ = 3.1.5 (2009-08-24) =
259
+ * Added option to completely disable the last modification time
260
+ * Fixed problem with HTTPS url for the XSL stylesheet if the sitemap was build via the admin panel
261
+ * Improved handling of homepage entry if a single page was set for it
262
+ * Fixed mktime warning which appeared sometimes
263
+ * Fixed bug which caused inf. reloads after rebuilding the sitemap via the admin panel
264
+ * Improved handling of missing sitemaps files if WP was moved to another location
265
+
266
+ = 3.1.4 (2009-06-22) =
267
+ * Fixed bug which broke all pings in WP older than 2.7
268
+ * Added more output in debug mode if pings fail
269
+ * Moved global post variable so other plugins can use it in get_permalink()
270
+ * Added small icon for ozh admin menu
271
+ * Added more help links in UI
272
+
273
+ = 3.1.3 (2009-06-07) =
274
+ * Changed MSN Live Search to Bing
275
+ * Exclude categories also now exludes the category itself and not only the posts
276
+ * Pings now use the new WordPress HTTP API instead of Snoopy
277
+ * Fixed bug that in localized WP installations priorities could not be saved
278
+ * The sitemap cron job is now cleared after a manual rebuild or after changing the config
279
+ * Adjusted style of admin area for WP 2.8 and refreshed icons
280
+ * Disabled the “Exclude categories” feature for WP 2.5.1, since it doesn’t have the required functions yet
281
+
282
+ = 3.1.2 (2008-12-26) =
283
+ * Changed the way the stylesheet is saved (default / custom stylesheet)
284
+ * Sitemap is now rebuild when a page is published
285
+ * Removed support for static robots.txt files, this is now handled via WordPress functions
286
+ * Added compat. exceptions for WP 2.0 and WP 2.1
287
+
288
+ = 3.1.1 (2008-12-21) =
289
+ * Fixed redirect issue if wp-admin is rewritten via mod_rewrite, thanks to macjoost
290
+ * Fixed wrong path to assets, thanks PozHonks
291
+ * Fixed wrong plugin URL if wp-content was renamed / redirected, thanks to wnorris
292
+ * Updated WP User Interface for 2.7
293
+ * Various other small things
294
+
295
+ = 3.1.0.1 (2008-05-27) =
296
+ * Extracted UI JS to external file
297
+ * Enabled the option to include following pages of multi-page posts
298
+ * Script tries to raise memory and time limit if active
299
+
300
+ = 3.1 (2008-05-22) =
301
+ * Marked as stable
302
+
303
+ = 3.1b3 (2008-05-19) =
304
+ * Cleaned up plugin directory and moved img files to subfolders
305
+ * Fixed background building bug in WP 2.1
306
+ * Removed auto-update plugin link for WP < 2.5
307
+
308
+ = 3.1b2 (2008-05-18) =
309
+ * Fixed critical bug with the build in background option
310
+ * Added notification if a build is scheduled
311
+
312
+ = 3.1b1 (2008-05-08) =
313
+ * Splitted plugin in loader, generator and user interface to save memory
314
+ * Generator and UI will only be loaded when needed
315
+ * Secured all admin actions with nonces
316
+ * Improved WP 2.5 handling
317
+ * New "Suggest a Feature" link
318
+
319
+ = 3.0.3.3 (2008-04-29) =
320
+ * Fixed author pages
321
+ * Enhanced background building and increased delay to 15 seconds
322
+ * Enabled background building by default
323
+
324
+ = 3.0.3.2 (2008-04-28) =
325
+ * Improved WP 2.5 handling (fixes blank screens and timeouts)
326
+
327
+ = 3.0.3.1 (2008-03-30) =
328
+ * Added compatibility CSS for WP 2.5
329
+
330
+ = 3.0.3 (2007-12-30) =
331
+ * Added option to ping MSN Live Search
332
+ * Removed some WordPress hooks (the sitemap isn’t updates with every comment anymore)
333
+
334
+ = 3.0.2.1 (2007-11-28) =
335
+ * Fixed wrong XML Schema Location (Thanks to Emanuele Tessore)
336
+ * Added Russian Language files by Sergey http://ryvkin.ru
337
+
338
+ = 3.0.2 (2007-11-25) =
339
+ * Fixed bug which caused that some settings were not saved correctly
340
+ * Added option to exclude pages or post by ID
341
+ * Restored YAHOO ping service with API key since the other one is to unreliable
342
+
343
+ = 3.0.1 (2007-11-03) =
344
+ * Changed HTTP client for ping requests to Snoopy
345
+ * Added "safemode" for SQL which doesn’t use unbuffered results
346
+ * Added option to run the building process in background using wp-cron
347
+ * Added links to test the ping if it failed
348
+
349
+ = 3.0 final (2007-09-24) =
350
+ * Marked as stable
351
+ * Removed useless functions
352
+
353
+ = 3.0b11 (2007-09-23) =
354
+ * Changed mysql queries to unbuffered queries
355
+ * Uses MUCH less memory
356
+ * Option to limit the number of posts
357
+
358
+ = 3.0b10 (2007-09-04) =
359
+ * Added category support for WordPress 2.3
360
+ * Fixed bug with empty URLs in sitemap
361
+ * Repaired GET building
362
+
363
+ = 3.0b9 (2007-09-02) =
364
+ * Added tag support for WordPress 2.3
365
+ * Fixed archive bug with static pages (Thanks to Peter Claus Lamprecht)
366
+ * Fixed some missing translation strings, thanks to Kirin Lin
367
+
368
+ = 3.0b8 (2007-07-22) =
369
+ * Fixed bug with empty categories
370
+ * Fixed bug with translation plugins
371
+ * Added support for robots.txt
372
+ * Switched YAHOO ping API from YAHOO Web Services to the “normal” ping service
373
+ * Search engines will only be pinged if the sitemap file has changed
374
+
375
+ = 3.0b7 (2007-05-17) =
376
+ * Added Ask.com notification
377
+ * Added option to include the author pages like /author/john
378
+ * Fixed WP 2.1 / Pre 2.1 post / pages database changes
379
+ * Added check to not build the sitemap if importing posts
380
+ * Fixed wrong XSLT location (Thanks froosh)
381
+ * Small enhancements and bug fixes
382
+
383
+ = 3.0b6 (2007-01-23) =
384
+ * sitemap.xml.gz was not compressed
385
+ * YAHOO update-notification was PHP5 only (Thanks to Joseph Abboud!)
386
+ * More WP 2.1 optimizations
387
+ * Reduced memory usage with PHP5
388
+
389
+ = 3.0b5 (2007-01-19) =
390
+ * WordPress 2 Design
391
+ * YAHOO update notification
392
+ * New status report, removed ugly logfiles
393
+ * Added option to define a XSLT stylesheet and added a default one
394
+ * Fixed bug with sub-pages, thanks to [Mike](http://baptiste.us/), [Peter](http://fastagent.de/) and [Glenn](http://publicityship.com.au/)
395
+ * Improved file handling, thanks to [VJTD3](http://www.vjtd3.com/)
396
+ * WP 2.1 improvements
397
+
398
+ = 3.0b4 (2006-11-16) =
399
+ * Fixed some smaller bugs
400
+ * Decreased memory usage which should solve timeout and memory problems
401
+ * Updated namespace to support YAHOO and MSN
402
+
403
+ = 3.0b2 (2006-01-14) =
404
+ * Fixed several bugs reported by users
405
+
406
+ = 3.0b (2005-11-25) =
407
+ * WordPress 2.0 (Beta, RC1) compatible
408
+ * Added different priority calculation modes and introduced an API to create custom ones (Some people didn’t like the way to calculate the post priority based on the count of user comments. This will give you the possibility to develop custom priority providers which fit your needs.)
409
+ * Added support to use the [Popularity Contest](http://www.alexking.org/blog/2005/07/27/popularity-contest-11/) plugin by [Alex King](http://www.alexking.org/) to calculate post priority (If you are already using the Popularity Contest plugin, this will be the best way to determine the priority of the posts. Uses to new priority API noted above.)
410
+ * Added option to exclude password protected posts (This was one of the most requested features.)
411
+ * Posts and pages marked for publish with a date in the future won’t be included
412
+ * Added function to start sitemap creation via GET and a secret key (If you are using external software which directly writes into the database without using the WordPress API, you can rebuild the sitemap with a simple HTTP Request. This can be made with a cron job for example.)
413
+ * Improved compatibility with other plugins (There should no longer be problems with other plugins now which checked for existence of a specified function to determine if you are in the control panel or not.)
414
+ * Recoded plugin architecture which is now fully OOP (The code is now cleaner and better to understand which makes it easier to modify. This should also avoid namespace problems.)
415
+ * Improved speed and optimized settings handling (Settings and pages are only loaded if the sitemap generation process starts and not every time a page loads. This saves one MySQL Query on every request.)
416
+ * Added Button to restore default configuration (Messed up the config? You’ll need just one click to restore all settings.)
417
+ * Added log file to check everything is running (In the new log window you can see when your sitemap was rebuilt or if there was any error.)
418
+ * Improved user-interface
419
+ * Added several links to homepage and support (This includes the Notify List about new releases and the WordPress support forum.)
420
+
421
+ = 2.7 (2005-11-25) =
422
+ * Added Polish Translation by [kuba](http://kubazwolinski.com/)
423
+
424
+ = 2.7 (2005-11-01) =
425
+ * Added French Translation by [Thierry Lanfranchi](http://www.chezthierry.info/)
426
+
427
+ = 2.7 (2005-07-21) =
428
+ * Fixed bug with incorrect date in additional pages (wrong format)
429
+ * Added Swedish Translation by [Tobias Bergius](http://tobiasbergius.se/)
430
+
431
+ = 2.6 (2005-07-16) =
432
+ * Included Chinese (Simplified) language files by [june6](http://www.june6.cn/)
433
+
434
+ = 2.6 (2005-07-04) =
435
+ * Added support to store the files at a custom location
436
+ * Changed the home URL to have a slash at the end
437
+ * Fixed errors with wp-mail
438
+ * Added support for other plugins to add content to the sitemap
439
+
440
+ = 2.5 (2005-06-15) =
441
+ * You can include now external pages which aren’t generated by WordPress or are not recognized by this plugin
442
+ * You can define a minimum post priority, which will overrride the calculated value if it’s too low
443
+ * The plugin will automatically ping Google whenever the sitemap gets regenerated
444
+ * Update 1: Included Spanish translations by [Cesar Gomez Martin](http://www.cesargomez.org/)
445
+ * Update 2: Included Italian translations by [Stefano Aglietti](http://wordpress-it.it/)
446
+ * Update 3: Included Traditional Chinese translations by [Kirin Lin](http://kirin-lin.idv.tw/)
447
+
448
+ = 2.2 (2005-06-08) =
449
+ * Language file support: [Hiromasa](http://hiromasa.zone.ne.jp/) from [http://hiromasa.zone.ne.jp](http://hiromasa.zone.ne.jp/) sent me a japanese version of the user interface and modified the script to support it! Thanks for this! Check [the WordPress Codex](http://codex.wordpress.org/WordPress_Localization) how to set the language in WordPress.
450
+ * Added Japanese user interface by [Hiromasa](http://hiromasa.zone.ne.jp/)
451
+ * Added German user interface by me
452
+
453
+ = 2.12 (2005-06-07) =
454
+ * Changed SQL Statement for categories that it also works on MySQL 3
455
+
456
+ = 2.11 (2005-06-07) =
457
+ * Fixed a hardcoded tablename which made a SQL error
458
+
459
+ = 2.1 (2005-06-07) =
460
+ * Can also generate a gzipped version of the xml file (sitemap.xml.gz)
461
+ * Uses correct last modification dates for categories and archives. (Thanks to thx [Rodney Shupe](http://www.shupe.ca/) for the SQL)
462
+ * Supports now different WordPress / Blog directories
463
+ * Fixed bug which ignored different post/page priorities (Reported by [Brad](http://h3h.net/))
464
+
465
+ = 2.01 (2005-06-07) =
466
+ * Fixed compatibility for PHP installations which are not configured to use short open tags
467
+ * Changed Line 147 from _e($i); to _e(strval($i));
468
+ * Thanks to [Christian Aust](http://publicvoidblog.de/) for reporting this!
469
+
470
+ == Screenshots ==
471
+
472
+ 1. Plugin options page
473
+ 2. Sample XML sitemap (with a stylesheet for making it readable)
474
+ 3. Sample XML sitemap (without stylesheet)
475
+
476
+ == License ==
477
+
478
+ Good news, this plugin is free for everyone! Since it's released under the GPL, you can use it free of charge on your personal or commercial site.
479
+
480
+ == Translations ==
481
+
482
+ The plugin comes with various translations, please refer to the [WordPress Codex](http://codex.wordpress.org/Installing_WordPress_in_Your_Language "Installing WordPress in Your Language") for more information about activating the translation. If you want to help to translate the plugin to your language, please have a look at the sitemap.pot file which contains all definitions and may be used with a [gettext](http://www.gnu.org/software/gettext/) editor like [Poedit](http://www.poedit.net/) (Windows).
483
+
484
+ == Upgrade Notice ==
485
+
486
+ = 4.0.9 =
487
+ Thanks for using XML Sitemaps! This release includes an important security fix that has been reported.
screenshot-1.png CHANGED
Binary file
sitemap-builder.php DELETED
@@ -1,567 +0,0 @@
1
- <?php
2
- /*
3
-
4
- $Id: sitemap-builder.php 1026247 2014-11-15 16:47:36Z arnee $
5
-
6
- */
7
- /**
8
- * Default sitemap builder
9
- *
10
- * @author Arne Brachhold
11
- * @package sitemap
12
- * @since 4.0
13
- */
14
- class GoogleSitemapGeneratorStandardBuilder {
15
-
16
- /**
17
- * Creates a new GoogleSitemapGeneratorStandardBuilder instance
18
- */
19
- public function __construct() {
20
- add_action("sm_build_index", array($this, "Index"), 10, 1);
21
- add_action("sm_build_content", array($this, "Content"), 10, 3);
22
-
23
- add_filter("sm_sitemap_for_post", array($this, "GetSitemapUrlForPost"), 10, 3);
24
- }
25
-
26
- /**
27
- * Generates the content of the requested sitemap
28
- *
29
- * @param $gsg GoogleSitemapGenerator
30
- * @param $type String The type of the sitemap
31
- * @param $params String Parameters for the sitemap
32
- */
33
- public function Content($gsg, $type, $params) {
34
-
35
- switch($type) {
36
- case "pt":
37
- $this->BuildPosts($gsg, $params);
38
- break;
39
- case "archives":
40
- $this->BuildArchives($gsg);
41
- break;
42
- case "authors":
43
- $this->BuildAuthors($gsg);
44
- break;
45
- case "tax":
46
- $this->BuildTaxonomies($gsg, $params);
47
- break;
48
- case "externals":
49
- $this->BuildExternals($gsg);
50
- break;
51
- case "misc":
52
- $this->BuildMisc($gsg);
53
- break;
54
- }
55
- }
56
-
57
- /**
58
- * Generates the content for the post sitemap
59
- *
60
- * @param $gsg GoogleSitemapGenerator
61
- * @param $params string
62
- */
63
- public function BuildPosts($gsg, $params) {
64
-
65
- if(!$pts = strrpos($params, "-")) return;
66
-
67
- $pts = strrpos($params, "-", $pts - strlen($params) - 1);
68
-
69
- $postType = substr($params, 0, $pts);
70
-
71
- if(!$postType || !in_array($postType, $gsg->GetActivePostTypes())) return;
72
-
73
- $params = substr($params, $pts + 1);
74
-
75
- /**@var $wpdb wpdb */
76
- global $wpdb;
77
-
78
- if(preg_match('/^([0-9]{4})\-([0-9]{2})$/', $params, $matches)) {
79
- $year = $matches[1];
80
- $month = $matches[2];
81
-
82
- //Excluded posts by ID
83
- $excludedPostIDs = $gsg->GetExcludedPostIDs($gsg);
84
- $exPostSQL = "";
85
- if(count($excludedPostIDs) > 0) {
86
- $exPostSQL = "AND p.ID NOT IN (" . implode(",", $excludedPostIDs) . ")";
87
- }
88
-
89
- //Excluded categories by taxonomy ID
90
- $excludedCategoryIDs = $gsg->GetExcludedCategoryIDs($gsg);
91
- $exCatSQL = "";
92
- if(count($excludedCategoryIDs) > 0) {
93
- $exCatSQL = "AND ( p.ID NOT IN ( SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id IN ( SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id IN ( " . implode(",", $excludedCategoryIDs) . "))))";
94
- }
95
-
96
- //Statement to query the actual posts for this post type
97
- $qs = "
98
- SELECT
99
- p.ID,
100
- p.post_author,
101
- p.post_status,
102
- p.post_name,
103
- p.post_parent,
104
- p.post_type,
105
- p.post_date,
106
- p.post_date_gmt,
107
- p.post_modified,
108
- p.post_modified_gmt,
109
- p.comment_count
110
- FROM
111
- {$wpdb->posts} p
112
- WHERE
113
- p.post_password = ''
114
- AND p.post_type = '%s'
115
- AND p.post_status = 'publish'
116
- AND YEAR(p.post_date_gmt) = %d
117
- AND MONTH(p.post_date_gmt) = %d
118
- {$exPostSQL}
119
- {$exCatSQL}
120
- ORDER BY
121
- p.post_date_gmt DESC
122
- ";
123
-
124
- //Query for counting all relevant posts for this post type
125
- $qsc = "
126
- SELECT
127
- COUNT(*)
128
- FROM
129
- {$wpdb->posts} p
130
- WHERE
131
- p.post_password = ''
132
- AND p.post_type = '%s'
133
- AND p.post_status = 'publish'
134
- {$exPostSQL}
135
- {$exCatSQL}
136
- ";
137
-
138
- $q = $wpdb->prepare($qs, $postType, $year, $month);
139
-
140
- $posts = $wpdb->get_results($q);
141
-
142
- if(($postCount = count($posts)) > 0) {
143
- /** @var $priorityProvider GoogleSitemapGeneratorPrioProviderBase */
144
- $priorityProvider = NULL;
145
-
146
- if($gsg->GetOption("b_prio_provider") != '') {
147
-
148
- //Number of comments for all posts
149
- $cacheKey = __CLASS__ . "::commentCount";
150
- $commentCount = wp_cache_get($cacheKey,'sitemap');
151
- if ($commentCount == false) {
152
- $commentCount = $wpdb->get_var("SELECT COUNT(*) as `comment_count` FROM {$wpdb->comments} WHERE `comment_approved`='1'");
153
- wp_cache_set($cacheKey, $commentCount, 'sitemap', 20);
154
- }
155
-
156
- //Number of all posts matching our criteria
157
- $cacheKey = __CLASS__ . "::totalPostCount::$postType";
158
- $totalPostCount = wp_cache_get($cacheKey,'sitemap');
159
- if($totalPostCount === false) {
160
- $totalPostCount = $wpdb->get_var($wpdb->prepare($qsc,$postType));
161
- wp_cache_add($cacheKey,$totalPostCount, 'sitemap', 20);
162
- }
163
-
164
- //Initialize a new priority provider
165
- $providerClass = $gsg->GetOption('b_prio_provider');
166
- $priorityProvider = new $providerClass($commentCount, $totalPostCount);
167
- }
168
-
169
- //Default priorities
170
- $defaultPriorityForPosts = $gsg->GetOption('pr_posts');
171
- $defaultPriorityForPages = $gsg->GetOption('pr_pages');
172
-
173
- //Minimum priority
174
- $minimumPriority = $gsg->GetOption('pr_posts_min');
175
-
176
- //Change frequencies
177
- $changeFrequencyForPosts = $gsg->GetOption('cf_posts');
178
- $changeFrequencyForPages = $gsg->GetOption('cf_pages');
179
-
180
- //Page as home handling
181
- $homePid = 0;
182
- $home = get_home_url();
183
- if('page' == get_option('show_on_front') && get_option('page_on_front')) {
184
- $pageOnFront = get_option('page_on_front');
185
- $p = get_post($pageOnFront);
186
- if($p) $homePid = $p->ID;
187
- }
188
-
189
- foreach($posts AS $post) {
190
-
191
- //Fill the cache with our DB result. Since it's incomplete (no text-content for example), we will clean it later.
192
- //This is required since the permalink function will do a query for every post otherwise.
193
- //wp_cache_add($post->ID, $post, 'posts');
194
-
195
- //Full URL to the post
196
- $permalink = get_permalink($post);
197
-
198
- //Exclude the home page and placeholder items by some plugins. Also include only internal links.
199
- if(
200
- !empty($permalink)
201
- && $permalink != $home
202
- && $post->ID != $homePid
203
- && strpos( $permalink, $home) !== false
204
- ) {
205
-
206
- //Default Priority if auto calc is disabled
207
- $priority = ($postType == 'page' ? $defaultPriorityForPages : $defaultPriorityForPosts);
208
-
209
- //If priority calc. is enabled, calculate (but only for posts, not pages)!
210
- if($priorityProvider !== null && $postType == 'post') {
211
- $priority = $priorityProvider->GetPostPriority($post->ID, $post->comment_count, $post);
212
- }
213
-
214
- //Ensure the minimum priority
215
- if($postType == 'post' && $minimumPriority > 0 && $priority < $minimumPriority) $priority = $minimumPriority;
216
-
217
- //ADdd the URL to the sitemap
218
- $gsg->AddUrl(
219
- $permalink,
220
- $gsg->GetTimestampFromMySql($post->post_modified_gmt && $post->post_modified_gmt != '0000-00-00 00:00:00'? $post->post_modified_gmt : $post->post_date_gmt),
221
- ($postType == 'page' ? $changeFrequencyForPages : $changeFrequencyForPosts),
222
- $priority, $post->ID);
223
- }
224
-
225
- //Why not use clean_post_cache? Because some plugin will go crazy then (lots of database queries)
226
- //The post cache was not populated in a clean way, so we also won't delete it using the API.
227
- //wp_cache_delete( $post->ID, 'posts' );
228
- unset($post);
229
- }
230
- }
231
-
232
- unset($posts);
233
- }
234
- }
235
-
236
- /**
237
- * Generates the content for the archives sitemap
238
- *
239
- * @param $gsg GoogleSitemapGenerator
240
- */
241
- public function BuildArchives($gsg) {
242
- /** @var $wpdb wpdb */
243
- global $wpdb;
244
- $now = current_time('mysql', true);
245
-
246
- $archives = $wpdb->get_results("
247
- SELECT DISTINCT
248
- YEAR(post_date_gmt) AS `year`,
249
- MONTH(post_date_gmt) AS `month`,
250
- MAX(post_date_gmt) AS last_mod,
251
- count(ID) AS posts
252
- FROM
253
- $wpdb->posts
254
- WHERE
255
- post_date_gmt < '$now'
256
- AND post_status = 'publish'
257
- AND post_type = 'post'
258
- GROUP BY
259
- YEAR(post_date_gmt),
260
- MONTH(post_date_gmt)
261
- ORDER BY
262
- post_date_gmt DESC
263
- ");
264
-
265
- if($archives) {
266
- foreach($archives as $archive) {
267
-
268
- $url = get_month_link($archive->year, $archive->month);
269
-
270
- //Archive is the current one
271
- if($archive->month == date("n") && $archive->year == date("Y")) {
272
- $changeFreq = $gsg->GetOption("cf_arch_curr");
273
- } else { // Archive is older
274
- $changeFreq = $gsg->GetOption("cf_arch_old");
275
- }
276
-
277
- $gsg->AddUrl($url, $gsg->GetTimestampFromMySql($archive->last_mod), $changeFreq, $gsg->GetOption("pr_arch"));
278
- }
279
- }
280
- }
281
-
282
- /**
283
- * Generates the misc sitemap
284
- *
285
- * @param $gsg GoogleSitemapGenerator
286
- */
287
- public function BuildMisc($gsg) {
288
-
289
- $lm = get_lastpostmodified('gmt');
290
-
291
- if($gsg->GetOption("in_home")) {
292
- $home = get_bloginfo('url');
293
-
294
- //Add the home page (WITH a slash!)
295
- if($gsg->GetOption("in_home")) {
296
- if('page' == get_option('show_on_front') && get_option('page_on_front')) {
297
- $pageOnFront = get_option('page_on_front');
298
- $p = get_post($pageOnFront);
299
- if($p) {
300
- $gsg->AddUrl(trailingslashit($home), $gsg->GetTimestampFromMySql(($p->post_modified_gmt && $p->post_modified_gmt != '0000-00-00 00:00:00'
301
- ? $p->post_modified_gmt
302
- : $p->post_date_gmt)), $gsg->GetOption("cf_home"), $gsg->GetOption("pr_home"));
303
- }
304
- } else {
305
- $gsg->AddUrl(trailingslashit($home), ($lm ? $gsg->GetTimestampFromMySql($lm)
306
- : time()), $gsg->GetOption("cf_home"), $gsg->GetOption("pr_home"));
307
- }
308
- }
309
- }
310
-
311
- if($gsg->IsXslEnabled() && $gsg->GetOption("b_html") === true) {
312
- $gsg->AddUrl($gsg->GetXmlUrl("", "", array("html" => true)), ($lm ? $gsg->GetTimestampFromMySql($lm)
313
- : time()));
314
- }
315
-
316
- do_action('sm_buildmap');
317
- }
318
-
319
- /**
320
- * Generates the author sitemap
321
- *
322
- * @param $gsg GoogleSitemapGenerator
323
- */
324
- public function BuildAuthors($gsg) {
325
- /** @var $wpdb wpdb */
326
- global $wpdb;
327
-
328
- //Unfortunately there is no API function to get all authors, so we have to do it the dirty way...
329
- //We retrieve only users with published and not password protected enabled post types
330
-
331
- $enabledPostTypes = $gsg->GetActivePostTypes();
332
-
333
- //Ensure we count at least the posts...
334
- if(count($enabledPostTypes) == 0) $enabledPostTypes[] = "post";
335
-
336
- $sql = "SELECT DISTINCT
337
- u.ID,
338
- u.user_nicename,
339
- MAX(p.post_modified_gmt) AS last_post
340
- FROM
341
- {$wpdb->users} u,
342
- {$wpdb->posts} p
343
- WHERE
344
- p.post_author = u.ID
345
- AND p.post_status = 'publish'
346
- AND p.post_type IN('" . implode("','", array_map('esc_sql', $enabledPostTypes)) . "')
347
- AND p.post_password = ''
348
- GROUP BY
349
- u.ID,
350
- u.user_nicename";
351
-
352
- $authors = $wpdb->get_results($sql);
353
-
354
- if($authors && is_array($authors)) {
355
- foreach($authors as $author) {
356
- $url = get_author_posts_url($author->ID, $author->user_nicename);
357
- $gsg->AddUrl($url, $gsg->GetTimestampFromMySql($author->last_post), $gsg->GetOption("cf_auth"), $gsg->GetOption("pr_auth"));
358
- }
359
- }
360
- }
361
-
362
- /**
363
- * Filters the terms query to only include published posts
364
- *
365
- * @param $selects string[]
366
- * @return string[]
367
- */
368
- public function FilterTermsQuery($selects) {
369
- /** @var $wpdb wpdb */
370
- global $wpdb;
371
- $selects[] = "
372
- ( /* ADDED BY XML SITEMAPS */
373
- SELECT
374
- UNIX_TIMESTAMP(MAX(p.post_date_gmt)) as _mod_date
375
- FROM
376
- {$wpdb->posts} p,
377
- {$wpdb->term_relationships} r
378
- WHERE
379
- p.ID = r.object_id
380
- AND p.post_status = 'publish'
381
- AND p.post_password = ''
382
- AND r.term_taxonomy_id = tt.term_taxonomy_id
383
- ) as _mod_date
384
- /* END ADDED BY XML SITEMAPS */
385
- ";
386
-
387
- return $selects;
388
- }
389
-
390
- /**
391
- * Generates the taxonomies sitemap
392
- *
393
- * @param $gsg GoogleSitemapGenerator
394
- * @param $taxonomy string The Taxonomy
395
- */
396
- public function BuildTaxonomies($gsg, $taxonomy) {
397
-
398
- $enabledTaxonomies = $this->GetEnabledTaxonomies($gsg);
399
- if(in_array($taxonomy, $enabledTaxonomies)) {
400
-
401
- $excludes = array();
402
-
403
- if($taxonomy == "category") {
404
- $exclCats = $gsg->GetOption("b_exclude_cats"); // Excluded cats
405
- if($exclCats) $excludes = $exclCats;
406
- }
407
-
408
- add_filter("get_terms_fields", array($this, "FilterTermsQuery"), 20, 2);
409
- $terms = get_terms($taxonomy, array("hide_empty" => true, "hierarchical" => false, "exclude" => $excludes));
410
- remove_filter("get_terms_fields", array($this, "FilterTermsQuery"), 20, 2);
411
-
412
- foreach($terms AS $term) {
413
- $gsg->AddUrl(get_term_link($term, $term->taxonomy), $term->_mod_date, $gsg->GetOption("cf_tags"), $gsg->GetOption("pr_tags"));
414
- }
415
- }
416
- }
417
-
418
- /**
419
- * Returns the enabled taxonomies. Only taxonomies with posts are returned.
420
- *
421
- * @param GoogleSitemapGenerator $gsg
422
- * @return array
423
- */
424
- public function GetEnabledTaxonomies(GoogleSitemapGenerator $gsg) {
425
-
426
- $enabledTaxonomies = $gsg->GetOption("in_tax");
427
- if($gsg->GetOption("in_tags")) $enabledTaxonomies[] = "post_tag";
428
- if($gsg->GetOption("in_cats")) $enabledTaxonomies[] = "category";
429
-
430
- $taxList = array();
431
- foreach($enabledTaxonomies as $taxName) {
432
- $taxonomy = get_taxonomy($taxName);
433
- if($taxonomy && wp_count_terms($taxonomy->name, array('hide_empty' => true)) > 0) $taxList[] = $taxonomy->name;
434
- }
435
- return $taxList;
436
- }
437
-
438
- /**
439
- * Generates the external sitemap
440
- *
441
- * @param $gsg GoogleSitemapGenerator
442
- */
443
- public function BuildExternals($gsg) {
444
- $pages = $gsg->GetPages();
445
- if($pages && is_array($pages) && count($pages) > 0) {
446
- foreach($pages AS $page) {
447
- /** @var $page GoogleSitemapGeneratorPage */
448
- $gsg->AddUrl($page->GetUrl(), $page->getLastMod(), $page->getChangeFreq(), $page->getPriority());
449
- }
450
- }
451
- }
452
-
453
- /**
454
- * Generates the sitemap index
455
- *
456
- * @param $gsg GoogleSitemapGenerator
457
- */
458
- public function Index($gsg) {
459
- /**
460
- * @var $wpdb wpdb
461
- */
462
- global $wpdb;
463
-
464
- $blogUpdate = strtotime(get_lastpostmodified('gmt'));
465
-
466
- $gsg->AddSitemap("misc", null, $blogUpdate);
467
-
468
-
469
- $taxonomies = $this->GetEnabledTaxonomies($gsg);
470
- foreach($taxonomies AS $tax) {
471
- $gsg->AddSitemap("tax", $tax, $blogUpdate);
472
- }
473
-
474
- $pages = $gsg->GetPages();
475
- if(count($pages) > 0) {
476
- foreach($pages AS $page) {
477
- if($page instanceof GoogleSitemapGeneratorPage && $page->GetUrl()) {
478
- $gsg->AddSitemap("externals", null, $blogUpdate);
479
- break;
480
- }
481
- }
482
- }
483
-
484
- $enabledPostTypes = $gsg->GetActivePostTypes();
485
-
486
- $hasEnabledPostTypesPosts = false;
487
- $hasPosts = false;
488
-
489
- if(count($enabledPostTypes) > 0) {
490
-
491
- $excludedPostIDs = $gsg->GetExcludedPostIDs($gsg);
492
- $exPostSQL = "";
493
- if(count($excludedPostIDs) > 0) {
494
- $exPostSQL = "AND p.ID NOT IN (" . implode(",", $excludedPostIDs) . ")";
495
- }
496
-
497
- $excludedCategoryIDs = $gsg->GetExcludedCategoryIDs($gsg);
498
- $exCatSQL = "";
499
- if(count($excludedCategoryIDs) > 0) {
500
- $exCatSQL = "AND ( p.ID NOT IN ( SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id IN (" . implode(",", $excludedCategoryIDs) . ")))";
501
- }
502
-
503
- foreach($enabledPostTypes AS $postType) {
504
- $q = "
505
- SELECT
506
- YEAR(p.post_date_gmt) AS `year`,
507
- MONTH(p.post_date_gmt) AS `month`,
508
- COUNT(p.ID) AS `numposts`,
509
- MAX(p.post_modified_gmt) as `last_mod`
510
- FROM
511
- {$wpdb->posts} p
512
- WHERE
513
- p.post_password = ''
514
- AND p.post_type = '" . esc_sql($postType) . "'
515
- AND p.post_status = 'publish'
516
- $exPostSQL
517
- $exCatSQL
518
- GROUP BY
519
- YEAR(p.post_date_gmt),
520
- MONTH(p.post_date_gmt)
521
- ORDER BY
522
- p.post_date_gmt DESC";
523
-
524
- $posts = $wpdb->get_results($q);
525
-
526
- if($posts) {
527
- if($postType=="post") $hasPosts = true;
528
-
529
- $hasEnabledPostTypesPosts = true;
530
-
531
- foreach($posts as $post) {
532
- $gsg->AddSitemap("pt", $postType . "-" . sprintf("%04d-%02d", $post->year, $post->month), $gsg->GetTimestampFromMySql($post->last_mod));
533
- }
534
- }
535
- }
536
- }
537
-
538
- //Only include authors if there is a public post with a enabled post type
539
- if($gsg->GetOption("in_auth") && $hasEnabledPostTypesPosts) $gsg->AddSitemap("authors", null, $blogUpdate);
540
-
541
- //Only include archived if there are posts with postType post
542
- if($gsg->GetOption("in_arch") && $hasPosts) $gsg->AddSitemap("archives", null, $blogUpdate);
543
- }
544
-
545
- /**
546
- * Return the URL to the sitemap related to a specific post
547
- *
548
- * @param array $urls
549
- * @param $gsg GoogleSitemapGenerator
550
- * @param $postID int The post ID
551
- *
552
- * @return string[]
553
- */
554
- public function GetSitemapUrlForPost(array $urls, $gsg, $postID) {
555
- $post = get_post($postID);
556
- if($post) {
557
- $lastModified = $gsg->GetTimestampFromMySql($post->post_modified_gmt);
558
-
559
- $url = $gsg->GetXmlUrl("pt", $post->post_type . "-" . date("Y-m", $lastModified));
560
- $urls[] = $url;
561
- }
562
-
563
- return $urls;
564
- }
565
- }
566
-
567
- if(defined("WPINC")) new GoogleSitemapGeneratorStandardBuilder();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
sitemap-core.php CHANGED
@@ -1,2272 +1,2771 @@
1
- <?php
2
- /*
3
-
4
- $Id: sitemap-core.php 935247 2014-06-19 17:13:03Z arnee $
5
-
6
- */
7
-
8
- //Enable for dev! Good code doesn't generate any notices...
9
- //error_reporting(E_ALL);
10
- //ini_set("display_errors", 1);
11
-
12
- /**
13
- * Represents the status (successes and failures) of a ping process
14
- * @author Arne Brachhold
15
- * @package sitemap
16
- * @since 3.0b5
17
- */
18
- class GoogleSitemapGeneratorStatus {
19
-
20
- /**
21
- * @var float $_startTime The start time of the building process
22
- */
23
- private $startTime = 0;
24
-
25
- /**
26
- * @var float $_endTime The end time of the building process
27
- */
28
- private $endTime = 0;
29
-
30
- /**
31
- * @var array Holding an array with the results and information of the last ping
32
- */
33
- private $pingResults = array();
34
-
35
- /**
36
- * @var bool If the status should be saved to the database automatically
37
- */
38
- private $autoSave = true;
39
-
40
- /**
41
- * Constructs a new status ued for saving the ping results
42
- */
43
- public function __construct($autoSave = true) {
44
- $this->startTime = microtime(true);
45
-
46
- $this->autoSave = $autoSave;
47
-
48
- if($autoSave) {
49
-
50
- $exists = get_option("sm_status");
51
-
52
- if ($exists === false)
53
- add_option("sm_status", "", null, "no");
54
-
55
- $this->Save();
56
- }
57
- }
58
-
59
- /**
60
- * Saves the status back to the database
61
- */
62
- public function Save() {
63
- update_option("sm_status", $this);
64
- }
65
-
66
- /**
67
- * Returns the last saved status object or null
68
- *
69
- * @return GoogleSitemapGeneratorStatus
70
- */
71
- public static function Load() {
72
- $status = @get_option("sm_status");
73
- if(is_a($status, "GoogleSitemapGeneratorStatus")) {
74
- return $status;
75
- }
76
- else return null;
77
- }
78
-
79
- /**
80
- * Ends the ping process
81
- */
82
- public function End() {
83
- $this->endTime = microtime(true);
84
- if($this->autoSave) $this->Save();
85
- }
86
-
87
- /**
88
- * Returns the duration of the ping process
89
- * @return int
90
- */
91
- public function GetDuration() {
92
- return round($this->endTime - $this->startTime, 2);
93
- }
94
-
95
- /**
96
- * Returns the time when the pings were started
97
- * @return int
98
- */
99
- public function GetStartTime() {
100
- return round($this->startTime, 2);
101
- }
102
-
103
- /**
104
- * @param $service string The internal name of the ping service
105
- * @param $url string The URL to ping
106
- * @param $name string The display name of the service
107
- * @return void
108
- */
109
- public function StartPing($service, $url, $name = null) {
110
- $this->pingResults[$service] = array(
111
- 'startTime' => microtime(true),
112
- 'endTime' => 0,
113
- 'success' => false,
114
- 'url' => $url,
115
- 'name' => $name ? $name : $service
116
- );
117
-
118
- if($this->autoSave) $this->Save();
119
- }
120
-
121
- /**
122
- * @param $service string The internal name of the ping service
123
- * @param $success boolean If the ping was successful
124
- * @return void
125
- */
126
- public function EndPing($service, $success) {
127
- $this->pingResults[$service]['endTime'] = microtime(true);
128
- $this->pingResults[$service]['success'] = $success;
129
-
130
- if($this->autoSave) $this->Save();
131
- }
132
-
133
- /**
134
- * Returns the duration of the last ping of a specific ping service
135
- *
136
- * @param $service string The internal name of the ping service
137
- * @return float
138
- */
139
- public function GetPingDuration($service) {
140
- $res = $this->pingResults[$service];
141
- return round($res['endTime'] - $res['startTime'], 2);
142
- }
143
-
144
- /**
145
- * Returns the last result for a specific ping service
146
- *
147
- * @param $service string The internal name of the ping service
148
- * @return array
149
- */
150
- public function GetPingResult($service) {
151
- return $this->pingResults[$service]['success'];
152
- }
153
-
154
- /**
155
- * Returns the URL for a specific ping service
156
- *
157
- * @param $service string The internal name of the ping service
158
- * @return array
159
- */
160
- public function GetPingUrl($service) {
161
- return $this->pingResults[$service]['url'];
162
- }
163
-
164
- /**
165
- * Returns the name for a specific ping service
166
- *
167
- * @param $service string The internal name of the ping service
168
- * @return array
169
- */
170
- public function GetServiceName($service) {
171
- return $this->pingResults[$service]['name'];
172
- }
173
-
174
- /**
175
- * Returns if a service was used in the last ping
176
- *
177
- * @param $service string The internal name of the ping service
178
- * @return bool
179
- */
180
- public function UsedPingService($service) {
181
- return array_key_exists($service, $this->pingResults);
182
- }
183
-
184
- /**
185
- * Returns the services which were used in the last ping
186
- *
187
- * @return array
188
- */
189
- public function GetUsedPingServices() {
190
- return array_keys($this->pingResults);
191
- }
192
- }
193
-
194
- /**
195
- * Represents an item in the page list
196
- * @author Arne Brachhold
197
- * @package sitemap
198
- * @since 3.0
199
- */
200
- class GoogleSitemapGeneratorPage {
201
-
202
- /**
203
- * @var string $_url Sets the URL or the relative path to the site dir of the page
204
- */
205
- public $_url;
206
-
207
- /**
208
- * @var float $_priority Sets the priority of this page
209
- */
210
- public $_priority;
211
-
212
- /**
213
- * @var string $_changeFreq Sets the chanfe frequency of the page. I want Enums!
214
- */
215
- public $_changeFreq;
216
-
217
- /**
218
- * @var int $_lastMod Sets the lastMod date as a UNIX timestamp.
219
- */
220
- public $_lastMod;
221
-
222
- /**
223
- * @var int $_postID Sets the post ID in case this item is a WordPress post or page
224
- */
225
- public $_postID;
226
-
227
- /**
228
- * Initialize a new page object
229
- *
230
- * @since 3.0
231
- * @param string $url The URL or path of the file
232
- * @param float $priority The Priority of the page 0.0 to 1.0
233
- * @param string $changeFreq The change frequency like daily, hourly, weekly
234
- * @param int $lastMod The last mod date as a unix timestamp
235
- * @param int $postID The post ID of this page
236
- * @return GoogleSitemapGeneratorPage
237
- *
238
- */
239
- public function __construct($url = "", $priority = 0.0, $changeFreq = "never", $lastMod = 0, $postID = 0) {
240
- $this->SetUrl($url);
241
- $this->SetProprity($priority);
242
- $this->SetChangeFreq($changeFreq);
243
- $this->SetLastMod($lastMod);
244
- $this->SetPostID($postID);
245
- }
246
-
247
- /**
248
- * Returns the URL of the page
249
- *
250
- * @return string The URL
251
- */
252
- public function GetUrl() {
253
- return $this->_url;
254
- }
255
-
256
- /**
257
- * Sets the URL of the page
258
- *
259
- * @param string $url The new URL
260
- */
261
- public function SetUrl($url) {
262
- $this->_url = (string) $url;
263
- }
264
-
265
- /**
266
- * Returns the priority of this page
267
- *
268
- * @return float the priority, from 0.0 to 1.0
269
- */
270
- public function GetPriority() {
271
- return $this->_priority;
272
- }
273
-
274
- /**
275
- * Sets the priority of the page
276
- *
277
- * @param float $priority The new priority from 0.1 to 1.0
278
- */
279
- public function SetProprity($priority) {
280
- $this->_priority = floatval($priority);
281
- }
282
-
283
- /**
284
- * Returns the change frequency of the page
285
- *
286
- * @return string The change frequncy like hourly, weekly, monthly etc.
287
- */
288
- public function GetChangeFreq() {
289
- return $this->_changeFreq;
290
- }
291
-
292
- /**
293
- * Sets the change frequency of the page
294
- *
295
- * @param string $changeFreq The new change frequency
296
- */
297
- public function SetChangeFreq($changeFreq) {
298
- $this->_changeFreq = (string) $changeFreq;
299
- }
300
-
301
- /**
302
- * Returns the last mod of the page
303
- *
304
- * @return int The lastmod value in seconds
305
- */
306
- public function GetLastMod() {
307
- return $this->_lastMod;
308
- }
309
-
310
- /**
311
- * Sets the last mod of the page
312
- *
313
- * @param int $lastMod The lastmod of the page
314
- */
315
- public function SetLastMod($lastMod) {
316
- $this->_lastMod = intval($lastMod);
317
- }
318
-
319
- /**
320
- * Returns the ID of the post
321
- *
322
- * @return int The post ID
323
- */
324
- public function GetPostID() {
325
- return $this->_postID;
326
- }
327
-
328
- /**
329
- * Sets the ID of the post
330
- *
331
- * @param int $postID The new ID
332
- */
333
- public function SetPostID($postID) {
334
- $this->_postID = intval($postID);
335
- }
336
-
337
- public function Render() {
338
-
339
- if($this->_url == "/" || empty($this->_url)) return '';
340
-
341
- $r = "";
342
- $r .= "\t<url>\n";
343
- $r .= "\t\t<loc>" . $this->EscapeXML(esc_url_raw($this->_url)) . "</loc>\n";
344
- if($this->_lastMod > 0) $r .= "\t\t<lastmod>" . date('Y-m-d\TH:i:s+00:00', $this->_lastMod) . "</lastmod>\n";
345
- if(!empty($this->_changeFreq)) $r .= "\t\t<changefreq>" . $this->_changeFreq . "</changefreq>\n";
346
- if($this->_priority !== false && $this->_priority !== "") $r .= "\t\t<priority>" . number_format($this->_priority, 1) . "</priority>\n";
347
- $r .= "\t</url>\n";
348
- return $r;
349
- }
350
-
351
- protected function EscapeXML($string) {
352
- return str_replace(array('&', '"', "'", '<', '>'), array('&amp;', '&quot;', '&apos;', '&lt;', '&gt;'), $string);
353
- }
354
- }
355
-
356
- /**
357
- * Represents an XML entry, like definitions
358
- * @author Arne Brachhold
359
- * @package sitemap
360
- * @since 3.0
361
- */
362
- class GoogleSitemapGeneratorXmlEntry {
363
-
364
- protected $_xml;
365
-
366
- public function __construct($xml) {
367
- $this->_xml = $xml;
368
- }
369
-
370
- public function Render() {
371
- return $this->_xml;
372
- }
373
- }
374
-
375
- /**
376
- * Represents an comment
377
- * @author Arne Brachhold
378
- * @package sitemap
379
- * @since 3.0
380
- * @uses GoogleSitemapGeneratorXmlEntry
381
- */
382
- class GoogleSitemapGeneratorDebugEntry extends GoogleSitemapGeneratorXmlEntry {
383
-
384
- public function Render() {
385
- return "<!-- " . $this->_xml . " -->\n";
386
- }
387
- }
388
-
389
- /**
390
- * Represents an item in the sitemap
391
- * @author Arne Brachhold
392
- * @package sitemap
393
- * @since 3.0
394
- */
395
- class GoogleSitemapGeneratorSitemapEntry {
396
-
397
- /**
398
- * @var string $_url Sets the URL or the relative path to the site dir of the page
399
- */
400
- protected $_url;
401
-
402
- /**
403
- * @var int $_lastMod Sets the lastMod date as a UNIX timestamp.
404
- */
405
- protected $_lastMod;
406
-
407
- /**
408
- * Returns the URL of the page
409
- *
410
- * @return string The URL
411
- */
412
- public function GetUrl() {
413
- return $this->_url;
414
- }
415
-
416
- /**
417
- * Sets the URL of the page
418
- *
419
- * @param string $url The new URL
420
- */
421
- public function SetUrl($url) {
422
- $this->_url = (string) $url;
423
- }
424
-
425
- /**
426
- * Returns the last mod of the page
427
- *
428
- * @return int The lastmod value in seconds
429
- */
430
- public function GetLastMod() {
431
- return $this->_lastMod;
432
- }
433
-
434
- /**
435
- * Sets the last mod of the page
436
- *
437
- * @param int $lastMod The lastmod of the page
438
- */
439
- public function SetLastMod($lastMod) {
440
- $this->_lastMod = intval($lastMod);
441
- }
442
-
443
- public function __construct($url = "", $lastMod = 0) {
444
- $this->SetUrl($url);
445
- $this->SetLastMod($lastMod);
446
- }
447
-
448
- public function Render() {
449
-
450
- if($this->_url == "/" || empty($this->_url)) return '';
451
-
452
- $r = "";
453
- $r .= "\t<sitemap>\n";
454
- $r .= "\t\t<loc>" . $this->EscapeXML(esc_url_raw($this->_url)) . "</loc>\n";
455
- if($this->_lastMod > 0) $r .= "\t\t<lastmod>" . date('Y-m-d\TH:i:s+00:00', $this->_lastMod) . "</lastmod>\n";
456
- $r .= "\t</sitemap>\n";
457
- return $r;
458
- }
459
-
460
- protected function EscapeXML($string) {
461
- return str_replace(array('&', '"', "'", '<', '>'), array('&amp;', '&quot;', '&apos;', '&lt;', '&gt;'), $string);
462
- }
463
- }
464
-
465
- /**
466
- * Interface for all priority providers
467
- * @author Arne Brachhold
468
- * @package sitemap
469
- * @since 3.0
470
- */
471
- interface GoogleSitemapGeneratorPrioProviderBase {
472
-
473
- /**
474
- * Initializes a new priority provider
475
- *
476
- * @param $totalComments int The total number of comments of all posts
477
- * @param $totalPosts int The total number of posts
478
- * @since 3.0
479
- */
480
- function __construct($totalComments, $totalPosts);
481
-
482
- /**
483
- * Returns the (translated) name of this priority provider
484
- *
485
- * @since 3.0
486
- * @return string The translated name
487
- */
488
- static function GetName();
489
-
490
- /**
491
- * Returns the (translated) description of this priority provider
492
- *
493
- * @since 3.0
494
- * @return string The translated description
495
- */
496
- static function GetDescription();
497
-
498
- /**
499
- * Returns the priority for a specified post
500
- *
501
- * @param $postID int The ID of the post
502
- * @param $commentCount int The number of comments for this post
503
- * @since 3.0
504
- * @return int The calculated priority
505
- */
506
- function GetPostPriority($postID, $commentCount);
507
- }
508
-
509
- /**
510
- * Priority Provider which calculates the priority based on the number of comments
511
- * @author Arne Brachhold
512
- * @package sitemap
513
- * @since 3.0
514
- */
515
- class GoogleSitemapGeneratorPrioByCountProvider implements GoogleSitemapGeneratorPrioProviderBase {
516
-
517
- /**
518
- * @var int $_totalComments The total number of comments of all posts
519
- */
520
- protected $_totalComments = 0;
521
-
522
- /**
523
- * @var int $_totalComments The total number of posts
524
- */
525
- protected $_totalPosts = 0;
526
-
527
- /**
528
- * Initializes a new priority provider
529
- *
530
- * @param $totalComments int The total number of comments of all posts
531
- * @param $totalPosts int The total number of posts
532
- * @since 3.0
533
- */
534
- public function __construct($totalComments, $totalPosts) {
535
- $this->_totalComments = $totalComments;
536
- $this->_totalPosts = $totalPosts;
537
-
538
- }
539
-
540
- /**
541
- * Returns the (translated) name of this priority provider
542
- *
543
- * @since 3.0
544
- * @return string The translated name
545
- */
546
- public static function GetName() {
547
- return __("Comment Count", 'sitemap');
548
- }
549
-
550
- /**
551
- * Returns the (translated) description of this priority provider
552
- *
553
- * @since 3.0
554
- * @return string The translated description
555
- */
556
- public static function GetDescription() {
557
- return __("Uses the number of comments of the post to calculate the priority", 'sitemap');
558
- }
559
-
560
- /**
561
- * Returns the priority for a specified post
562
- *
563
- * @param $postID int The ID of the post
564
- * @param $commentCount int The number of comments for this post
565
- * @since 3.0
566
- * @return int The calculated priority
567
- */
568
- public function GetPostPriority($postID, $commentCount) {
569
- if($this->_totalComments > 0 && $commentCount > 0) {
570
- return round(($commentCount * 100 / $this->_totalComments) / 100, 1);
571
- } else {
572
- return 0;
573
- }
574
- }
575
- }
576
-
577
- /**
578
- * Priority Provider which calculates the priority based on the average number of comments
579
- * @author Arne Brachhold
580
- * @package sitemap
581
- * @since 3.0
582
- */
583
- class GoogleSitemapGeneratorPrioByAverageProvider implements GoogleSitemapGeneratorPrioProviderBase {
584
-
585
-
586
- /**
587
- * @var int $_totalComments The total number of comments of all posts
588
- */
589
- protected $_totalComments = 0;
590
-
591
- /**
592
- * @var int $_totalComments The total number of posts
593
- */
594
- protected $_totalPosts = 0;
595
-
596
- /**
597
- * @var int $_average The average number of comments per post
598
- */
599
- protected $_average = 0.0;
600
-
601
- /**
602
- * Returns the (translated) name of this priority provider
603
- *
604
- * @since 3.0
605
- * @return string The translated name
606
- */
607
- public static function GetName() {
608
- return __("Comment Average", 'sitemap');
609
- }
610
-
611
- /**
612
- * Returns the (translated) description of this priority provider
613
- *
614
- * @since 3.0
615
- * @return string The translated description
616
- */
617
- public static function GetDescription() {
618
- return __("Uses the average comment count to calculate the priority", 'sitemap');
619
- }
620
-
621
- /**
622
- * Initializes a new priority provider which calculates the post priority based on the average number of comments
623
- *
624
- * @param $totalComments int The total number of comments of all posts
625
- * @param $totalPosts int The total number of posts
626
- * @since 3.0
627
- */
628
- public function __construct($totalComments, $totalPosts) {
629
-
630
- $this->_totalComments = $totalComments;
631
- $this->_totalPosts = $totalPosts;
632
-
633
- if($this->_totalComments > 0 && $this->_totalPosts > 0) {
634
- $this->_average = (double) $this->_totalComments / $this->_totalPosts;
635
- }
636
- }
637
-
638
- /**
639
- * Returns the priority for a specified post
640
- *
641
- * @param $postID int The ID of the post
642
- * @param $commentCount int The number of comments for this post
643
- * @since 3.0
644
- * @return int The calculated priority
645
- */
646
- public function GetPostPriority($postID, $commentCount) {
647
-
648
- //Do not divide by zero!
649
- if($this->_average == 0) {
650
- if($commentCount > 0) $priority = 1;
651
- else $priority = 0;
652
- } else {
653
- $priority = $commentCount / $this->_average;
654
- if($priority > 1) $priority = 1;
655
- else if($priority < 0) $priority = 0;
656
- }
657
-
658
- return round($priority, 1);
659
- }
660
- }
661
-
662
- /**
663
- * Class to generate a sitemaps.org Sitemaps compliant sitemap of a WordPress site.
664
- *
665
- * @package sitemap
666
- * @author Arne Brachhold
667
- * @since 3.0
668
- */
669
- final class GoogleSitemapGenerator {
670
- /**
671
- * @var array The unserialized array with the stored options
672
- */
673
- private $options = array();
674
-
675
- /**
676
- * @var array The saved additional pages
677
- */
678
- private $pages = array();
679
-
680
- /**
681
- * @var array The values and names of the change frequencies
682
- */
683
- private $freqNames = array();
684
-
685
- /**
686
- * @var array A list of class names which my be called for priority calculation
687
- */
688
- private $prioProviders = array();
689
-
690
- /**
691
- * @var bool True if init complete (options loaded etc)
692
- */
693
- private $isInitiated = false;
694
-
695
- /**
696
- * @var bool Defines if the sitemap building process is active at the moment
697
- */
698
- private $isActive = false;
699
-
700
- /**
701
- * @var array Holds options like output format and compression for the current request
702
- */
703
- private $buildOptions = array();
704
-
705
- /**
706
- * Holds the user interface object
707
- *
708
- * @since 3.1.1
709
- * @var GoogleSitemapGeneratorUI
710
- */
711
- private $ui = null;
712
-
713
- /**
714
- * Defines if the simulation mode is on. In this case, data is not echoed but saved instead.
715
- * @var boolean
716
- */
717
- private $simMode = false;
718
-
719
- /**
720
- * Holds the data if simulation mode is on
721
- * @var array
722
- */
723
- private $simData = array("sitemaps" => array(), "content" => array());
724
-
725
- /**
726
- * @var bool Defines if the options have been loaded
727
- */
728
- private $optionsLoaded = false;
729
-
730
-
731
- /*************************************** CONSTRUCTION AND INITIALIZING ***************************************/
732
-
733
- /**
734
- * Initializes a new Google Sitemap Generator
735
- *
736
- * @since 4.0
737
- */
738
- private function __construct() {
739
-
740
- }
741
-
742
- /**
743
- * Returns the instance of the Sitemap Generator
744
- *
745
- * @since 3.0
746
- * @return GoogleSitemapGenerator The instance or null if not available.
747
- */
748
- public static function GetInstance() {
749
- if(isset($GLOBALS["sm_instance"])) {
750
- return $GLOBALS["sm_instance"];
751
- } else return null;
752
- }
753
-
754
- /**
755
- * Enables the Google Sitemap Generator and registers the WordPress hooks
756
- *
757
- * @since 3.0
758
- */
759
- public static function Enable() {
760
- if(!isset($GLOBALS["sm_instance"])) {
761
- $GLOBALS["sm_instance"] = new GoogleSitemapGenerator();
762
- }
763
- }
764
-
765
- /**
766
- * Loads up the configuration and validates the prioity providers
767
- *
768
- * This method is only called if the sitemaps needs to be build or the admin page is displayed.
769
- *
770
- * @since 3.0
771
- */
772
- public function Initate() {
773
- if(!$this->isInitiated) {
774
-
775
- load_plugin_textdomain('sitemap',false,dirname( plugin_basename( __FILE__ ) ) . '/lang');
776
-
777
- $this->freqNames = array(
778
- "always" => __("Always", "sitemap"),
779
- "hourly" => __("Hourly", "sitemap"),
780
- "daily" => __("Daily", "sitemap"),
781
- "weekly" => __("Weekly", "sitemap"),
782
- "monthly" => __("Monthly", "sitemap"),
783
- "yearly" => __("Yearly", "sitemap"),
784
- "never" => __("Never", "sitemap")
785
- );
786
-
787
-
788
- $this->LoadOptions();
789
- $this->LoadPages();
790
-
791
- //Register our own priority providers
792
- add_filter("sm_add_prio_provider", array($this, 'AddDefaultPrioProviders'));
793
-
794
- //Let other plugins register their providers
795
- $r = apply_filters("sm_add_prio_provider", $this->prioProviders);
796
-
797
- //Check if no plugin return null
798
- if($r != null) $this->prioProviders = $r;
799
-
800
- $this->ValidatePrioProviders();
801
-
802
- $this->isInitiated = true;
803
- }
804
- }
805
-
806
-
807
- /*************************************** VERSION AND LINK HELPERS ***************************************/
808
-
809
- /**
810
- * Returns the version of the generator
811
- *
812
- * @since 3.0
813
- * @return int The version
814
- */
815
- public static function GetVersion() {
816
- return GoogleSitemapGeneratorLoader::GetVersion();
817
- }
818
-
819
- /**
820
- * Returns the SVN version of the generator
821
- *
822
- * @since 4.0
823
- * @return string The SVN version string
824
- */
825
- public static function GetSvnVersion() {
826
- return GoogleSitemapGeneratorLoader::GetSvnVersion();
827
- }
828
-
829
- /**
830
- * Returns a link pointing to a specific page of the authors website
831
- *
832
- * @since 3.0
833
- * @param $redir string The to link to
834
- * @return string The full url
835
- */
836
- public static function GetRedirectLink($redir) {
837
- return trailingslashit("http://www.arnebrachhold.de/redir/" . $redir);
838
- }
839
-
840
- /**
841
- * Returns a link pointing back to the plugin page in WordPress
842
- *
843
- * @since 3.0
844
- * @return string The full url
845
- */
846
- public static function GetBackLink($extra = '') {
847
- global $wp_version;
848
- $url = admin_url("options-general.php?page=" .
849
- GoogleSitemapGeneratorLoader::GetBaseName() . $extra);
850
- return $url;
851
- }
852
-
853
- /**
854
- * Converts a mysql datetime value into a unix timestamp
855
- * @param $mysqlDateTime string The timestamp in the mysql datetime format
856
- * @return int The time in seconds
857
- */
858
- public static function GetTimestampFromMySql($mysqlDateTime) {
859
- list($date, $hours) = explode(' ', $mysqlDateTime);
860
- list($year, $month, $day) = explode('-', $date);
861
- list($hour, $min, $sec) = explode(':', $hours);
862
- return mktime(intval($hour), intval($min), intval($sec), intval($month), intval($day), intval($year));
863
- }
864
-
865
-
866
- /*************************************** SIMPLE GETTERS ***************************************/
867
-
868
- /**
869
- * Returns the names for the frequency values
870
- * @return array
871
- */
872
- public function GetFreqNames() {
873
- return $this->freqNames;
874
- }
875
-
876
- /**
877
- * Returns if the site is running in multi site mode
878
- * @since 4.0
879
- * @return bool
880
- */
881
- public function IsMultiSite() {
882
- return (function_exists("is_multisite") && is_multisite());
883
- }
884
-
885
- /**
886
- * Returns if the sitemap building process is currently active
887
- *
888
- * @since 3.0
889
- * @return bool true if active
890
- */
891
- public function IsActive() {
892
- $inst = GoogleSitemapGenerator::GetInstance();
893
- return ($inst != null && $inst->isActive);
894
- }
895
-
896
- /**
897
- * Returns if the compressed sitemap was activated
898
- *
899
- * @since 3.0b8
900
- * @return true if compressed
901
- */
902
- public function IsGzipEnabled() {
903
- return (function_exists("gzwrite") && $this->GetOption('b_autozip'));
904
- }
905
-
906
- /**
907
- * Returns if the XML Dom and XSLT functions are enabled
908
- *
909
- * @since 4.0b1
910
- * @return true if compressed
911
- */
912
- public function IsXslEnabled() {
913
- return (class_exists("DomDocument") && class_exists("XSLTProcessor"));
914
- }
915
-
916
- /**
917
- * Returns if Nginx is used as the server software
918
- * @since 4.0.3
919
- *
920
- * @return bool
921
- */
922
- function IsNginx() {
923
- if ( isset( $_SERVER['SERVER_SOFTWARE'] ) && stristr( $_SERVER['SERVER_SOFTWARE'], 'nginx' ) !== false ) {
924
- return true;
925
- }
926
- return false;
927
- }
928
-
929
-
930
-
931
- /*************************************** TAXONOMIES AND CUSTOM POST TYPES ***************************************/
932
-
933
- /**
934
- * Returns if this version of WordPress supports the new taxonomy system
935
- *
936
- * @since 3.0b8
937
- * @return true if supported
938
- */
939
- public function IsTaxonomySupported() {
940
- return (function_exists("get_taxonomy") && function_exists("get_terms") && function_exists("get_taxonomies"));
941
- }
942
-
943
- /**
944
- * Returns the list of custom taxonomies. These are basically all taxonomies without categories and post tags
945
- *
946
- * @since 3.1.7
947
- * @return array Array of names of user-defined taxonomies
948
- */
949
- public function GetCustomTaxonomies() {
950
- $taxonomies = get_taxonomies(array("public" => 1));
951
- return array_diff($taxonomies, array("category", "post_tag", "nav_menu", "link_category", "post_format"));
952
- }
953
-
954
- /**
955
- * Returns if this version of WordPress supports custom post types
956
- *
957
- * @since 3.2.5
958
- * @return true if supported
959
- */
960
- public function IsCustomPostTypesSupported() {
961
- return (function_exists("get_post_types") && function_exists("register_post_type"));
962
- }
963
-
964
- /**
965
- * Returns the list of custom post types. These are all custom post types except post, page and attachment
966
- *
967
- * @since 3.2.5
968
- * @return array Array of custom post types as per get_post_types
969
- */
970
- public function GetCustomPostTypes() {
971
- $post_types = get_post_types(array("public" => 1));
972
- $post_types = array_diff($post_types, array("post", "page", "attachment"));
973
- return $post_types;
974
- }
975
-
976
-
977
- /**
978
- * Returns the list of active post types, built-in and custom ones.
979
- *
980
- * @since 4.0b5
981
- * @return array Array of custom post types as per get_post_types
982
- */
983
- public function GetActivePostTypes() {
984
-
985
-
986
- $cacheKey = __CLASS__ . "::GetActivePostTypes";
987
-
988
- $activePostTypes = wp_cache_get($cacheKey,'sitemap');
989
-
990
- if($activePostTypes === false) {
991
- $allPostTypes = get_post_types();
992
- $enabledPostTypes = $this->GetOption('in_customtypes');
993
- if($this->GetOption("in_posts")) $enabledPostTypes[] = "post";
994
- if($this->GetOption("in_pages")) $enabledPostTypes[] = "page";
995
-
996
- $activePostTypes = array();
997
- foreach($enabledPostTypes AS $postType) {
998
- if(!empty($postType) && in_array($postType, $allPostTypes)) {
999
- $activePostTypes[] = $postType;
1000
- }
1001
- }
1002
-
1003
- wp_cache_set($cacheKey, $activePostTypes, 'sitemap', 20);
1004
- }
1005
-
1006
- return $activePostTypes;
1007
- }
1008
-
1009
- /**
1010
- * Returns an array with all excluded post IDs
1011
- *
1012
- * @since 4.0b11
1013
- * @return int[] Array with excluded post IDs
1014
- */
1015
- public function GetExcludedPostIDs() {
1016
-
1017
- $excludes = (array)$this->GetOption('b_exclude');
1018
-
1019
- //Exclude front page page if defined
1020
- if (get_option('show_on_front') == 'page' && get_option('page_on_front')) {
1021
- $excludes[] = get_option('page_on_front');
1022
- return $excludes;
1023
- }
1024
-
1025
- return array_filter(array_map('intval',$excludes),array($this,'IsGreaterZero'));
1026
- }
1027
-
1028
- /**
1029
- * Returns an array with all excluded category IDs.
1030
- *
1031
- * @since 4.0b11
1032
- * @return int[] Array with excluded category IDs
1033
- */
1034
- public function GetExcludedCategoryIDs() {
1035
- $exclCats = (array)$this->GetOption("b_exclude_cats");
1036
- return array_filter(array_map('intval',$exclCats),array($this,'IsGreaterZero'));
1037
- }
1038
-
1039
- /*************************************** PRIORITY PROVIDERS ***************************************/
1040
-
1041
- /**
1042
- * Returns the list of PriorityProviders
1043
- * @return array
1044
- */
1045
- public function GetPrioProviders() {
1046
- return $this->prioProviders;
1047
- }
1048
-
1049
- /**
1050
- * Adds the default Priority Providers to the provider list
1051
- *
1052
- * @since 3.0
1053
- * @param $providers
1054
- * @return array
1055
- */
1056
- public function AddDefaultPrioProviders($providers) {
1057
- array_push($providers, "GoogleSitemapGeneratorPrioByCountProvider");
1058
- array_push($providers, "GoogleSitemapGeneratorPrioByAverageProvider");
1059
- if(class_exists("ak_popularity_contest")) {
1060
- array_push($providers, "GoogleSitemapGeneratorPrioByPopularityContestProvider");
1061
- }
1062
- return $providers;
1063
- }
1064
-
1065
- /**
1066
- * Validates all given Priority Providers by checking them for required methods and existence
1067
- *
1068
- * @since 3.0
1069
- */
1070
- private function ValidatePrioProviders() {
1071
- $validProviders = array();
1072
-
1073
- for($i = 0; $i < count($this->prioProviders); $i++) {
1074
- if(class_exists($this->prioProviders[$i])) {
1075
- if(class_implements($this->prioProviders[$i], "GoogleSitemapGeneratorPrioProviderBase")) {
1076
- array_push($validProviders, $this->prioProviders[$i]);
1077
- }
1078
- }
1079
- }
1080
- $this->prioProviders = $validProviders;
1081
-
1082
- if(!$this->GetOption("b_prio_provider")) {
1083
- if(!in_array($this->GetOption("b_prio_provider"), $this->prioProviders, true)) {
1084
- $this->SetOption("b_prio_provider", "");
1085
- }
1086
- }
1087
- }
1088
-
1089
-
1090
- /*************************************** COMMENT HANDLING FOR PRIO. PROVIDERS ***************************************/
1091
-
1092
- /**
1093
- * Retrieves the number of comments of a post in a asso. array
1094
- * The key is the postID, the value the number of comments
1095
- *
1096
- * @since 3.0
1097
- * @return array An array with postIDs and their comment count
1098
- */
1099
- public function GetComments() {
1100
- /** @var $wpdb wpdb */
1101
- global $wpdb;
1102
- $comments = array();
1103
-
1104
- //Query comments and add them into the array
1105
- $commentRes = $wpdb->get_results("SELECT `comment_post_ID` as `post_id`, COUNT(comment_ID) as `comment_count` FROM `" . $wpdb->comments . "` WHERE `comment_approved`='1' GROUP BY `comment_post_ID`");
1106
- if($commentRes) {
1107
- foreach($commentRes as $comment) {
1108
- $comments[$comment->post_id] = $comment->comment_count;
1109
- }
1110
- }
1111
- return $comments;
1112
- }
1113
-
1114
- /**
1115
- * Calculates the full number of comments from an sm_getComments() generated array
1116
- *
1117
- * @since 3.0
1118
- * @param $comments array The Array with posts and c0mment count
1119
- * @see sm_getComments
1120
- * @return int The full number of comments
1121
- */
1122
- public function GetCommentCount($comments) {
1123
- $commentCount = 0;
1124
- foreach($comments AS $k => $v) {
1125
- $commentCount += $v;
1126
- }
1127
- return $commentCount;
1128
- }
1129
-
1130
-
1131
- /*************************************** OPTION HANDLING ***************************************/
1132
-
1133
- /**
1134
- * Sets up the default configuration
1135
- *
1136
- * @since 3.0
1137
- */
1138
- public function InitOptions() {
1139
-
1140
- $this->options = array();
1141
- $this->options["sm_b_prio_provider"] = "GoogleSitemapGeneratorPrioByCountProvider"; //Provider for automatic priority calculation
1142
- $this->options["sm_b_ping"] = true; //Auto ping Google
1143
- $this->options["sm_b_stats"] = false; //Send anonymous stats
1144
- $this->options["sm_b_pingmsn"] = true; //Auto ping MSN
1145
- $this->options["sm_b_autozip"] = true; //Try to gzip the output
1146
- $this->options["sm_b_memory"] = ''; //Set Memory Limit (e.g. 16M)
1147
- $this->options["sm_b_time"] = -1; //Set time limit in seconds, 0 for unlimited, -1 for disabled
1148
- $this->options["sm_b_style_default"] = true; //Use default style
1149
- $this->options["sm_b_style"] = ''; //Include a stylesheet in the XML
1150
- $this->options["sm_b_baseurl"] = ''; //The base URL of the sitemap
1151
- $this->options["sm_b_robots"] = true; //Add sitemap location to WordPress' virtual robots.txt file
1152
- $this->options["sm_b_html"] = true; //Include a link to a html version of the sitemap in the XML sitemap
1153
- $this->options["sm_b_exclude"] = array(); //List of post / page IDs to exclude
1154
- $this->options["sm_b_exclude_cats"] = array(); //List of post / page IDs to exclude
1155
-
1156
- $this->options["sm_in_home"] = true; //Include homepage
1157
- $this->options["sm_in_posts"] = true; //Include posts
1158
- $this->options["sm_in_posts_sub"] = false; //Include post pages (<!--nextpage--> tag)
1159
- $this->options["sm_in_pages"] = true; //Include static pages
1160
- $this->options["sm_in_cats"] = false; //Include categories
1161
- $this->options["sm_in_arch"] = false; //Include archives
1162
- $this->options["sm_in_auth"] = false; //Include author pages
1163
- $this->options["sm_in_tags"] = false; //Include tag pages
1164
- $this->options["sm_in_tax"] = array(); //Include additional taxonomies
1165
- $this->options["sm_in_customtypes"] = array(); //Include custom post types
1166
- $this->options["sm_in_lastmod"] = true; //Include the last modification date
1167
-
1168
- $this->options["sm_cf_home"] = "daily"; //Change frequency of the homepage
1169
- $this->options["sm_cf_posts"] = "monthly"; //Change frequency of posts
1170
- $this->options["sm_cf_pages"] = "weekly"; //Change frequency of static pages
1171
- $this->options["sm_cf_cats"] = "weekly"; //Change frequency of categories
1172
- $this->options["sm_cf_auth"] = "weekly"; //Change frequency of author pages
1173
- $this->options["sm_cf_arch_curr"] = "daily"; //Change frequency of the current archive (this month)
1174
- $this->options["sm_cf_arch_old"] = "yearly"; //Change frequency of older archives
1175
- $this->options["sm_cf_tags"] = "weekly"; //Change frequency of tags
1176
-
1177
- $this->options["sm_pr_home"] = 1.0; //Priority of the homepage
1178
- $this->options["sm_pr_posts"] = 0.6; //Priority of posts (if auto prio is disabled)
1179
- $this->options["sm_pr_posts_min"] = 0.2; //Minimum Priority of posts, even if autocalc is enabled
1180
- $this->options["sm_pr_pages"] = 0.6; //Priority of static pages
1181
- $this->options["sm_pr_cats"] = 0.3; //Priority of categories
1182
- $this->options["sm_pr_arch"] = 0.3; //Priority of archives
1183
- $this->options["sm_pr_auth"] = 0.3; //Priority of author pages
1184
- $this->options["sm_pr_tags"] = 0.3; //Priority of tags
1185
-
1186
- $this->options["sm_i_donated"] = false; //Did you donate? Thank you! :)
1187
- $this->options["sm_i_hide_donated"] = false; //And hide the thank you..
1188
- $this->options["sm_i_install_date"] = time(); //The installation date
1189
- $this->options["sm_i_hide_survey"] = false; //Hide the survey note
1190
- $this->options["sm_i_hide_note"] = false; //Hide the note which appears after 30 days
1191
- $this->options["sm_i_hide_works"] = false; //Hide the "works?" message which appears after 15 days
1192
- $this->options["sm_i_hide_donors"] = false; //Hide the list of donations
1193
- $this->options["sm_i_hash"] = substr(sha1(sha1(get_bloginfo('url'))),0,20); //Partial hash for GA stats, NOT identifiable!
1194
- $this->options["sm_i_lastping"] = 0; //When was the last ping
1195
- $this->options["sm_i_supportfeed"] = true; //shows the support feed
1196
- $this->options["sm_i_supportfeed_cache"] = 0; //Last refresh of support feed
1197
- }
1198
-
1199
- /**
1200
- * Loads the configuration from the database
1201
- *
1202
- * @since 3.0
1203
- */
1204
- private function LoadOptions() {
1205
-
1206
- if($this->optionsLoaded) return;
1207
-
1208
- $this->InitOptions();
1209
-
1210
- //First init default values, then overwrite it with stored values so we can add default
1211
- //values with an update which get stored by the next edit.
1212
- $storedOptions = get_option("sm_options");
1213
-
1214
- if($storedOptions && is_array($storedOptions)) {
1215
- foreach($storedOptions AS $k => $v) {
1216
- if(array_key_exists($k,$this->options)) $this->options[$k] = $v;
1217
- }
1218
- } else update_option("sm_options", $this->options); //First time use, store default values
1219
-
1220
- $this->optionsLoaded = true;
1221
- }
1222
-
1223
- /**
1224
- * Returns the option value for the given key
1225
- *
1226
- * @since 3.0
1227
- * @param $key string The Configuration Key
1228
- * @return mixed The value
1229
- */
1230
- public function GetOption($key) {
1231
- $key = "sm_" . $key;
1232
- if(array_key_exists($key, $this->options)) {
1233
- return $this->options[$key];
1234
- } else return null;
1235
- }
1236
-
1237
- public function GetOptions() {
1238
- return $this->options;
1239
- }
1240
-
1241
- /**
1242
- * Sets an option to a new value
1243
- *
1244
- * @since 3.0
1245
- * @param $key string The configuration key
1246
- * @param $value mixed The new object
1247
- */
1248
- public function SetOption($key, $value) {
1249
- if(strpos($key, "sm_") !== 0) $key = "sm_" . $key;
1250
-
1251
- $this->options[$key] = $value;
1252
- }
1253
-
1254
- /**
1255
- * Saves the options back to the database
1256
- *
1257
- * @since 3.0
1258
- * @return bool true on success
1259
- */
1260
- public function SaveOptions() {
1261
- $oldvalue = get_option("sm_options");
1262
- if($oldvalue == $this->options) {
1263
- return true;
1264
- } else return update_option("sm_options", $this->options);
1265
- }
1266
-
1267
- /**
1268
- * Returns the additional pages
1269
- * @since 4.0
1270
- * @return GoogleSitemapGeneratorPage[]
1271
- */
1272
- function GetPages() {
1273
- return $this->pages;
1274
- }
1275
-
1276
- /**
1277
- * Returns the additional pages
1278
- * @since 4.0
1279
- * @param array $pages
1280
- */
1281
- function SetPages(array $pages) {
1282
- $this->pages = $pages;
1283
- }
1284
-
1285
- /**
1286
- * Loads the stored pages from the database
1287
- *
1288
- * @since 3.0
1289
- */
1290
- private function LoadPages() {
1291
- /** @var $wpdb wpdb */
1292
- global $wpdb;
1293
-
1294
- $needsUpdate = false;
1295
-
1296
- $pagesString = $wpdb->get_var("SELECT option_value FROM $wpdb->options WHERE option_name = 'sm_cpages'");
1297
-
1298
- //Class sm_page was renamed with 3.0 -> rename it in serialized value for compatibility
1299
- if(!empty($pagesString) && strpos($pagesString, "sm_page") !== false) {
1300
- $pagesString = str_replace("O:7:\"sm_page\"", "O:26:\"GoogleSitemapGeneratorPage\"", $pagesString);
1301
- $needsUpdate = true;
1302
- }
1303
-
1304
- if(!empty($pagesString)) {
1305
- $storedpages = unserialize($pagesString);
1306
- $this->pages = $storedpages;
1307
- } else {
1308
- $this->pages = array();
1309
- }
1310
-
1311
- if($needsUpdate) $this->SavePages();
1312
- }
1313
-
1314
- /**
1315
- * Saved the additional pages back to the database
1316
- *
1317
- * @since 3.0
1318
- * @return true on success
1319
- */
1320
- public function SavePages() {
1321
- $oldvalue = get_option("sm_cpages");
1322
- if($oldvalue == $this->pages) {
1323
- return true;
1324
- } else {
1325
- delete_option("sm_cpages");
1326
- //Add the option, Note the autoload=false because when the autoload happens, our class GoogleSitemapGeneratorPage doesn't exist
1327
- add_option("sm_cpages", $this->pages, null, "no");
1328
- return true;
1329
- }
1330
- }
1331
-
1332
-
1333
- /*************************************** URL AND PATH FUNCTIONS ***************************************/
1334
-
1335
- /**
1336
- * Returns the URL to the directory where the plugin file is located
1337
- * @since 3.0b5
1338
- * @return string The URL to the plugin directory
1339
- */
1340
- public function GetPluginUrl() {
1341
-
1342
- $url = trailingslashit(plugins_url("", __FILE__));
1343
-
1344
- return $url;
1345
- }
1346
-
1347
- /**
1348
- * Returns the path to the directory where the plugin file is located
1349
- * @since 3.0b5
1350
- * @return string The path to the plugin directory
1351
- */
1352
- public function GetPluginPath() {
1353
- $path = dirname(__FILE__);
1354
- return trailingslashit(str_replace("\\", "/", $path));
1355
- }
1356
-
1357
- /**
1358
- * Returns the URL to default XSLT style if it exists
1359
- * @since 3.0b5
1360
- * @return string The URL to the default stylesheet, empty string if not available.
1361
- */
1362
- public function GetDefaultStyle() {
1363
- $p = $this->GetPluginPath();
1364
- if(file_exists($p . "sitemap.xsl")) {
1365
- $url = $this->GetPluginUrl();
1366
- //If called over the admin area using HTTPS, the stylesheet would also be https url, even if the site frontend is not.
1367
- if(substr(get_bloginfo('url'), 0, 5) != "https" && substr($url, 0, 5) == "https") $url = "http" . substr($url, 5);
1368
- return $url . 'sitemap.xsl';
1369
- }
1370
- return '';
1371
- }
1372
-
1373
- /**
1374
- * Returns of Permalinks are used
1375
- *
1376
- * @return bool
1377
- */
1378
- public function IsUsingPermalinks() {
1379
- /** @var $wp_rewrite WP_Rewrite */
1380
- global $wp_rewrite;
1381
-
1382
- return $wp_rewrite->using_mod_rewrite_permalinks();
1383
- }
1384
-
1385
- /**
1386
- * Returns the URL for the sitemap file
1387
- *
1388
- * @since 3.0
1389
- * @param string $type
1390
- * @param string $params
1391
- * @param array $buildOptions
1392
- * @return string The URL to the Sitemap file
1393
- */
1394
- public function GetXmlUrl($type = "", $params = "", $buildOptions = array()) {
1395
-
1396
- $pl = $this->IsUsingPermalinks();
1397
- $options = "";
1398
- if(!empty($type)) {
1399
- $options .= $type;
1400
- if(!empty($params)) {
1401
- $options .= "-" . $params;
1402
- }
1403
- }
1404
-
1405
- $buildOptions = array_merge($this->buildOptions, $buildOptions);
1406
-
1407
- $html = (isset($buildOptions["html"]) ? $buildOptions["html"] : false);
1408
- $zip = (isset($buildOptions["zip"]) ? $buildOptions["zip"] : false);
1409
-
1410
- $baseURL = get_bloginfo('url');
1411
-
1412
- //Manual override for root URL
1413
- $baseUrlSettings = $this->GetOption('b_baseurl');
1414
- if(!empty($baseUrlSettings)) $baseURL = $baseUrlSettings;
1415
- else if(defined("SM_BASE_URL") && SM_BASE_URL) $baseURL = SM_BASE_URL;
1416
-
1417
- if($pl) {
1418
- return trailingslashit($baseURL) . "sitemap" . ($options ? "-" . $options : "") . ($html
1419
- ? ".html" : ".xml") . ($zip? ".gz" : "");
1420
- } else {
1421
- return trailingslashit($baseURL) . "index.php?xml_sitemap=params=" . $options . ($html
1422
- ? ";html=true" : "") . ($zip? ";zip=true" : "");
1423
- }
1424
- }
1425
-
1426
- /**
1427
- * Returns if there is still an old sitemap file in the site directory
1428
- *
1429
- * @return Boolean True if a sitemap file still exists
1430
- */
1431
- public function OldFileExists() {
1432
- $path = trailingslashit(get_home_path());
1433
- return (file_exists($path . "sitemap.xml") || file_exists($path . "sitemap.xml.gz"));
1434
- }
1435
-
1436
- /**
1437
- * Renames old sitemap files in the site directory from previous versions of this plugin
1438
- * @return bool True on success
1439
- */
1440
- public function DeleteOldFiles() {
1441
- $path = trailingslashit(get_home_path());
1442
-
1443
- $res = true;
1444
-
1445
- if(file_exists($f = $path . "sitemap.xml")) if(!rename($f, $path . "sitemap.backup.xml")) $res = false;
1446
- if(file_exists($f = $path . "sitemap.xml.gz")) if(!rename($f, $path . "sitemap.backup.xml.gz")) $res = false;
1447
-
1448
- return $res;
1449
- }
1450
-
1451
-
1452
- /*************************************** SITEMAP SIMULATION ***************************************/
1453
-
1454
- /**
1455
- * Simulates the building of the sitemap index file.
1456
- *
1457
- * @see GoogleSitemapGenerator::SimulateSitemap
1458
- * @since 4.0
1459
- * @return array The data of the sitemap index file
1460
- */
1461
- public function SimulateIndex() {
1462
-
1463
- $this->simMode = true;
1464
-
1465
- require_once(trailingslashit(dirname(__FILE__)) . "sitemap-builder.php");
1466
- do_action("sm_build_index", $this);
1467
-
1468
- $this->simMode = false;
1469
-
1470
- $r = $this->simData["sitemaps"];
1471
-
1472
- $this->ClearSimData("sitemaps");
1473
-
1474
- return $r;
1475
- }
1476
-
1477
- /**
1478
- * Simulates the building of the sitemap file.
1479
- *
1480
- * @see GoogleSitemapGenerator::SimulateIndex
1481
- * @since 4.0
1482
- * @param $type string The type of the sitemap
1483
- * @param $params string Additional parameters for this type
1484
- * @return array The data of the sitemap file
1485
- */
1486
- public function SimulateSitemap($type, $params) {
1487
- $this->simMode = true;
1488
-
1489
- require_once(trailingslashit(dirname(__FILE__)) . "sitemap-builder.php");
1490
- do_action("sm_build_content", $this, $type, $params);
1491
-
1492
- $this->simMode = false;
1493
-
1494
- $r = $this->simData["content"];
1495
-
1496
- $this->ClearSimData("content");
1497
-
1498
- return $r;
1499
- }
1500
-
1501
- /**
1502
- * Clears the data of the simulation
1503
- *
1504
- * @param string $what Defines what to clear, either both, sitemaps or content
1505
- * @see GoogleSitemapGenerator::SimulateIndex
1506
- * @see GoogleSitemapGenerator::SimulateSitemap
1507
- * @since 4.0
1508
- */
1509
- public function ClearSimData($what) {
1510
- if($what == "both" || $what == "sitemaps") {
1511
- $this->simData["sitemaps"] = array();
1512
- }
1513
-
1514
- if($what == "both" || $what == "content") {
1515
- $this->simData["content"] = array();
1516
- }
1517
- }
1518
-
1519
- /**
1520
- * Returns the first caller outside of this __CLASS__
1521
- * @param array $trace The backtrace
1522
- * @return array The caller information
1523
- */
1524
- private function GetExternalBacktrace($trace) {
1525
- $caller = null;
1526
- foreach($trace AS $b) {
1527
- if($b["class"] != __CLASS__) {
1528
- $caller = $b;
1529
- break;
1530
- }
1531
- }
1532
- return $caller;
1533
- }
1534
-
1535
-
1536
- /*************************************** SITEMAP BUILDING ***************************************/
1537
-
1538
- /**
1539
- * Shows the sitemap. Main entry point from HTTP
1540
- * @param string $options Options for the sitemap. What type, what parameters.
1541
- * @since 4.0
1542
- */
1543
- public function ShowSitemap($options) {
1544
-
1545
- $startTime = microtime(true);
1546
- $startQueries = $GLOBALS["wpdb"]->num_queries;
1547
- $startMemory = memory_get_peak_usage(true);
1548
-
1549
- //Raise memory and time limits
1550
- if($this->GetOption("b_memory") != '') {
1551
- @ini_set("memory_limit", $this->GetOption("b_memory"));
1552
- }
1553
-
1554
- if($this->GetOption("b_time") != -1) {
1555
- @set_time_limit($this->GetOption("b_time"));
1556
- }
1557
-
1558
- do_action("sm_init", $this);
1559
-
1560
- $this->isActive = true;
1561
-
1562
- $parsedOptions = array();
1563
-
1564
- $options = explode(";", $options);
1565
- foreach($options AS $k) {
1566
- $kv = explode("=", $k);
1567
- $parsedOptions[$kv[0]] = @$kv[1];
1568
- }
1569
-
1570
- $options = $parsedOptions;
1571
-
1572
- $this->buildOptions = $options;
1573
-
1574
- //Do not index the actual XML pages, only process them.
1575
- //This avoids that the XML sitemaps show up in the search results.
1576
- if(!headers_sent()) header('X-Robots-Tag: noindex', true, 200);
1577
-
1578
- $this->Initate();
1579
-
1580
- $html = (isset($options["html"]) ? $options["html"] : false) && $this->IsXslEnabled();
1581
- if($html && !$this->GetOption('b_html')) {
1582
- $GLOBALS['wp_query']->is_404 = true;
1583
- return;
1584
- }
1585
-
1586
- //Don't zip if anything happened before which could break the output or if the client does not support gzip.
1587
- //If there are already other output filters, there might be some content on another
1588
- //filter level already, which we can't detect. Zipping then would lead to invalid content.
1589
- $pack = (isset($options['zip']) ? $options['zip'] : $this->GetOption('b_autozip'));
1590
- if(
1591
- empty($_SERVER['HTTP_ACCEPT_ENCODING']) //No encoding support
1592
- || strpos($_SERVER['HTTP_ACCEPT_ENCODING'],'gzip') === false //or no gzip
1593
- || !$this->IsGzipEnabled() //No PHP gzip support
1594
- || headers_sent() //Headers already sent
1595
- || ob_get_contents() //there was already some output...
1596
- || in_array('ob_gzhandler', ob_list_handlers()) //Some other plugin (or PHP) is already gzipping
1597
- || $this->GetPhpIniBoolean(ini_get("zlib.output_compression")) //Zlib compression in php.ini enabled
1598
- || ob_get_level() > (!$this->GetPhpIniBoolean(ini_get("output_buffering"))?0:1) //Another output buffer (beside of the default one) is already active
1599
- || (isset($_SERVER['HTTP_X_VARNISH']) && is_numeric($_SERVER['HTTP_X_VARNISH'])) //Behind a Varnish proxy
1600
- ) $pack = false;
1601
-
1602
- $packed = false;
1603
-
1604
- if($pack) $packed = @ob_start('ob_gzhandler');
1605
-
1606
- $builders = array('sitemap-builder.php');
1607
- foreach($builders AS $b) {
1608
- $f = trailingslashit(dirname(__FILE__)) . $b;
1609
- if(file_exists($f)) require_once($f);
1610
- }
1611
-
1612
- if($html) {
1613
- ob_start();
1614
- } else {
1615
- header('Content-Type: text/xml; charset=utf-8');
1616
- }
1617
-
1618
-
1619
- if(empty($options["params"]) || $options["params"] == "index") {
1620
-
1621
- $this->BuildSitemapHeader("index");
1622
-
1623
- do_action('sm_build_index', $this);
1624
-
1625
- $this->BuildSitemapFooter("index");
1626
- $this->AddEndCommend($startTime, $startQueries, $startMemory);
1627
-
1628
-
1629
- } else {
1630
- $allParams = $options["params"];
1631
- $type = $params = null;
1632
- if(strpos($allParams, "-") !== false) {
1633
- $type = substr($allParams, 0, strpos($allParams, "-"));
1634
- $params = substr($allParams, strpos($allParams, "-") + 1);
1635
- } else {
1636
- $type = $allParams;
1637
- }
1638
-
1639
- $this->BuildSitemapHeader("sitemap");
1640
-
1641
- do_action("sm_build_content", $this, $type, $params);
1642
-
1643
- $this->BuildSitemapFooter("sitemap");
1644
-
1645
- $this->AddEndCommend($startTime, $startQueries, $startMemory);
1646
- }
1647
-
1648
- if($html) {
1649
- $xmlSource = ob_get_clean();
1650
-
1651
- // Load the XML source
1652
- $xml = new DOMDocument;
1653
- $xml->loadXML($xmlSource);
1654
-
1655
- $xsl = new DOMDocument;
1656
- $xsl->load($this->GetPluginPath() . "sitemap.xsl");
1657
-
1658
- // Configure the transformer
1659
- $proc = new XSLTProcessor;
1660
- $proc->importStyleSheet($xsl); // attach the xsl rules
1661
-
1662
- $domTranObj = $proc->transformToDoc($xml);
1663
-
1664
- // this will also output doctype and comments at top level
1665
- foreach($domTranObj->childNodes as $node) echo $domTranObj->saveXML($node) . "\n";
1666
- }
1667
-
1668
- if($packed) ob_end_flush();
1669
- $this->isActive = false;
1670
- exit;
1671
- }
1672
-
1673
- /**
1674
- * Generates the header for the sitemap with XML declarations, stylesheet and so on.
1675
- *
1676
- * @since 4.0
1677
- * @param string $format The format, either sitemap for a sitemap or index for the sitemap index
1678
- */
1679
- private function BuildSitemapHeader($format) {
1680
-
1681
- if(!in_array($format, array("sitemap", "index"))) $format = "sitemap";
1682
-
1683
- $this->AddElement(new GoogleSitemapGeneratorXmlEntry('<?xml version="1.0" encoding="UTF-8"' . '?' . '>'));
1684
-
1685
- $styleSheet = ($this->GetDefaultStyle() && $this->GetOption('b_style_default') === true
1686
- ? $this->GetDefaultStyle() : $this->GetOption('b_style'));
1687
-
1688
- if(!empty($styleSheet)) {
1689
- $this->AddElement(new GoogleSitemapGeneratorXmlEntry('<' . '?xml-stylesheet type="text/xsl" href="' . esc_url( $styleSheet ) . '"?' . '>'));
1690
- }
1691
-
1692
- $this->AddElement(new GoogleSitemapGeneratorDebugEntry("sitemap-generator-url=\"http://www.arnebrachhold.de\" sitemap-generator-version=\"" . $this->GetVersion() . "\""));
1693
- $this->AddElement(new GoogleSitemapGeneratorDebugEntry("generated-on=\"" . date(get_option("date_format") . " " . get_option("time_format")) . "\""));
1694
-
1695
- switch($format) {
1696
- case "sitemap":
1697
- $this->AddElement(new GoogleSitemapGeneratorXmlEntry('<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'));
1698
- break;
1699
- case "index":
1700
- $this->AddElement(new GoogleSitemapGeneratorXmlEntry('<sitemapindex xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'));
1701
- break;
1702
- }
1703
- }
1704
-
1705
- /**
1706
- * Generates the footer for the sitemap with XML ending tag
1707
- *
1708
- * @since 4.0
1709
- * @param string $format The format, either sitemap for a sitemap or index for the sitemap index
1710
- */
1711
- private function BuildSitemapFooter($format) {
1712
- if(!in_array($format, array("sitemap", "index"))) $format = "sitemap";
1713
- switch($format) {
1714
- case "sitemap":
1715
- $this->AddElement(new GoogleSitemapGeneratorXmlEntry('</urlset>'));
1716
- break;
1717
- case "index":
1718
- $this->AddElement(new GoogleSitemapGeneratorXmlEntry('</sitemapindex>'));
1719
- break;
1720
- }
1721
- }
1722
-
1723
- /**
1724
- * Adds information about time and memory usage to the sitemap
1725
- *
1726
- * @since 4.0
1727
- * @param float $startTime The microtime of the start
1728
- * @param int $startQueries
1729
- * @param int $startMemory
1730
- *
1731
- */
1732
- private function AddEndCommend($startTime, $startQueries = 0, $startMemory = 0) {
1733
- if(defined("WP_DEBUG") && WP_DEBUG) {
1734
- echo "<!-- ";
1735
- if(defined('SAVEQUERIES') && SAVEQUERIES) {
1736
- echo '<pre>';
1737
- var_dump($GLOBALS['wpdb']->queries);
1738
- echo '</pre>';
1739
-
1740
- $total = 0;
1741
- foreach($GLOBALS['wpdb']->queries as $q) {
1742
- $total += $q[1];
1743
- }
1744
- echo '<h4>Total Query Time</h4>';
1745
- echo '<pre>' . count($GLOBALS['wpdb']->queries) . ' queries in ' . round($total, 2) . ' seconds.</pre>';
1746
- } else {
1747
- echo '<p>Please edit wp-db.inc.php in wp-includes and set SAVEQUERIES to true if you want to see the queries.</p>';
1748
- }
1749
- echo " --> ";
1750
- }
1751
- $endTime = microtime(true);
1752
- $endTime = round($endTime - $startTime, 2);
1753
- $this->AddElement(new GoogleSitemapGeneratorDebugEntry("Request ID: " . md5(microtime()) . "; Queries for sitemap: " . ($GLOBALS["wpdb"]->num_queries - $startQueries) . "; Total queries: " . $GLOBALS["wpdb"]->num_queries . "; Seconds: $endTime; Memory for sitemap: " . ((memory_get_peak_usage(true) - $startMemory) / 1024 / 1024) . "MB" . "; Total memory: " . (memory_get_peak_usage(true) / 1024 / 1024) . "MB"));
1754
- }
1755
-
1756
- /**
1757
- * Adds the sitemap to the virtual robots.txt file
1758
- * This function is executed by WordPress with the do_robots hook
1759
- *
1760
- * @since 3.1.2
1761
- */
1762
- public function DoRobots() {
1763
- $this->Initate();
1764
- if($this->GetOption('b_robots') === true) {
1765
-
1766
- $smUrl = $this->GetXmlUrl();
1767
-
1768
- echo "\nSitemap: " . $smUrl . "\n";
1769
- }
1770
- }
1771
-
1772
-
1773
- /*************************************** SITEMAP CONTENT BUILDING ***************************************/
1774
-
1775
- /**
1776
- * Outputs an element in the sitemap
1777
- *
1778
- * @since 3.0
1779
- * @param $page GoogleSitemapGeneratorXmlEntry The element
1780
- */
1781
- public function AddElement($page) {
1782
-
1783
- if(empty($page)) return;
1784
- echo $page->Render();
1785
- }
1786
-
1787
- /**
1788
- * Adds a url to the sitemap. You can use this method or call AddElement directly.
1789
- *
1790
- * @since 3.0
1791
- * @param $loc string The location (url) of the page
1792
- * @param $lastMod int The last Modification time as a UNIX timestamp
1793
- * @param $changeFreq string The change frequenty of the page, Valid values are "always", "hourly", "daily", "weekly", "monthly", "yearly" and "never".
1794
- * @param $priority float The priority of the page, between 0.0 and 1.0
1795
- * @param $postID int The post ID in case this is a post or page
1796
- * @see AddElement
1797
- * @return string The URL node
1798
- */
1799
- public function AddUrl($loc, $lastMod = 0, $changeFreq = "monthly", $priority = 0.5, $postID = 0) {
1800
- //Strip out the last modification time if activated
1801
- if($this->GetOption('in_lastmod') === false) $lastMod = 0;
1802
- $page = new GoogleSitemapGeneratorPage($loc, $priority, $changeFreq, $lastMod, $postID);
1803
-
1804
- do_action('sm_addurl', $page);
1805
-
1806
- if($this->simMode) {
1807
- $caller = $this->GetExternalBacktrace(debug_backtrace());
1808
-
1809
- $this->simData["content"][] = array(
1810
- "data" => $page,
1811
- "caller" => $caller
1812
- );
1813
- } else {
1814
- $this->AddElement($page);
1815
- }
1816
- }
1817
-
1818
- /**
1819
- * Add a sitemap entry to the index file
1820
- * @param $type
1821
- * @param string $params
1822
- * @param int $lastMod
1823
- */
1824
- public function AddSitemap($type, $params = "", $lastMod = 0) {
1825
-
1826
- $url = $this->GetXmlUrl($type, $params);
1827
-
1828
- $sitemap = new GoogleSitemapGeneratorSitemapEntry($url, $lastMod);
1829
-
1830
- do_action('sm_addsitemap', $sitemap);
1831
-
1832
- if($this->simMode) {
1833
- $caller = $this->GetExternalBacktrace(debug_backtrace());
1834
- $this->simData["sitemaps"][] = array("data" => $sitemap, "type" => $type, "params" => $params, "caller" => $caller);
1835
- } else {
1836
- $this->AddElement($sitemap);
1837
- }
1838
- }
1839
-
1840
-
1841
- /*************************************** PINGS ***************************************/
1842
-
1843
- /**
1844
- * Sends the pings to the search engines
1845
- *
1846
- * @return GoogleSitemapGeneratorStatus The status object
1847
- */
1848
- public function SendPing() {
1849
-
1850
- $this->LoadOptions();
1851
-
1852
- $pingUrl = $this->GetXmlUrl();
1853
-
1854
- $result = $this->ExecutePing($pingUrl, true);
1855
-
1856
- $postID = get_transient('sm_ping_post_id');
1857
-
1858
- if($postID) {
1859
-
1860
- require_once(trailingslashit(dirname(__FILE__)) . "sitemap-builder.php");
1861
-
1862
- $urls = array();
1863
-
1864
- $urls = apply_filters('sm_sitemap_for_post',$urls, $this, $postID);
1865
- if(is_array($urls) && count($urls)>0) {
1866
- foreach($urls AS $url) $this->ExecutePing($url, false);
1867
- }
1868
-
1869
- delete_transient('sm_ping_post_id');
1870
- }
1871
-
1872
- return $result;
1873
- }
1874
-
1875
-
1876
- /**
1877
- * @param $pingUrl string The Sitemap URL to ping
1878
- * @param bool $updateStatus If the global ping status should be updated
1879
- *
1880
- * @return \GoogleSitemapGeneratorStatus
1881
- */
1882
- protected function ExecutePing($pingUrl, $updateStatus = true) {
1883
-
1884
- $status = new GoogleSitemapGeneratorStatus($updateStatus);
1885
-
1886
- if ($pingUrl) {
1887
- $pings = array();
1888
-
1889
- if ($this->GetOption("b_ping")) {
1890
- $pings["google"] = array(
1891
- "name" => "Google",
1892
- "url" => "http://www.google.com/webmasters/sitemaps/ping?sitemap=%s",
1893
- "check" => "successfully"
1894
- );
1895
- }
1896
-
1897
- if ($this->GetOption("b_pingmsn")) {
1898
- $pings["bing"] = array(
1899
- "name" => "Bing",
1900
- "url" => "http://www.bing.com/webmaster/ping.aspx?siteMap=%s",
1901
- "check" => " "
1902
- // No way to check, response is IP-language-based :-(
1903
- );
1904
- }
1905
-
1906
- foreach ($pings AS $serviceId => $service) {
1907
- $url = str_replace("%s", urlencode($pingUrl), $service["url"]);
1908
- $status->StartPing($serviceId, $url, $service["name"]);
1909
-
1910
- $pingres = $this->RemoteOpen($url);
1911
-
1912
- if ($pingres === null || $pingres === false || strpos($pingres, $service["check"]) === false) {
1913
- $status->EndPing($serviceId, false);
1914
- trigger_error("Failed to ping $serviceId: " . htmlspecialchars(strip_tags($pingres)), E_USER_NOTICE);
1915
- } else {
1916
- $status->EndPing($serviceId, true);
1917
- }
1918
- }
1919
-
1920
- $this->SetOption('i_lastping', time());
1921
- $this->SaveOptions();
1922
- }
1923
-
1924
- $status->End();
1925
-
1926
- return $status;
1927
- }
1928
-
1929
- /**
1930
- * Tries to ping a specific service showing as much as debug output as possible
1931
- * @since 4.1
1932
- * @return array
1933
- */
1934
- public function SendPingAll() {
1935
-
1936
- $this->LoadOptions();
1937
-
1938
- $sitemaps = $this->SimulateIndex();
1939
-
1940
- $urls = array();
1941
-
1942
- $urls[] = $this->GetXmlUrl();
1943
-
1944
- foreach($sitemaps AS $sitemap) {
1945
-
1946
- /** @var $s GoogleSitemapGeneratorSitemapEntry */
1947
- $s = $sitemap["data"];
1948
-
1949
- $urls[] = $s->GetUrl();
1950
- }
1951
-
1952
- $results = array();
1953
-
1954
- $first = true;
1955
-
1956
- foreach($urls AS $url) {
1957
- $status = @$this->ExecutePing($url, $first);
1958
- $results[] = array("sitemap"=> $url, "status" => $status);
1959
- $first = false;
1960
- }
1961
- return $results;
1962
-
1963
- }
1964
-
1965
- /**
1966
- * Tries to ping a specific service showing as much as debug output as possible
1967
- * @since 3.1.9
1968
- * @return null
1969
- */
1970
- public function ShowPingResult() {
1971
-
1972
- check_admin_referer('sitemap');
1973
-
1974
- if(!current_user_can("administrator")) {
1975
- echo '<p>Please log in as admin</p>';
1976
- return;
1977
- }
1978
-
1979
- $service = !empty($_GET["sm_ping_service"]) ? $_GET["sm_ping_service"] : null;
1980
-
1981
- $status = GoogleSitemapGeneratorStatus::Load();
1982
-
1983
- if(!$status) die("No build status yet. Write something first.");
1984
-
1985
- $url = null;
1986
-
1987
- $services = $status->GetUsedPingServices();
1988
-
1989
- if(!in_array($service, $services)) die("Invalid service");
1990
-
1991
- $url = $status->GetPingUrl($service);
1992
-
1993
- if(empty($url)) die("Invalid ping url");
1994
-
1995
- echo '<html><head><title>Ping Test</title>';
1996
- if(function_exists('wp_admin_css')) wp_admin_css('css/global', true);
1997
- echo '</head><body><h1>Ping Test</h1>';
1998
-
1999
- echo '<p>Trying to ping: <a href="' . $url . '">' . $url . '</a>. The sections below should give you an idea whats going on.</p>';
2000
-
2001
- //Try to get as much as debug / error output as possible
2002
- $errLevel = error_reporting(E_ALL);
2003
- $errDisplay = ini_set("display_errors", 1);
2004
- if(!defined('WP_DEBUG')) define('WP_DEBUG', true);
2005
-
2006
- echo '<h2>Errors, Warnings, Notices:</h2>';
2007
-
2008
- if(WP_DEBUG == false) echo "<i>WP_DEBUG was set to false somewhere before. You might not see all debug information until you remove this declaration!</i><br />";
2009
- if(ini_get("display_errors") != 1) echo "<i>Your display_errors setting currently prevents the plugin from showing errors here. Please check your webserver logfile instead.</i><br />";
2010
-
2011
- $res = $this->RemoteOpen($url);
2012
-
2013
- echo '<h2>Result (text only):</h2>';
2014
-
2015
- echo wp_kses($res, array('a' => array('href' => array()), 'p' => array(), 'ul' => array(), 'ol' => array(), 'li' => array()));
2016
-
2017
- echo '<h2>Result (HTML):</h2>';
2018
-
2019
- echo htmlspecialchars($res);
2020
-
2021
- //Revert back old values
2022
- error_reporting($errLevel);
2023
- ini_set("display_errors", $errDisplay);
2024
- echo '</body></html>';
2025
- exit;
2026
- }
2027
-
2028
- /**
2029
- * Opens a remote file using the WordPress API
2030
- * @since 3.0
2031
- * @param $url string The URL to open
2032
- * @param $method string get or post
2033
- * @param $postData array An array with key=>value paris
2034
- * @param $timeout int Timeout for the request, by default 10
2035
- * @return mixed False on error, the body of the response on success
2036
- */
2037
- public static function RemoteOpen($url, $method = 'get', $postData = null, $timeout = 10) {
2038
- $options = array();
2039
- $options['timeout'] = $timeout;
2040
-
2041
- if($method == 'get') {
2042
- $response = wp_remote_get($url, $options);
2043
- } else {
2044
- $response = wp_remote_post($url, array_merge($options, array('body' => $postData)));
2045
- }
2046
-
2047
- if(is_wp_error($response)) {
2048
- $errs = $response->get_error_messages();
2049
- $errs = htmlspecialchars(implode('; ', $errs));
2050
- trigger_error('WP HTTP API Web Request failed: ' . $errs, E_USER_NOTICE);
2051
- return false;
2052
- }
2053
-
2054
- return $response['body'];
2055
- }
2056
-
2057
- /**
2058
- * Sends anonymous statistics (disabled by default)
2059
- */
2060
- private function SendStats() {
2061
- global $wp_version, $wpdb;
2062
- $postCount = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->posts} p WHERE p.post_status='publish'");
2063
-
2064
- //Send simple post count statistic to get an idea in which direction this plugin should be optimized
2065
- //Only a rough number is required, so we are rounding things up
2066
- if($postCount <=5) $postCount = 5;
2067
- else if($postCount < 25) $postCount = 10;
2068
- else if($postCount < 35) $postCount = 25;
2069
- else if($postCount < 75) $postCount = 50;
2070
- else if($postCount < 125) $postCount = 100;
2071
- else if($postCount < 2000) $postCount = round($postCount / 200) * 200;
2072
- else if($postCount < 10000) $postCount = round($postCount / 1000) * 1000;
2073
- else $postCount = round($postCount / 10000) * 10000;
2074
-
2075
- $postData = array(
2076
- "v" => 1,
2077
- "tid" => "UA-65990-26",
2078
- "cid" => $this->GetOption('i_hash'),
2079
- "aip" => 1, //Anonymize
2080
- "t" => "event",
2081
- "ec" => "ping",
2082
- "ea" => "auto",
2083
- "ev" => 1,
2084
- "cd1" => $wp_version,
2085
- "cd2" => $this->GetVersion(),
2086
- "cd3" => PHP_VERSION,
2087
- "cd4" => $postCount,
2088
- "ul" => get_bloginfo('language'),
2089
- );
2090
-
2091
- $this->RemoteOpen('http://www.google-analytics.com/collect', 'post', $postData);
2092
- }
2093
-
2094
- /**
2095
- * Returns the number of seconds the support feed should be cached (1 week)
2096
- *
2097
- * @return int The number of seconds
2098
- */
2099
- public static function GetSupportFeedCacheLifetime() {
2100
- return 60 * 60 * 24 * 7;
2101
- }
2102
-
2103
- /**
2104
- * Returns the SimplePie instance of the support feed
2105
- * The feed is cached for one week
2106
- *
2107
- * @return SimplePie|WP_Error
2108
- */
2109
- public function GetSupportFeed() {
2110
-
2111
- $callBack = array(__CLASS__,"GetSupportFeedCacheLifetime");
2112
-
2113
- //Extend cache lifetime so we don't request the feed to often
2114
- add_filter( 'wp_feed_cache_transient_lifetime' , $callBack);
2115
- $result = fetch_feed(SM_SUPPORTFEED_URL);
2116
- remove_filter( 'wp_feed_cache_transient_lifetime' , $callBack );
2117
-
2118
- return $result;
2119
- }
2120
-
2121
- /**
2122
- * Handles daily ping
2123
- */
2124
- public function SendPingDaily() {
2125
-
2126
- $this->LoadOptions();
2127
-
2128
- $blogUpdate = strtotime(get_lastpostdate('blog'));
2129
- $lastPing = $this->GetOption('i_lastping');
2130
- $yesterday = time() - (60 * 60 * 24);
2131
-
2132
- if($blogUpdate >= $yesterday && ($lastPing==0 || $lastPing <= $yesterday)) {
2133
- $this->SendPing();
2134
- }
2135
-
2136
- //Send statistics if enabled (disabled by default)
2137
- if($this->GetOption('b_stats')) {
2138
- $this->SendStats();
2139
- }
2140
-
2141
- //Cache the support feed so there is no delay when loading the user interface
2142
- if($this->GetOption('i_supportfeed')) {
2143
- $last = $this->GetOption('i_supportfeed_cache');
2144
- if($last <= (time() - $this->GetSupportFeedCacheLifetime())) {
2145
- $supportFeed = $this->GetSupportFeed();
2146
- if (!is_wp_error($supportFeed) && $supportFeed) {
2147
- $this->SetOption('i_supportfeed_cache',time());
2148
- $this->SaveOptions();
2149
- }
2150
- }
2151
- }
2152
- }
2153
-
2154
-
2155
- /*************************************** USER INTERFACE ***************************************/
2156
-
2157
- /**
2158
- * Includes the user interface class and initializes it
2159
- *
2160
- * @since 3.1.1
2161
- * @see GoogleSitemapGeneratorUI
2162
- * @return GoogleSitemapGeneratorUI
2163
- */
2164
- private function GetUI() {
2165
-
2166
- if($this->ui === null) {
2167
-
2168
- $className = 'GoogleSitemapGeneratorUI';
2169
- $fileName = 'sitemap-ui.php';
2170
-
2171
- if(!class_exists($className)) {
2172
-
2173
- $path = trailingslashit(dirname(__FILE__));
2174
-
2175
- if(!file_exists($path . $fileName)) return false;
2176
- require_once($path . $fileName);
2177
- }
2178
-
2179
- $this->ui = new $className($this);
2180
-
2181
- }
2182
-
2183
- return $this->ui;
2184
- }
2185
-
2186
- /**
2187
- * Shows the option page of the plugin. Before 3.1.1, this function was basically the UI, afterwards the UI was outsourced to another class
2188
- *
2189
- * @see GoogleSitemapGeneratorUI
2190
- * @since 3.0
2191
- * @return bool
2192
- */
2193
- public function HtmlShowOptionsPage() {
2194
-
2195
- $ui = $this->GetUI();
2196
- if($ui) {
2197
- $ui->HtmlShowOptionsPage();
2198
- return true;
2199
- }
2200
-
2201
- return false;
2202
- }
2203
-
2204
- /*************************************** HELPERS ***************************************/
2205
-
2206
- /**
2207
- * Returns if the given value is greater than zero
2208
- *
2209
- * @param $value int The value to check
2210
- * @since 4.0b10
2211
- * @return bool True if greater than zero
2212
- */
2213
- public function IsGreaterZero($value) {
2214
- return ($value > 0);
2215
- }
2216
-
2217
- /**
2218
- * Converts the various possible php.ini values for true and false to boolean
2219
- *
2220
- * @param $value string The value from ini_get
2221
- *
2222
- * @return bool The converted value
2223
- */
2224
- public function GetPhpIniBoolean($value) {
2225
- if (is_string($value)) {
2226
- switch (strtolower($value)) {
2227
- case '+':
2228
- case '1':
2229
- case 'y':
2230
- case 'on':
2231
- case 'yes':
2232
- case 'true':
2233
- case 'enabled':
2234
- return true;
2235
-
2236
- case '-':
2237
- case '0':
2238
- case 'n':
2239
- case 'no':
2240
- case 'off':
2241
- case 'false':
2242
- case 'disabled':
2243
- return false;
2244
- }
2245
- }
2246
-
2247
- return (boolean) $value;
2248
- }
2249
-
2250
-
2251
-
2252
- public function ShowSurvey() {
2253
- $this->LoadOptions();
2254
-
2255
- return (isset($_REQUEST['sm_survey']) || !$this->GetOption('i_hide_survey'));
2256
- }
2257
-
2258
- public function HtmlSurvey() {
2259
- ?>
2260
- <div class="updated">
2261
- <strong>
2262
- <p>
2263
- <?php echo str_replace('%s', 'https://forms.gle/aFkbBs2rfGqQoCqj8',
2264
- __('Google XML Sitemaps 5.0 is around the corner! <a href="%s" target="_blank"> Help us shape the future of sitemaps by taking this short survey</a>','sitemap'));
2265
- ?> <a href="<?php echo $this->GetBackLink() . "&amp;sm_hide_survey=true"; ?>" style="float:right; display:block; border:none;"><small style="font-weight:normal; "><?php _e('Don\'t show this anymore', 'sitemap'); ?></small></a>
2266
- </p>
2267
- </strong>
2268
- <div style="clear:right;"></div>
2269
- </div>
2270
- <?php
2271
- }
2272
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Default sitemap core class
4
+ *
5
+ * @package Sitemap
6
+ * @author Arne Brachhold
7
+ * @since 4.0
8
+ */
9
+
10
+ use function Bhittani\StarRating\functions\sanitize;
11
+ /**
12
+ * $Id: sitemap-core.php 935247 2014-06-19 17:13:03Z arnee $
13
+ */
14
+
15
+ // Enable for dev! Good code doesn't generate any notices...
16
+ // error_reporting(E_ALL);
17
+ // ini_set('display_errors', 1); .
18
+
19
+
20
+ /**
21
+ * Represents the status (successes and failures) of a ping process
22
+ *
23
+ * @author Arne Brachhold
24
+ * @package sitemap
25
+ * @since 3.0b5
26
+ */
27
+ class GoogleSitemapGeneratorStatus {
28
+
29
+ /**
30
+ * Var start time of building process .
31
+ *
32
+ * @var float $_start_time The start time of the building process .
33
+ */
34
+ private $start_time = 0;
35
+
36
+ /**
37
+ * The end time of the building process.
38
+ *
39
+ * @var float $_end_time The end time of the building process
40
+ */
41
+ private $end_time = 0;
42
+
43
+ /**
44
+ * Holding an array with the results and information of the last ping .
45
+ *
46
+ * @var array Holding an array with the results and information of the last ping
47
+ */
48
+ private $ping_results = array();
49
+
50
+ /**
51
+ * If the status should be saved to the database automatically .
52
+ *
53
+ * @var bool If the status should be saved to the database automatically
54
+ */
55
+ private $auto_save = true;
56
+
57
+ /**
58
+ * Constructs a new status ued for saving the ping results
59
+ *
60
+ * @param string $auto_save .
61
+ */
62
+ public function __construct( $auto_save = true ) {
63
+ $this->start_time = microtime( true );
64
+
65
+ $this->auto_save = $auto_save;
66
+
67
+ if ( $auto_save ) {
68
+
69
+ $exists = get_option( 'sm_status' );
70
+
71
+ if ( false === $exists ) {
72
+ add_option( 'sm_status', '', '', 'no' );
73
+ }
74
+ $this->save();
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Saves the status back to the database
80
+ */
81
+ public function save() {
82
+ update_option( 'sm_status', $this );
83
+ }
84
+
85
+ /**
86
+ * Returns the last saved status object or null
87
+ *
88
+ * @return GoogleSitemapGeneratorStatus
89
+ */
90
+ public static function load() {
91
+ $status = get_option( 'sm_status' );
92
+ if ( is_a( $status, 'GoogleSitemapGeneratorStatus' ) ) {
93
+ return $status;
94
+ } else {
95
+ return null;
96
+ }
97
+ }
98
+
99
+ /**
100
+ * Ends the ping process
101
+ */
102
+ public function end() {
103
+ $this->end_time = microtime( true );
104
+ if ( $this->auto_save ) {
105
+ $this->save();
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Returns the duration of the ping process
111
+ *
112
+ * @return int
113
+ */
114
+ public function get_duration() {
115
+ return round( $this->end_time - $this->start_time, 2 );
116
+ }
117
+
118
+ /**
119
+ * Returns the time when the pings were started
120
+ *
121
+ * @return int
122
+ */
123
+ public function get_start_time() {
124
+ return round( $this->start_time, 2 );
125
+ }
126
+
127
+ /**
128
+ * Start ping .
129
+ *
130
+ * @param string $service string The internal name of the ping service .
131
+ * @param string $url string The URL to ping .
132
+ * @param string $name string The display name of the service .
133
+ * @return void
134
+ */
135
+ public function start_ping( $service, $url, $name = null ) {
136
+ $this->ping_results[ $service ] = array(
137
+ 'start_time' => microtime( true ),
138
+ 'end_time' => 0,
139
+ 'success' => false,
140
+ 'url' => $url,
141
+ 'name' => $name ? $name : $service,
142
+ );
143
+
144
+ if ( $this->auto_save ) {
145
+ $this->save();
146
+ }
147
+ }
148
+
149
+ /**
150
+ * End ping .
151
+ *
152
+ * @param string $service string The internal name of the ping service .
153
+ * @param string $success boolean If the ping was successful .
154
+ * @return void
155
+ */
156
+ public function end_ping( $service, $success ) {
157
+ $this->ping_results[ $service ]['end_time'] = microtime( true );
158
+ $this->ping_results[ $service ]['success'] = $success;
159
+
160
+ if ( $this->auto_save ) {
161
+ $this->save();
162
+ }
163
+ }
164
+
165
+ /**
166
+ * Returns the duration of the last ping of a specific ping service
167
+ *
168
+ * @param string $service string The internal name of the ping service .
169
+ * @return float
170
+ */
171
+ public function get_ping_duration( $service ) {
172
+ $res = $this->ping_results[ $service ];
173
+ return round( $res['end_time'] - $res['start_time'], 2 );
174
+ }
175
+
176
+ /**
177
+ * Returns the last result for a specific ping service
178
+ *
179
+ * @param string $service string The internal name of the ping service .
180
+ * @return array
181
+ */
182
+ public function get_ping_result( $service ) {
183
+ return $this->ping_results[ $service ]['success'];
184
+ }
185
+
186
+ /**
187
+ * Returns the URL for a specific ping service
188
+ *
189
+ * @param string $service string The internal name of the ping service .
190
+ * @return array
191
+ */
192
+ public function get_ping_url( $service ) {
193
+ return $this->ping_results[ $service ]['url'];
194
+ }
195
+
196
+ /**
197
+ * Returns the name for a specific ping service
198
+ *
199
+ * @param string $service string The internal name of the ping service .
200
+ * @return array
201
+ */
202
+ public function get_service_name( $service ) {
203
+ return $this->ping_results[ $service ]['name'];
204
+ }
205
+
206
+ /**
207
+ * Returns if a service was used in the last ping
208
+ *
209
+ * @param string $service string The internal name of the ping service .
210
+ * @return bool
211
+ */
212
+ public function used_ping_service( $service ) {
213
+ return array_key_exists( $service, $this->ping_results );
214
+ }
215
+
216
+ /**
217
+ * Returns the services which were used in the last ping
218
+ *
219
+ * @return array
220
+ */
221
+ public function get_used_ping_services() {
222
+ return array_keys( $this->ping_results );
223
+ }
224
+ }
225
+
226
+ /**
227
+ * Represents an item in the page list
228
+ *
229
+ * @author Arne Brachhold
230
+ * @package sitemap
231
+ * @since 3.0
232
+ */
233
+ class GoogleSitemapGeneratorPage {
234
+
235
+ /**
236
+ * Sets the URL or the relative path to the site dir of the page .
237
+ *
238
+ * @var string $_url Sets the URL or the relative path to the site dir of the page
239
+ */
240
+ public $url;
241
+
242
+ /**
243
+ * Sets the priority of this page .
244
+ *
245
+ * @var float $_priority Sets the priority of this page
246
+ */
247
+ public $priority;
248
+
249
+ /**
250
+ * Sets the chanfe frequency of the page. I want Enums! .
251
+ *
252
+ * @var string $_change_freq Sets the chanfe frequency of the page. I want Enums!
253
+ */
254
+ public $change_freq;
255
+
256
+ /**
257
+ * Sets the last_mod date as a UNIX timestamp. .
258
+ *
259
+ * @var int $_last_mod Sets the last_mod date as a UNIX timestamp.
260
+ */
261
+ public $last_mod;
262
+
263
+ /**
264
+ * Sets the post ID in case this item is a WordPress post or page .
265
+ *
266
+ * @var int $_post_id Sets the post ID in case this item is a WordPress post or page
267
+ */
268
+ public $post_id;
269
+
270
+ /**
271
+ * Initialize a new page object
272
+ *
273
+ * @since 3.0
274
+ * @param string $url The URL or path of the file .
275
+ * @param float $priority The Priority of the page 0.0 to 1.0 .
276
+ * @param string $change_freq The change frequency like daily, hourly, weekly .
277
+ * @param int $last_mod The last mod date as a unix timestamp .
278
+ * @param int $post_id The post ID of this page .
279
+ */
280
+ public function __construct( $url = '', $priority = 0.0, $change_freq = 'never', $last_mod = 0, $post_id = 0 ) {
281
+ $this->set_url( $url );
282
+ $this->set_priority( $priority );
283
+ $this->set_change_freq( $change_freq );
284
+ $this->set_last_mod( $last_mod );
285
+ $this->set_post_id( $post_id );
286
+ }
287
+
288
+ /**
289
+ * Returns the URL of the page
290
+ *
291
+ * @return string The URL
292
+ */
293
+ public function get_url() {
294
+ return $this->url;
295
+ }
296
+
297
+ /**
298
+ * Sets the URL of the page
299
+ *
300
+ * @param string $url The new URL .
301
+ */
302
+ public function set_url( $url ) {
303
+ $this->url = (string) $url;
304
+ }
305
+
306
+ /**
307
+ * Returns the priority of this page
308
+ *
309
+ * @return float the priority, from 0.0 to 1.0
310
+ */
311
+ public function get_priority() {
312
+ return $this->priority;
313
+ }
314
+
315
+ /**
316
+ * Sets the priority of the page
317
+ *
318
+ * @param float $priority The new priority from 0.1 to 1.0 .
319
+ */
320
+ public function set_priority( $priority ) {
321
+ $this->priority = floatval( $priority );
322
+ }
323
+
324
+ /**
325
+ * Returns the change frequency of the page
326
+ *
327
+ * @return string The change frequncy like hourly, weekly, monthly etc.
328
+ */
329
+ public function get_change_freq() {
330
+ return $this->change_freq;
331
+ }
332
+
333
+ /**
334
+ * Sets the change frequency of the page
335
+ *
336
+ * @param string $change_freq The new change frequency .
337
+ */
338
+ public function set_change_freq( $change_freq ) {
339
+ $this->change_freq = (string) $change_freq;
340
+ }
341
+
342
+ /**
343
+ * Returns the last mod of the page
344
+ *
345
+ * @return int The lastmod value in seconds
346
+ */
347
+ public function get_last_mod() {
348
+ return $this->last_mod;
349
+ }
350
+
351
+ /**
352
+ * Sets the last mod of the page
353
+ *
354
+ * @param int $last_mod The lastmod of the page .
355
+ */
356
+ public function set_last_mod( $last_mod ) {
357
+ $this->last_mod = intval( $last_mod );
358
+ }
359
+
360
+ /**
361
+ * Returns the ID of the post
362
+ *
363
+ * @return int The post ID
364
+ */
365
+ public function get_post_id() {
366
+ return $this->post_id;
367
+ }
368
+
369
+ /**
370
+ * Sets the ID of the post
371
+ *
372
+ * @param int $post_id The new ID .
373
+ */
374
+ public function set_post_id( $post_id ) {
375
+ $this->post_id = intval( $post_id );
376
+ }
377
+
378
+ /**
379
+ * Render method .
380
+ */
381
+ public function render() {
382
+
383
+ if ( '/' === $this->url || empty( $this->url ) ) {
384
+ return '';
385
+ }
386
+
387
+ $r = '';
388
+ $r .= '\\t<url>\\n';
389
+ $r .= '\\t\\t<loc>' . $this->escape_xml( esc_url_raw( $this->url ) ) . '</loc>\\n';
390
+ if ( $this->last_mod > 0 ) {
391
+ $r .= '\\t\\t<lastmod>' . gmdate( 'Y-m-d\TH:i:s+00:00', $this->last_mod ) . '</lastmod>\\n';
392
+ }
393
+ if ( ! empty( $this->change_freq ) ) {
394
+ $r .= '\\t\\t<changefreq>' . $this->change_freq . '</changefreq>\\n';
395
+ }
396
+ if ( false !== $this->priority && '' !== $this->priority ) {
397
+ $r .= '\\t\\t<priority>' . number_format( $this->priority, 1 ) . '</priority>\\n';
398
+ }
399
+ $r .= '\\t</url>\\n';
400
+ return $r;
401
+ }
402
+
403
+ /**
404
+ * Escape xml .
405
+ *
406
+ * @param string $string .
407
+ */
408
+ protected function escape_xml( $string ) {
409
+ return str_replace( array( '&', '"', '\'', '<', '>' ), array( '&amp;', '&quot;', '&apos;', '&lt;', '&gt;' ), $string );
410
+ }
411
+ }
412
+
413
+ /**
414
+ * Represents an XML entry, like definitions
415
+ *
416
+ * @author Arne Brachhold
417
+ * @package sitemap
418
+ * @since 3.0
419
+ */
420
+ class GoogleSitemapGeneratorXmlEntry {
421
+
422
+ /**
423
+ * Xml
424
+ *
425
+ * @var string $_xml .
426
+ */
427
+ protected $xml;
428
+
429
+ /**
430
+ * Constructor function
431
+ *
432
+ * @param string $xml .
433
+ */
434
+ public function __construct( $xml ) {
435
+ $this->xml = $xml;
436
+ }
437
+
438
+ /**
439
+ * Render function
440
+ */
441
+ public function render() {
442
+ return $this->xml;
443
+ }
444
+ }
445
+
446
+ /**
447
+ * Represents an comment
448
+ *
449
+ * @author Arne Brachhold
450
+ * @package sitemap
451
+ * @since 3.0
452
+ * @uses GoogleSitemapGeneratorXmlEntry
453
+ */
454
+ class GoogleSitemapGeneratorDebugEntry extends GoogleSitemapGeneratorXmlEntry {
455
+ /**
456
+ * Render function
457
+ */
458
+ public function render() {
459
+ return '<!-- ' . $this->xml . " -->\n";
460
+ }
461
+ }
462
+
463
+ /**
464
+ * Represents an item in the sitemap
465
+ *
466
+ * @author Arne Brachhold
467
+ * @package sitemap
468
+ * @since 3.0
469
+ */
470
+ class GoogleSitemapGeneratorSitemapEntry {
471
+
472
+ /**
473
+ * Sets the URL or the relative path to the site dir of the page .
474
+ *
475
+ * @var string $_url Sets the URL or the relative path to the site dir of the page
476
+ */
477
+ protected $url;
478
+
479
+ /**
480
+ * Sets the last_mod date as a UNIX timestamp. .
481
+ *
482
+ * @var int $_last_mod Sets the last_mod date as a UNIX timestamp.
483
+ */
484
+ protected $last_mod;
485
+
486
+ /**
487
+ * Returns the URL of the page
488
+ *
489
+ * @return string The URL
490
+ */
491
+ public function get_url() {
492
+ return $this->url;
493
+ }
494
+
495
+ /**
496
+ * Sets the URL of the page
497
+ *
498
+ * @param string $url The new URL .
499
+ */
500
+ public function set_url( $url ) {
501
+ $this->url = (string) $url;
502
+ }
503
+
504
+ /**
505
+ * Returns the last mod of the page
506
+ *
507
+ * @return int The lastmod value in seconds
508
+ */
509
+ public function get_last_mod() {
510
+ return $this->last_mod;
511
+ }
512
+
513
+ /**
514
+ * Sets the last mod of the page
515
+ *
516
+ * @param int $last_mod The lastmod of the page .
517
+ */
518
+ public function set_last_mod( $last_mod ) {
519
+ $this->last_mod = intval( $last_mod );
520
+ }
521
+ /**
522
+ * Constructor
523
+ *
524
+ * @param string $url .
525
+ * @param int $last_mod .
526
+ */
527
+ public function __construct( $url = '', $last_mod = 0 ) {
528
+ $this->set_url( $url );
529
+ $this->set_last_mod( $last_mod );
530
+ }
531
+ /**
532
+ * Render function
533
+ */
534
+ public function render() {
535
+
536
+ if ( '/' === $this->url || empty( $this->url ) ) {
537
+ return '';
538
+ }
539
+
540
+ $r = '';
541
+ $r .= '\\t<sitemap>\\n';
542
+ $r .= '\\t\\t<loc>' . $this->escape_xml( esc_url_raw( $this->url ) ) . '</loc>\\n';
543
+ if ( $this->last_mod > 0 ) {
544
+ $r .= '\\t\\t<lastmod>' . gmdate( 'Y-m-d\TH:i:s+00:00', $this->last_mod ) . '</lastmod>\\n';
545
+ }
546
+ $r .= '\\t</sitemap>\\n';
547
+ return $r;
548
+ }
549
+
550
+ /**
551
+ * Escape_xml function .
552
+ *
553
+ * @param string $string .
554
+ */
555
+ protected function escape_xml( $string ) {
556
+ return str_replace( array( '&', '\'', '\'', '<', '>' ), array( '&amp;', '&quot;', '&apos;', '&lt;', '&gt;' ), $string );
557
+ }
558
+ }
559
+
560
+ /**
561
+ * Interface for all priority providers
562
+ *
563
+ * @author Arne Brachhold
564
+ * @package sitemap
565
+ * @since 3.0
566
+ */
567
+ interface Google_Sitemap_Generator_Prio_Provider_Base {
568
+
569
+ /**
570
+ * Initializes a new priority provider
571
+ *
572
+ * @param int $total_comments int The total number of comments of all posts .
573
+ * @param int $total_posts int The total number of posts .
574
+ * @since 3.0
575
+ */
576
+ public function __construct( $total_comments, $total_posts );
577
+
578
+ /**
579
+ * Returns the (translated) name of this priority provider
580
+ *
581
+ * @since 3.0
582
+ * @return string The translated name
583
+ */
584
+ public static function get_name();
585
+
586
+ /**
587
+ * Returns the (translated) description of this priority provider
588
+ *
589
+ * @since 3.0
590
+ * @return string The translated description
591
+ */
592
+ public static function get_description();
593
+
594
+ /**
595
+ * Returns the priority for a specified post
596
+ *
597
+ * @param int $post_id int The ID of the post .
598
+ * @param int $comment_count int The number of comments for this post .
599
+ * @since 3.0
600
+ * @return int The calculated priority
601
+ */
602
+ public function get_post_priority( $post_id, $comment_count );
603
+ }
604
+
605
+ /**
606
+ * Priority Provider which calculates the priority based on the number of comments
607
+ *
608
+ * @author Arne Brachhold
609
+ * @package sitemap
610
+ * @since 3.0
611
+ */
612
+ class GoogleSitemapGeneratorPrioByCountProvider implements Google_Sitemap_Generator_Prio_Provider_Base {
613
+
614
+ /**
615
+ * The total number of comments of all posts .
616
+ *
617
+ * @var int $total_comments The total number of comments of all posts
618
+ */
619
+ protected $total_comments = 0;
620
+
621
+ /**
622
+ * The total number of posts .
623
+ *
624
+ * @var int $total_posts The total number of posts
625
+ */
626
+ protected $total_posts = 0;
627
+
628
+ /**
629
+ * Initializes a new priority provider
630
+ *
631
+ * @param int $total_comments int The total number of comments of all posts .
632
+ * @param int $total_posts int The total number of posts .
633
+ * @since 3.0
634
+ */
635
+ public function __construct( $total_comments, $total_posts ) {
636
+ $this->total_comments = $total_comments;
637
+ $this->total_posts = $total_posts;
638
+ }
639
+
640
+ /**
641
+ * Returns the (translated) name of this priority provider
642
+ *
643
+ * @since 3.0
644
+ * @return string The translated name
645
+ */
646
+ public static function get_name() {
647
+ return __( 'Comment Count', 'sitemap' );
648
+ }
649
+
650
+ /**
651
+ * Returns the (translated) description of this priority provider
652
+ *
653
+ * @since 3.0
654
+ * @return string The translated description
655
+ */
656
+ public static function get_description() {
657
+ return __( 'Uses the number of comments of the post to calculate the priority', 'sitemap' );
658
+ }
659
+
660
+ /**
661
+ * Returns the priority for a specified post
662
+ *
663
+ * @param int $post_id int The ID of the post .
664
+ * @param int $comment_count int The number of comments for this post .
665
+ * @since 3.0
666
+ * @return int The calculated priority
667
+ */
668
+ public function get_post_priority( $post_id, $comment_count ) {
669
+ if ( $this->total_comments > 0 && $comment_count > 0 ) {
670
+ return round( ( $comment_count * 100 / $this->total_comments ) / 100, 1 );
671
+ } else {
672
+ return 0;
673
+ }
674
+ }
675
+ }
676
+
677
+ /**
678
+ * Priority Provider which calculates the priority based on the average number of comments
679
+ *
680
+ * @author Arne Brachhold
681
+ * @package sitemap
682
+ * @since 3.0
683
+ */
684
+ class GoogleSitemapGeneratorPrioByAverageProvider implements Google_Sitemap_Generator_Prio_Provider_Base {
685
+
686
+
687
+ /**
688
+ * The total number of comments of all posts .
689
+ *
690
+ * @var int $total_comments The total number of comments of all posts
691
+ */
692
+ protected $total_comments = 0;
693
+
694
+ /**
695
+ * The total number of posts .
696
+ *
697
+ * @var int $total_comments The total number of posts
698
+ */
699
+ protected $total_posts = 0;
700
+
701
+ /**
702
+ * The average number of comments per post .
703
+ *
704
+ * @var int $average The average number of comments per post
705
+ */
706
+ protected $average = 0.0;
707
+
708
+ /**
709
+ * Returns the (translated) name of this priority provider
710
+ *
711
+ * @since 3.0
712
+ * @return string The translated name
713
+ */
714
+ public static function get_name() {
715
+ return __( 'Comment Average', 'sitemap' );
716
+ }
717
+
718
+ /**
719
+ * Returns the (translated) description of this priority provider
720
+ *
721
+ * @since 3.0
722
+ * @return string The translated description
723
+ */
724
+ public static function get_description() {
725
+ return __( 'Uses the average comment count to calculate the priority', 'sitemap' );
726
+ }
727
+
728
+ /**
729
+ * Initializes a new priority provider which calculates the post priority based on the average number of comments
730
+ *
731
+ * @param int $total_comments int The total number of comments of all posts .
732
+ * @param int $total_posts int The total number of posts .
733
+ * @since 3.0
734
+ */
735
+ public function __construct( $total_comments, $total_posts ) {
736
+
737
+ $this->total_comments = $total_comments;
738
+ $this->total_posts = $total_posts;
739
+
740
+ if ( $this->total_comments > 0 && $this->total_posts > 0 ) {
741
+ $this->average = (float) $this->total_comments / $this->total_posts;
742
+ }
743
+ }
744
+
745
+ /**
746
+ * Returns the priority for a specified post
747
+ *
748
+ * @param int $post_id int The ID of the post .
749
+ * @param int $comment_count int The number of comments for this post .
750
+ * @since 3.0
751
+ * @return int The calculated priority
752
+ */
753
+ public function get_post_priority( $post_id, $comment_count ) {
754
+
755
+ // Do not divide by zero !
756
+ if ( 0 === $this->average ) {
757
+ if ( $comment_count > 0 ) {
758
+ $priority = 1;
759
+ } else {
760
+ $priority = 0;
761
+ }
762
+ } else {
763
+ $priority = $comment_count / $this->average;
764
+ if ( $priority > 1 ) {
765
+ $priority = 1;
766
+ } elseif ( $priority < 0 ) {
767
+ $priority = 0;
768
+ }
769
+ }
770
+
771
+ return round( $priority, 1 );
772
+ }
773
+ }
774
+
775
+ /**
776
+ * Class to generate a sitemaps.org Sitemaps compliant sitemap of a WordPress site.
777
+ *
778
+ * @package sitemap
779
+ * @author Arne Brachhold
780
+ * @since 3.0
781
+ */
782
+ final class GoogleSitemapGenerator {
783
+ /**
784
+ * The unserialized array with the stored options .
785
+ *
786
+ * @var array The unserialized array with the stored options
787
+ */
788
+ private $options = array();
789
+
790
+ /**
791
+ * The saved additional pages .
792
+ *
793
+ * @var array The saved additional pages
794
+ */
795
+ private $pages = array();
796
+
797
+ /**
798
+ * The values and names of the change frequencies .
799
+ *
800
+ * @var array The values and names of the change frequencies
801
+ */
802
+ private $freq_names = array();
803
+
804
+ /**
805
+ * A list of class names which my be called for priority calculation .
806
+ *
807
+ * @var array A list of class names which my be called for priority calculation
808
+ */
809
+ private $prio_providers = array();
810
+
811
+ /**
812
+ * True if init complete (options loaded etc) .
813
+ *
814
+ * @var bool True if init complete (options loaded etc)
815
+ */
816
+ private $is_initiated = false;
817
+
818
+ /**
819
+ * Defines if the sitemap building process is active at the moment .
820
+ *
821
+ * @var bool Defines if the sitemap building process is active at the moment
822
+ */
823
+ private $is_active = false;
824
+
825
+ /**
826
+ * Holds options like output format and compression for the current request .
827
+ *
828
+ * @var array Holds options like output format and compression for the current request
829
+ */
830
+ private $build_options = array();
831
+
832
+ /**
833
+ * Holds the user interface object
834
+ *
835
+ * @since 3.1.1
836
+ * @var GoogleSitemapGeneratorUI
837
+ */
838
+ private $ui = null;
839
+
840
+ /**
841
+ * Defines if the simulation mode is on. In this case, data is not echoed but saved instead.
842
+ *
843
+ * @var boolean
844
+ */
845
+ private $sim_mode = false;
846
+
847
+ /**
848
+ * Holds the data if simulation mode is on
849
+ *
850
+ * @var array
851
+ */
852
+ private $sim_data = array(
853
+ 'sitemaps' => array(),
854
+ 'content' => array(),
855
+ );
856
+
857
+ /**
858
+ * Defines if the options have been loaded.
859
+ *
860
+ * @var bool Defines if the options have been loaded
861
+ */
862
+ private $options_loaded = false;
863
+
864
+
865
+ /*************************************** CONSTRUCTION AND INITIALIZING ***************************************/
866
+
867
+ /**
868
+ * Initializes a new Google Sitemap Generator
869
+ *
870
+ * @since 4.0
871
+ */
872
+ private function __construct() {
873
+ }
874
+
875
+ /**
876
+ * Returns the instance of the Sitemap Generator
877
+ *
878
+ * @since 3.0
879
+ * @return GoogleSitemapGenerator The instance or null if not available.
880
+ */
881
+ public static function get_instance() {
882
+ if ( isset( $GLOBALS['sm_instance'] ) ) {
883
+ return $GLOBALS['sm_instance'];
884
+ } else {
885
+ return null;
886
+ }
887
+ }
888
+
889
+ /**
890
+ * Enables the Google Sitemap Generator and registers the WordPress hooks
891
+ *
892
+ * @since 3.0
893
+ */
894
+ public static function enable() {
895
+ if ( ! isset( $GLOBALS['sm_instance'] ) ) {
896
+ $GLOBALS['sm_instance'] = new GoogleSitemapGenerator();
897
+ }
898
+ }
899
+
900
+ /**
901
+ * Loads up the configuration and validates the prioity providers
902
+ *
903
+ * This method is only called if the sitemaps needs to be build or the admin page is displayed.
904
+ *
905
+ * @since 3.0
906
+ */
907
+ public function initate() {
908
+ if ( ! $this->is_initiated ) {
909
+
910
+ load_plugin_textdomain( 'sitemap', false, dirname( plugin_basename( __FILE__ ) ) . '/lang' );
911
+
912
+ $this->freq_names = array(
913
+ 'always' => __( 'Always', 'sitemap' ),
914
+ 'hourly' => __( 'Hourly', 'sitemap' ),
915
+ 'daily' => __( 'Daily', 'sitemap' ),
916
+ 'weekly' => __( 'Weekly', 'sitemap' ),
917
+ 'monthly' => __( 'Monthly', 'sitemap' ),
918
+ 'yearly' => __( 'Yearly', 'sitemap' ),
919
+ 'never' => __( 'Never', 'sitemap' ),
920
+ );
921
+
922
+ $this->load_options();
923
+ $this->load_pages();
924
+
925
+ // Register our own priority providers.
926
+ add_filter( 'sm_add_prio_provider', array( $this, 'add_default_prio_providers' ) );
927
+
928
+ // Let other plugins register their providers.
929
+ $r = apply_filters( 'sm_add_prio_provider', $this->prio_providers );
930
+
931
+ // Check if no plugin return null.
932
+ if ( null !== $r ) {
933
+ $this->prio_providers = $r;
934
+ }
935
+
936
+ $this->validate_prio_providers();
937
+
938
+ $this->is_initiated = true;
939
+ }
940
+ }
941
+
942
+
943
+ /*************************************** VERSION AND LINK HELPERS ***************************************/
944
+
945
+ /**
946
+ * Returns the version of the generator
947
+ *
948
+ * @since 3.0
949
+ * @return int The version
950
+ */
951
+ public static function get_version() {
952
+ return GoogleSitemapGeneratorLoader::get_version();
953
+ }
954
+
955
+ /**
956
+ * Returns the SVN version of the generator
957
+ *
958
+ * @since 4.0
959
+ * @return string The SVN version string
960
+ */
961
+ public static function get_svn_version() {
962
+ return GoogleSitemapGeneratorLoader::get_svn_version();
963
+ }
964
+
965
+ /**
966
+ * Returns a link pointing to a specific page of the authors website
967
+ *
968
+ * @since 3.0
969
+ * @param string $redir string The to link to .
970
+ * @return string The full url
971
+ */
972
+ public static function get_redirect_link( $redir ) {
973
+ return trailingslashit( 'http://url.auctollo.com/' . $redir );
974
+ }
975
+
976
+ /**
977
+ * Returns a link pointing back to the plugin page in WordPress
978
+ *
979
+ * @since 3.0
980
+ * @param string $extra .
981
+ * @return string The full url
982
+ */
983
+ public static function get_back_link( $extra = '' ) {
984
+ global $wp_version;
985
+ $url = admin_url( 'options-general.php?page=' . GoogleSitemapGeneratorLoader::get_base_name() . $extra );
986
+ return $url;
987
+ }
988
+
989
+ /**
990
+ * Converts a mysql datetime value into a unix timestamp
991
+ *
992
+ * @param string $mysql_date_time string The timestamp in the mysql datetime format .
993
+ * @return int The time in seconds
994
+ */
995
+ public static function get_timestamp_from_my_sql( $mysql_date_time ) {
996
+ list( $date, $hours) = explode( ' ', $mysql_date_time );
997
+ list( $year, $month, $day) = explode( '-', $date );
998
+ list( $hour, $min, $sec) = explode( ':', $hours );
999
+ return mktime( intval( $hour ), intval( $min ), intval( $sec ), intval( $month ), intval( $day ), intval( $year ) );
1000
+ }
1001
+
1002
+
1003
+ /*************************************** SIMPLE GETTERS ***************************************/
1004
+
1005
+ /**
1006
+ * Returns the names for the frequency values
1007
+ *
1008
+ * @return array
1009
+ */
1010
+ public function get_freq_names() {
1011
+ return $this->freq_names;
1012
+ }
1013
+
1014
+ /**
1015
+ * Returns if the site is running in multi site mode
1016
+ *
1017
+ * @since 4.0
1018
+ * @return bool
1019
+ */
1020
+ public function is_multi_site() {
1021
+ return ( function_exists( 'is_multisite' ) && is_multisite() );
1022
+ }
1023
+
1024
+ /**
1025
+ * Returns if the sitemap building process is currently active
1026
+ *
1027
+ * @since 3.0
1028
+ * @return bool true if active
1029
+ */
1030
+ public function is_active() {
1031
+ $inst = self::get_instance();
1032
+ return ( null !== $inst && $inst->is_active );
1033
+ }
1034
+
1035
+ /**
1036
+ * Returns if the compressed sitemap was activated
1037
+ *
1038
+ * @since 3.0b8
1039
+ * @return true if compressed
1040
+ */
1041
+ public function is_gzip_enabled() {
1042
+ return ( function_exists( 'gzwrite' ) && $this->get_option( 'b_autozip' ) );
1043
+ }
1044
+
1045
+ /**
1046
+ * Returns if the XML Dom and XSLT functions are enabled
1047
+ *
1048
+ * @since 4.0b1
1049
+ * @return true if compressed
1050
+ */
1051
+ public function is_xsl_enabled() {
1052
+ return ( class_exists( 'DomDocument' ) && class_exists( 'XSLTProcessor' ) );
1053
+ }
1054
+
1055
+ /**
1056
+ * Returns if Nginx is used as the server software
1057
+ *
1058
+ * @since 4.0.3
1059
+ *
1060
+ * @return bool
1061
+ */
1062
+ public function is_nginx() {
1063
+ if ( isset( $_SERVER['SERVER_SOFTWARE'] ) && stristr( sanitize_text_field( wp_unslash( $_SERVER['SERVER_SOFTWARE'] ) ), 'nginx' ) !== false ) {
1064
+ return true;
1065
+ }
1066
+ return false;
1067
+ }
1068
+
1069
+
1070
+
1071
+ /*************************************** TAXONOMIES AND CUSTOM POST TYPES ***************************************/
1072
+
1073
+ /**
1074
+ * Returns if this version of WordPress supports the new taxonomy system
1075
+ *
1076
+ * @since 3.0b8
1077
+ * @return true if supported
1078
+ */
1079
+ public function is_taxonomy_supported() {
1080
+ return ( function_exists( 'get_taxonomy' ) && function_exists( 'get_terms' ) && function_exists( 'get_taxonomies' ) );
1081
+ }
1082
+
1083
+ /**
1084
+ * Returns the list of custom taxonomies. These are basically all taxonomies without categories and post tags
1085
+ *
1086
+ * @since 3.1.7
1087
+ * @return array Array of names of user-defined taxonomies
1088
+ */
1089
+ public function get_custom_taxonomies() {
1090
+ $taxonomies = get_taxonomies( array( 'public' => 1 ) );
1091
+ return array_diff( $taxonomies, array( 'category', 'product_cat', 'post_tag', 'nav_menu', 'link_category', 'post_format' ) );
1092
+ }
1093
+
1094
+ /**
1095
+ * Returns if this version of WordPress supports custom post types
1096
+ *
1097
+ * @since 3.2.5
1098
+ * @return true if supported
1099
+ */
1100
+ public function is_custom_post_types_supported() {
1101
+ return ( function_exists( 'get_post_types' ) && function_exists( 'register_post_type' ) );
1102
+ }
1103
+
1104
+ /**
1105
+ * Returns the list of custom post types. These are all custom post types except post, page and attachment
1106
+ *
1107
+ * @since 3.2.5
1108
+ * @return array Array of custom post types as per get_post_types
1109
+ */
1110
+ public function get_custom_post_types() {
1111
+ $post_types = get_post_types( array( 'public' => 1 ) );
1112
+ $post_types = array_diff( $post_types, array( 'post', 'page', 'attachment' ) );
1113
+ return $post_types;
1114
+ }
1115
+
1116
+
1117
+ /**
1118
+ * Returns the list of active post types, built-in and custom ones.
1119
+ *
1120
+ * @since 4.0b5
1121
+ * @return array Array of custom post types as per get_post_types
1122
+ */
1123
+ public function get_active_post_types() {
1124
+
1125
+ $cache_key = __CLASS__ . '::get_active_post_types';
1126
+
1127
+ $active_post_types = wp_cache_get( $cache_key, 'sitemap' );
1128
+
1129
+ if ( false === $active_post_types ) {
1130
+ $all_post_types = get_post_types();
1131
+ $enabled_post_types = $this->get_option( 'in_customtypes' );
1132
+ if ( $this->get_option( 'in_posts' ) ) {
1133
+ $enabled_post_types[] = 'post';
1134
+ }
1135
+ if ( $this->get_option( 'in_pages' ) ) {
1136
+ $enabled_post_types[] = 'page';
1137
+ }
1138
+
1139
+ $active_post_types = array();
1140
+ foreach ( $enabled_post_types as $post_type ) {
1141
+ if ( ! empty( $post_type ) && in_array( $post_type, $all_post_types, true ) ) {
1142
+ $active_post_types[] = $post_type;
1143
+ }
1144
+ }
1145
+
1146
+ wp_cache_set( $cache_key, $active_post_types, 'sitemap', 20 );
1147
+ }
1148
+
1149
+ return $active_post_types;
1150
+ }
1151
+
1152
+ /**
1153
+ * Returns an array with all excluded post IDs
1154
+ *
1155
+ * @since 4.0b11
1156
+ * @return int[] Array with excluded post IDs
1157
+ */
1158
+ public function get_excluded_post_i_ds() {
1159
+
1160
+ $excludes = (array) $this->get_option( 'b_exclude' );
1161
+
1162
+ // Exclude front page page if defined .
1163
+ if ( get_option( 'show_on_front' ) === 'page' && get_option( 'page_on_front' ) ) {
1164
+ $excludes[] = get_option( 'page_on_front' );
1165
+ return $excludes;
1166
+ }
1167
+ return array_filter( array_map( 'intval', $excludes ), array( $this, 'is_greater_zero' ) );
1168
+ }
1169
+
1170
+ /**
1171
+ * Robots disallowed
1172
+ */
1173
+ public function robots_disallowed() {
1174
+
1175
+ // parse url to retrieve host and path.
1176
+ $parsed = home_url();
1177
+ $rules = array();
1178
+
1179
+ // location of robots.txt file.
1180
+ try {
1181
+ if ( file_exists( $parsed . '/robots.txt' ) ) {
1182
+ $robotstxt = file( $parsed . '/robots.txt' );
1183
+
1184
+ } elseif ( file_exists( ABSPATH . '/robots.txt' ) ) {
1185
+ // if there isn't a robots, then we're allowed in.
1186
+ $robotstxt = file( ABSPATH . '/robots.txt' );
1187
+
1188
+ }
1189
+ } catch ( Exception $e ) {
1190
+ return $rules;
1191
+ }
1192
+
1193
+ if ( empty( $robotstxt ) ) {
1194
+ return $rules;
1195
+ }
1196
+
1197
+ foreach ( $robotstxt as $line ) {
1198
+ $line = trim( $line );
1199
+ // Skip blank lines .
1200
+ if ( ! $line ) {
1201
+ continue;
1202
+ }
1203
+
1204
+ if ( preg_match( '/^\s*Disallow:(.*)/i', $line, $regs ) ) {
1205
+
1206
+ // An empty rule implies full access - no further tests required .
1207
+ if ( ! $regs[1] ) {
1208
+ continue;
1209
+ }
1210
+
1211
+ // Add rules that apply to array for testing .
1212
+ $id = url_to_postid( home_url( trim( $regs[1] ) ) );
1213
+ if ( $id > 0 ) {
1214
+ $rules[] = $id;
1215
+ }
1216
+ }
1217
+ }
1218
+
1219
+ return $rules;
1220
+ }
1221
+ /**
1222
+ * Returns an array with all excluded category IDs.
1223
+ *
1224
+ * @since 4.0b11
1225
+ * @return int[] Array with excluded category IDs
1226
+ */
1227
+ public function get_excluded_category_i_ds() {
1228
+ $excl_cats = (array) $this->get_option( 'b_exclude_cats' );
1229
+ return array_filter( array_map( 'intval', $excl_cats ), array( $this, 'is_greater_zero' ) );
1230
+ }
1231
+
1232
+ /*************************************** PRIORITY PROVIDERS ***************************************/
1233
+
1234
+ /**
1235
+ * Returns the list of PriorityProviders
1236
+ *
1237
+ * @return array
1238
+ */
1239
+ public function get_prio_providers() {
1240
+ return $this->prio_providers;
1241
+ }
1242
+
1243
+ /**
1244
+ * Adds the default Priority Providers to the provider list
1245
+ *
1246
+ * @since 3.0
1247
+ * @param array $providers .
1248
+ * @return array
1249
+ */
1250
+ public function add_default_prio_providers( $providers ) {
1251
+ array_push( $providers, 'GoogleSitemapGeneratorPrioByCountProvider' );
1252
+ array_push( $providers, 'GoogleSitemapGeneratorPrioByAverageProvider' );
1253
+ if ( class_exists( 'ak_popularity_contest' ) ) {
1254
+ array_push( $providers, 'GoogleSitemapGeneratorPrioByPopularityContestProvider' );
1255
+ }
1256
+ return $providers;
1257
+ }
1258
+
1259
+ /**
1260
+ * Validates all given Priority Providers by checking them for required methods and existence
1261
+ *
1262
+ * @since 3.0
1263
+ */
1264
+ private function validate_prio_providers() {
1265
+ $valid_providers = array();
1266
+ $len = count( $this->prio_providers );
1267
+ for ( $i = 0; $i < $len; $i++ ) {
1268
+ if ( class_exists( $this->prio_providers[ $i ] ) ) {
1269
+ if ( class_implements( $this->prio_providers[ $i ], 'Google_Sitemap_Generator_Prio_Provider_Base' ) ) {
1270
+ array_push( $valid_providers, $this->prio_providers[ $i ] );
1271
+ }
1272
+ }
1273
+ }
1274
+ $this->prio_providers = $valid_providers;
1275
+
1276
+ if ( ! $this->get_option( 'b_prio_provider' ) ) {
1277
+ if ( ! in_array( $this->get_option( 'b_prio_provider' ), $this->prio_providers, true ) ) {
1278
+ $this->set_option( 'b_prio_provider', '' );
1279
+ }
1280
+ }
1281
+ }
1282
+
1283
+
1284
+ /*************************************** COMMENT HANDLING FOR PRIO. PROVIDERS ***************************************/
1285
+
1286
+ /**
1287
+ * Retrieves the number of comments of a post in a asso. array
1288
+ * The key is the post_id, the value the number of comments
1289
+ *
1290
+ * @since 3.0
1291
+ * @return array An array with post_ids and their comment count
1292
+ */
1293
+ public function get_comments() {
1294
+ // @var $wpdb wpdb .
1295
+ global $wpdb;
1296
+ $comments = array();
1297
+
1298
+ // Query comments and add them into the array .
1299
+ $comment_res = $wpdb->get_results( 'SELECT `comment_post_ID` as `post_id`, COUNT( comment_ID ) as `comment_count` FROM `' . $wpdb->comments . '` WHERE `comment_approved`=\'1\' GROUP BY `comment_post_ID`' ); // db call ok; no-cache ok.
1300
+ if ( $comment_res ) {
1301
+ foreach ( $comment_res as $comment ) {
1302
+ $comments[ $comment->post_id ] = $comment->comment_count;
1303
+ }
1304
+ }
1305
+ return $comments;
1306
+ }
1307
+
1308
+ /**
1309
+ * Calculates the full number of comments from an sm_getComments() generated array
1310
+ *
1311
+ * @since 3.0
1312
+ * @param object $comments array The Array with posts and c0mment count .
1313
+ * @see sm_getComments
1314
+ * @return int The full number of comments
1315
+ */
1316
+ public function get_comment_count( $comments ) {
1317
+ $comment_count = 0;
1318
+ foreach ( $comments as $k => $v ) {
1319
+ $comment_count += $v;
1320
+ }
1321
+ return $comment_count;
1322
+ }
1323
+
1324
+
1325
+ /*************************************** OPTION HANDLING ***************************************/
1326
+
1327
+ /**
1328
+ * Sets up the default configuration
1329
+ *
1330
+ * @since 3.0
1331
+ */
1332
+ public function init_options() {
1333
+
1334
+ $this->options = array();
1335
+ $this->options['sm_b_prio_provider'] = 'GoogleSitemapGeneratorPrioByCountProvider'; // Provider for automatic priority calculation .
1336
+ $this->options['sm_b_ping'] = true; // Auto ping Google .
1337
+ $this->options['sm_b_stats'] = false; // Send anonymous stats .
1338
+ $this->options['sm_b_pingmsn'] = true; // Auto ping MSN .
1339
+ $this->options['sm_b_autozip'] = true; // Try to gzip the output .
1340
+ $this->options['sm_b_memory'] = ''; // Set Memory Limit (e.g. 16M) .
1341
+ $this->options['sm_b_time'] = -1; // Set time limit in seconds, 0 for unlimited, -1 for disabled .
1342
+ $this->options['sm_b_style_default'] = true; // Use default style .
1343
+ $this->options['sm_b_style'] = ''; // Include a stylesheet in the XML .
1344
+ $this->options['sm_b_baseurl'] = ''; // The base URL of the sitemap .
1345
+ $this->options['sm_b_robots'] = true; // Add sitemap location to WordPress' virtual robots.txt file .
1346
+ $this->options['sm_b_html'] = true; // Include a link to a html version of the sitemap in the XML sitemap .
1347
+ $this->options['sm_b_exclude'] = array(); // List of post / page IDs to exclude .
1348
+ $this->options['sm_b_exclude_cats'] = array(); // List of post / page IDs to exclude .
1349
+
1350
+ $this->options['sm_in_home'] = true; // Include homepage .
1351
+ $this->options['sm_in_posts'] = true; // Include posts .
1352
+ $this->options['sm_in_posts_sub'] = false; // Include post pages (<!--nextpage--> tag) .
1353
+ $this->options['sm_in_pages'] = true; // Include static pages .
1354
+ $this->options['sm_in_cats'] = false; // Include categories .
1355
+ $this->options['sm_product_tags'] = true; // Hide product tags in sitemap .
1356
+ $this->options['sm_in_product_cat'] = false; // Include product categories .
1357
+ $this->options['sm_in_arch'] = false; // Include archives .
1358
+ $this->options['sm_in_auth'] = false; // Include author pages .
1359
+ $this->options['sm_in_tags'] = false; // Include tag pages .
1360
+ $this->options['sm_in_tax'] = array(); // Include additional taxonomies .
1361
+ $this->options['sm_in_customtypes'] = array(); // Include custom post types .
1362
+ $this->options['sm_in_lastmod'] = true; // Include the last modification date .
1363
+ $this->options['sm_b_sitemap_name'] = 'sitemap'; // Name of custom sitemap.
1364
+ $this->options['sm_cf_home'] = 'daily'; // Change frequency of the homepage .
1365
+ $this->options['sm_cf_posts'] = 'monthly'; // Change frequency of posts .
1366
+ $this->options['sm_cf_pages'] = 'weekly'; // Change frequency of static pages .
1367
+ $this->options['sm_cf_cats'] = 'weekly'; // Change frequency of categories .
1368
+ $this->options['sm_cf_product_cat'] = 'weekly'; // Change frequency of categories .
1369
+ $this->options['sm_cf_auth'] = 'weekly'; // Change frequency of author pages .
1370
+ $this->options['sm_cf_arch_curr'] = 'daily'; // Change frequency of the current archive (this month) .
1371
+ $this->options['sm_cf_arch_old'] = 'yearly'; // Change frequency of older archives .
1372
+ $this->options['sm_cf_tags'] = 'weekly'; // Change frequency of tags .
1373
+
1374
+ $this->options['sm_pr_home'] = 1.0; // Priority of the homepage .
1375
+ $this->options['sm_pr_posts'] = 0.6; // Priority of posts (if auto prio is disabled) .
1376
+ $this->options['sm_pr_posts_min'] = 0.2; // Minimum Priority of posts, even if autocalc is enabled .
1377
+ $this->options['sm_pr_pages'] = 0.6; // Priority of static pages .
1378
+ $this->options['sm_pr_cats'] = 0.3; // Priority of categories .
1379
+ $this->options['sm_pr_product_cat'] = 0.3; // Priority of categories .
1380
+ $this->options['sm_pr_arch'] = 0.3; // Priority of archives .
1381
+ $this->options['sm_pr_auth'] = 0.3; // Priority of author pages .
1382
+ $this->options['sm_pr_tags'] = 0.3; // Priority of tags .
1383
+
1384
+ $this->options['sm_i_donated'] = false; // Did you donate? Thank you! :) .
1385
+ $this->options['sm_i_hide_donated'] = false; // And hide the thank you.. .
1386
+ $this->options['sm_i_install_date'] = time(); // The installation date .
1387
+ $this->options['sm_i_hide_survey'] = false; // Hide the survey note .
1388
+ $this->options['sm_i_hide_note'] = false; // Hide the note which appears after 30 days .
1389
+ $this->options['sm_i_hide_works'] = false; // Hide the 'works?' message which appears after 15 days .
1390
+ $this->options['sm_i_hide_donors'] = false; // Hide the list of donations .
1391
+ $this->options['sm_i_hash'] = substr( sha1( sha1( get_bloginfo( 'url' ) ) ), 0, 20 ); // Partial hash for GA stats, NOT identifiable! .
1392
+ $this->options['sm_i_tid'] = '';
1393
+ $this->options['sm_i_lastping'] = 0; // When was the last ping .
1394
+ $this->options['sm_i_supportfeed'] = true; // shows the support feed .
1395
+ $this->options['sm_i_supportfeed_cache'] = 0; // Last refresh of support feed .
1396
+ $this->options['sm_links_page'] = 10; // Link per page support with default value 10. .
1397
+ }
1398
+
1399
+ /**
1400
+ * Loads the configuration from the database
1401
+ *
1402
+ * @since 3.0
1403
+ */
1404
+ private function load_options() {
1405
+
1406
+ if ( $this->options_loaded ) {
1407
+ return;
1408
+ }
1409
+
1410
+ $this->init_options();
1411
+
1412
+ // First init default values, then overwrite it with stored values so we can add default
1413
+ // values with an update which get stored by the next edit.
1414
+ $stored_options = get_option( 'sm_options' );
1415
+
1416
+ if ( $stored_options && is_array( $stored_options ) ) {
1417
+ foreach ( $stored_options as $k => $v ) {
1418
+ if ( array_key_exists( $k, $this->options ) ) {
1419
+ $this->options[ $k ] = $v;
1420
+ }
1421
+ }
1422
+ } else {
1423
+ update_option( 'sm_options', $this->options ); // First time use, store default values .
1424
+ }
1425
+
1426
+ $this->options_loaded = true;
1427
+ }
1428
+
1429
+ /**
1430
+ * Returns the option value for the given key
1431
+ *
1432
+ * @since 3.0
1433
+ * @param string $key string The Configuration Key .
1434
+ * @return mixed The value
1435
+ */
1436
+ public function get_option( $key ) {
1437
+ $key = 'sm_' . $key;
1438
+ if ( array_key_exists( $key, $this->options ) ) {
1439
+ return $this->options[ $key ];
1440
+ } else {
1441
+ return null;
1442
+ }
1443
+ }
1444
+ /**
1445
+ * Get options .
1446
+ */
1447
+ public function get_options() {
1448
+ return $this->options;
1449
+ }
1450
+
1451
+ /**
1452
+ * Sets an option to a new value
1453
+ *
1454
+ * @since 3.0
1455
+ * @param string $key string The configuration key .
1456
+ * @param string $value mixed The new object .
1457
+ */
1458
+ public function set_option( $key, $value ) {
1459
+ if ( 0 !== strpos( $key, 'sm_' ) ) {
1460
+ $key = 'sm_' . $key;
1461
+ }
1462
+
1463
+ $this->options[ $key ] = $value;
1464
+ }
1465
+
1466
+ /**
1467
+ * Saves the options back to the database
1468
+ *
1469
+ * @since 3.0
1470
+ * @return bool true on success
1471
+ */
1472
+ public function save_options() {
1473
+ $oldvalue = get_option( 'sm_options' );
1474
+ if ( $oldvalue === $this->options ) {
1475
+ return true;
1476
+ } else {
1477
+ return update_option( 'sm_options', $this->options );
1478
+ }
1479
+ }
1480
+
1481
+ /**
1482
+ * Returns the additional pages
1483
+ *
1484
+ * @since 4.0
1485
+ * @return GoogleSitemapGeneratorPage[]
1486
+ */
1487
+ public function get_pages() {
1488
+ return $this->pages;
1489
+ }
1490
+
1491
+ /**
1492
+ * Returns the additional pages
1493
+ *
1494
+ * @since 4.0
1495
+ * @param array $pages .
1496
+ */
1497
+ public function set_pages( array $pages ) {
1498
+ $this->pages = $pages;
1499
+ }
1500
+
1501
+ /**
1502
+ * Loads the stored pages from the database
1503
+ *
1504
+ * @since 3.0
1505
+ */
1506
+ private function load_pages() {
1507
+ // @var $wpdb wpdb .
1508
+ global $wpdb;
1509
+
1510
+ $needs_update = false;
1511
+
1512
+ $pages_string = $wpdb->get_var( "SELECT option_value FROM $wpdb->options WHERE option_name = 'sm_cpages'" ); // db call ok; no-cache ok.
1513
+
1514
+ // Class sm_page was renamed with 3.0 -> rename it in serialized value for compatibility .
1515
+ if ( ! empty( $pages_string ) && strpos( $pages_string, 'sm_page' ) !== false ) {
1516
+ $pages_string = str_replace( 'O:7:\'sm_page\'', 'O:26:\'GoogleSitemapGeneratorPage\'', $pages_string );
1517
+ $needs_update = true;
1518
+ }
1519
+
1520
+ if ( ! empty( $pages_string ) ) {
1521
+ $storedpages = unserialize( $pages_string );
1522
+ $this->pages = $storedpages;
1523
+ } else {
1524
+ $this->pages = array();
1525
+ }
1526
+
1527
+ if ( $needs_update ) {
1528
+ $this->save_pages();
1529
+ }
1530
+ }
1531
+
1532
+ /**
1533
+ * Saved the additional pages back to the database
1534
+ *
1535
+ * @since 3.0
1536
+ * @return true on success
1537
+ */
1538
+ public function save_pages() {
1539
+ $oldvalue = get_option( 'sm_cpages' );
1540
+ if ( $oldvalue === $this->pages ) {
1541
+ return true;
1542
+ } else {
1543
+ delete_option( 'sm_cpages' );
1544
+ // Add the option, Note the autoload=false because when the autoload happens, our class GoogleSitemapGeneratorPage doesn't exist .
1545
+ add_option( 'sm_cpages', $this->pages, '', 'no' );
1546
+ return true;
1547
+ }
1548
+ }
1549
+
1550
+
1551
+ /*************************************** URL AND PATH FUNCTIONS ***************************************/
1552
+
1553
+ /**
1554
+ * Returns the URL to the directory where the plugin file is located
1555
+ *
1556
+ * @since 3.0b5
1557
+ * @return string The URL to the plugin directory
1558
+ */
1559
+ public function get_plugin_url() {
1560
+
1561
+ $url = trailingslashit( plugins_url( '', __FILE__ ) );
1562
+
1563
+ return $url;
1564
+ }
1565
+
1566
+ /**
1567
+ * Returns the path to the directory where the plugin file is located
1568
+ *
1569
+ * @since 3.0b5
1570
+ * @return string The path to the plugin directory
1571
+ */
1572
+ public function get_plugin_path() {
1573
+ $path = dirname( __FILE__ );
1574
+ return trailingslashit( str_replace( '\\', '/', $path ) );
1575
+ }
1576
+
1577
+ /**
1578
+ * Returns the URL to default XSLT style if it exists
1579
+ *
1580
+ * @since 3.0b5
1581
+ * @return string The URL to the default stylesheet, empty string if not available.
1582
+ */
1583
+ public function get_default_style() {
1584
+ $p = $this->get_plugin_path();
1585
+ if ( file_exists( $p . 'sitemap.xsl' ) ) {
1586
+ $url = $this->get_plugin_url();
1587
+ // If called over the admin area using HTTPS, the stylesheet would also be https url, even if the site frontend is not.
1588
+ if ( substr( get_bloginfo( 'url' ), 0, 5 ) !== 'https' && substr( $url, 0, 5 ) === 'https' ) {
1589
+ $url = 'http' . substr( $url, 5 );
1590
+ }
1591
+ if ( isset( $_SERVER['HTTP_HOST'] ) ) {
1592
+ $host = sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) );
1593
+ }
1594
+ $url = $this->get_xsl_url( $url, $host );
1595
+ return $url . 'sitemap.xsl';
1596
+ }
1597
+ return '';
1598
+ }
1599
+
1600
+ /**
1601
+ * Returns of Permalinks are used
1602
+ *
1603
+ * @return bool
1604
+ */
1605
+ public function is_using_permalinks() {
1606
+ // @var $wp_rewrite WP_Rewrite .
1607
+ global $wp_rewrite;
1608
+
1609
+ return $wp_rewrite->using_mod_rewrite_permalinks();
1610
+ }
1611
+
1612
+ /**
1613
+ * Registers the plugin specific rewrite rules
1614
+ *
1615
+ * Combined: sitemap(-+([a-zA-Z0-9_-]+))?\.(xml|html)(.gz)?$
1616
+ *
1617
+ * @since 4.0
1618
+ * @param string $wp_rules Array of existing rewrite rules.
1619
+ * @return Array An array containing the new rewrite rules.
1620
+ */
1621
+ public static function add_rewrite_rules( $wp_rules ) {
1622
+ $sm_sitemap_name = $GLOBALS['sm_instance']->get_option( 'b_sitemap_name' );
1623
+ $sm_rules = array(
1624
+ $sm_sitemap_name . '(-+([a-zA-Z0-9_-]+))?\.xml$' => 'index.php?xml_sitemap=params=$matches[2]',
1625
+ $sm_sitemap_name . '(-+([a-zA-Z0-9_-]+))?\.xml\.gz$' => 'index.php?xml_sitemap=params=$matches[2];zip=true',
1626
+ $sm_sitemap_name . '(-+([a-zA-Z0-9_-]+))?\.html$' => 'index.php?xml_sitemap=params=$matches[2];html=true',
1627
+ $sm_sitemap_name . '(-+([a-zA-Z0-9_-]+))?\.html.gz$' => 'index.php?xml_sitemap=params=$matches[2];html=true;zip=true',
1628
+ );
1629
+ return array_merge( $sm_rules, $wp_rules );
1630
+ }
1631
+
1632
+ /**
1633
+ * Adds the filters for wp rewrite rule adding
1634
+ *
1635
+ * @since 4.0
1636
+ * @uses add_filter()
1637
+ */
1638
+ public static function setup_rewrite_hooks() {
1639
+ add_filter( 'rewrite_rules_array', array( __CLASS__, 'add_rewrite_rules' ), 1, 1 );
1640
+ }
1641
+ /**
1642
+ * Removes the filters for wp rewrite rule adding
1643
+ *
1644
+ * @since 4.0
1645
+ * @uses remove_filter()
1646
+ */
1647
+ public static function remove_rewrite_hooks() {
1648
+ add_filter( 'rewrite_rules_array', array( __CLASS__, 'remove_rewrite_rules' ), 1, 1 );
1649
+ }
1650
+
1651
+ /**
1652
+ * Deregisters the plugin specific rewrite rules
1653
+ *
1654
+ * Combined: sitemap(-+([a-zA-Z0-9_-]+))?\.(xml|html)(.gz)?$
1655
+ *
1656
+ * @since 4.0
1657
+ * @param array $wp_rules Array of existing rewrite rules.
1658
+ * @return Array An array containing the new rewrite rules
1659
+ */
1660
+ public static function remove_rewrite_rules( $wp_rules ) {
1661
+ $sm_rules = array(
1662
+ 'sitemap(-+([a-zA-Z0-9_-]+))?\.xml$' => 'index.php?xml_sitemap=params=$matches[2]',
1663
+ 'sitemap(-+([a-zA-Z0-9_-]+))?\.xml\.gz$' => 'index.php?xml_sitemap=params=$matches[2];zip=true',
1664
+ 'sitemap(-+([a-zA-Z0-9_-]+))?\.html$' => 'index.php?xml_sitemap=params=$matches[2];html=true',
1665
+ 'sitemap(-+([a-zA-Z0-9_-]+))?\.html.gz$' => 'index.php?xml_sitemap=params=$matches[2];html=true;zip=true',
1666
+ );
1667
+ foreach ( $wp_rules as $key => $value ) {
1668
+ if ( array_key_exists( $key, $sm_rules ) ) {
1669
+ unset( $wp_rules[ $key ] );
1670
+ }
1671
+ }
1672
+ return $wp_rules;
1673
+ }
1674
+
1675
+ /**
1676
+ * Returns the URL for the sitemap file
1677
+ *
1678
+ * @since 3.0
1679
+ *
1680
+ * @param string $type .
1681
+ * @param string $params .
1682
+ * @param array $build_options .
1683
+ * @return string The URL to the Sitemap file
1684
+ */
1685
+ public function get_xml_url( $type = '', $params = '', $build_options = array() ) {
1686
+
1687
+ $pl = $this->is_using_permalinks();
1688
+ $options = '';
1689
+ if ( ! empty( $type ) ) {
1690
+ $options .= $type;
1691
+ if ( ! empty( $params ) ) {
1692
+ $options .= '-' . $params;
1693
+ }
1694
+ }
1695
+
1696
+ $build_options = array_merge( $this->build_options, $build_options );
1697
+
1698
+ $html = ( isset( $build_options['html'] ) ? $build_options['html'] : false );
1699
+ $zip = ( isset( $build_options['zip'] ) ? $build_options['zip'] : false );
1700
+
1701
+ $base_url = get_bloginfo( 'url' );
1702
+
1703
+ // Manual override for root URL .
1704
+ $base_url_settings = $this->get_option( 'b_baseurl' );
1705
+ $sm_sitemap_name = $this->get_option( 'b_sitemap_name' );
1706
+ if ( ! empty( $base_url_settings ) ) {
1707
+ $base_url = $base_url_settings;
1708
+ } elseif ( defined( 'SM_BASE_URL' ) && SM_BASE_URL ) {
1709
+ $base_url = SM_BASE_URL;
1710
+ }
1711
+ global $wp_rewrite;
1712
+ delete_option( 'sm_rewrite_done' );
1713
+ wp_clear_scheduled_hook( 'sm_ping_daily' );
1714
+ self::remove_rewrite_hooks();
1715
+ $wp_rewrite->flush_rules( false );
1716
+ self::setup_rewrite_hooks();
1717
+ GoogleSitemapGeneratorLoader::activate_rewrite();
1718
+ if ( $pl ) {
1719
+ return trailingslashit( $base_url ) . ( '' === $sm_sitemap_name ? 'sitemap' : $sm_sitemap_name ) . ( $options ? '-' . $options : '' ) . ( $html
1720
+ ? '.html' : '.xml' ) . ( $zip ? '.gz' : '' );
1721
+ } else {
1722
+ return trailingslashit( $base_url ) . 'index.php?xml_sitemap=params=' . $options . ( $html
1723
+ ? ';html=true' : '' ) . ( $zip ? ';zip=true' : '' );
1724
+ }
1725
+ }
1726
+
1727
+ /**
1728
+ * Returns if there is still an old sitemap file in the site directory
1729
+ *
1730
+ * @return Boolean True if a sitemap file still exists
1731
+ */
1732
+ public function old_file_exists() {
1733
+ $sm_sitemap_name = $this->get_option( 'b_sitemap_name' );
1734
+ $path = trailingslashit( get_home_path() );
1735
+ return ( file_exists( $path . $sm_sitemap_name . '.xml' ) || file_exists( $path . 'sitemap.xml.gz' ) );
1736
+ }
1737
+
1738
+ /**
1739
+ * Renames old sitemap files in the site directory from previous versions of this plugin
1740
+ *
1741
+ * @return bool True on success
1742
+ */
1743
+ public function delete_old_files() {
1744
+ $path = trailingslashit( get_home_path() );
1745
+
1746
+ $res = true;
1747
+ $f = $path . 'sitemap.xml';
1748
+ if ( file_exists( $f ) ) {
1749
+ if ( ! rename( $f, $path . 'sitemap.backup.xml' ) ) {
1750
+ $res = false;
1751
+ }
1752
+ }
1753
+ $f = $path . 'sitemap.xml.gz';
1754
+ if ( file_exists( $f ) ) {
1755
+ if ( ! rename( $f, $path . 'sitemap.backup.xml.gz' ) ) {
1756
+ $res = false;
1757
+ }
1758
+ }
1759
+
1760
+ return $res;
1761
+ }
1762
+
1763
+
1764
+ /*************************************** SITEMAP SIMULATION ***************************************/
1765
+
1766
+ /**
1767
+ * Simulates the building of the sitemap index file.
1768
+ *
1769
+ * @see GoogleSitemapGenerator::simulate_sitemap
1770
+ * @since 4.0
1771
+ * @return array The data of the sitemap index file
1772
+ */
1773
+ public function simulate_index() {
1774
+
1775
+ $this->sim_mode = true;
1776
+
1777
+ require_once trailingslashit( dirname( __FILE__ ) ) . 'class-googlesitemapgeneratorstandardbuilder.php';
1778
+ do_action( 'sm_build_index', $this );
1779
+
1780
+ $this->sim_mode = false;
1781
+
1782
+ $r = $this->sim_data['sitemaps'];
1783
+
1784
+ $this->clear_sim_data( 'sitemaps' );
1785
+
1786
+ return $r;
1787
+ }
1788
+
1789
+ /**
1790
+ * Simulates the building of the sitemap file.
1791
+ *
1792
+ * @see GoogleSitemapGenerator::simulate_index
1793
+ * @since 4.0
1794
+ * @param string $type string The type of the sitemap .
1795
+ * @param string $params string Additional parameters for this type .
1796
+ * @return array The data of the sitemap file
1797
+ */
1798
+ public function simulate_sitemap( $type, $params ) {
1799
+ $this->sim_mode = true;
1800
+
1801
+ require_once trailingslashit( dirname( __FILE__ ) ) . 'class-googlesitemapgeneratorstandardbuilder.php';
1802
+ do_action( 'sm_build_content', $this, $type, $params );
1803
+
1804
+ $this->sim_mode = false;
1805
+
1806
+ $r = $this->sim_data['content'];
1807
+
1808
+ $this->clear_sim_data( 'content' );
1809
+
1810
+ return $r;
1811
+ }
1812
+
1813
+ /**
1814
+ * Clears the data of the simulation
1815
+ *
1816
+ * @param string $what Defines what to clear, either both, sitemaps or content .
1817
+ * @see GoogleSitemapGenerator::simulate_index
1818
+ * @see GoogleSitemapGenerator::simulate_sitemap
1819
+ * @since 4.0
1820
+ */
1821
+ public function clear_sim_data( $what ) {
1822
+ if ( 'both' === $what || 'sitemaps' === $what ) {
1823
+ $this->sim_data['sitemaps'] = array();
1824
+ }
1825
+
1826
+ if ( 'both' === $what || 'content' === $what ) {
1827
+ $this->sim_data['content'] = array();
1828
+ }
1829
+ }
1830
+
1831
+ /**
1832
+ * Returns the first caller outside of this __CLASS__
1833
+ *
1834
+ * @param array $trace The backtrace .
1835
+ * @return array The caller information
1836
+ */
1837
+ private function get_external_backtrace( $trace ) {
1838
+ $caller = null;
1839
+ foreach ( $trace as $b ) {
1840
+ if ( __CLASS__ !== $b['class'] ) {
1841
+ $caller = $b;
1842
+ break;
1843
+ }
1844
+ }
1845
+ return $caller;
1846
+ }
1847
+
1848
+
1849
+ /*************************************** SITEMAP BUILDING ***************************************/
1850
+
1851
+ /**
1852
+ * Shows the sitemap. Main entry point from HTTP
1853
+ *
1854
+ * @param string $options Options for the sitemap. What type, what parameters.
1855
+ * @since 4.0
1856
+ */
1857
+ public function show_sitemap( $options ) {
1858
+
1859
+ $start_time = microtime( true );
1860
+ $start_queries = $GLOBALS['wpdb']->num_queries;
1861
+ $start_memory = memory_get_peak_usage( true );
1862
+
1863
+ // Raise memory and time limits .
1864
+ if ( $this->get_option( 'b_memory' ) !== '' ) {
1865
+ wp_raise_memory_limit( $this->get_option( 'b_memory' ) );
1866
+
1867
+ }
1868
+
1869
+ if ( $this->get_option( 'b_time' ) !== -1 ) {
1870
+ set_time_limit( $this->get_option( 'b_time' ) );
1871
+ }
1872
+
1873
+ do_action( 'sm_init', $this );
1874
+
1875
+ $this->is_active = true;
1876
+
1877
+ $parsed_options = array();
1878
+
1879
+ $options = explode( ';', $options );
1880
+ foreach ( $options as $k ) {
1881
+ $kv = explode( '=', $k );
1882
+ $parsed_options[ $kv[0] ] = $kv[1];
1883
+ }
1884
+
1885
+ $options = $parsed_options;
1886
+
1887
+ $this->build_options = $options;
1888
+
1889
+ // Do not index the actual XML pages, only process them.
1890
+ // This avoids that the XML sitemaps show up in the search results.
1891
+ if ( ! headers_sent() ) {
1892
+ header( 'X-Robots-Tag: noindex', true, 200 );
1893
+ }
1894
+
1895
+ $this->initate();
1896
+
1897
+ $html = ( isset( $options['html'] ) ? $options['html'] : false ) && $this->is_xsl_enabled();
1898
+ if ( $html && ! $this->get_option( 'b_html' ) ) {
1899
+ $GLOBALS['wp_query']->is_404 = true;
1900
+ return;
1901
+ }
1902
+
1903
+ // Don't zip if anything happened before which could break the output or if the client does not support gzip.
1904
+ // If there are already other output filters, there might be some content on another
1905
+ // filter level already, which we can't detect. Zipping then would lead to invalid content.
1906
+ $pack = ( isset( $options['zip'] ) ? $options['zip'] : $this->get_option( 'b_autozip' ) );
1907
+ if (
1908
+ empty( $_SERVER['HTTP_ACCEPT_ENCODING'] ) // No encoding support.
1909
+ || strpos( sanitize_text_field( wp_unslash( $_SERVER['HTTP_ACCEPT_ENCODING'] ) ), 'gzip' ) === false // or no gzip.
1910
+ || ! $this->is_gzip_enabled() // No PHP gzip support.
1911
+ || headers_sent() // Headers already sent.
1912
+ || ob_get_contents() // there was already some output....
1913
+ || in_array( 'ob_gzhandler', ob_list_handlers(), true ) // Some other plugin (or PHP) is already gzipping.
1914
+ || $this->get_php_ini_boolean( ini_get( 'zlib.output_compression' ) ) // Zlib compression in php.ini enabled.
1915
+ || ob_get_level() > ( ! $this->get_php_ini_boolean( ini_get( 'output_buffering' ) ) ? 0 : 1 ) // Another output buffer (beside of the default one) is already active.
1916
+ || ( isset( $_SERVER['HTTP_X_VARNISH'] ) && is_numeric( $_SERVER['HTTP_X_VARNISH'] ) ) // Behind a Varnish proxy.
1917
+ ) {
1918
+ $pack = false;
1919
+ }
1920
+
1921
+ $packed = false;
1922
+
1923
+ if ( $pack ) {
1924
+ $packed = ob_start( 'ob_gzhandler' );
1925
+ }
1926
+
1927
+ $builders = array( 'class-googlesitemapgeneratorstandardbuilder.php' );
1928
+ foreach ( $builders as $b ) {
1929
+ $f = trailingslashit( dirname( __FILE__ ) ) . $b;
1930
+ if ( file_exists( $f ) ) {
1931
+ require_once $f;
1932
+ }
1933
+ }
1934
+
1935
+ if ( $html ) {
1936
+ ob_start();
1937
+ } else {
1938
+ header( 'Content-Type: text/xml; charset=utf-8' );
1939
+ }
1940
+
1941
+ if ( empty( $options['params'] ) || 'index' === $options['params'] ) {
1942
+
1943
+ $this->build_sitemap_header( 'index' );
1944
+
1945
+ do_action( 'sm_build_index', $this );
1946
+
1947
+ $this->build_sitemap_footer( 'index' );
1948
+ $this->add_end_commend( $start_time, $start_queries, $start_memory );
1949
+ } else {
1950
+ $all_params = $options['params'];
1951
+ $type = null;
1952
+ $params = null;
1953
+ if ( strpos( $all_params, '-' ) !== false ) {
1954
+ $type = substr( $all_params, 0, strpos( $all_params, '-' ) );
1955
+ $params = substr( $all_params, strpos( $all_params, '-' ) + 1 );
1956
+ } else {
1957
+ $type = $all_params;
1958
+ }
1959
+
1960
+ $this->build_sitemap_header( 'sitemap' );
1961
+
1962
+ do_action( 'sm_build_content', $this, $type, $params );
1963
+
1964
+ $this->build_sitemap_footer( 'sitemap' );
1965
+
1966
+ $this->add_end_commend( $start_time, $start_queries, $start_memory );
1967
+ }
1968
+
1969
+ if ( $html ) {
1970
+ $xml_source = ob_get_clean();
1971
+
1972
+ // Load the XML source.
1973
+ $xml = new DOMDocument();
1974
+ $xml->loadXML( $xml_source );
1975
+
1976
+ $xsl = new DOMDocument();
1977
+ $xsl->load( $this->get_plugin_path() . 'sitemap.xsl' );
1978
+
1979
+ // Configure the transformer.
1980
+ $proc = new XSLTProcessor();
1981
+ $proc->importStyleSheet( $xsl ); // Attach the xsl rules.
1982
+
1983
+ $dom_tran_obj = $proc->transformToDoc( $xml );
1984
+
1985
+ // This will also output doctype and comments at top level.
1986
+ // phpcs:disable
1987
+ global $allowedposttags;
1988
+ $allowed_atts = array(
1989
+ 'align' => array(),
1990
+ 'class' => array(),
1991
+ 'type' => array(),
1992
+ 'id' => array(),
1993
+ 'dir' => array(),
1994
+ 'lang' => array(),
1995
+ 'style' => array(),
1996
+ 'xml:lang' => array(),
1997
+ 'src' => array(),
1998
+ 'alt' => array(),
1999
+ 'href' => array(),
2000
+ 'rel' => array(),
2001
+ 'rev' => array(),
2002
+ 'target' => array(),
2003
+ 'novalidate' => array(),
2004
+ 'type' => array(),
2005
+ 'value' => array(),
2006
+ 'name' => array(),
2007
+ 'tabindex' => array(),
2008
+ 'action' => array(),
2009
+ 'method' => array(),
2010
+ 'for' => array(),
2011
+ 'width' => array(),
2012
+ 'height' => array(),
2013
+ 'data' => array(),
2014
+ 'title' => array(),
2015
+ );
2016
+ $allowedposttags['form'] = $allowed_atts;
2017
+ $allowedposttags['label'] = $allowed_atts;
2018
+ $allowedposttags['input'] = $allowed_atts;
2019
+ $allowedposttags['textarea'] = $allowed_atts;
2020
+ $allowedposttags['iframe'] = $allowed_atts;
2021
+ $allowedposttags['script'] = $allowed_atts;
2022
+ $allowedposttags['style'] = $allowed_atts;
2023
+ $allowedposttags['strong'] = $allowed_atts;
2024
+ $allowedposttags['small'] = $allowed_atts;
2025
+ $allowedposttags['table'] = $allowed_atts;
2026
+ $allowedposttags['span'] = $allowed_atts;
2027
+ $allowedposttags['abbr'] = $allowed_atts;
2028
+ $allowedposttags['code'] = $allowed_atts;
2029
+ $allowedposttags['pre'] = $allowed_atts;
2030
+ $allowedposttags['div'] = $allowed_atts;
2031
+ $allowedposttags['img'] = $allowed_atts;
2032
+ $allowedposttags['h1'] = $allowed_atts;
2033
+ $allowedposttags['h2'] = $allowed_atts;
2034
+ $allowedposttags['h3'] = $allowed_atts;
2035
+ $allowedposttags['h4'] = $allowed_atts;
2036
+ $allowedposttags['h5'] = $allowed_atts;
2037
+ $allowedposttags['h6'] = $allowed_atts;
2038
+ $allowedposttags['ol'] = $allowed_atts;
2039
+ $allowedposttags['ul'] = $allowed_atts;
2040
+ $allowedposttags['li'] = $allowed_atts;
2041
+ $allowedposttags['em'] = $allowed_atts;
2042
+ $allowedposttags['hr'] = $allowed_atts;
2043
+ $allowedposttags['br'] = $allowed_atts;
2044
+ $allowedposttags['tr'] = $allowed_atts;
2045
+ $allowedposttags['td'] = $allowed_atts;
2046
+ $allowedposttags['p'] = $allowed_atts;
2047
+ $allowedposttags['a'] = $allowed_atts;
2048
+ $allowedposttags['b'] = $allowed_atts;
2049
+ $allowedposttags['i'] = $allowed_atts;
2050
+ foreach ( $dom_tran_obj->childNodes as $node ) {
2051
+ // phpcs:enable
2052
+ echo wp_kses( $dom_tran_obj->saveXML( $node ), $allowedposttags ) . "\n";
2053
+ }
2054
+ }
2055
+
2056
+ if ( $packed ) {
2057
+ ob_end_flush();
2058
+ }
2059
+ $this->is_active = false;
2060
+ exit;
2061
+ }
2062
+
2063
+ /**
2064
+ * Generates the header for the sitemap with XML declarations, stylesheet and so on.
2065
+ *
2066
+ * @since 4.0
2067
+ * @param string $format The format, either sitemap for a sitemap or index for the sitemap index .
2068
+ */
2069
+ private function build_sitemap_header( $format ) {
2070
+
2071
+ if ( ! in_array( $format, array( 'sitemap', 'index' ), true ) ) {
2072
+ $format = 'sitemap';
2073
+ }
2074
+ $this->add_element( new GoogleSitemapGeneratorXmlEntry( '<?xml version=\'1.0\' encoding=\'UTF-8\'?>' ) );
2075
+ $style_sheet = ( $this->get_default_style() && $this->get_option( 'b_style_default' ) === true
2076
+ ? $this->get_default_style() : $this->get_option( 'b_style' ) );
2077
+
2078
+ if ( ! empty( $style_sheet ) ) {
2079
+ $this->add_element( new GoogleSitemapGeneratorXmlEntry( '<' . '?xml-stylesheet type=\'text/xsl\' href=\'' . esc_url( $style_sheet ) . '\'?>' ) );
2080
+ }
2081
+ $this->add_element( new GoogleSitemapGeneratorDebugEntry( 'sitemap-generator-url=\'http://www.arnebrachhold.de\' sitemap-generator-version=\'' . $this->get_version() . '\'' ) );
2082
+ $this->add_element( new GoogleSitemapGeneratorDebugEntry( 'generated-on=\'' . gmdate( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ) ) . '\'' ) );
2083
+
2084
+ switch ( $format ) {
2085
+ case 'sitemap':
2086
+ $this->add_element( new GoogleSitemapGeneratorXmlEntry( '<urlset xmlns:xsi=\'http://www.w3.org/2001/XMLSchema-instance\' xsi:schemaLocation=\'http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\' xmlns=\'http://www.sitemaps.org/schemas/sitemap/0.9\'>' ) );
2087
+ break;
2088
+ case 'index':
2089
+ $this->add_element( new GoogleSitemapGeneratorXmlEntry( '<sitemapindex xmlns:xsi=\'http://www.w3.org/2001/XMLSchema-instance\' xsi:schemaLocation=\'http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd\' xmlns=\'http://www.sitemaps.org/schemas/sitemap/0.9\'>' ) );
2090
+ break;
2091
+ }
2092
+ }
2093
+
2094
+ /**
2095
+ * Generates the footer for the sitemap with XML ending tag
2096
+ *
2097
+ * @since 4.0
2098
+ * @param string $format The format, either sitemap for a sitemap or index for the sitemap index.
2099
+ */
2100
+ private function build_sitemap_footer( $format ) {
2101
+ if ( ! in_array( $format, array( 'sitemap', 'index' ), true ) ) {
2102
+ $format = 'sitemap';
2103
+ }
2104
+ switch ( $format ) {
2105
+ case 'sitemap':
2106
+ $this->add_element( new GoogleSitemapGeneratorXmlEntry( '</urlset>' ) );
2107
+ break;
2108
+ case 'index':
2109
+ $this->add_element( new GoogleSitemapGeneratorXmlEntry( '</sitemapindex>' ) );
2110
+ break;
2111
+ }
2112
+ }
2113
+
2114
+ /**
2115
+ * Adds information about time and memory usage to the sitemap
2116
+ *
2117
+ * @since 4.0
2118
+ * @param float $start_time The microtime of the start .
2119
+ * @param int $start_queries .
2120
+ * @param int $start_memory .
2121
+ */
2122
+ private function add_end_commend( $start_time, $start_queries = 0, $start_memory = 0 ) {
2123
+ if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
2124
+ echo '<!-- ';
2125
+ if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES ) {
2126
+ echo '<pre>';
2127
+ // phpcs:disable WordPress.PHP.DevelopmentFunctions
2128
+ var_dump( $GLOBALS['wpdb']->queries );
2129
+ // phpcs:enable
2130
+ echo '</pre>';
2131
+
2132
+ $total = 0;
2133
+ foreach ( $GLOBALS['wpdb']->queries as $q ) {
2134
+ $total += $q[1];
2135
+ }
2136
+ echo '<h4>Total Query Time</h4>';
2137
+ echo '<pre>' . count( $GLOBALS['wpdb']->queries ) . ' queries in ' . esc_html( round( $total, 2 ) ) . ' seconds.</pre>';
2138
+ } else {
2139
+ echo '<p>Please edit wp-db.inc.php in wp-includes and set SAVEQUERIES to true if you want to see the queries.</p>';
2140
+ }
2141
+ echo ' --> ';
2142
+ }
2143
+ $end_time = microtime( true );
2144
+ $end_time = round( $end_time - $start_time, 2 );
2145
+ $this->add_element( new GoogleSitemapGeneratorDebugEntry( 'Request ID: ' . md5( microtime() ) . '; Queries for sitemap: ' . ( $GLOBALS['wpdb']->num_queries - $start_queries ) . '; Total queries: ' . $GLOBALS['wpdb']->num_queries . '; Seconds: $end_time; Memory for sitemap: ' . ( ( memory_get_peak_usage( true ) - $start_memory ) / 1024 / 1024 ) . 'MB; Total memory: ' . ( memory_get_peak_usage( true ) / 1024 / 1024 ) . 'MB' ) );
2146
+ }
2147
+
2148
+ /**
2149
+ * Adds the sitemap to the virtual robots.txt file
2150
+ * This function is executed by WordPress with the do_robots hook
2151
+ *
2152
+ * @since 3.1.2
2153
+ */
2154
+ public function do_robots() {
2155
+ $this->initate();
2156
+ if ( $this->get_option( 'b_robots' ) === true ) {
2157
+
2158
+ $sm_url = $this->get_xml_url();
2159
+
2160
+ echo "\nSitemap: " . esc_url( $sm_url ) . "\n";
2161
+ }
2162
+ }
2163
+
2164
+
2165
+ /*************************************** SITEMAP CONTENT BUILDING ***************************************/
2166
+
2167
+ /**
2168
+ * Outputs an element in the sitemap
2169
+ *
2170
+ * @since 3.0
2171
+ * @param object $page GoogleSitemapGeneratorXmlEntry The element .
2172
+ */
2173
+ public function add_element( $page ) {
2174
+
2175
+ if ( empty( $page ) ) {
2176
+ return;
2177
+ }
2178
+ // phpcs:disable
2179
+ echo $page->render();
2180
+ // phpcs:enable
2181
+ }
2182
+
2183
+ /**
2184
+ * Adds a url to the sitemap. You can use this method or call add_element directly.
2185
+ *
2186
+ * @since 3.0
2187
+ * @param int $loc string The location (url) of the page .
2188
+ * @param int $last_mod int The last Modification time as a UNIX timestamp .
2189
+ * @param string $change_freq string The change frequenty of the page, Valid values are 'always', 'hourly', 'daily', 'weekly', 'monthly', 'yearly' and 'never'. .
2190
+ * @param float $priority float The priority of the page, between 0.0 and 1.0 .
2191
+ * @param int $post_id int The post ID in case this is a post or page .
2192
+ * @see add_element
2193
+ */
2194
+ public function add_url( $loc, $last_mod = 0, $change_freq = 'monthly', $priority = 0.5, $post_id = 0 ) {
2195
+ // Strip out the last modification time if activated .
2196
+ if ( $this->get_option( 'in_lastmod' ) === false ) {
2197
+ $last_mod = 0;
2198
+ }
2199
+ $page = new GoogleSitemapGeneratorPage( $loc, $priority, $change_freq, $last_mod, $post_id );
2200
+
2201
+ do_action( 'sm_addurl', $page );
2202
+
2203
+ if ( $this->sim_mode ) {
2204
+ // phpcs:disable WordPress.PHP.DevelopmentFunctions
2205
+ $caller = $this->get_external_backtrace( debug_backtrace() );
2206
+ // phpcs:enable
2207
+ $this->sim_data['content'][] = array(
2208
+ 'data' => $page,
2209
+ 'caller' => $caller,
2210
+ );
2211
+ } else {
2212
+ $this->add_element( $page );
2213
+ }
2214
+ }
2215
+
2216
+ /**
2217
+ * Add a sitemap entry to the index file
2218
+ *
2219
+ * @param string $type .
2220
+ * @param string $params .
2221
+ * @param int $last_mod .
2222
+ */
2223
+ public function add_sitemap( $type, $params = '', $last_mod = 0 ) {
2224
+
2225
+ $url = $this->get_xml_url( $type, $params );
2226
+
2227
+ $sitemap = new GoogleSitemapGeneratorSitemapEntry( $url, $last_mod );
2228
+
2229
+ do_action( 'sm_addsitemap', $sitemap );
2230
+
2231
+ if ( $this->sim_mode ) {
2232
+ // phpcs:disable WordPress.PHP.DevelopmentFunctions
2233
+ $caller = $this->get_external_backtrace( debug_backtrace() );
2234
+ // phpcs:enable
2235
+ $this->sim_data['sitemaps'][] = array(
2236
+ 'data' => $sitemap,
2237
+ 'type' => $type,
2238
+ 'params' => $params,
2239
+ 'caller' => $caller,
2240
+ );
2241
+ } else {
2242
+ $this->add_element( $sitemap );
2243
+ }
2244
+ }
2245
+
2246
+
2247
+ /*************************************** PINGS ***************************************/
2248
+
2249
+ /**
2250
+ * Sends the pings to the search engines
2251
+ *
2252
+ * @return GoogleSitemapGeneratorStatus The status object
2253
+ */
2254
+ public function send_ping() {
2255
+
2256
+ $this->load_options();
2257
+
2258
+ $ping_url = $this->get_xml_url();
2259
+
2260
+ $result = $this->execute_ping( $ping_url, true );
2261
+
2262
+ $post_id = get_transient( 'sm_ping_post_id' );
2263
+
2264
+ if ( $post_id ) {
2265
+
2266
+ require_once trailingslashit( dirname( __FILE__ ) ) . 'class-googlesitemapgeneratorstandardbuilder.php';
2267
+
2268
+ $urls = array();
2269
+
2270
+ $urls = apply_filters( 'sm_sitemap_for_post', $urls, $this, $post_id );
2271
+ if ( is_array( $urls ) && count( $urls ) > 0 ) {
2272
+ foreach ( $urls as $url ) {
2273
+ $this->execute_ping( $url, false );
2274
+ }
2275
+ }
2276
+
2277
+ delete_transient( 'sm_ping_post_id' );
2278
+ }
2279
+
2280
+ return $result;
2281
+ }
2282
+
2283
+
2284
+ /**
2285
+ * Execute Ping
2286
+ *
2287
+ * @param string $ping_url string The Sitemap URL to ping .
2288
+ * @param bool $update_status If the global ping status should be updated .
2289
+ *
2290
+ * @return \GoogleSitemapGeneratorStatus
2291
+ */
2292
+ protected function execute_ping( $ping_url, $update_status = true ) {
2293
+
2294
+ $status = new GoogleSitemapGeneratorStatus( $update_status );
2295
+
2296
+ if ( $ping_url ) {
2297
+ $pings = array();
2298
+
2299
+ if ( $this->get_option( 'b_ping' ) ) {
2300
+ $pings['google'] = array(
2301
+ 'name' => 'Google',
2302
+ 'url' => 'http://www.google.com/webmasters/sitemaps/ping?sitemap=%s',
2303
+ 'check' => 'successfully',
2304
+ );
2305
+ }
2306
+
2307
+ if ( $this->get_option( 'b_pingmsn' ) ) {
2308
+ $pings['bing'] = array(
2309
+ 'name' => 'Bing',
2310
+ 'url' => 'http://www.bing.com/webmaster/ping.aspx?siteMap=%s',
2311
+ 'check' => ' ',
2312
+ // No way to check, response is IP-language-based :-( .
2313
+ );
2314
+ }
2315
+
2316
+ foreach ( $pings as $service_id => $service ) {
2317
+ $url = str_replace( '%s', rawurlencode( $ping_url ), $service['url'] );
2318
+ $status->start_ping( $service_id, $url, $service['name'] );
2319
+
2320
+ $pingres = $this->remote_open( $url );
2321
+
2322
+ if ( null === $pingres || false === $pingres || false === strpos( $pingres, $service['check'] ) ) {
2323
+ $status->end_ping( $service_id, false );
2324
+ // phpcs:disable WordPress.PHP.DevelopmentFunctions
2325
+ trigger_error( 'Failed to ping $service_id: ' . esc_html( htmlspecialchars( wp_strip_all_tags( $pingres ) ) ), E_USER_NOTICE );
2326
+ // phpcs:enable
2327
+ } else {
2328
+ $status->end_ping( $service_id, true );
2329
+ }
2330
+ }
2331
+
2332
+ $this->set_option( 'i_lastping', time() );
2333
+ $this->save_options();
2334
+ }
2335
+
2336
+ $status->end();
2337
+
2338
+ return $status;
2339
+ }
2340
+
2341
+ /**
2342
+ * Tries to ping a specific service showing as much as debug output as possible
2343
+ *
2344
+ * @since 4.1
2345
+ * @return array
2346
+ */
2347
+ public function send_ping_all() {
2348
+
2349
+ $this->load_options();
2350
+
2351
+ $sitemaps = $this->simulate_index();
2352
+
2353
+ $urls = array();
2354
+
2355
+ $urls[] = $this->get_xml_url();
2356
+
2357
+ foreach ( $sitemaps as $sitemap ) {
2358
+
2359
+ // @var $s GoogleSitemapGeneratorSitemapEntry .
2360
+ $s = $sitemap['data'];
2361
+
2362
+ $urls[] = $s->get_url();
2363
+ }
2364
+
2365
+ $results = array();
2366
+
2367
+ $first = true;
2368
+
2369
+ foreach ( $urls as $url ) {
2370
+ $status = $this->execute_ping( $url, $first );
2371
+ $results[] = array(
2372
+ 'sitemap' => $url,
2373
+ 'status' => $status,
2374
+ );
2375
+ $first = false;
2376
+ }
2377
+ return $results;
2378
+ }
2379
+
2380
+ /**
2381
+ * Tries to ping a specific service showing as much as debug output as possible
2382
+ *
2383
+ * @since 3.1.9
2384
+ * @return null
2385
+ */
2386
+ public function show_ping_result() {
2387
+
2388
+ check_admin_referer( 'sitemap' );
2389
+
2390
+ if ( ! current_user_can( 'administrator' ) ) {
2391
+ echo '<p>Please log in as admin</p>';
2392
+ return;
2393
+ }
2394
+
2395
+ $service = ! empty( $_GET['sm_ping_service'] ) ? sanitize_text_field( wp_unslash( $_GET['sm_ping_service'] ) ) : null;
2396
+
2397
+ $status = GoogleSitemapGeneratorStatus::load();
2398
+
2399
+ if ( ! $status ) {
2400
+ die( 'No build status yet. Write something first.' );
2401
+ }
2402
+
2403
+ $url = null;
2404
+
2405
+ $services = $status->get_used_ping_services();
2406
+
2407
+ if ( ! in_array( $service, $services, true ) ) {
2408
+ die( 'Invalid service' );
2409
+ }
2410
+
2411
+ $url = $status->get_ping_url( $service );
2412
+
2413
+ if ( empty( $url ) ) {
2414
+ die( 'Invalid ping url' );
2415
+ }
2416
+
2417
+ echo '<html><head><title>Ping Test</title>';
2418
+ if ( function_exists( 'wp_admin_css' ) ) {
2419
+ wp_admin_css( 'css/global', true );
2420
+ }
2421
+ echo '</head><body><h1>Ping Test</h1>';
2422
+
2423
+ echo '<p>Trying to ping: <a href=\'' . esc_url( $url ) . '\'>' . esc_html( $url ) . '</a>. The sections below should give you an idea whats going on.</p>';
2424
+
2425
+ // Try to get as much as debug / error output as possible .
2426
+ $err_level = error_reporting( E_ALL );
2427
+ define( 'WP_DEBUG_DISPLAY', true );
2428
+
2429
+ if ( ! defined( 'WP_DEBUG' ) ) {
2430
+ define( 'WP_DEBUG', true );
2431
+ }
2432
+
2433
+ echo '<h2>Errors, Warnings, Notices:</h2>';
2434
+
2435
+ if ( WP_DEBUG === false ) {
2436
+ echo '<i>WP_DEBUG was set to false somewhere before. You might not see all debug information until you remove this declaration!</i><br />';
2437
+ }
2438
+ if ( ini_get( 'display_errors' ) !== 1 ) {
2439
+ echo '<i>Your display_errors setting currently prevents the plugin from showing errors here. Please check your webserver logfile instead.</i><br />';
2440
+ }
2441
+
2442
+ $res = $this->remote_open( $url );
2443
+
2444
+ echo '<h2>Result (text only):</h2>';
2445
+
2446
+ echo wp_kses(
2447
+ $res,
2448
+ array(
2449
+ 'a' => array( 'href' => array() ),
2450
+ 'p' => array(),
2451
+ 'ul' => array(),
2452
+ 'ol' => array(),
2453
+ 'li' => array(),
2454
+ )
2455
+ );
2456
+
2457
+ echo '<h2>Result (HTML):</h2>';
2458
+
2459
+ esc_html( htmlspecialchars( $res ) );
2460
+
2461
+ // Revert back old values .
2462
+ // error_reporting( $err_level ); .
2463
+ echo '</body></html>';
2464
+ exit;
2465
+ }
2466
+
2467
+ /**
2468
+ * Opens a remote file using the WordPress API
2469
+ *
2470
+ * @since 3.0
2471
+ * @param string $url string The URL to open .
2472
+ * @param string $method string get or post .
2473
+ * @param object $post_data array An array with key=>value paris .
2474
+ * @param int $timeout int Timeout for the request, by default 10 .
2475
+ * @return mixed False on error, the body of the response on success
2476
+ */
2477
+ public static function remote_open( $url, $method = 'get', $post_data = null, $timeout = 10 ) {
2478
+ $options = array();
2479
+ $options['timeout'] = $timeout;
2480
+
2481
+ if ( 'get' === $method ) {
2482
+ $response = wp_remote_get( $url, $options );
2483
+ } else {
2484
+ $response = wp_remote_post(
2485
+ $url,
2486
+ array_merge(
2487
+ $options,
2488
+ array(
2489
+ 'body' => $post_data,
2490
+ )
2491
+ )
2492
+ );
2493
+ }
2494
+
2495
+ if ( is_wp_error( $response ) ) {
2496
+ $errs = $response->get_error_messages();
2497
+ $errs = htmlspecialchars( implode( '; ', $errs ) );
2498
+ // phpcs:disable WordPress.PHP.DevelopmentFunctions
2499
+ trigger_error( 'WP HTTP API Web Request failed: ' . esc_html( $errs ), E_USER_NOTICE );
2500
+ // phpcs:enable
2501
+ return false;
2502
+ }
2503
+
2504
+ return $response['body'];
2505
+ }
2506
+
2507
+ /**
2508
+ * Sends anonymous statistics (disabled by default)
2509
+ */
2510
+ private function send_stats() {
2511
+ global $wp_version, $wpdb;
2512
+ $post_count = $wpdb->get_var( 'SELECT COUNT(*) FROM {$wpdb->posts} p WHERE p.post_status=\'publish\'' ); // db call ok; no-cache ok.
2513
+
2514
+ // Send simple post count statistic to get an idea in which direction this plugin should be optimized .
2515
+ // Only a rough number is required, so we are rounding things up .
2516
+ if ( $post_count <= 5 ) {
2517
+ $post_count = 5;
2518
+ } elseif ( $post_count < 25 ) {
2519
+ $post_count = 10;
2520
+ } elseif ( $post_count < 35 ) {
2521
+ $post_count = 25;
2522
+ } elseif ( $post_count < 75 ) {
2523
+ $post_count = 50;
2524
+ } elseif ( $post_count < 125 ) {
2525
+ $post_count = 100;
2526
+ } elseif ( $post_count < 2000 ) {
2527
+ $post_count = round( $post_count / 200 ) * 200;
2528
+ } elseif ( $post_count < 10000 ) {
2529
+ $post_count = round( $post_count / 1000 ) * 1000;
2530
+ } else {
2531
+ $post_count = round( $post_count / 10000 ) * 10000;
2532
+ }
2533
+
2534
+ $post_data = array(
2535
+ 'v' => 1,
2536
+ 'tid' => $this->get_option( 'i_tid' ),
2537
+ 'cid' => $this->get_option( 'i_hash' ),
2538
+ 'aip' => 1, // Anonymize .
2539
+ 't' => 'event',
2540
+ 'ec' => 'ping',
2541
+ 'ea' => 'auto',
2542
+ 'ev' => 1,
2543
+ 'cd1' => $wp_version,
2544
+ 'cd2' => $this->get_version(),
2545
+ 'cd3' => PHP_VERSION,
2546
+ 'cd4' => $post_count,
2547
+ 'ul' => get_bloginfo( 'language' ),
2548
+ );
2549
+
2550
+ $this->remote_open( 'http://www.google-analytics.com/collect', 'post', $post_data );
2551
+ }
2552
+
2553
+ /**
2554
+ * Returns the number of seconds the support feed should be cached (1 week)
2555
+ *
2556
+ * @return int The number of seconds
2557
+ */
2558
+ public static function get_support_feed_cache_lifetime() {
2559
+ return 60 * 60 * 24 * 7;
2560
+ }
2561
+
2562
+ /**
2563
+ * Returns the SimplePie instance of the support feed
2564
+ * The feed is cached for one week
2565
+ *
2566
+ * @return SimplePie|WP_Error
2567
+ */
2568
+ public function get_support_feed() {
2569
+
2570
+ $call_back = array( __CLASS__, 'get_support_feed_cache_lifetime' );
2571
+
2572
+ // Extend cache lifetime so we don't request the feed to often .
2573
+ add_filter( 'wp_feed_cache_transient_lifetime', $call_back );
2574
+ $result = fetch_feed( SM_SUPPORTFEED_URL );
2575
+ remove_filter( 'wp_feed_cache_transient_lifetime', $call_back );
2576
+
2577
+ return $result;
2578
+ }
2579
+
2580
+ /**
2581
+ * Handles daily ping
2582
+ */
2583
+ public function send_ping_daily() {
2584
+
2585
+ $this->load_options();
2586
+
2587
+ $blog_update = strtotime( get_lastpostdate( 'blog' ) );
2588
+ $last_ping = $this->get_option( 'i_lastping' );
2589
+ $yesterday = time() - ( 60 * 60 * 24 );
2590
+
2591
+ if ( $blog_update >= $yesterday && ( 0 === $last_ping || $last_ping <= $yesterday ) ) {
2592
+ $this->send_ping();
2593
+ }
2594
+
2595
+ // Send statistics if enabled (disabled by default) .
2596
+ if ( $this->get_option( 'b_stats' ) ) {
2597
+ $this->send_stats();
2598
+ }
2599
+
2600
+ // Cache the support feed so there is no delay when loading the user interface .
2601
+ if ( $this->get_option( 'i_supportfeed' ) ) {
2602
+ $last = $this->get_option( 'i_supportfeed_cache' );
2603
+ if ( $last <= ( time() - $this->get_support_feed_cache_lifetime() ) ) {
2604
+ $support_feed = $this->get_support_feed();
2605
+ if ( ! is_wp_error( $support_feed ) && $support_feed ) {
2606
+ $this->set_option( 'i_supportfeed_cache', time() );
2607
+ $this->save_options();
2608
+ }
2609
+ }
2610
+ }
2611
+ }
2612
+
2613
+
2614
+ /*************************************** USER INTERFACE ***************************************/
2615
+
2616
+ /**
2617
+ * Includes the user interface class and initializes it
2618
+ *
2619
+ * @since 3.1.1
2620
+ * @see GoogleSitemapGeneratorUI
2621
+ * @return GoogleSitemapGeneratorUI
2622
+ */
2623
+ private function get_ui() {
2624
+
2625
+ if ( null === $this->ui ) {
2626
+
2627
+ $class_name = 'GoogleSitemapGeneratorUI';
2628
+ $file_name = 'class-googlesitemapgeneratorui.php';
2629
+
2630
+ if ( ! class_exists( $class_name ) ) {
2631
+
2632
+ $path = trailingslashit( dirname( __FILE__ ) );
2633
+
2634
+ if ( ! file_exists( $path . $file_name ) ) {
2635
+ return false;
2636
+ }
2637
+ require_once $path . $file_name;
2638
+ }
2639
+
2640
+ $this->ui = new $class_name( $this );
2641
+ }
2642
+
2643
+ return $this->ui;
2644
+ }
2645
+
2646
+ /**
2647
+ * Shows the option page of the plugin. Before 3.1.1, this function was basically the UI, afterwards the UI was outsourced to another class
2648
+ *
2649
+ * @see GoogleSitemapGeneratorUI
2650
+ * @since 3.0
2651
+ * @return bool
2652
+ */
2653
+ public function html_show_options_page() {
2654
+
2655
+ $ui = $this->get_ui();
2656
+ if ( $ui ) {
2657
+ $ui->html_show_options_page();
2658
+ return true;
2659
+ }
2660
+
2661
+ return false;
2662
+ }
2663
+
2664
+ /*************************************** HELPERS ***************************************/
2665
+
2666
+ /**
2667
+ * Returns if the given value is greater than zero
2668
+ *
2669
+ * @param int $value int The value to check .
2670
+ * @since 4.0b10
2671
+ * @return bool True if greater than zero
2672
+ */
2673
+ public function is_greater_zero( $value ) {
2674
+ return ( $value > 0 );
2675
+ }
2676
+
2677
+ /**
2678
+ * Converts the various possible php.ini values for true and false to boolean
2679
+ *
2680
+ * @param string $value string The value from ini_get .
2681
+ *
2682
+ * @return bool The converted value
2683
+ */
2684
+ public function get_php_ini_boolean( $value ) {
2685
+ if ( is_string( $value ) ) {
2686
+ switch ( strtolower( $value ) ) {
2687
+ case '+':
2688
+ case '1':
2689
+ case 'y':
2690
+ case 'on':
2691
+ case 'yes':
2692
+ case 'true':
2693
+ case 'enabled':
2694
+ return true;
2695
+
2696
+ case '-':
2697
+ case '0':
2698
+ case 'n':
2699
+ case 'no':
2700
+ case 'off':
2701
+ case 'false':
2702
+ case 'disabled':
2703
+ return false;
2704
+ }
2705
+ }
2706
+
2707
+ return (bool) $value;
2708
+ }
2709
+
2710
+
2711
+ /**
2712
+ * Show surevey method .
2713
+ */
2714
+ public function show_survey() {
2715
+ $this->load_options();
2716
+ if ( isset( $_REQUEST['sm_survey'] ) ) {
2717
+ return ( sanitize_text_field( wp_unslash( $_REQUEST['sm_survey'] ) ) ) || ! $this->get_option( 'i_hide_survey' );
2718
+ }
2719
+ }
2720
+
2721
+ /**
2722
+ * Html survey method .
2723
+ */
2724
+ public function html_survey() {
2725
+ ?>
2726
+ <div class='updated'>
2727
+ <strong>
2728
+ <p>
2729
+ <?php
2730
+ esc_html(
2731
+ str_replace(
2732
+ '%s',
2733
+ 'https://w3edge.wufoo.com/forms/mex338s1ysw3i0/',
2734
+ /* translators: %s: search term */
2735
+ __( 'Thank you for using Google XML Sitemaps! <a href=\'%s\' target=\'_blank\'>Please help us improve by taking this short survey!</a>', 'sitemap' )
2736
+ )
2737
+ );
2738
+ ?>
2739
+ <a href='<?php esc_url( $this->get_back_link() ) . '&amp;sm_hide_survey=true'; ?>' style='float:right; display:block; border:none;'><small style='font-weight:normal; '><?php esc_html_e( 'Don\'t show this anymore', 'sitemap' ); ?></small></a>
2740
+ </p>
2741
+ </strong>
2742
+ <div style='clear:right;'></div>
2743
+ </div>
2744
+ <?php
2745
+ }
2746
+
2747
+ /**
2748
+ * Get xsl url method .
2749
+ *
2750
+ * @param string $url .
2751
+ * @param string $host .
2752
+ */
2753
+ public function get_xsl_url( $url, $host ) {
2754
+ if ( substr( $host, 0, 4 ) === 'www.' ) {
2755
+ if ( substr( get_bloginfo( 'url' ), 0, 5 ) !== 'https' ) {
2756
+ if ( strpos( $url, 'www.' ) === false ) {
2757
+ $url = str_replace( 'http://', 'http://www.', $url );
2758
+ }
2759
+ } else {
2760
+ if ( strpos( $url, 'www.' ) === false ) {
2761
+ $url = str_replace( 'https://', 'https://www.', $url );
2762
+ }
2763
+ }
2764
+ } else {
2765
+ if ( strpos( $url, 'www.' ) !== false ) {
2766
+ $url = str_replace( '://www.', '://', $url );
2767
+ }
2768
+ }
2769
+ return $url;
2770
+ }
2771
+ }
sitemap-loader.php DELETED
@@ -1,467 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Loader class for the Google Sitemap Generator
5
- *
6
- * This class takes care of the sitemap plugin and tries to load the different parts as late as possible.
7
- * On normal requests, only this small class is loaded. When the sitemap needs to be rebuild, the generator itself is loaded.
8
- * The last stage is the user interface which is loaded when the administration page is requested.
9
- *
10
- * @author Arne Brachhold
11
- * @package sitemap
12
- */
13
- class GoogleSitemapGeneratorLoader {
14
-
15
- /**
16
- * @var string Version of the generator in SVN
17
- */
18
- private static $svnVersion = '$Id: sitemap-loader.php 937300 2014-06-23 18:04:11Z arnee $';
19
-
20
-
21
- /**
22
- * Enabled the sitemap plugin with registering all required hooks
23
- *
24
- * @uses add_action Adds actions for admin menu, executing pings and handling robots.txt
25
- * @uses add_filter Adds filtes for admin menu icon and contexual help
26
- * @uses GoogleSitemapGeneratorLoader::CallShowPingResult() Shows the ping result on request
27
- */
28
- public static function Enable() {
29
-
30
- //Register the sitemap creator to wordpress...
31
- add_action('admin_menu', array(__CLASS__, 'RegisterAdminPage'));
32
-
33
- // Add a widget to the dashboard.
34
- add_action( 'wp_dashboard_setup', array(__CLASS__, 'WpDashboardSetup'));
35
-
36
- //Nice icon for Admin Menu (requires Ozh Admin Drop Down Plugin)
37
- add_filter('ozh_adminmenu_icon', array(__CLASS__, 'RegisterAdminIcon'));
38
-
39
- //Additional links on the plugin page
40
- add_filter('plugin_row_meta', array(__CLASS__, 'RegisterPluginLinks'), 10, 2);
41
-
42
- //Listen to ping request
43
- add_action('sm_ping', array(__CLASS__, 'CallSendPing'), 10, 1);
44
-
45
- //Listen to daily ping
46
- add_action('sm_ping_daily', array(__CLASS__, 'CallSendPingDaily'), 10, 1);
47
-
48
- //Post is somehow changed (also publish to publish (=edit) is fired)
49
- add_action('transition_post_status', array(__CLASS__, 'SchedulePingOnStatusChange'), 9999, 3);
50
-
51
- //Robots.txt request
52
- add_action('do_robots', array(__CLASS__, 'CallDoRobots'), 100, 0);
53
-
54
- //Help topics for context sensitive help
55
- //add_filter('contextual_help_list', array(__CLASS__, 'CallHtmlShowHelpList'), 9999, 2);
56
-
57
- //Check if the result of a ping request should be shown
58
- if(!empty($_GET["sm_ping_service"])) {
59
- self::CallShowPingResult();
60
- }
61
-
62
- //Fix rewrite rules if not already done on activation hook. This happens on network activation for example.
63
- if (get_option("sm_rewrite_done", null) != self::$svnVersion) {
64
- add_action('wp_loaded', array(__CLASS__, 'ActivateRewrite'), 9999, 1);
65
- }
66
-
67
- //Schedule daily ping
68
- if (!wp_get_schedule('sm_ping_daily')) {
69
- wp_schedule_event(time() + (60 * 60), 'daily', 'sm_ping_daily');
70
- }
71
-
72
- //Disable the WP core XML sitemaps.
73
- add_filter( 'wp_sitemaps_enabled', '__return_false' );
74
- }
75
-
76
- /**
77
- * Sets up the query vars and template redirect hooks
78
- * @uses GoogleSitemapGeneratorLoader::RegisterQueryVars
79
- * @uses GoogleSitemapGeneratorLoader::DoTemplateRedirect
80
- * @since 4.0
81
- */
82
- public static function SetupQueryVars() {
83
-
84
- add_filter('query_vars', array(__CLASS__, 'RegisterQueryVars'), 1, 1);
85
-
86
- add_filter('template_redirect', array(__CLASS__, 'DoTemplateRedirect'), 1, 0);
87
-
88
- }
89
-
90
- /**
91
- * Register the plugin specific "xml_sitemap" query var
92
- *
93
- * @since 4.0
94
- * @param $vars Array Array of existing query_vars
95
- * @return Array An aarray containing the new query vars
96
- */
97
- public static function RegisterQueryVars($vars) {
98
- array_push($vars, 'xml_sitemap');
99
- return $vars;
100
- }
101
-
102
- /**
103
- * Registers the plugin specific rewrite rules
104
- *
105
- * Combined: sitemap(-+([a-zA-Z0-9_-]+))?\.(xml|html)(.gz)?$
106
- *
107
- * @since 4.0
108
- * @param $wpRules Array of existing rewrite rules
109
- * @return Array An array containing the new rewrite rules
110
- */
111
- public static function AddRewriteRules($wpRules) {
112
- $smRules = array(
113
- 'sitemap(-+([a-zA-Z0-9_-]+))?\.xml$' => 'index.php?xml_sitemap=params=$matches[2]',
114
- 'sitemap(-+([a-zA-Z0-9_-]+))?\.xml\.gz$' => 'index.php?xml_sitemap=params=$matches[2];zip=true',
115
- 'sitemap(-+([a-zA-Z0-9_-]+))?\.html$' => 'index.php?xml_sitemap=params=$matches[2];html=true',
116
- 'sitemap(-+([a-zA-Z0-9_-]+))?\.html.gz$' => 'index.php?xml_sitemap=params=$matches[2];html=true;zip=true'
117
- );
118
- return array_merge($smRules,$wpRules);
119
- }
120
-
121
- /**
122
- * Returns the rules required for Nginx permalinks
123
- *
124
- * @return string[]
125
- */
126
- public static function GetNginXRules() {
127
- return array(
128
- 'rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.xml$ "/index.php?xml_sitemap=params=$2" last;',
129
- 'rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.xml\.gz$ "/index.php?xml_sitemap=params=$2;zip=true" last;',
130
- 'rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.html$ "/index.php?xml_sitemap=params=$2;html=true" last;',
131
- 'rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.html.gz$ "/index.php?xml_sitemap=params=$2;html=true;zip=true" last;'
132
- );
133
-
134
- }
135
-
136
- /**
137
- * Adds the filters for wp rewrite rule adding
138
- *
139
- * @since 4.0
140
- * @uses add_filter()
141
- */
142
- public static function SetupRewriteHooks() {
143
- add_filter('rewrite_rules_array', array(__CLASS__, 'AddRewriteRules'), 1, 1);
144
- }
145
-
146
- /**
147
- * Flushes the rewrite rules
148
- *
149
- * @since 4.0
150
- * @global $wp_rewrite WP_Rewrite
151
- * @uses WP_Rewrite::flush_rules()
152
- */
153
- public static function ActivateRewrite() {
154
- /** @var $wp_rewrite WP_Rewrite */
155
- global $wp_rewrite;
156
- $wp_rewrite->flush_rules(false);
157
- update_option("sm_rewrite_done", self::$svnVersion);
158
- }
159
-
160
- /**
161
- * Handled the plugin activation on installation
162
- *
163
- * @uses GoogleSitemapGeneratorLoader::ActivateRewrite
164
- * @since 4.0
165
- */
166
- public static function ActivatePlugin() {
167
- self::SetupRewriteHooks();
168
- self::ActivateRewrite();
169
-
170
- if(self::LoadPlugin()) {
171
- $gsg = GoogleSitemapGenerator::GetInstance();
172
- if($gsg->OldFileExists()) {
173
- $gsg->DeleteOldFiles();
174
- }
175
- }
176
-
177
- }
178
-
179
- /**
180
- * Handled the plugin deactivation
181
- *
182
- * @uses GoogleSitemapGeneratorLoader::ActivateRewrite
183
- * @since 4.0
184
- */
185
- public static function DeactivatePlugin() {
186
- delete_option("sm_rewrite_done");
187
- wp_clear_scheduled_hook('sm_ping_daily');
188
- }
189
-
190
-
191
- /**
192
- * Handles the plugin output on template redirection if the xml_sitemap query var is present.
193
- *
194
- * @since 4.0
195
- */
196
- public static function DoTemplateRedirect() {
197
- /** @var $wp_query WP_Query */
198
- global $wp_query;
199
- if(!empty($wp_query->query_vars["xml_sitemap"])) {
200
- $wp_query->is_404 = false;
201
- $wp_query->is_feed = true;
202
- self::CallShowSitemap($wp_query->query_vars["xml_sitemap"]);
203
- }
204
- }
205
-
206
- /**
207
- * Registers the plugin in the admin menu system
208
- *
209
- * @uses add_options_page()
210
- */
211
- public static function RegisterAdminPage() {
212
- add_options_page(__('XML-Sitemap Generator', 'sitemap'), __('XML-Sitemap', 'sitemap'), 'administrator', self::GetBaseName(), array(__CLASS__, 'CallHtmlShowOptionsPage'));
213
- }
214
-
215
- /**
216
- * Add a widget to the dashboard.
217
- */
218
- public static function WpDashboardSetup($a) {
219
- self::LoadPlugin();
220
- $sg = GoogleSitemapGenerator::GetInstance();
221
-
222
- if ($sg->ShowSurvey()) {
223
- add_action( 'admin_notices', array(__CLASS__, 'WpDashboardAdminNotices' ) );
224
- }
225
- }
226
-
227
- public static function WpDashboardAdminNotices() {
228
- $sg = GoogleSitemapGenerator::GetInstance();
229
- $sg->HtmlSurvey();
230
- }
231
-
232
- /**
233
- * Returns a nice icon for the Ozh Admin Menu if the {@param $hook} equals to the sitemap plugin
234
- *
235
- * @param string $hook The hook to compare
236
- * @return string The path to the icon
237
- */
238
- public static function RegisterAdminIcon($hook) {
239
- if($hook == self::GetBaseName() && function_exists('plugins_url')) {
240
- return plugins_url('img/icon-arne.gif', self::GetBaseName());
241
- }
242
- return $hook;
243
- }
244
-
245
- /**
246
- * Registers additional links for the sitemap plugin on the WP plugin configuration page
247
- *
248
- * Registers the links if the $file param equals to the sitemap plugin
249
- * @param $links Array An array with the existing links
250
- * @param $file string The file to compare to
251
- * @return string[]
252
- */
253
- public static function RegisterPluginLinks($links, $file) {
254
- $base = self::GetBaseName();
255
- if($file == $base) {
256
- $links[] = '<a href="options-general.php?page=' . self::GetBaseName() . '">' . __('Settings', 'sitemap') . '</a>';
257
- $links[] = '<a href="http://www.arnebrachhold.de/redir/sitemap-plist-faq/">' . __('FAQ', 'sitemap') . '</a>';
258
- $links[] = '<a href="http://www.arnebrachhold.de/redir/sitemap-plist-support/">' . __('Support', 'sitemap') . '</a>';
259
- }
260
- return $links;
261
- }
262
-
263
- /**
264
- * @param $new_status string The new post status
265
- * @param $old_status string The old post status
266
- * @param $post WP_Post The post object
267
- */
268
- public static function SchedulePingOnStatusChange($new_status, $old_status, $post ) {
269
- if($new_status == 'publish') {
270
- set_transient('sm_ping_post_id', $post->ID, 120);
271
- wp_schedule_single_event(time() + 5, 'sm_ping');
272
- }
273
- }
274
-
275
- /**
276
- * Invokes the HtmlShowOptionsPage method of the generator
277
- * @uses GoogleSitemapGeneratorLoader::LoadPlugin()
278
- * @uses GoogleSitemapGenerator::HtmlShowOptionsPage()
279
- */
280
- public static function CallHtmlShowOptionsPage() {
281
- if(self::LoadPlugin()) {
282
- GoogleSitemapGenerator::GetInstance()->HtmlShowOptionsPage();
283
- }
284
- }
285
-
286
- /**
287
- * Invokes the ShowPingResult method of the generator
288
- * @uses GoogleSitemapGeneratorLoader::LoadPlugin()
289
- * @uses GoogleSitemapGenerator::ShowPingResult()
290
- */
291
- public static function CallShowPingResult() {
292
- if(self::LoadPlugin()) {
293
- GoogleSitemapGenerator::GetInstance()->ShowPingResult();
294
- }
295
- }
296
-
297
- /**
298
- * Invokes the SendPing method of the generator
299
- * @uses GoogleSitemapGeneratorLoader::LoadPlugin()
300
- * @uses GoogleSitemapGenerator::SendPing()
301
- */
302
- public static function CallSendPing() {
303
- if(self::LoadPlugin()) {
304
- GoogleSitemapGenerator::GetInstance()->SendPing();
305
- }
306
- }
307
-
308
- /**
309
- * Invokes the SendPingDaily method of the generator
310
- * @uses GoogleSitemapGeneratorLoader::LoadPlugin()
311
- * @uses GoogleSitemapGenerator::SendPingDaily()
312
- */
313
- public static function CallSendPingDaily()
314
- {
315
- if (self::LoadPlugin()) {
316
- GoogleSitemapGenerator::GetInstance()->SendPingDaily();
317
- }
318
- }
319
-
320
- /**
321
- * Invokes the ShowSitemap method of the generator
322
- * @uses GoogleSitemapGeneratorLoader::LoadPlugin()
323
- * @uses GoogleSitemapGenerator::ShowSitemap()
324
- */
325
- public static function CallShowSitemap($options) {
326
- if(self::LoadPlugin()) {
327
- GoogleSitemapGenerator::GetInstance()->ShowSitemap($options);
328
- }
329
- }
330
-
331
- /**
332
- * Invokes the DoRobots method of the generator
333
- * @uses GoogleSitemapGeneratorLoader::LoadPlugin()
334
- * @uses GoogleSitemapGenerator::DoRobots()
335
- */
336
- public static function CallDoRobots() {
337
- if(self::LoadPlugin()) {
338
- GoogleSitemapGenerator::GetInstance()->DoRobots();
339
- }
340
- }
341
-
342
- /**
343
- * Displays the help links in the upper Help Section of WordPress
344
- *
345
- * @return Array The new links
346
- */
347
- public static function CallHtmlShowHelpList() {
348
-
349
- $screen = get_current_screen();
350
- $id = get_plugin_page_hookname(self::GetBaseName(), 'options-general.php');
351
-
352
- if(is_object($screen) && $screen->id == $id) {
353
-
354
- /*
355
- load_plugin_textdomain('sitemap',false,dirname( plugin_basename( __FILE__ ) ) . '/lang');
356
-
357
- $links = array(
358
- __('Plugin Homepage', 'sitemap') => 'http://www.arnebrachhold.de/redir/sitemap-help-home/',
359
- __('My Sitemaps FAQ', 'sitemap') => 'http://www.arnebrachhold.de/redir/sitemap-help-faq/'
360
- );
361
-
362
- $filterVal[$id] = '';
363
-
364
- $i = 0;
365
- foreach($links AS $text => $url) {
366
- $filterVal[$id] .= '<a href="' . $url . '">' . $text . '</a>' . ($i < (count($links) - 1) ? ' | ' : '');
367
- $i++;
368
- }
369
-
370
- $screen->add_help_tab( array(
371
- 'id' => 'sitemap-links',
372
- 'title' => __('My Sitemaps FAQ', 'sitemap'),
373
- 'content' => '<p>' . __('dsf dsf sd f', 'sitemap') . '</p>',
374
-
375
- ));
376
- */
377
-
378
- }
379
- //return $filterVal;
380
- }
381
-
382
-
383
- /**
384
- * Loads the actual generator class and tries to raise the memory and time limits if not already done by WP
385
- *
386
- * @uses GoogleSitemapGenerator::Enable()
387
- * @return boolean true if run successfully
388
- */
389
- public static function LoadPlugin() {
390
-
391
- if(!class_exists("GoogleSitemapGenerator")) {
392
-
393
- $mem = abs(intval(@ini_get('memory_limit')));
394
- if($mem && $mem < 128) {
395
- @ini_set('memory_limit', '128M');
396
- }
397
-
398
- $time = abs(intval(@ini_get("max_execution_time")));
399
- if($time != 0 && $time < 120) {
400
- @set_time_limit(120);
401
- }
402
-
403
- $path = trailingslashit(dirname(__FILE__));
404
-
405
- if(!file_exists($path . 'sitemap-core.php')) return false;
406
- require_once($path . 'sitemap-core.php');
407
- }
408
-
409
- GoogleSitemapGenerator::Enable();
410
- return true;
411
- }
412
-
413
- /**
414
- * Returns the plugin basename of the plugin (using __FILE__)
415
- *
416
- * @return string The plugin basename, "sitemap" for example
417
- */
418
- public static function GetBaseName() {
419
- return plugin_basename(sm_GetInitFile());
420
- }
421
-
422
- /**
423
- * Returns the name of this loader script, using sm_GetInitFile
424
- *
425
- * @return string The sm_GetInitFile value
426
- */
427
- public static function GetPluginFile() {
428
- return sm_GetInitFile();
429
- }
430
-
431
- /**
432
- * Returns the plugin version
433
- *
434
- * Uses the WP API to get the meta data from the top of this file (comment)
435
- *
436
- * @return string The version like 3.1.1
437
- */
438
- public static function GetVersion() {
439
- if(!isset($GLOBALS["sm_version"])) {
440
- if(!function_exists('get_plugin_data')) {
441
- if(file_exists(ABSPATH . 'wp-admin/includes/plugin.php')) {
442
- require_once(ABSPATH . 'wp-admin/includes/plugin.php');
443
- }
444
- else return "0.ERROR";
445
- }
446
- $data = get_plugin_data(self::GetPluginFile(), false, false);
447
- $GLOBALS["sm_version"] = $data['Version'];
448
- }
449
- return $GLOBALS["sm_version"];
450
- }
451
-
452
- public static function GetSvnVersion() {
453
- return self::$svnVersion;
454
- }
455
- }
456
-
457
- //Enable the plugin for the init hook, but only if WP is loaded. Calling this php file directly will do nothing.
458
- if(defined('ABSPATH') && defined('WPINC')) {
459
- add_action("init", array("GoogleSitemapGeneratorLoader", "Enable"), 15, 0);
460
- register_activation_hook(sm_GetInitFile(), array('GoogleSitemapGeneratorLoader', 'ActivatePlugin'));
461
- register_deactivation_hook(sm_GetInitFile(), array('GoogleSitemapGeneratorLoader', 'DeactivatePlugin'));
462
-
463
- //Set up hooks for adding permalinks, query vars.
464
- //Don't wait until init with this, since other plugins might flush the rewrite rules in init already...
465
- GoogleSitemapGeneratorLoader::SetupQueryVars();
466
- GoogleSitemapGeneratorLoader::SetupRewriteHooks();
467
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
sitemap-ui.php DELETED
@@ -1,1316 +0,0 @@
1
- <?php
2
- /*
3
-
4
- $Id: sitemap-ui.php 935247 2014-06-19 17:13:03Z arnee $
5
-
6
- */
7
-
8
- class GoogleSitemapGeneratorUI {
9
-
10
- /**
11
- * The Sitemap Generator Object
12
- *
13
- * @var GoogleSitemapGenerator
14
- */
15
- private $sg = null;
16
-
17
-
18
- public function __construct(GoogleSitemapGenerator $sitemapBuilder) {
19
- $this->sg = $sitemapBuilder;
20
- }
21
-
22
- private function HtmlPrintBoxHeader($id, $title) {
23
- ?>
24
- <div id="<?php echo $id; ?>" class="postbox">
25
- <h3 class="hndle"><span><?php echo $title ?></span></h3>
26
- <div class="inside">
27
- <?php
28
- }
29
-
30
- private function HtmlPrintBoxFooter() {
31
- ?>
32
- </div>
33
- </div>
34
- <?php
35
- }
36
-
37
- /**
38
- * Echos option fields for an select field containing the valid change frequencies
39
- *
40
- * @since 4.0
41
- * @param $currentVal mixed The value which should be selected
42
- */
43
- public function HtmlGetFreqNames($currentVal) {
44
-
45
- foreach($this->sg->GetFreqNames() AS $k=>$v) {
46
- echo "<option value=\"" . esc_attr($k) . "\" " . self::HtmlGetSelected($k,$currentVal) .">" . esc_attr($v) . "</option>";
47
- }
48
- }
49
-
50
- /**
51
- * Echos option fields for an select field containing the valid priorities (0- 1.0)
52
- *
53
- * @since 4.0
54
- * @param $currentVal string The value which should be selected
55
- * @return void
56
- */
57
- public static function HtmlGetPriorityValues($currentVal) {
58
- $currentVal=(float) $currentVal;
59
- for($i=0.0; $i<=1.0; $i+=0.1) {
60
- $v = number_format($i,1,".","");
61
- echo "<option value=\"" . esc_attr($v) . "\" " . self::HtmlGetSelected("$i","$currentVal") .">";
62
- echo esc_attr(number_format_i18n($i,1));
63
- echo "</option>";
64
- }
65
- }
66
-
67
- /**
68
- * Returns the checked attribute if the given values match
69
- *
70
- * @since 4.0
71
- * @param $val string The current value
72
- * @param $equals string The value to match
73
- * @return string The checked attribute if the given values match, an empty string if not
74
- */
75
- public static function HtmlGetChecked($val, $equals) {
76
- if($val==$equals) return self::HtmlGetAttribute("checked");
77
- else return "";
78
- }
79
-
80
- /**
81
- * Returns the selected attribute if the given values match
82
- *
83
- * @since 4.0
84
- * @param $val string The current value
85
- * @param $equals string The value to match
86
- * @return string The selected attribute if the given values match, an empty string if not
87
- */
88
- public static function HtmlGetSelected($val,$equals) {
89
- if($val==$equals) return self::HtmlGetAttribute("selected");
90
- else return "";
91
- }
92
-
93
- /**
94
- * Returns an formatted attribute. If the value is NULL, the name will be used.
95
- *
96
- * @since 4.0
97
- * @param $attr string The attribute name
98
- * @param $value string The attribute value
99
- * @return string The formatted attribute
100
- */
101
- public static function HtmlGetAttribute($attr,$value=NULL) {
102
- if($value==NULL) $value=$attr;
103
- return " " . $attr . "=\"" . esc_attr($value) . "\" ";
104
- }
105
-
106
- /**
107
- * Returns an array with GoogleSitemapGeneratorPage objects which is generated from POST values
108
- *
109
- * @since 4.0
110
- * @see GoogleSitemapGeneratorPage
111
- * @return array An array with GoogleSitemapGeneratorPage objects
112
- */
113
- public function HtmlApplyPages() {
114
- // Array with all page URLs
115
- $pages_ur=(!isset($_POST["sm_pages_ur"]) || !is_array($_POST["sm_pages_ur"])?array():$_POST["sm_pages_ur"]);
116
-
117
- //Array with all priorities
118
- $pages_pr=(!isset($_POST["sm_pages_pr"]) || !is_array($_POST["sm_pages_pr"])?array():$_POST["sm_pages_pr"]);
119
-
120
- //Array with all change frequencies
121
- $pages_cf=(!isset($_POST["sm_pages_cf"]) || !is_array($_POST["sm_pages_cf"])?array():$_POST["sm_pages_cf"]);
122
-
123
- //Array with all lastmods
124
- $pages_lm=(!isset($_POST["sm_pages_lm"]) || !is_array($_POST["sm_pages_lm"])?array():$_POST["sm_pages_lm"]);
125
-
126
- //Array where the new pages are stored
127
- $pages=array();
128
- //Loop through all defined pages and set their properties into an object
129
- if(isset($_POST["sm_pages_mark"]) && is_array($_POST["sm_pages_mark"])) {
130
- for($i=0; $i<count($_POST["sm_pages_mark"]); $i++) {
131
- //Create new object
132
- $p=new GoogleSitemapGeneratorPage();
133
- if(substr($pages_ur[$i],0,4)=="www.") $pages_ur[$i]="http://" . $pages_ur[$i];
134
- $p->SetUrl($pages_ur[$i]);
135
- $p->SetProprity($pages_pr[$i]);
136
- $p->SetChangeFreq($pages_cf[$i]);
137
- //Try to parse last modified, if -1 (note ===) automatic will be used (0)
138
- $lm=(!empty($pages_lm[$i])?strtotime($pages_lm[$i],time()):-1);
139
- if($lm===-1) $p->setLastMod(0);
140
- else $p->setLastMod($lm);
141
- //Add it to the array
142
- array_push($pages,$p);
143
- }
144
- }
145
-
146
- return $pages;
147
- }
148
-
149
- static public function escape($v) {
150
- // prevent html tags in strings where they are not required
151
- return strtr($v, '<>', '..');
152
- }
153
-
154
- /**
155
- * Displays the option page
156
- *
157
- * @since 3.0
158
- * @access public
159
- * @author Arne Brachhold
160
- */
161
- public function HtmlShowOptionsPage() {
162
- global $wp_version;
163
-
164
- $snl = false; //SNL
165
-
166
- $this->sg->Initate();
167
-
168
- $message="";
169
-
170
- if(!empty($_REQUEST["sm_rebuild"])) { //Pressed Button: Rebuild Sitemap
171
- check_admin_referer('sitemap');
172
-
173
-
174
- if(isset($_GET["sm_do_debug"]) && $_GET["sm_do_debug"]=="true") {
175
-
176
- //Check again, just for the case that something went wrong before
177
- if(!current_user_can("administrator") || !is_super_admin()) {
178
- echo '<p>Please log in as admin</p>';
179
- return;
180
- }
181
-
182
- $oldErr = error_reporting(E_ALL);
183
- $oldIni = ini_set("display_errors",1);
184
-
185
- echo '<div class="wrap">';
186
- echo '<h2>' . __('XML Sitemap Generator for WordPress', 'sitemap') . " " . $this->sg->GetVersion(). '</h2>';
187
- echo '<p>This is the debug mode of the XML Sitemap Generator. It will show all PHP notices and warnings as well as the internal logs, messages and configuration.</p>';
188
- echo '<p style="font-weight:bold; color:red; padding:5px; border:1px red solid; text-align:center;">DO NOT POST THIS INFORMATION ON PUBLIC PAGES LIKE SUPPORT FORUMS AS IT MAY CONTAIN PASSWORDS OR SECRET SERVER INFORMATION!</p>';
189
- echo "<h3>WordPress and PHP Information</h3>";
190
- echo '<p>WordPress ' . $GLOBALS['wp_version'] . ' with ' . ' DB ' . $GLOBALS['wp_db_version'] . ' on PHP ' . phpversion() . '</p>';
191
- echo '<p>Plugin version: ' . $this->sg->GetVersion() . ' (' . $this->sg->GetSvnVersion() . ')';
192
- echo '<h4>Environment</h4>';
193
- echo "<pre>";
194
- $sc = $_SERVER;
195
- unset($sc["HTTP_COOKIE"]);
196
- print_r($sc);
197
- echo "</pre>";
198
- echo "<h4>WordPress Config</h4>";
199
- echo "<pre>";
200
- $opts = array();
201
- if(function_exists('wp_load_alloptions')) {
202
- $opts = wp_load_alloptions();
203
- } else {
204
- /** @var $wpdb wpdb*/
205
- global $wpdb;
206
- $os = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options");
207
- foreach ( (array) $os as $o ) $opts[$o->option_name] = $o->option_value;
208
- }
209
-
210
- $popts = array();
211
- foreach($opts as $k=>$v) {
212
- //Try to filter out passwords etc...
213
- if(preg_match("/pass|login|pw|secret|user|usr|key|auth|token/si",$k)) continue;
214
- $popts[$k] = htmlspecialchars($v);
215
- }
216
- print_r($popts);
217
- echo "</pre>";
218
- echo '<h4>Sitemap Config</h4>';
219
- echo "<pre>";
220
- print_r($this->sg->GetOptions());
221
- echo "</pre>";
222
- echo '<h3>Sitemap Content and Errors, Warnings, Notices</h3>';
223
- echo '<div>';
224
-
225
- $sitemaps = $this->sg->SimulateIndex();
226
-
227
- foreach($sitemaps AS $sitemap) {
228
-
229
- /** @var $s GoogleSitemapGeneratorSitemapEntry */
230
- $s = $sitemap["data"];
231
-
232
- echo "<h4>Sitemap: <a href=\"" . $s->GetUrl() . "\">" . $sitemap["type"] . "/" . ($sitemap["params"]?$sitemap["params"]:"(No parameters)") . "</a> by " . $sitemap["caller"]["class"] . "</h4>";
233
-
234
- $res = $this->sg->SimulateSitemap($sitemap["type"], $sitemap["params"]);
235
-
236
- echo "<ul style='padding-left:10px;'>";
237
- foreach($res AS $s) {
238
- /** @var $d GoogleSitemapGeneratorSitemapEntry */
239
- $d = $s["data"];
240
- echo "<li>" . $d->GetUrl() . "</li>";
241
- }
242
- echo "</ul>";
243
- }
244
-
245
- $status = GoogleSitemapGeneratorStatus::Load();
246
- echo '</div>';
247
- echo '<h3>MySQL Queries</h3>';
248
- if(defined('SAVEQUERIES') && SAVEQUERIES) {
249
- echo '<pre>';
250
- var_dump($GLOBALS['wpdb']->queries);
251
- echo '</pre>';
252
-
253
- $total = 0;
254
- foreach($GLOBALS['wpdb']->queries as $q) {
255
- $total+=$q[1];
256
- }
257
- echo '<h4>Total Query Time</h4>';
258
- echo '<pre>' . count($GLOBALS['wpdb']->queries) . ' queries in ' . round($total,2) . ' seconds.</pre>';
259
- } else {
260
- echo '<p>Please edit wp-db.inc.php in wp-includes and set SAVEQUERIES to true if you want to see the queries.</p>';
261
- }
262
- echo "<h3>Build Process Results</h3>";
263
- echo "<pre>";
264
- print_r($status);
265
- echo "</pre>";
266
- echo '<p>Done. <a href="' . wp_nonce_url($this->sg->GetBackLink() . "&sm_rebuild=true&sm_do_debug=true",'sitemap') . '">Rebuild</a> or <a href="' . $this->sg->GetBackLink() . '">Return</a></p>';
267
- echo '<p style="font-weight:bold; color:red; padding:5px; border:1px red solid; text-align:center;">DO NOT POST THIS INFORMATION ON PUBLIC PAGES LIKE SUPPORT FORUMS AS IT MAY CONTAIN PASSWORDS OR SECRET SERVER INFORMATION!</p>';
268
- echo '</div>';
269
- @error_reporting($oldErr);
270
- @ini_set("display_errors",$oldIni);
271
- return;
272
- } else {
273
-
274
- $redirURL = $this->sg->GetBackLink() . '&sm_fromrb=true';
275
-
276
- //Redirect so the sm_rebuild GET parameter no longer exists.
277
- @header("location: " . $redirURL);
278
- //If there was already any other output, the header redirect will fail
279
- echo '<script type="text/javascript">location.replace("' . $redirURL . '");</script>';
280
- echo '<noscript><a href="' . $redirURL . '">Click here to continue</a></noscript>';
281
- exit;
282
- }
283
- } else if (!empty($_POST['sm_update'])) { //Pressed Button: Update Config
284
- check_admin_referer('sitemap');
285
-
286
- if(isset($_POST['sm_b_style']) && $_POST['sm_b_style'] == $this->sg->getDefaultStyle()) {
287
- $_POST['sm_b_style_default'] = true;
288
- $_POST['sm_b_style'] = '';
289
- }
290
-
291
- foreach($this->sg->GetOptions() as $k=>$v) {
292
-
293
- //Skip some options if the user is not super admin...
294
- if(!is_super_admin() && in_array($k,array("sm_b_time","sm_b_memory","sm_b_style","sm_b_style_default"))) {
295
- continue;
296
- }
297
-
298
- //Check vor values and convert them into their types, based on the category they are in
299
- if(!isset($_POST[$k])) $_POST[$k]=""; // Empty string will get false on 2bool and 0 on 2float
300
-
301
- //Options of the category "Basic Settings" are boolean, except the filename and the autoprio provider
302
- if(substr($k,0,5)=="sm_b_") {
303
- if($k=="sm_b_prio_provider" || $k == "sm_b_style" || $k == "sm_b_memory" || $k == "sm_b_baseurl") {
304
- if($k=="sm_b_filename_manual" && strpos($_POST[$k],"\\")!==false){
305
- $_POST[$k]=stripslashes(self::escape($_POST[$k]));
306
- } else if($k=="sm_b_baseurl") {
307
- $_POST[$k] = esc_url_raw(trim(self::escape($_POST[$k])));
308
- if(!empty($_POST[$k])) $_POST[$k] = untrailingslashit($_POST[$k]);
309
- } else if($k=="sm_b_style") {
310
- $_POST[$k] = esc_url_raw(trim(self::escape($_POST[$k])));
311
- if(!empty($_POST[$k])) $_POST[$k] = untrailingslashit($_POST[$k]);
312
- }
313
- $this->sg->SetOption($k,(string) $_POST[$k]);
314
- } else if($k == "sm_b_time") {
315
- if($_POST[$k]=='') $_POST[$k] = -1;
316
- $this->sg->SetOption($k,intval($_POST[$k]));
317
- } else if($k== "sm_i_install_date") {
318
- if($this->sg->GetOption('i_install_date')<=0) $this->sg->SetOption($k,time());
319
- } else if($k=="sm_b_exclude") {
320
- $IDss = array();
321
- $IDs = explode(",",$_POST[$k]);
322
- for($x = 0; $x<count($IDs); $x++) {
323
- $ID = intval(trim($IDs[$x]));
324
- if($ID>0) $IDss[] = $ID;
325
- }
326
- $this->sg->SetOption($k,$IDss);
327
- } else if($k == "sm_b_exclude_cats") {
328
- $exCats = array();
329
- if(isset($_POST["post_category"])) {
330
- foreach((array) $_POST["post_category"] AS $vv) if(!empty($vv) && is_numeric($vv)) $exCats[] = intval($vv);
331
- }
332
- $this->sg->SetOption($k,$exCats);
333
- } else {
334
- $this->sg->SetOption($k,(bool) $_POST[$k]);
335
-
336
- }
337
- //Options of the category "Includes" are boolean
338
- } else if(substr($k,0,6)=="sm_in_") {
339
- if($k=='sm_in_tax') {
340
-
341
- $enabledTaxonomies = array();
342
-
343
- foreach(array_keys((array) $_POST[$k]) AS $taxName) {
344
- if(empty($taxName) || !taxonomy_exists($taxName)) continue;
345
-
346
- $enabledTaxonomies[] = self::escape($taxName);
347
- }
348
-
349
- $this->sg->SetOption($k,$enabledTaxonomies);
350
-
351
- } else if($k=='sm_in_customtypes') {
352
-
353
- $enabledPostTypes = array();
354
-
355
- foreach(array_keys((array) $_POST[$k]) AS $postTypeName) {
356
- if(empty($postTypeName) || !post_type_exists($postTypeName)) continue;
357
-
358
- $enabledPostTypes[] = self::escape($postTypeName);
359
- }
360
-
361
- $this->sg->SetOption($k, $enabledPostTypes);
362
-
363
- } else $this->sg->SetOption($k,(bool) $_POST[$k]);
364
- //Options of the category "Change frequencies" are string
365
- } else if(substr($k,0,6)=="sm_cf_") {
366
- $this->sg->SetOption($k,(string) self::escape($_POST[$k]));
367
- //Options of the category "Priorities" are float
368
- } else if(substr($k,0,6)=="sm_pr_") {
369
- $this->sg->SetOption($k,(float) $_POST[$k]);
370
- }
371
- }
372
-
373
- //Apply page changes from POST
374
- if(is_super_admin()) $this->sg->SetPages($this->HtmlApplyPages());
375
-
376
- if($this->sg->SaveOptions()) $message.=__('Configuration updated', 'sitemap') . "<br />";
377
- else $message.=__('Error while saving options', 'sitemap') . "<br />";
378
-
379
- if(is_super_admin()) {
380
- if($this->sg->SavePages()) $message.=__("Pages saved",'sitemap') . "<br />";
381
- else $message.=__('Error while saving pages', 'sitemap'). "<br />";
382
- }
383
-
384
- } else if(!empty($_POST["sm_reset_config"])) { //Pressed Button: Reset Config
385
- check_admin_referer('sitemap');
386
- $this->sg->InitOptions();
387
- $this->sg->SaveOptions();
388
-
389
- $message.=__('The default configuration was restored.','sitemap');
390
- } else if(!empty($_GET["sm_delete_old"])) { //Delete old sitemap files
391
- check_admin_referer('sitemap');
392
-
393
- //Check again, just for the case that something went wrong before
394
- if(!current_user_can("administrator")) {
395
- echo '<p>Please log in as admin</p>';
396
- return;
397
- }
398
- if(!$this->sg->DeleteOldFiles()) {
399
- $message = __("The old files could NOT be deleted. Please use an FTP program and delete them by yourself.","sitemap");
400
- } else {
401
- $message = __("The old files were successfully deleted.","sitemap");
402
- }
403
- } else if(!empty($_GET["sm_ping_all"])) {
404
- check_admin_referer('sitemap');
405
-
406
- //Check again, just for the case that something went wrong before
407
- if(!current_user_can("administrator")) {
408
- echo '<p>Please log in as admin</p>';
409
- return;
410
- }
411
-
412
- echo <<<HTML
413
- <html>
414
- <head>
415
- <style type="text/css">
416
- html {
417
- background: #f1f1f1;
418
- }
419
-
420
- body {
421
- color: #444;
422
- font-family: "Open Sans", sans-serif;
423
- font-size: 13px;
424
- line-height: 1.4em;
425
- min-width: 600px;
426
- }
427
-
428
- h2 {
429
- font-size: 23px;
430
- font-weight: 400;
431
- padding: 9px 10px 4px 0;
432
- line-height: 29px;
433
- }
434
- </style>
435
- </head>
436
- <body>
437
- HTML;
438
- echo "<h2>" . __('Notify Search Engines about all sitemaps','sitemap') ."</h2>";
439
- echo "<p>" . __('The plugin is notifying the selected search engines about your main sitemap and all sub-sitemaps. This might take a minute or two.','sitemaps') . "</p>";
440
- flush();
441
- $results = $this->sg->SendPingAll();
442
-
443
- echo "<ul>";
444
-
445
- foreach($results AS $result) {
446
-
447
- $sitemapUrl = $result["sitemap"];
448
- /** @var $status GoogleSitemapGeneratorStatus */
449
- $status = $result["status"];
450
-
451
- echo "<li><a href=\"" . esc_url($sitemapUrl) . "\">" . $sitemapUrl . "</a><ul>";
452
- $services = $status->GetUsedPingServices();
453
- foreach($services AS $serviceId) {
454
- echo "<li>";
455
- echo $status->GetServiceName($serviceId) . ": " . ($status->GetPingResult($serviceId)==true?"OK":"ERROR");
456
- echo "</li>";
457
- }
458
- echo "</ul></li>";
459
- }
460
- echo "</ul>";
461
- echo "<p>" . __('All done!','sitemap') . "</p>";
462
- echo <<<HTML
463
-
464
- </body>
465
- HTML;
466
- exit;
467
- } else if(!empty($_GET["sm_ping_main"])) {
468
-
469
- check_admin_referer('sitemap');
470
-
471
- //Check again, just for the case that something went wrong before
472
- if(!current_user_can("administrator")) {
473
- echo '<p>Please log in as admin</p>';
474
- return;
475
- }
476
-
477
- $this->sg->SendPing();
478
- $message = __("Ping was executed, please see below for the result.","sitemap");
479
- }
480
-
481
- //Print out the message to the user, if any
482
- if($message!="") {
483
- ?>
484
- <div class="updated"><p><strong><?php
485
- echo $message;
486
- ?></strong></p></div><?php
487
- }
488
-
489
-
490
- if(!$snl) {
491
-
492
- if(isset($_GET['sm_hidedonate'])) {
493
- $this->sg->SetOption('i_hide_donated',true);
494
- $this->sg->SaveOptions();
495
- }
496
- if(isset($_GET['sm_donated'])) {
497
- $this->sg->SetOption('i_donated',true);
498
- $this->sg->SaveOptions();
499
- }
500
- if(isset($_GET['sm_hide_note'])) {
501
- $this->sg->SetOption('i_hide_note',true);
502
- $this->sg->SaveOptions();
503
- }
504
- if(isset($_GET['sm_hide_survey'])) {
505
- $this->sg->SetOption('i_hide_survey',true);
506
- $this->sg->SaveOptions();
507
- }
508
- if(isset($_GET['sm_hidedonors'])) {
509
- $this->sg->SetOption('i_hide_donors',true);
510
- $this->sg->SaveOptions();
511
- }
512
- if(isset($_GET['sm_hide_works'])) {
513
- $this->sg->SetOption('i_hide_works',true);
514
- $this->sg->SaveOptions();
515
- }
516
- if(isset($_GET['sm_disable_supportfeed'])) {
517
- $this->sg->SetOption('i_supportfeed',$_GET["sm_disable_supportfeed"]=="true"?false:true);
518
- $this->sg->SaveOptions();
519
- }
520
-
521
-
522
- if(isset($_GET['sm_donated']) || ($this->sg->GetOption('i_donated')===true && $this->sg->GetOption('i_hide_donated')!==true)) {
523
- ?>
524
- <!--
525
- <div class="updated">
526
- <strong><p><?php _e('Thank you very much for your donation. You help me to continue support and development of this plugin and other free software!','sitemap'); ?> <a href="<?php echo $this->sg->GetBackLink() . "&amp;sm_hidedonate=true"; ?>"><small style="font-weight:normal;"><?php _e('Hide this notice', 'sitemap'); ?></small></a></p></strong>
527
- </div>
528
- -->
529
- <?php
530
- } else if($this->sg->GetOption('i_donated') !== true && $this->sg->GetOption('i_install_date')>0 && $this->sg->GetOption('i_hide_note')!==true && time() > ($this->sg->GetOption('i_install_date') + (60*60*24*30))) {
531
- ?>
532
- <!--
533
- <div class="updated">
534
- <strong><p><?php echo str_replace("%s",$this->sg->GetRedirectLink("sitemap-donate-note"),__('Thanks for using this plugin! You\'ve installed this plugin over a month ago. If it works and you are satisfied with the results, isn\'t it worth at least a few dollar? <a href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-donate-note">Donations</a> help me to continue support and development of this <i>free</i> software! <a href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-donate-note">Sure, no problem!</a>','sitemap')); ?> <a href="<?php echo $this->sg->GetBackLink() . "&amp;sm_donated=true"; ?>" style="float:right; display:block; border:none; margin-left:10px;"><small style="font-weight:normal; "><?php _e('Sure, but I already did!', 'sitemap'); ?></small></a> <a href="<?php echo $this->sg->GetBackLink() . "&amp;sm_hide_note=true"; ?>" style="float:right; display:block; border:none;"><small style="font-weight:normal; "><?php _e('No thanks, please don\'t bug me anymore!', 'sitemap'); ?></small></a></p></strong>
535
- <div style="clear:right;"></div>
536
- </div>
537
- -->
538
- <?php
539
- } else if($this->sg->GetOption('i_install_date')>0 && $this->sg->GetOption('i_hide_works')!==true && time() > ($this->sg->GetOption('i_install_date') + (60*60*24*15))) {
540
- ?>
541
- <div class="updated">
542
- <strong><p><?php echo str_replace("%s",$this->sg->GetRedirectLink("sitemap-works-note"),__('Thanks for using this plugin! You\'ve installed this plugin some time ago. If it works and your are satisfied, why not <a href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-works-note">rate it</a> and <a href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-works-note">recommend it</a> to others? :-)','sitemap')); ?> <a href="<?php echo $this->sg->GetBackLink() . "&amp;sm_hide_works=true"; ?>" style="float:right; display:block; border:none;"><small style="font-weight:normal; "><?php _e('Don\'t show this anymore', 'sitemap'); ?></small></a></p></strong>
543
- <div style="clear:right;"></div>
544
- </div>
545
- <?php
546
- }
547
-
548
- if ($this->sg->ShowSurvey())
549
- $this->sg->HtmlSurvey();
550
- }
551
-
552
- ?>
553
-
554
- <style type="text/css">
555
-
556
- li.sm_hint {
557
- color:green;
558
- }
559
-
560
- li.sm_optimize {
561
- color:orange;
562
- }
563
-
564
- li.sm_error {
565
- color:red;
566
- }
567
-
568
- input.sm_warning:hover {
569
- background: #ce0000;
570
- color: #fff;
571
- }
572
-
573
- a.sm_button {
574
- padding:4px;
575
- display:block;
576
- padding-left:25px;
577
- background-repeat:no-repeat;
578
- background-position:5px 50%;
579
- text-decoration:none;
580
- border:none;
581
- }
582
-
583
- a.sm_button:hover {
584
- border-bottom-width:1px;
585
- }
586
-
587
- a.sm_donatePayPal {
588
- background-image:url(<?php echo $this->sg->GetPluginUrl(); ?>img/icon-paypal.gif);
589
- }
590
-
591
- a.sm_donateAmazon {
592
- background-image:url(<?php echo $this->sg->GetPluginUrl(); ?>img/icon-amazon.gif);
593
- }
594
-
595
- a.sm_pluginHome {
596
- background-image:url(<?php echo $this->sg->GetPluginUrl(); ?>img/icon-arne.gif);
597
- }
598
-
599
- a.sm_pluginHelp {
600
- background-image:url(<?php echo $this->sg->GetPluginUrl(); ?>img/icon-help.png);
601
- }
602
-
603
- a.sm_pluginList {
604
- background-image:url(<?php echo $this->sg->GetPluginUrl(); ?>img/icon-email.gif);
605
- }
606
-
607
- a.sm_pluginSupport {
608
- background-image:url(<?php echo $this->sg->GetPluginUrl(); ?>img/icon-wordpress.gif);
609
- }
610
-
611
- a.sm_pluginBugs {
612
- background-image:url(<?php echo $this->sg->GetPluginUrl(); ?>img/icon-trac.gif);
613
- }
614
-
615
- a.sm_resGoogle {
616
- background-image:url(<?php echo $this->sg->GetPluginUrl(); ?>img/icon-google.gif);
617
- }
618
-
619
- a.sm_resYahoo {
620
- background-image:url(<?php echo $this->sg->GetPluginUrl(); ?>img/icon-yahoo.gif);
621
- }
622
-
623
- a.sm_resBing {
624
- background-image:url(<?php echo $this->sg->GetPluginUrl(); ?>img/icon-bing.gif);
625
- }
626
-
627
- div.sm-update-nag p {
628
- margin:5px;
629
- }
630
-
631
- .sm-padded .inside {
632
- margin: 12px !important;
633
- }
634
-
635
- .sm-padded .inside ul {
636
- margin: 6px 0 12px 0;
637
- }
638
-
639
- .sm-padded .inside input {
640
- padding: 1px;
641
- margin: 0;
642
- }
643
-
644
- .hndle {
645
- cursor:auto!important;
646
- -webkit-user-select:auto!important;
647
- -moz-user-select:auto!important;
648
- -ms-user-select:auto!important;
649
- user-select:auto!important;
650
- }
651
-
652
-
653
- <?php if (version_compare($wp_version, "3.4", "<")): //Fix style for WP 3.4 (dirty way for now..) ?>
654
-
655
- .inner-sidebar #side-sortables, .columns-2 .inner-sidebar #side-sortables {
656
- min-height: 300px;
657
- width: 280px;
658
- padding: 0;
659
- }
660
-
661
- .has-right-sidebar .inner-sidebar {
662
- display: block;
663
- }
664
-
665
- .inner-sidebar {
666
- float: right;
667
- clear: right;
668
- display: none;
669
- width: 281px;
670
- position: relative;
671
- }
672
-
673
- .has-right-sidebar #post-body-content {
674
- margin-right: 300px;
675
- }
676
-
677
- #post-body-content {
678
- width: auto !important;
679
- float: none !important;
680
- }
681
-
682
- <?php endif; ?>
683
-
684
-
685
- </style>
686
-
687
-
688
- <div class="wrap" id="sm_div">
689
- <form method="post" action="<?php echo $this->sg->GetBackLink() ?>">
690
- <h2><?php _e('XML Sitemap Generator for WordPress', 'sitemap'); echo " " . $this->sg->GetVersion() ?> </h2>
691
- <?php
692
-
693
- if(get_option('blog_public')!=1) {
694
- ?><div class="error"><p><?php echo str_replace("%s","options-reading.php#blog_public",__('Your site is currently blocking search engines! Visit the <a href="%s">Reading Settings</a> to change this.','sitemap')); ?></p></div><?php
695
- }
696
-
697
- ?>
698
-
699
- <?php if(!$snl): ?>
700
- <div id="poststuff" class="metabox-holder has-right-sidebar">
701
- <div class="inner-sidebar">
702
- <div id="side-sortables" class="meta-box-sortabless ui-sortable" style="position:relative;">
703
- <?php else: ?>
704
- <div id="poststuff" class="metabox-holder">
705
- <?php endif; ?>
706
-
707
-
708
- <?php if(!$snl): ?>
709
- <?php $this->HtmlPrintBoxHeader('sm_pnres',__('About this Plugin:','sitemap'),true); ?>
710
- <a class="sm_button sm_pluginHome" href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-home"><?php _e('Plugin Homepage','sitemap'); ?></a>
711
- <a class="sm_button sm_pluginHome" href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-feedback"><?php _e('Suggest a Feature','sitemap'); ?></a>
712
- <a class="sm_button sm_pluginHelp" href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-help"><?php _e('Help / FAQ','sitemap'); ?></a>
713
- <a class="sm_button sm_pluginList" href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-list"><?php _e('Notify List','sitemap'); ?></a>
714
- <a class="sm_button sm_pluginSupport" href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-support"><?php _e('Support Forum','sitemap'); ?></a>
715
- <a class="sm_button sm_pluginBugs" href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-bugs"><?php _e('Report a Bug','sitemap'); ?></a>
716
-
717
- <?php if(__('translator_name','sitemap')!='translator_name') {?><a class="sm_button sm_pluginSupport" href="<?php _e('translator_url','sitemap'); ?>"><?php _e('translator_name','sitemap'); ?></a><?php } ?>
718
- <?php $this->HtmlPrintBoxFooter(true); ?>
719
-
720
- <?php $this->HtmlPrintBoxHeader('sm_smres',__('Sitemap Resources:','sitemap'),true); ?>
721
- <a class="sm_button sm_resGoogle" href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-gwt"><?php _e('Webmaster Tools','sitemap'); ?></a>
722
- <a class="sm_button sm_resGoogle" href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-gwb"><?php _e('Webmaster Blog','sitemap'); ?></a>
723
-
724
- <a class="sm_button sm_resYahoo" href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-ywb"><?php _e('Search Blog','sitemap'); ?></a>
725
-
726
- <a class="sm_button sm_resBing" href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-lwt"><?php _e('Webmaster Tools','sitemap'); ?></a>
727
- <a class="sm_button sm_resBing" href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-lswcb"><?php _e('Webmaster Center Blog','sitemap'); ?></a>
728
- <br />
729
- <a class="sm_button sm_resGoogle" href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-prot"><?php _e('Sitemaps Protocol','sitemap'); ?></a>
730
- <a class="sm_button sm_resGoogle" href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-ofat"><?php _e('Official Sitemaps FAQ','sitemap'); ?></a>
731
- <a class="sm_button sm_pluginHome" href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-afaq"><?php _e('My Sitemaps FAQ','sitemap'); ?></a>
732
- <?php $this->HtmlPrintBoxFooter(true); ?>
733
-
734
-
735
- </div>
736
- </div>
737
- <?php endif; ?>
738
-
739
- <div class="has-sidebar sm-padded" >
740
-
741
- <div id="post-body-content" class="<?php if(!$snl): ?>has-sidebar-content<?php endif; ?>">
742
-
743
- <div class="meta-box-sortabless">
744
-
745
-
746
- <!-- Rebuild Area -->
747
- <?php
748
-
749
- $status = GoogleSitemapGeneratorStatus::Load();
750
- $head = __('Search engines haven\'t been notified yet','sitemap');
751
- if($status != null && $status->GetStartTime() > 0) {
752
- $st=$status->GetStartTime() + (get_option( 'gmt_offset' ) * 3600);
753
-
754
- $head=str_replace("%date%",date_i18n(get_option('date_format'),$st) . " " . date_i18n(get_option('time_format'),$st),__('Result of the last ping, started on %date%.','sitemap'));
755
- }
756
-
757
- $this->HtmlPrintBoxHeader('sm_rebuild',$head); ?>
758
-
759
-
760
- <div style="border-left: 1px #DFDFDF solid; float:right; padding-left:15px; margin-left:10px; width:35%;">
761
- <strong><?php _e('Recent Support Topics / News','sitemap'); ?></strong>
762
- <?php
763
- if($this->sg->GetOption('i_supportfeed')) {
764
-
765
- echo "<small><a href=\"" . wp_nonce_url($this->sg->GetBackLink() . "&sm_disable_supportfeed=true") . "\">" . __('Disable','sitemap') . "</a></small>";
766
-
767
- $supportFeed = $this->sg->GetSupportFeed();
768
-
769
- if (!is_wp_error($supportFeed) && $supportFeed) {
770
- $supportItems = $supportFeed->get_items(0, $supportFeed->get_item_quantity(3));
771
-
772
- if(count($supportItems)>0) {
773
- echo "<ul>";
774
- foreach($supportItems AS $item) {
775
- $url = esc_url($item->get_permalink());
776
- $title = esc_html($item->get_title());
777
- echo "<li><a rel=\"external\" target=\"_blank\" href=\"{$url}\">{$title}</a></li>";
778
-
779
- }
780
- echo "</ul>";
781
- }
782
- } else {
783
- echo "<ul><li>" . __('No support topics available or an error occurred while fetching them.','sitemap') . "</li></ul>";
784
- }
785
- } else {
786
- echo "<ul><li>" . __('Support Topics have been disabled. Enable them to see useful information regarding this plugin. No Ads or Spam!','sitemap') . " " . "<a href=\"" . wp_nonce_url($this->sg->GetBackLink() . "&sm_disable_supportfeed=false") . "\">" . __('Enable','sitemap') . "</a>". "</li></ul>";
787
- }
788
- ?>
789
- </div>
790
-
791
-
792
- <div style="min-height:150px;">
793
- <ul>
794
- <?php
795
-
796
- if($this->sg->OldFileExists()) {
797
- echo "<li class=\"sm_error\">" . str_replace("%s",wp_nonce_url($this->sg->GetBackLink() . "&sm_delete_old=true",'sitemap'),__('There is still a sitemap.xml or sitemap.xml.gz file in your site directory. Please delete them as no static files are used anymore or <a href="%s">try to delete them automatically</a>.','sitemap')) . "</li>";
798
- }
799
-
800
- echo "<li>" . str_replace("%s", esc_url($this->sg->getXmlUrl()),__('The URL to your sitemap index file is: <a href="%s">%s</a>.','sitemap')) . "</li>";
801
-
802
- if($status == null) {
803
- echo "<li>" . __('Search engines haven\'t been notified yet. Write a post to let them know about your sitemap.','sitemap') . "</li>";
804
- } else {
805
-
806
- $services = $status->GetUsedPingServices();
807
-
808
- foreach($services AS $service) {
809
- $name = $status->GetServiceName($service);
810
-
811
- if($status->GetPingResult($service)) {
812
- echo "<li>" . sprintf(__("%s was <b>successfully notified</b> about changes.",'sitemap'),$name). "</li>";
813
- $dur = $status->GetPingDuration($service);
814
- if($dur > 4) {
815
- echo "<li class=\sm_optimize\">" . str_replace(array("%time%","%name%"),array($dur,$name),__("It took %time% seconds to notify %name%, maybe you want to disable this feature to reduce the building time.",'sitemap')) . "</li>";
816
- }
817
- } else {
818
- echo "<li class=\"sm_error\">" . str_replace(array("%s","%name%"),array(wp_nonce_url($this->sg->GetBackLink() . "&sm_ping_service=" . $service . "&noheader=true",'sitemap'),$name),__('There was a problem while notifying %name%. <a href="%s" target="_blank">View result</a>','sitemap')) . "</li>";
819
- }
820
- }
821
- }
822
-
823
- ?>
824
- <?php if($this->sg->GetOption('b_ping') || $this->sg->GetOption('b_pingmsn')): ?>
825
- <li>
826
- Notify Search Engines about <a href="<?php echo wp_nonce_url($this->sg->GetBackLink() . "&sm_ping_main=true",'sitemap'); ?>">your sitemap </a> or <a href="#" onclick="window.open('<?php echo wp_nonce_url($this->sg->GetBackLink() . "&sm_ping_all=true&noheader=true",'sitemap'); ?>','','width=650, height=500, resizable=yes'); return false;">your main sitemap and all sub-sitemaps</a> now.
827
- </li>
828
- <?php endif; ?>
829
-
830
- <?php if(is_super_admin()) echo "<li>" . str_replace("%d",wp_nonce_url($this->sg->GetBackLink() . "&sm_rebuild=true&sm_do_debug=true",'sitemap'),__('If you encounter any problems with your sitemap you can use the <a href="%d">debug function</a> to get more information.','sitemap')) . "</li>"; ?>
831
- </ul>
832
- <ul>
833
- <li>
834
- <?php echo sprintf(__('If you like the plugin, please <a target="_blank" href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-works-note">rate it 5 stars</a>! :)','sitemap'),$this->sg->GetRedirectLink('sitemap-works-note'),$this->sg->GetRedirectLink('sitemap-paypal')); ?>
835
- </li>
836
-
837
- </ul>
838
- </div>
839
- <?php $this->HtmlPrintBoxFooter(); ?>
840
-
841
- <?php if($this->sg->IsNginx() && $this->sg->IsUsingPermalinks()): ?>
842
- <?php $this->HtmlPrintBoxHeader('ngin_x',__('Webserver Configuration', 'sitemap')); ?>
843
- <?php _e('Since you are using Nginx as your web-server, please configure the following rewrite rules in case you get 404 Not Found errors for your sitemap:','sitemap'); ?>
844
- <p>
845
- <code style="display:block; overflow-x:auto; white-space: nowrap;">
846
- <?php
847
- $rules = GoogleSitemapGeneratorLoader::GetNginXRules();
848
- foreach($rules AS $rule) {
849
- echo $rule . "<br />";
850
- }
851
- ?>
852
- </code>
853
- </p>
854
- <?php $this->HtmlPrintBoxFooter(); ?>
855
- <?php endif; ?>
856
-
857
-
858
- <!-- Basic Options -->
859
- <?php $this->HtmlPrintBoxHeader('sm_basic_options',__('Basic Options', 'sitemap')); ?>
860
-
861
- <b><?php _e('Update notification:','sitemap'); ?></b> <a href="<?php echo $this->sg->GetRedirectLink('sitemap-help-options-ping'); ?>"><?php _e('Learn more','sitemap'); ?></a>
862
- <ul>
863
- <li>
864
- <input type="checkbox" id="sm_b_ping" name="sm_b_ping" <?php echo ($this->sg->GetOption("b_ping")==true?"checked=\"checked\"":"") ?> />
865
- <label for="sm_b_ping"><?php _e('Notify Google about updates of your site', 'sitemap') ?></label><br />
866
- <small><?php echo str_replace("%s",$this->sg->GetRedirectLink('sitemap-gwt'),__('No registration required, but you can join the <a href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-gwt">Google Webmaster Tools</a> to check crawling statistics.','sitemap')); ?></small>
867
- </li>
868
- <li>
869
- <input type="checkbox" id="sm_b_pingmsn" name="sm_b_pingmsn" <?php echo ($this->sg->GetOption("b_pingmsn")==true?"checked=\"checked\"":"") ?> />
870
- <label for="sm_b_pingmsn"><?php _e('Notify Bing (formerly MSN Live Search) about updates of your site', 'sitemap') ?></label><br />
871
- <small><?php echo str_replace("%s",$this->sg->GetRedirectLink('sitemap-lwt'),__('No registration required, but you can join the <a href="https://8rkh4sskhh.execute-api.us-east-1.amazonaws.com/gsg/v1/sitemap-lwt">Bing Webmaster Tools</a> to check crawling statistics.','sitemap')); ?></small>
872
- </li>
873
- <li>
874
- <label for="sm_b_robots">
875
- <input type="checkbox" id="sm_b_robots" name="sm_b_robots" <?php echo ($this->sg->GetOption("b_robots")==true?"checked=\"checked\"":"") ?> />
876
- <?php _e("Add sitemap URL to the virtual robots.txt file.",'sitemap'); ?>
877
- </label>
878
-
879
- <br />
880
- <small><?php _e('The virtual robots.txt generated by WordPress is used. A real robots.txt file must NOT exist in the site directory!','sitemap'); ?></small>
881
- </li>
882
- </ul>
883
- <?php if(is_super_admin()): ?>
884
- <b><?php _e('Advanced options:','sitemap'); ?></b> <a href="<?php echo $this->sg->GetRedirectLink('sitemap-help-options-adv'); ?>"><?php _e('Learn more','sitemap'); ?></a>
885
- <ul>
886
- <li>
887
- <label for="sm_b_memory"><?php _e('Try to increase the memory limit to:', 'sitemap') ?> <input type="text" name="sm_b_memory" id="sm_b_memory" style="width:40px;" value="<?php echo esc_attr($this->sg->GetOption("b_memory")); ?>" /></label> (<?php echo htmlspecialchars(__('e.g. "4M", "16M"', 'sitemap')); ?>)
888
- </li>
889
- <li>
890
- <label for="sm_b_time"><?php _e('Try to increase the execution time limit to:', 'sitemap') ?> <input type="text" name="sm_b_time" id="sm_b_time" style="width:40px;" value="<?php echo esc_attr(($this->sg->GetOption("b_time")===-1?'':$this->sg->GetOption("b_time"))); ?>" /></label> (<?php echo htmlspecialchars(__('in seconds, e.g. "60" or "0" for unlimited', 'sitemap')) ?>)
891
- </li>
892
- <li>
893
- <label for="sm_b_autozip">
894
- <input type="checkbox" id="sm_b_autozip" name="sm_b_autozip" <?php echo ($this->sg->GetOption("b_autozip")==true?"checked=\"checked\"":"") ?> />
895
- <?php _e('Try to automatically compress the sitemap if the requesting client supports it.', 'sitemap') ?>
896
- </label><br />
897
- <small><?php _e('Disable this option if you get garbled content or encoding errors in your sitemap.','sitemap'); ?></small>
898
- </li>
899
- <li>
900
- <?php $useDefStyle = ($this->sg->GetDefaultStyle() && $this->sg->GetOption('b_style_default')===true); ?>
901
- <label for="sm_b_style"><?php _e('Include a XSLT stylesheet:', 'sitemap') ?> <input <?php echo ($useDefStyle?'disabled="disabled" ':'') ?> type="text" name="sm_b_style" id="sm_b_style" value="<?php echo esc_attr($this->sg->GetOption("b_style")); ?>" /></label>
902
- (<?php _e('Full or relative URL to your .xsl file', 'sitemap') ?>) <?php if($this->sg->GetDefaultStyle()): ?><label for="sm_b_style_default"><input <?php echo ($useDefStyle?'checked="checked" ':'') ?> type="checkbox" id="sm_b_style_default" name="sm_b_style_default" onclick="document.getElementById('sm_b_style').disabled = this.checked;" /> <?php _e('Use default', 'sitemap') ?></label> <?php endif; ?>
903
- </li>
904
- <li>
905
- <label for="sm_b_baseurl"><?php _e('Override the base URL of the sitemap:', 'sitemap') ?> <input type="text" name="sm_b_baseurl" id="sm_b_baseurl" value="<?php echo esc_attr($this->sg->GetOption("b_baseurl")); ?>" /></label><br />
906
- <small><?php _e('Use this if your site is in a sub-directory, but you want the sitemap be located in the root. Requires .htaccess modification.','sitemap'); ?> <a href="<?php echo $this->sg->GetRedirectLink('sitemap-help-options-adv-baseurl'); ?>"><?php _e('Learn more','sitemap'); ?></a></small>
907
- </li>
908
- <li>
909
- <label for="sm_b_html">
910
- <input type="checkbox" id="sm_b_html" name="sm_b_html" <?php if(!$this->sg->IsXslEnabled()) echo 'disabled="disabled"'; ?> <?php echo ($this->sg->GetOption("b_html")==true && $this->sg->IsXslEnabled()?"checked=\"checked\"":"") ?> />
911
- <?php _e('Include sitemap in HTML format', 'sitemap') ?> <?php if(!$this->sg->IsXslEnabled()) _e('(The required PHP XSL Module is not installed)', 'sitemap') ?>
912
- </label>
913
- </li>
914
- <li>
915
- <label for="sm_b_stats">
916
- <input type="checkbox" id="sm_b_stats" name="sm_b_stats" <?php echo ($this->sg->GetOption("b_stats")==true?"checked=\"checked\"":"") ?> />
917
- <?php _e('Allow anonymous statistics (no personal information)', 'sitemap') ?>
918
- </label> <label><a href="<?php echo $this->sg->GetRedirectLink('sitemap-help-options-adv-stats'); ?>"><?php _e('Learn more','sitemap'); ?></a></label>
919
- </li>
920
- </ul>
921
- <?php endif; ?>
922
-
923
- <?php $this->HtmlPrintBoxFooter(); ?>
924
-
925
- <?php if(is_super_admin()): ?>
926
- <?php $this->HtmlPrintBoxHeader('sm_pages',__('Additional Pages', 'sitemap')); ?>
927
-
928
- <?php
929
- _e('Here you can specify files or URLs which should be included in the sitemap, but do not belong to your Site/WordPress.<br />For example, if your domain is www.foo.com and your site is located on www.foo.com/site you might want to include your homepage at www.foo.com','sitemap');
930
- echo "<ul><li>";
931
- echo "<strong>" . __('Note','sitemap'). "</strong>: ";
932
- _e("If your site is in a subdirectory and you want to add pages which are NOT in the site directory or beneath, you MUST place your sitemap file in the root directory (Look at the &quot;Location of your sitemap file&quot; section on this page)!",'sitemap');
933
- echo "</li><li>";
934
- echo "<strong>" . __('URL to the page','sitemap'). "</strong>: ";
935
- _e("Enter the URL to the page. Examples: http://www.foo.com/index.html or www.foo.com/home ",'sitemap');
936
- echo "</li><li>";
937
- echo "<strong>" . __('Priority','sitemap') . "</strong>: ";
938
- _e("Choose the priority of the page relative to the other pages. For example, your homepage might have a higher priority than your imprint.",'sitemap');
939
- echo "</li><li>";
940
- echo "<strong>" . __('Last Changed','sitemap'). "</strong>: ";
941
- _e("Enter the date of the last change as YYYY-MM-DD (2005-12-31 for example) (optional).",'sitemap');
942
-
943
- echo "</li></ul>";
944
- ?>
945
- <script type="text/javascript">
946
- //<![CDATA[
947
- <?php
948
- $freqVals = "'" . implode("','",array_keys($this->sg->GetFreqNames())). "'";
949
- $freqNames = "'" . implode("','",array_values($this->sg->GetFreqNames())). "'";
950
- ?>
951
-
952
- var changeFreqVals = [<?php echo $freqVals; ?>];
953
- var changeFreqNames = [ <?php echo $freqNames; ?>];
954
- var priorities= [0<?php for($i=0.1; $i<1; $i+=0.1) { echo "," . number_format($i,1,".",""); } ?>];
955
-
956
- var pages = [ <?php
957
- $pages = $this->sg->GetPages();
958
- $fd = false;
959
- foreach($pages AS $page) {
960
- if($page instanceof GoogleSitemapGeneratorPage) {
961
- if($fd) echo ",";
962
- else $fd = true;
963
- echo '{url:"' . esc_js($page->getUrl()) . '", priority:' . esc_js(number_format($page->getPriority(),1,".","")) . ', changeFreq:"' . esc_js($page->getChangeFreq()) . '", lastChanged:"' . esc_js(($page->getLastMod()>0?date("Y-m-d",$page->getLastMod()):"")) . '"}';
964
- }
965
-
966
- }
967
- ?> ];
968
- //]]>
969
- </script>
970
- <script type="text/javascript" src="<?php echo $this->sg->GetPluginUrl(); ?>img/sitemap.js"></script>
971
- <table width="100%" cellpadding="3" cellspacing="3" id="sm_pageTable">
972
- <tr>
973
- <th scope="col"><?php _e('URL to the page','sitemap'); ?></th>
974
- <th scope="col"><?php _e('Priority','sitemap'); ?></th>
975
- <th scope="col"><?php _e('Change Frequency','sitemap'); ?></th>
976
- <th scope="col"><?php _e('Last Changed','sitemap'); ?></th>
977
- <th scope="col"><?php _e('#','sitemap'); ?></th>
978
- </tr>
979
- <?php
980
- if(count($pages)<=0) { ?>
981
- <tr>
982
- <td colspan="5" align="center"><?php _e('No pages defined.','sitemap') ?></td>
983
- </tr><?php
984
- }
985
- ?>
986
- </table>
987
- <a href="javascript:void(0);" onclick="sm_addPage();"><?php _e("Add new page",'sitemap'); ?></a>
988
- <?php $this->HtmlPrintBoxFooter(); ?>
989
- <?php endif; ?>
990
-
991
-
992
- <!-- AutoPrio Options -->
993
- <?php $this->HtmlPrintBoxHeader('sm_postprio',__('Post Priority', 'sitemap')); ?>
994
-
995
- <p><?php _e('Please select how the priority of each post should be calculated:', 'sitemap') ?></p>
996
- <ul>
997
- <li><p><input type="radio" name="sm_b_prio_provider" id="sm_b_prio_provider__0" value="" <?php echo $this->HtmlGetChecked($this->sg->GetOption("b_prio_provider"),"") ?> /> <label for="sm_b_prio_provider__0"><?php _e('Do not use automatic priority calculation', 'sitemap') ?></label><br /><?php _e('All posts will have the same priority which is defined in &quot;Priorities&quot;', 'sitemap') ?></p></li>
998
- <?php
999
- $provs = $this->sg->GetPrioProviders();
1000
- for($i=0; $i<count($provs); $i++) {
1001
- echo "<li><p><input type=\"radio\" id=\"sm_b_prio_provider_$i\" name=\"sm_b_prio_provider\" value=\"" . $provs[$i] . "\" " . $this->HtmlGetChecked($this->sg->GetOption("b_prio_provider"),$provs[$i]) . " /> <label for=\"sm_b_prio_provider_$i\">" . call_user_func(array($provs[$i], 'getName')) . "</label><br />" . call_user_func(array($provs[$i], 'getDescription')) . "</p></li>";
1002
- }
1003
- ?>
1004
- </ul>
1005
- <?php $this->HtmlPrintBoxFooter(); ?>
1006
-
1007
- <!-- Includes -->
1008
- <?php $this->HtmlPrintBoxHeader('sm_includes',__('Sitemap Content', 'sitemap')); ?>
1009
- <b><?php _e('WordPress standard content', 'sitemap') ?>:</b>
1010
- <ul>
1011
- <li>
1012
- <label for="sm_in_home">
1013
- <input type="checkbox" id="sm_in_home" name="sm_in_home" <?php echo ($this->sg->GetOption("in_home")==true?"checked=\"checked\"":"") ?> />
1014
- <?php _e('Include homepage', 'sitemap') ?>
1015
- </label>
1016
- </li>
1017
- <li>
1018
- <label for="sm_in_posts">
1019
- <input type="checkbox" id="sm_in_posts" name="sm_in_posts" <?php echo ($this->sg->GetOption("in_posts")==true?"checked=\"checked\"":"") ?> />
1020
- <?php _e('Include posts', 'sitemap') ?>
1021
- </label>
1022
- </li>
1023
- <li>
1024
- <label for="sm_in_pages">
1025
- <input type="checkbox" id="sm_in_pages" name="sm_in_pages" <?php echo ($this->sg->GetOption("in_pages")==true?"checked=\"checked\"":"") ?> />
1026
- <?php _e('Include static pages', 'sitemap') ?>
1027
- </label>
1028
- </li>
1029
- <li>
1030
- <label for="sm_in_cats">
1031
- <input type="checkbox" id="sm_in_cats" name="sm_in_cats" <?php echo ($this->sg->GetOption("in_cats")==true?"checked=\"checked\"":"") ?> />
1032
- <?php _e('Include categories', 'sitemap') ?>
1033
- </label>
1034
- </li>
1035
- <li>
1036
- <label for="sm_in_arch">
1037
- <input type="checkbox" id="sm_in_arch" name="sm_in_arch" <?php echo ($this->sg->GetOption("in_arch")==true?"checked=\"checked\"":"") ?> />
1038
- <?php _e('Include archives', 'sitemap') ?>
1039
- </label>
1040
- </li>
1041
- <li>
1042
- <label for="sm_in_auth">
1043
- <input type="checkbox" id="sm_in_auth" name="sm_in_auth" <?php echo ($this->sg->GetOption("in_auth")==true?"checked=\"checked\"":"") ?> />
1044
- <?php _e('Include author pages', 'sitemap') ?>
1045
- </label>
1046
- </li>
1047
- <?php if($this->sg->IsTaxonomySupported()): ?>
1048
- <li>
1049
- <label for="sm_in_tags">
1050
- <input type="checkbox" id="sm_in_tags" name="sm_in_tags" <?php echo ($this->sg->GetOption("in_tags")==true?"checked=\"checked\"":"") ?> />
1051
- <?php _e('Include tag pages', 'sitemap') ?>
1052
- </label>
1053
- </li>
1054
- <?php endif; ?>
1055
- </ul>
1056
-
1057
- <?php
1058
-
1059
- if($this->sg->IsTaxonomySupported()) {
1060
- $taxonomies = $this->sg->GetCustomTaxonomies();
1061
-
1062
- $enabledTaxonomies = $this->sg->GetOption('in_tax');
1063
-
1064
- if(count($taxonomies)>0) {
1065
- ?><b><?php _e('Custom taxonomies', 'sitemap') ?>:</b><ul><?php
1066
-
1067
-
1068
- foreach ($taxonomies as $taxName) {
1069
-
1070
- $taxonomy = get_taxonomy($taxName);
1071
- $selected = in_array($taxonomy->name, $enabledTaxonomies);
1072
- ?>
1073
- <li>
1074
- <label for="sm_in_tax[<?php echo $taxonomy->name; ?>]">
1075
- <input type="checkbox" id="sm_in_tax[<?php echo $taxonomy->name; ?>]" name="sm_in_tax[<?php echo $taxonomy->name; ?>]" <?php echo $selected?"checked=\"checked\"":""; ?> />
1076
- <?php echo str_replace('%s',$taxonomy->label,__('Include taxonomy pages for %s', 'sitemap')); ?>
1077
- </label>
1078
- </li>
1079
- <?php
1080
- }
1081
-
1082
- ?></ul><?php
1083
-
1084
- }
1085
- }
1086
-
1087
-
1088
- if($this->sg->IsCustomPostTypesSupported()) {
1089
- $custom_post_types = $this->sg->GetCustomPostTypes();
1090
-
1091
- $enabledPostTypes = $this->sg->GetOption('in_customtypes');
1092
-
1093
- if(count($custom_post_types)>0) {
1094
- ?><b><?php _e('Custom post types', 'sitemap') ?>:</b><ul><?php
1095
-
1096
- foreach ($custom_post_types as $post_type) {
1097
- $post_type_object = get_post_type_object($post_type);
1098
-
1099
- if (is_array($enabledPostTypes)) $selected = in_array($post_type_object->name, $enabledPostTypes);
1100
-
1101
- ?>
1102
- <li>
1103
- <label for="sm_in_customtypes[<?php echo $post_type_object->name; ?>]">
1104
- <input type="checkbox" id="sm_in_customtypes[<?php echo $post_type_object->name; ?>]" name="sm_in_customtypes[<?php echo $post_type_object->name; ?>]" <?php echo $selected?"checked=\"checked\"":""; ?> />
1105
- <?php echo str_replace('%s',$post_type_object->label,__('Include custom post type %s', 'sitemap')); ?>
1106
- </label>
1107
- </li>
1108
- <?php
1109
- }
1110
-
1111
- ?></ul><?php
1112
- }
1113
- }
1114
-
1115
- ?>
1116
-
1117
- <b><?php _e('Further options', 'sitemap') ?>:</b>
1118
- <ul>
1119
- <li>
1120
- <label for="sm_in_lastmod">
1121
- <input type="checkbox" id="sm_in_lastmod" name="sm_in_lastmod" <?php echo ($this->sg->GetOption("in_lastmod")==true?"checked=\"checked\"":"") ?> />
1122
- <?php _e('Include the last modification time.', 'sitemap') ?>
1123
- </label><br />
1124
- <small><?php _e('This is highly recommended and helps the search engines to know when your content has changed. This option affects <i>all</i> sitemap entries.', 'sitemap') ?></small>
1125
- </li>
1126
- </ul>
1127
-
1128
- <?php $this->HtmlPrintBoxFooter(); ?>
1129
-
1130
- <!-- Excluded Items -->
1131
- <?php $this->HtmlPrintBoxHeader('sm_excludes',__('Excluded Items', 'sitemap')); ?>
1132
-
1133
- <b><?php _e('Excluded categories', 'sitemap') ?>:</b>
1134
-
1135
- <div style="border-color:#CEE1EF; border-style:solid; border-width:2px; height:10em; margin:5px 0px 5px 40px; overflow:auto; padding:0.5em 0.5em;">
1136
- <ul>
1137
- <?php wp_category_checklist(0,0,$this->sg->GetOption("b_exclude_cats"),false); ?>
1138
- </ul>
1139
- </div>
1140
-
1141
- <b><?php _e("Exclude posts","sitemap"); ?>:</b>
1142
- <div style="margin:5px 0 13px 40px;">
1143
- <label for="sm_b_exclude"><?php _e('Exclude the following posts or pages:', 'sitemap') ?> <small><?php _e('List of IDs, separated by comma', 'sitemap') ?></small><br />
1144
- <input name="sm_b_exclude" id="sm_b_exclude" type="text" style="width:400px;" value="<?php echo esc_attr(implode(",",$this->sg->GetOption("b_exclude"))); ?>" /></label><br />
1145
- <cite><?php _e("Note","sitemap") ?>: <?php _e("Child posts won't be excluded automatically!","sitemap"); ?></cite>
1146
- </div>
1147
-
1148
- <?php $this->HtmlPrintBoxFooter(); ?>
1149
-
1150
- <!-- Change frequencies -->
1151
- <?php $this->HtmlPrintBoxHeader('sm_change_frequencies',__('Change Frequencies', 'sitemap')); ?>
1152
-
1153
- <p>
1154
- <b><?php _e('Note', 'sitemap') ?>:</b>
1155
- <?php _e('Please note that the value of this tag is considered a hint and not a command. Even though search engine crawlers consider this information when making decisions, they may crawl pages marked "hourly" less frequently than that, and they may crawl pages marked "yearly" more frequently than that. It is also likely that crawlers will periodically crawl pages marked "never" so that they can handle unexpected changes to those pages.', 'sitemap') ?>
1156
- </p>
1157
- <ul>
1158
- <li>
1159
- <label for="sm_cf_home">
1160
- <select id="sm_cf_home" name="sm_cf_home"><?php $this->HtmlGetFreqNames($this->sg->GetOption("cf_home")); ?></select>
1161
- <?php _e('Homepage', 'sitemap') ?>
1162
- </label>
1163
- </li>
1164
- <li>
1165
- <label for="sm_cf_posts">
1166
- <select id="sm_cf_posts" name="sm_cf_posts"><?php $this->HtmlGetFreqNames($this->sg->GetOption("cf_posts")); ?></select>
1167
- <?php _e('Posts', 'sitemap') ?>
1168
- </label>
1169
- </li>
1170
- <li>
1171
- <label for="sm_cf_pages">
1172
- <select id="sm_cf_pages" name="sm_cf_pages"><?php $this->HtmlGetFreqNames($this->sg->GetOption("cf_pages")); ?></select>
1173
- <?php _e('Static pages', 'sitemap') ?>
1174
- </label>
1175
- </li>
1176
- <li>
1177
- <label for="sm_cf_cats">
1178
- <select id="sm_cf_cats" name="sm_cf_cats"><?php $this->HtmlGetFreqNames($this->sg->GetOption("cf_cats")); ?></select>
1179
- <?php _e('Categories', 'sitemap') ?>
1180
- </label>
1181
- </li>
1182
- <li>
1183
- <label for="sm_cf_arch_curr">
1184
- <select id="sm_cf_arch_curr" name="sm_cf_arch_curr"><?php $this->HtmlGetFreqNames($this->sg->GetOption("cf_arch_curr")); ?></select>
1185
- <?php _e('The current archive of this month (Should be the same like your homepage)', 'sitemap') ?>
1186
- </label>
1187
- </li>
1188
- <li>
1189
- <label for="sm_cf_arch_old">
1190
- <select id="sm_cf_arch_old" name="sm_cf_arch_old"><?php $this->HtmlGetFreqNames($this->sg->GetOption("cf_arch_old")); ?></select>
1191
- <?php _e('Older archives (Changes only if you edit an old post)', 'sitemap') ?>
1192
- </label>
1193
- </li>
1194
- <?php if($this->sg->IsTaxonomySupported()): ?>
1195
- <li>
1196
- <label for="sm_cf_tags">
1197
- <select id="sm_cf_tags" name="sm_cf_tags"><?php $this->HtmlGetFreqNames($this->sg->GetOption("cf_tags")); ?></select>
1198
- <?php _e('Tag pages', 'sitemap') ?>
1199
- </label>
1200
- </li>
1201
- <?php endif; ?>
1202
- <li>
1203
- <label for="sm_cf_auth">
1204
- <select id="sm_cf_auth" name="sm_cf_auth"><?php $this->HtmlGetFreqNames($this->sg->GetOption("cf_auth")); ?></select>
1205
- <?php _e('Author pages', 'sitemap') ?>
1206
- </label>
1207
- </li>
1208
- </ul>
1209
-
1210
- <?php $this->HtmlPrintBoxFooter(); ?>
1211
-
1212
- <!-- Priorities -->
1213
- <?php $this->HtmlPrintBoxHeader('sm_priorities',__('Priorities', 'sitemap')); ?>
1214
- <ul>
1215
- <li>
1216
- <label for="sm_pr_home">
1217
- <select id="sm_pr_home" name="sm_pr_home"><?php $this->HtmlGetPriorityValues($this->sg->GetOption("pr_home")); ?></select>
1218
- <?php _e('Homepage', 'sitemap') ?>
1219
- </label>
1220
- </li>
1221
- <li>
1222
- <label for="sm_pr_posts">
1223
- <select id="sm_pr_posts" name="sm_pr_posts"><?php $this->HtmlGetPriorityValues($this->sg->GetOption("pr_posts")); ?></select>
1224
- <?php _e('Posts (If auto calculation is disabled)', 'sitemap') ?>
1225
- </label>
1226
- </li>
1227
- <li>
1228
- <label for="sm_pr_posts_min">
1229
- <select id="sm_pr_posts_min" name="sm_pr_posts_min"><?php $this->HtmlGetPriorityValues($this->sg->GetOption("pr_posts_min")); ?></select>
1230
- <?php _e('Minimum post priority (Even if auto calculation is enabled)', 'sitemap') ?>
1231
- </label>
1232
- </li>
1233
- <li>
1234
- <label for="sm_pr_pages">
1235
- <select id="sm_pr_pages" name="sm_pr_pages"><?php $this->HtmlGetPriorityValues($this->sg->GetOption("pr_pages")); ?></select>
1236
- <?php _e('Static pages', 'sitemap'); ?>
1237
- </label>
1238
- </li>
1239
- <li>
1240
- <label for="sm_pr_cats">
1241
- <select id="sm_pr_cats" name="sm_pr_cats"><?php $this->HtmlGetPriorityValues($this->sg->GetOption("pr_cats")); ?></select>
1242
- <?php _e('Categories', 'sitemap') ?>
1243
- </label>
1244
- </li>
1245
- <li>
1246
- <label for="sm_pr_arch">
1247
- <select id="sm_pr_arch" name="sm_pr_arch"><?php $this->HtmlGetPriorityValues($this->sg->GetOption("pr_arch")); ?></select>
1248
- <?php _e('Archives', 'sitemap') ?>
1249
- </label>
1250
- </li>
1251
- <?php if($this->sg->IsTaxonomySupported()): ?>
1252
- <li>
1253
- <label for="sm_pr_tags">
1254
- <select id="sm_pr_tags" name="sm_pr_tags"><?php $this->HtmlGetPriorityValues($this->sg->GetOption("pr_tags")); ?></select>
1255
- <?php _e('Tag pages', 'sitemap') ?>
1256
- </label>
1257
- </li>
1258
- <?php endif; ?>
1259
- <li>
1260
- <label for="sm_pr_auth">
1261
- <select id="sm_pr_auth" name="sm_pr_auth"><?php $this->HtmlGetPriorityValues($this->sg->GetOption("pr_auth")); ?></select>
1262
- <?php _e('Author pages', 'sitemap') ?>
1263
- </label>
1264
- </li>
1265
- </ul>
1266
-
1267
- <?php $this->HtmlPrintBoxFooter(); ?>
1268
-
1269
- </div>
1270
- <div>
1271
- <p class="submit">
1272
- <?php wp_nonce_field('sitemap') ?>
1273
- <input type="submit" class="button-primary" name="sm_update" value="<?php _e('Update options', 'sitemap'); ?>" />
1274
- <input type="submit" onclick='return confirm("Do you really want to reset your configuration?");' class="sm_warning" name="sm_reset_config" value="<?php _e('Reset options', 'sitemap'); ?>" />
1275
- </p>
1276
- </div>
1277
-
1278
-
1279
- </div>
1280
- </div>
1281
- </div>
1282
- <script type="text/javascript">if(typeof(sm_loadPages)=='function') addLoadEvent(sm_loadPages); </script>
1283
- </form>
1284
- <form action="https://www.paypal.com/cgi-bin/webscr" method="post" id="sm_donate_form">
1285
- <?php
1286
- $lc = array(
1287
- "en"=>array("cc"=>"USD","lc"=>"US"),
1288
- "en-GB"=>array("cc"=>"GBP","lc"=>"GB"),
1289
- "de"=>array("cc"=>"EUR","lc"=>"DE"),
1290
- );
1291
- $myLc = $lc["en"];
1292
- $wpl = get_bloginfo('language');
1293
- if(!empty($wpl)) {
1294
- if(array_key_exists($wpl,$lc)) $myLc = $lc[$wpl];
1295
- else {
1296
- $wpl = substr($wpl,0,2);
1297
- if(array_key_exists($wpl,$lc)) $myLc = $lc[$wpl];
1298
- }
1299
- }
1300
- ?>
1301
- <input type="hidden" name="cmd" value="_donations" />
1302
- <input type="hidden" name="business" value="<?php echo "xmlsitemapgen" /* N O S P A M */ . "@" . "gmai" . "l.com"; ?>" />
1303
- <input type="hidden" name="item_name" value="Sitemap Generator for WordPress. Please tell me if if you don't want to be listed on the donator list." />
1304
- <input type="hidden" name="no_shipping" value="1" />
1305
- <input type="hidden" name="return" value="<?php echo esc_attr($this->sg->GetBackLink('&sm_donated=true')) ?>" />
1306
- <input type="hidden" name="currency_code" value="<?php echo esc_attr($myLc["cc"]) ?>" />
1307
- <input type="hidden" name="bn" value="PP-BuyNowBF" />
1308
- <input type="hidden" name="lc" value="<?php echo esc_attr($myLc["lc"]) ?>" />
1309
- <input type="hidden" name="rm" value="2" />
1310
- <input type="hidden" name="on0" value="Your Website" />
1311
- <input type="hidden" name="os0" value="<?php echo esc_attr(get_bloginfo("url")) ?>"/>
1312
- </form>
1313
- </div>
1314
- <?php
1315
- }
1316
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
sitemap-wpmu.php CHANGED
@@ -1,6 +1,5 @@
1
  <?php
2
-
3
- /*
4
  * $Id: sitemap-wpmu.php 534582 2012-04-21 22:25:36Z arnee $
5
  *
6
  * Google XML Sitemaps Generator for WordPress MU activation
@@ -18,11 +17,20 @@
18
  *
19
  * All files in the mu-plugins directory are included for all sites by WordPress by default, so there is no need to
20
  * activate this plugin anymore (and it also can not be deactivated).
 
 
21
  */
22
 
23
- if(!defined('WPINC')) return;
 
 
24
 
25
- $gsgFile = dirname(__FILE__) . "/google-sitemap-generator/sitemap.php";
26
 
27
- if(file_exists($gsgFile)) require_once($gsgFile);
28
- else trigger_error("Google Sitemap Generator was loaded via mu-plugins directory, but the plugin was not found under $gsgFile",E_USER_WARNING);
 
 
 
 
 
1
  <?php
2
+ /**
 
3
  * $Id: sitemap-wpmu.php 534582 2012-04-21 22:25:36Z arnee $
4
  *
5
  * Google XML Sitemaps Generator for WordPress MU activation
17
  *
18
  * All files in the mu-plugins directory are included for all sites by WordPress by default, so there is no need to
19
  * activate this plugin anymore (and it also can not be deactivated).
20
+ *
21
+ * @package Sitemap
22
  */
23
 
24
+ if ( ! defined( 'WPINC' ) ) {
25
+ return;
26
+ }
27
 
28
+ $gsg_file = dirname( __FILE__ ) . '/google-sitemap-generator/sitemap.php';
29
 
30
+ if ( file_exists( $gsg_file ) ) {
31
+ require_once $gsg_file;
32
+ } else {
33
+ // phpcs:disable
34
+ esc_html( trigger_error( 'XML Sitemap Generator was loaded via mu-plugins directory, but the plugin was not found under $gsg_file', E_USER_WARNING ) );
35
+ // phpcs:enable
36
+ }
sitemap.php CHANGED
@@ -1,111 +1,120 @@
1
- <?php
2
-
3
- /*
4
- $Id: sitemap.php 1026247 2014-11-15 16:47:36Z arnee $
5
-
6
- XML Sitemaps Generator for WordPress
7
- ==============================================================================
8
-
9
- This generator will create a sitemaps.org compliant sitemap of your WordPress site.
10
-
11
- For additional details like installation instructions, please check the readme.txt and documentation.txt files.
12
-
13
-
14
- Info for WordPress:
15
- ==============================================================================
16
- Plugin Name: XML Sitemaps
17
- Plugin URI: http://www.arnebrachhold.de/redir/sitemap-home/
18
- Description: This plugin improves SEO using sitemaps for best indexation by search engines like Google, Bing, Yahoo and others.
19
- Version: 4.1.1
20
- Author: Auctollo
21
- Author URI: http://www.arnebrachhold.de/
22
- Text Domain: sitemap
23
- Domain Path: /lang
24
-
25
-
26
- Copyright 2005 - 2018 AUCTOLLO
27
-
28
- This program is free software; you can redistribute it and/or modify
29
- it under the terms of the GNU General Public License as published by
30
- the Free Software Foundation; either version 2 of the License, or
31
- (at your option) any later version.
32
-
33
- This program is distributed in the hope that it will be useful,
34
- but WITHOUT ANY WARRANTY; without even the implied warranty of
35
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
36
- GNU General Public License for more details.
37
-
38
- You should have received a copy of the GNU General Public License
39
- along with this program; if not, write to the Free Software
40
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
41
-
42
- Please see license.txt for the full license.
43
-
44
- */
45
-
46
- define("SM_SUPPORTFEED_URL","https://wordpress.org/support/plugin/google-sitemap-generator/feed/");
47
-
48
- /**
49
- * Check if the requirements of the sitemap plugin are met and loads the actual loader
50
- *
51
- * @package sitemap
52
- * @since 4.0
53
- */
54
- function sm_Setup() {
55
-
56
- $fail = false;
57
-
58
- //Check minimum PHP requirements, which is 5.2 at the moment.
59
- if (version_compare(PHP_VERSION, "5.2", "<")) {
60
- add_action('admin_notices', 'sm_AddPhpVersionError');
61
- $fail = true;
62
- }
63
-
64
- //Check minimum WP requirements, which is 3.3 at the moment.
65
- if (version_compare($GLOBALS["wp_version"], "3.3", "<")) {
66
- add_action('admin_notices', 'sm_AddWpVersionError');
67
- $fail = true;
68
- }
69
-
70
- if (!$fail) {
71
- require_once(trailingslashit(dirname(__FILE__)) . "sitemap-loader.php");
72
- }
73
-
74
- }
75
-
76
- /**
77
- * Adds a notice to the admin interface that the WordPress version is too old for the plugin
78
- *
79
- * @package sitemap
80
- * @since 4.0
81
- */
82
- function sm_AddWpVersionError() {
83
- echo "<div id='sm-version-error' class='error fade'><p><strong>" . __('Your WordPress version is too old for XML Sitemaps.', 'sitemap') . "</strong><br /> " . sprintf(__('Unfortunately this release of Google XML Sitemaps requires at least WordPress %4$s. You are using Wordpress %2$s, which is out-dated and insecure. Please upgrade or go to <a href="%1$s">active plugins</a> and deactivate the XML Sitemaps plugin to hide this message. You can download an older version of this plugin from the <a href="%3$s">plugin website</a>.', 'sitemap'), "plugins.php?plugin_status=active", $GLOBALS["wp_version"], "http://www.arnebrachhold.de/redir/sitemap-home/","3.3") . "</p></div>";
84
- }
85
-
86
- /**
87
- * Adds a notice to the admin interface that the WordPress version is too old for the plugin
88
- *
89
- * @package sitemap
90
- * @since 4.0
91
- */
92
- function sm_AddPhpVersionError() {
93
- echo "<div id='sm-version-error' class='error fade'><p><strong>" . __('Your PHP version is too old for XML Sitemaps.', 'sitemap') . "</strong><br /> " . sprintf(__('Unfortunately this release of XML Sitemaps requires at least PHP %4$s. You are using PHP %2$s, which is out-dated and insecure. Please ask your web host to update your PHP installation or go to <a href="%1$s">active plugins</a> and deactivate the Google XML Sitemaps plugin to hide this message. You can download an older version of this plugin from the <a href="%3$s">plugin website</a>.', 'sitemap'), "plugins.php?plugin_status=active", PHP_VERSION, "http://www.arnebrachhold.de/redir/sitemap-home/","5.2") . "</p></div>";
94
- }
95
-
96
- /**
97
- * Returns the file used to load the sitemap plugin
98
- *
99
- * @package sitemap
100
- * @since 4.0
101
- * @return string The path and file of the sitemap plugin entry point
102
- */
103
- function sm_GetInitFile() {
104
- return __FILE__;
105
- }
106
-
107
- //Don't do anything if this file was called directly
108
- if (defined('ABSPATH') && defined('WPINC') && !class_exists("GoogleSitemapGeneratorLoader", false)) {
109
- sm_Setup();
110
- }
111
-
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * $Id: sitemap.php 1026247 2014-11-15 16:47:36Z arnee $
4
+
5
+ * Google XML Sitemaps Generator for WordPress
6
+ * ==============================================================================
7
+
8
+ * This generator will create a sitemaps.org compliant sitemap of your WordPress site.
9
+
10
+ * For additional details like installation instructions, please check the readme.txt and documentation.txt files.
11
+
12
+ * Have fun!
13
+ * Arne
14
+
15
+ * Info for WordPress:
16
+ * ==============================================================================
17
+ * Plugin Name: Google XML Sitemaps
18
+ * Plugin URI: http://www.arnebrachhold.de/redir/sitemap-home/
19
+ * Description: This plugin improves SEO using sitemaps for best indexation by search engines like Google, Bing, Yahoo and others.
20
+ * Version: 4.1.3
21
+ * Author: Arne Brachhold
22
+ * Author URI: http://www.arnebrachhold.de/
23
+ * Text Domain: sitemap
24
+ * Domain Path: /lang
25
+
26
+
27
+ * Copyright 2005 - 2018 ARNE BRACHHOLD (email : himself - arnebrachhold - de)
28
+
29
+ * This program is free software; you can redistribute it and/or modify
30
+ * it under the terms of the GNU General Public License as published by
31
+ * the Free Software Foundation; either version 2 of the License, or
32
+ * (at your option) any later version.
33
+
34
+ * This program is distributed in the hope that it will be useful,
35
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
36
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
37
+ * GNU General Public License for more details.
38
+ *
39
+ * @author Arne Brachhold
40
+ * @package sitemap
41
+ * You should have received a copy of the GNU General Public License
42
+ * along with this program; if not, write to the Free Software
43
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
44
+
45
+ * Please see license.txt for the full license.
46
+ */
47
+
48
+ define( 'SM_SUPPORTFEED_URL', 'https://wordpress.org/support/plugin/google-sitemap-generator/feed/' );
49
+
50
+
51
+ /**
52
+ * Check if the requirements of the sitemap plugin are met and loads the actual loader
53
+ *
54
+ * @package sitemap
55
+ * @since 4.0
56
+ */
57
+ function sm_setup() {
58
+
59
+ $fail = false;
60
+
61
+ // Check minimum PHP requirements, which is 5.2 at the moment.
62
+ if ( version_compare( PHP_VERSION, '5.2', '<' ) ) {
63
+ add_action( 'admin_notices', 'sm_add_php_version_error' );
64
+ $fail = true;
65
+ }
66
+
67
+ // Check minimum WP requirements, which is 3.3 at the moment.
68
+ if ( version_compare( $GLOBALS['wp_version'], '3.3', '<' ) ) {
69
+ add_action( 'admin_notices', 'sm_add_wp_version_error' );
70
+ $fail = true;
71
+ }
72
+
73
+ if ( ! $fail ) {
74
+ require_once trailingslashit( dirname( __FILE__ ) ) . 'class-googlesitemapgeneratorloader.php';
75
+ }
76
+
77
+ }
78
+
79
+ /**
80
+ * Adds a notice to the admin interface that the WordPress version is too old for the plugin
81
+ *
82
+ * @package sitemap
83
+ * @since 4.0
84
+ */
85
+ function sm_add_wp_version_error() {
86
+ /* translators: %s: search term */
87
+
88
+ echo '<div id=\'sm-version-error\' class=\'error fade\'><p><strong>' . esc_html( __( 'Your WordPress version is too old for XML Sitemaps.', 'sitemap' ) ) . '</strong><br /> ' . esc_html( sprintf( __( 'Unfortunately this release of Google XML Sitemaps requires at least WordPress %4$s. You are using WordPress %2$s, which is out-dated and insecure. Please upgrade or go to <a href=\'%1$s\'>active plugins</a> and deactivate the Google XML Sitemaps plugin to hide this message. You can download an older version of this plugin from the <a href=\'%3$s\'>plugin website</a>.', 'sitemap' ), 'plugins.php?plugin_status=active', esc_html( $GLOBALS['wp_version'] ), 'http://www.arnebrachhold.de/redir/sitemap-home/', '3.3' ) ) . '</p></div>';
89
+ }
90
+
91
+ /**
92
+ * Adds a notice to the admin interface that the WordPress version is too old for the plugin
93
+ *
94
+ * @package sitemap
95
+ * @since 4.0
96
+ */
97
+ function sm_add_php_version_error() {
98
+ /* translators: %s: search term */
99
+
100
+ echo '<div id=\'sm-version-error\' class=\'error fade\'><p><strong>' . esc_html( __( 'Your PHP version is too old for XML Sitemaps.', 'sitemap' ) ) . '</strong><br /> ' . esc_html( sprintf( __( 'Unfortunately this release of Google XML Sitemaps requires at least PHP %4$s. You are using PHP %2$s, which is out-dated and insecure. Please ask your web host to update your PHP installation or go to <a href=\'%1$s\'>active plugins</a> and deactivate the Google XML Sitemaps plugin to hide this message. You can download an older version of this plugin from the <a href=\'%3$s\'>plugin website</a>.', 'sitemap' ), 'plugins.php?plugin_status=active', PHP_VERSION, 'http://www.arnebrachhold.de/redir/sitemap-home/', '5.2' ) ) . '</p></div>';
101
+ }
102
+
103
+ /**
104
+ * Returns the file used to load the sitemap plugin
105
+ *
106
+ * @package sitemap
107
+ * @since 4.0
108
+ * @return string The path and file of the sitemap plugin entry point
109
+ */
110
+ function sm_get_init_file() {
111
+ return __FILE__;
112
+ }
113
+
114
+ // Don't do anything if this file was called directly.
115
+ if ( defined( 'ABSPATH' ) && defined( 'WPINC' ) && ! class_exists( 'GoogleSitemapGeneratorLoader', false ) ) {
116
+ sm_setup();
117
+ add_filter( 'wp_sitemaps_enabled', '__return_false' );
118
+
119
+ }
120
+
sitemap.xsl CHANGED
@@ -1,160 +1,159 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <xsl:stylesheet version="1.0"
3
- xmlns:html="http://www.w3.org/TR/REC-html40"
4
- xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9"
5
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
6
- <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes" />
7
- <xsl:template match="/">
8
- <html xmlns="http://www.w3.org/1999/xhtml">
9
- <head>
10
- <title>XML Sitemap</title>
11
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
12
- <meta name="robots" content="noindex,follow" />
13
- <style type="text/css">
14
- body {
15
- font-family:"Lucida Grande","Lucida Sans Unicode",Tahoma,Verdana;
16
- font-size:13px;
17
- }
18
-
19
- #intro {
20
- background-color:#CFEBF7;
21
- border:1px #2580B2 solid;
22
- padding:5px 13px 5px 13px;
23
- margin:10px;
24
- }
25
-
26
- #intro p {
27
- line-height: 16.8667px;
28
- }
29
- #intro strong {
30
- font-weight:normal;
31
- }
32
-
33
- td {
34
- font-size:11px;
35
- }
36
-
37
- th {
38
- text-align:left;
39
- padding-right:30px;
40
- font-size:11px;
41
- }
42
-
43
- tr.high {
44
- background-color:whitesmoke;
45
- }
46
-
47
- #footer {
48
- padding:2px;
49
- margin-top:10px;
50
- font-size:8pt;
51
- color:gray;
52
- }
53
-
54
- #footer a {
55
- color:gray;
56
- }
57
-
58
- a {
59
- color:black;
60
- }
61
- </style>
62
- </head>
63
- <body>
64
- <xsl:apply-templates></xsl:apply-templates>
65
- <div id="footer">
66
- Generated with <a rel="external nofollow" href="http://www.arnebrachhold.de/redir/sitemap-home/" title="Google (XML) Sitemap Generator Plugin for WordPress">Google (XML) Sitemaps Generator Plugin for WordPress</a> by <a rel="external nofollow" href="http://www.arnebrachhold.de/">Arne Brachhold</a>. This XSLT template is released under the GPL and free to use.<br />
67
- If you have problems with your sitemap please visit the <a rel="external nofollow" href="http://www.arnebrachhold.de/redir/sitemap-x-faq/" title="Google (XML) sitemaps FAQ">plugin FAQ</a> or the <a rel="external nofollow" href="https://wordpress.org/support/plugin/google-sitemap-generator">support forum</a>.
68
- </div>
69
- </body>
70
- </html>
71
- </xsl:template>
72
-
73
-
74
- <xsl:template match="sitemap:urlset">
75
- <h1>XML Sitemap</h1>
76
- <div id="intro">
77
- <p>
78
- This is a XML Sitemap which is supposed to be processed by search engines which follow the XML Sitemap standard like Ask.com, Bing, Google and Yahoo.<br />
79
- It was generated using the <a rel="external nofollow" href="http://wordpress.org/">WordPress</a> content management system and the <strong><a rel="external nofollow" href="http://www.arnebrachhold.de/redir/sitemap-home/" title="Google (XML) Sitemaps Generator Plugin for WordPress">Google Sitemap Generator Plugin</a></strong> by <a rel="external nofollow" href="http://www.arnebrachhold.de/">Arne Brachhold</a>.<br />
80
- You can find more information about XML sitemaps on <a rel="external nofollow" href="http://sitemaps.org">sitemaps.org</a> and Google's <a rel="external nofollow" href="http://code.google.com/p/sitemap-generators/wiki/SitemapGenerators">list of sitemap programs</a>.
81
- </p>
82
- </div>
83
- <div id="content">
84
- <table cellpadding="5">
85
- <tr style="border-bottom:1px black solid;">
86
- <th>URL</th>
87
- <th>Priority</th>
88
- <th>Change frequency</th>
89
- <th>Last modified (GMT)</th>
90
- </tr>
91
- <xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/>
92
- <xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
93
- <xsl:for-each select="./sitemap:url">
94
- <tr>
95
- <xsl:if test="position() mod 2 != 1">
96
- <xsl:attribute name="class">high</xsl:attribute>
97
- </xsl:if>
98
- <td>
99
- <xsl:variable name="itemURL">
100
- <xsl:value-of select="sitemap:loc"/>
101
- </xsl:variable>
102
- <a href="{$itemURL}">
103
- <xsl:value-of select="sitemap:loc"/>
104
- </a>
105
- </td>
106
- <td>
107
- <xsl:value-of select="concat(sitemap:priority*100,'%')"/>
108
- </td>
109
- <td>
110
- <xsl:value-of select="concat(translate(substring(sitemap:changefreq, 1, 1),concat($lower, $upper),concat($upper, $lower)),substring(sitemap:changefreq, 2))"/>
111
- </td>
112
- <td>
113
- <xsl:value-of select="concat(substring(sitemap:lastmod,0,11),concat(' ', substring(sitemap:lastmod,12,5)))"/>
114
- </td>
115
- </tr>
116
- </xsl:for-each>
117
- </table>
118
- </div>
119
- </xsl:template>
120
-
121
-
122
- <xsl:template match="sitemap:sitemapindex">
123
- <h1>XML Sitemap Index</h1>
124
- <div id="intro">
125
- <p>
126
- This is a XML Sitemap which is supposed to be processed by search engines which follow the XML Sitemap standard like Ask.com, Bing, Google and Yahoo.<br />
127
- It was generated using the <a rel="external nofollow" href="http://wordpress.org/">WordPress</a> content management system and the <strong><a rel="external nofollow" href="http://www.arnebrachhold.de/redir/sitemap-home/" title="Google (XML) Sitemaps Generator Plugin for WordPress">Google Sitemap Generator Plugin</a></strong> by <a rel="external nofollow" href="http://www.arnebrachhold.de/">Arne Brachhold</a>.<br />
128
- You can find more information about XML sitemaps on <a rel="external nofollow" href="http://sitemaps.org">sitemaps.org</a> and Google's <a rel="external nofollow" href="http://code.google.com/p/sitemap-generators/wiki/SitemapGenerators">list of sitemap programs</a>.<br />
129
- <br />
130
- This file contains links to sub-sitemaps, follow them to see the actual sitemap content.
131
- </p>
132
- </div>
133
- <div id="content">
134
- <table cellpadding="5">
135
- <tr style="border-bottom:1px black solid;">
136
- <th>URL of sub-sitemap</th>
137
- <th>Last modified (GMT)</th>
138
- </tr>
139
- <xsl:for-each select="./sitemap:sitemap">
140
- <tr>
141
- <xsl:if test="position() mod 2 != 1">
142
- <xsl:attribute name="class">high</xsl:attribute>
143
- </xsl:if>
144
- <td>
145
- <xsl:variable name="itemURL">
146
- <xsl:value-of select="sitemap:loc"/>
147
- </xsl:variable>
148
- <a href="{$itemURL}">
149
- <xsl:value-of select="sitemap:loc"/>
150
- </a>
151
- </td>
152
- <td>
153
- <xsl:value-of select="concat(substring(sitemap:lastmod,0,11),concat(' ', substring(sitemap:lastmod,12,5)))"/>
154
- </td>
155
- </tr>
156
- </xsl:for-each>
157
- </table>
158
- </div>
159
- </xsl:template>
160
  </xsl:stylesheet>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xsl:stylesheet version="1.0"
3
+ xmlns:html="http://www.w3.org/TR/REC-html40"
4
+ xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9"
5
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
6
+ <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes" />
7
+ <xsl:template match="/">
8
+ <html xmlns="http://www.w3.org/1999/xhtml">
9
+ <head>
10
+ <title>XML Sitemap</title>
11
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
12
+ <style type="text/css">
13
+ body {
14
+ font-family:"Lucida Grande","Lucida Sans Unicode",Tahoma,Verdana;
15
+ font-size:13px;
16
+ }
17
+
18
+ #intro {
19
+ background-color:#CFEBF7;
20
+ border:1px #2580B2 solid;
21
+ padding:5px 13px 5px 13px;
22
+ margin:10px;
23
+ }
24
+
25
+ #intro p {
26
+ line-height: 16.8667px;
27
+ }
28
+ #intro strong {
29
+ font-weight:normal;
30
+ }
31
+
32
+ td {
33
+ font-size:11px;
34
+ }
35
+
36
+ th {
37
+ text-align:left;
38
+ padding-right:30px;
39
+ font-size:11px;
40
+ }
41
+
42
+ tr.high {
43
+ background-color:whitesmoke;
44
+ }
45
+
46
+ #footer {
47
+ padding:2px;
48
+ margin-top:10px;
49
+ font-size:8pt;
50
+ color:gray;
51
+ }
52
+
53
+ #footer a {
54
+ color:gray;
55
+ }
56
+
57
+ a {
58
+ color:black;
59
+ }
60
+ </style>
61
+ </head>
62
+ <body>
63
+ <xsl:apply-templates></xsl:apply-templates>
64
+ <div id="footer">
65
+ Generated with <a rel="external nofollow" href="http://www.arnebrachhold.de/redir/sitemap-home/" title="Google (XML) Sitemap Generator Plugin for WordPress">Google (XML) Sitemaps Generator Plugin for WordPress</a> by <a rel="external nofollow" href="http://www.arnebrachhold.de/">Arne Brachhold</a>. This XSLT template is released under the GPL and free to use.<br />
66
+ If you have problems with your sitemap please visit the <a rel="external nofollow" href="http://www.arnebrachhold.de/redir/sitemap-x-faq/" title="Google (XML) sitemaps FAQ">plugin FAQ</a> or the <a rel="external nofollow" href="https://wordpress.org/support/plugin/google-sitemap-generator">support forum</a>.
67
+ </div>
68
+ </body>
69
+ </html>
70
+ </xsl:template>
71
+
72
+
73
+ <xsl:template match="sitemap:urlset">
74
+ <h1>XML Sitemap</h1>
75
+ <div id="intro">
76
+ <p>
77
+ This is a XML Sitemap which is supposed to be processed by search engines which follow the XML Sitemap standard like Ask.com, Bing, Google and Yahoo.<br />
78
+ It was generated using the <a rel="external nofollow" href="http://wordpress.org/">WordPress</a> content management system and the <strong><a rel="external nofollow" href="http://www.arnebrachhold.de/redir/sitemap-home/" title="Google (XML) Sitemaps Generator Plugin for WordPress">XML Sitemap Generator Plugin</a></strong> by <a rel="external nofollow" href="http://www.arnebrachhold.de/">Arne Brachhold</a>.<br />
79
+ You can find more information about XML sitemaps on <a rel="external nofollow" href="http://sitemaps.org">sitemaps.org</a> and Google's <a rel="external nofollow" href="http://code.google.com/p/sitemap-generators/wiki/SitemapGenerators">list of sitemap programs</a>.
80
+ </p>
81
+ </div>
82
+ <div id="content">
83
+ <table cellpadding="5">
84
+ <tr style="border-bottom:1px black solid;">
85
+ <th>URL</th>
86
+ <th>Priority</th>
87
+ <th>Change frequency</th>
88
+ <th>Last modified (GMT)</th>
89
+ </tr>
90
+ <xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/>
91
+ <xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
92
+ <xsl:for-each select="./sitemap:url">
93
+ <tr>
94
+ <xsl:if test="position() mod 2 != 1">
95
+ <xsl:attribute name="class">high</xsl:attribute>
96
+ </xsl:if>
97
+ <td>
98
+ <xsl:variable name="itemURL">
99
+ <xsl:value-of select="sitemap:loc"/>
100
+ </xsl:variable>
101
+ <a href="{$itemURL}">
102
+ <xsl:value-of select="sitemap:loc"/>
103
+ </a>
104
+ </td>
105
+ <td>
106
+ <xsl:value-of select="concat(sitemap:priority*100,'%')"/>
107
+ </td>
108
+ <td>
109
+ <xsl:value-of select="concat(translate(substring(sitemap:changefreq, 1, 1),concat($lower, $upper),concat($upper, $lower)),substring(sitemap:changefreq, 2))"/>
110
+ </td>
111
+ <td>
112
+ <xsl:value-of select="concat(substring(sitemap:lastmod,0,11),concat(' ', substring(sitemap:lastmod,12,5)))"/>
113
+ </td>
114
+ </tr>
115
+ </xsl:for-each>
116
+ </table>
117
+ </div>
118
+ </xsl:template>
119
+
120
+
121
+ <xsl:template match="sitemap:sitemapindex">
122
+ <h1>XML Sitemap Index</h1>
123
+ <div id="intro">
124
+ <p>
125
+ This is a XML Sitemap which is supposed to be processed by search engines which follow the XML Sitemap standard like Ask.com, Bing, Google and Yahoo.<br />
126
+ It was generated using the <a rel="external nofollow" href="http://wordpress.org/">WordPress</a> content management system and the <strong><a rel="external nofollow" href="http://www.arnebrachhold.de/redir/sitemap-home/" title="XML Sitemaps Generator Plugin for WordPress">XML Sitemap Generator Plugin</a></strong> by <a rel="external nofollow" href="http://www.arnebrachhold.de/">Arne Brachhold</a>.<br />
127
+ You can find more information about XML sitemaps on <a rel="external nofollow" href="http://sitemaps.org">sitemaps.org</a> and Google's <a rel="external nofollow" href="http://code.google.com/p/sitemap-generators/wiki/SitemapGenerators">list of sitemap programs</a>.<br />
128
+ <br />
129
+ This file contains links to sub-sitemaps, follow them to see the actual sitemap content.
130
+ </p>
131
+ </div>
132
+ <div id="content">
133
+ <table cellpadding="5">
134
+ <tr style="border-bottom:1px black solid;">
135
+ <th>URL of sub-sitemap</th>
136
+ <th>Last modified (GMT)</th>
137
+ </tr>
138
+ <xsl:for-each select="./sitemap:sitemap">
139
+ <tr>
140
+ <xsl:if test="position() mod 2 != 1">
141
+ <xsl:attribute name="class">high</xsl:attribute>
142
+ </xsl:if>
143
+ <td>
144
+ <xsl:variable name="itemURL">
145
+ <xsl:value-of select="sitemap:loc"/>
146
+ </xsl:variable>
147
+ <a href="{$itemURL}">
148
+ <xsl:value-of select="sitemap:loc"/>
149
+ </a>
150
+ </td>
151
+ <td>
152
+ <xsl:value-of select="concat(substring(sitemap:lastmod,0,11),concat(' ', substring(sitemap:lastmod,12,5)))"/>
153
+ </td>
154
+ </tr>
155
+ </xsl:for-each>
156
+ </table>
157
+ </div>
158
+ </xsl:template>
 
159
  </xsl:stylesheet>