public function filter_request($request) { if (isset($request['feed']) && strpos($request['feed'], 'sitemap') == 0) { if ($request['feed'] == 'sitemap') { // setup actions and filters add_action('do_feed_sitemap', array($this, 'load_template_index'), 10, 1); return $request; } if ($request['feed'] == 'sitemap-news') { $defaults = $this->defaults('news_tags'); $options = $this->get_option('news_tags'); $news_post_type = isset($options['post_type']) && !empty($options['post_type']) ? $options['post_type'] : $defaults['post_type']; if (empty($news_post_type)) { $news_post_type = 'post'; } // disable caching define('DONOTCACHEPAGE', true); define('DONOTCACHEDB', true); // setup template add_action('do_feed_sitemap-news', array($this, 'load_template_news'), 10, 1); // set up query filters // TODO: test 'gmt' against 'blog' against 'server' if (function_exists('date_default_timezone_set')) { date_default_timezone_set('UTC'); $zone = 'gmt'; } else { $zone = 'blog'; } if (get_lastdate($zone, $news_post_type) > date('Y-m-d H:i:s', strtotime('-48 hours'))) { add_filter('post_limits', array($this, 'filter_news_limits')); add_filter('posts_where', array($this, 'filter_news_where'), 10, 1); } else { add_filter('post_limits', array($this, 'filter_no_news_limits')); } /* modify request parameters */ // post type $request['post_type'] = $news_post_type; // categories if (isset($options['categories']) && is_array($options['categories'])) { $request['cat'] = implode(',', $options['categories']); } $request['post_status'] = 'publish'; $request['no_found_rows'] = true; return $request; } if ($request['feed'] == 'sitemap-home') { // setup actions and filters add_action('do_feed_sitemap-home', array($this, 'load_template_base'), 10, 1); return $request; } if (strpos($request['feed'], 'sitemap-posttype') == 0) { foreach ($this->get_post_types() as $post_type) { if ($request['feed'] == 'sitemap-posttype-' . $post_type['name']) { // setup actions and filters add_action('do_feed_sitemap-posttype-' . $post_type['name'], array($this, 'load_template'), 10, 1); add_filter('post_limits', array($this, 'filter_limits')); // modify request parameters $request['post_type'] = $post_type['name']; $request['post_status'] = 'publish'; $request['orderby'] = 'modified'; $request['lang'] = ''; $request['no_found_rows'] = true; $request['update_post_meta_cache'] = false; $request['update_post_term_cache'] = false; return $request; } } } if (strpos($request['feed'], 'sitemap-taxonomy') == 0) { foreach ($this->get_taxonomies() as $taxonomy) { if ($request['feed'] == 'sitemap-taxonomy-' . $taxonomy) { // setup actions and filters add_action('do_feed_sitemap-taxonomy-' . $taxonomy, array($this, 'load_template_taxonomy'), 10, 1); // modify request parameters $request['taxonomy'] = $taxonomy; $request['lang'] = ''; $request['no_found_rows'] = true; $request['cache_results'] = false; $request['update_post_term_cache'] = false; $request['update_post_meta_cache'] = false; $request['post_status'] = 'publish'; return $request; } } } if (strpos($request['feed'], 'sitemap-custom') == 0) { // setup actions and filters add_action('do_feed_sitemap-custom', array($this, 'load_template_custom'), 10, 1); return $request; } } return $request; }
/** * REQUEST FILTER */ public function filter_request($request) { if (isset($request['feed']) && strpos($request['feed'], 'sitemap') === 0) { // modify request parameters $request['post_status'] = 'publish'; $request['no_found_rows'] = true; $request['cache_results'] = false; $request['update_post_term_cache'] = false; $request['update_post_meta_cache'] = false; $request['lang'] = ''; // Polylang if ($request['feed'] == 'sitemap-news') { $defaults = $this->defaults('news_tags'); $options = $this->get_option('news_tags'); $news_post_type = isset($options['post_type']) && !empty($options['post_type']) ? $options['post_type'] : $defaults['post_type']; if (empty($news_post_type)) { $news_post_type = 'post'; } // disable caching define('DONOTCACHEPAGE', true); define('DONOTCACHEDB', true); // set up query filters $zone = $this->timezone(); if (get_lastdate($zone, $news_post_type) > date('Y-m-d H:i:s', strtotime('-48 hours'))) { add_filter('post_limits', array($this, 'filter_news_limits')); add_filter('posts_where', array($this, 'filter_news_where'), 10, 1); } else { add_filter('post_limits', array($this, 'filter_no_news_limits')); } global $wpml_query_filter; // WPML compat if (isset($wpml_query_filter) && is_object($wpml_query_filter)) { remove_filter('posts_join', array($wpml_query_filter, 'posts_join_filter')); remove_filter('posts_where', array($wpml_query_filter, 'posts_where_filter')); } // post type $request['post_type'] = $news_post_type; // categories if (isset($options['categories']) && is_array($options['categories'])) { $request['cat'] = implode(',', $options['categories']); } return $request; } if (strpos($request['feed'], 'sitemap-posttype') === 0) { foreach ($this->get_post_types() as $post_type) { if ($request['feed'] == 'sitemap-posttype-' . $post_type['name']) { // setup filter add_filter('post_limits', array($this, 'filter_limits')); $request['post_type'] = $post_type['name']; $request['orderby'] = 'modified'; global $wpml_query_filter; // WPML compat if (isset($wpml_query_filter) && is_object($wpml_query_filter)) { remove_filter('posts_join', array($wpml_query_filter, 'posts_join_filter')); remove_filter('posts_where', array($wpml_query_filter, 'posts_where_filter')); } return $request; } } } if (strpos($request['feed'], 'sitemap-taxonomy') === 0) { foreach ($this->get_taxonomies() as $taxonomy) { if ($request['feed'] == 'sitemap-taxonomy-' . $taxonomy) { $request['taxonomy'] = $taxonomy; // WPML compat global $sitepress; if (isset($sitepress) && is_object($sitepress)) { remove_filter('get_terms_args', array($sitepress, 'get_terms_args_filter')); remove_filter('get_term', array($sitepress, 'get_term_adjust_id')); remove_filter('terms_clauses', array($sitepress, 'terms_clauses')); } return $request; } } } } return $request; }
// force header('HTTP/1.1 200 OK') even for sites without posts header('Content-Type: text/xml; charset=' . get_bloginfo('charset'), true); header('X-Robots-Tag: noindex, follow', true); echo '<?xml version="1.0" encoding="' . get_bloginfo('charset') . '"?> <?xml-stylesheet type="text/xsl" href="' . plugins_url('/xsl/sitemap.xsl', __FILE__) . '?ver=' . XMLSF_VERSION . '"?> <!-- generated-on="' . date('Y-m-d\\TH:i:s+00:00') . '" --> <!-- generator="XML & Google News Sitemap Feed plugin for WordPress" --> <!-- generator-url="http://status301.net/wordpress-plugins/xml-sitemap-feed/" --> <!-- generator-version="' . XMLSF_VERSION . '" --> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" 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"> '; global $xmlsf; $lastmodified = get_lastdate('gmt'); // TODO take language into account !! Dont't use get_lastdate but pull one post for each language instead? $lastactivityage = gmdate('U') - mysql2date('U', $lastmodified); foreach ($xmlsf->get_home_urls() as $url) { ?> <url> <loc><?php echo esc_url($url); ?> </loc> <lastmod><?php echo mysql2date('Y-m-d\\TH:i:s+00:00', $lastmodified, false); ?> </lastmod> <changefreq><?php if ($lastactivityage / 86400 < 1) {
<!-- generator-url="http://status301.net/wordpress-plugins/xml-sitemap-feed/" --> <!-- generator-version="' . XMLSF_VERSION . '" --> <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" 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"> '; global $xmlsf; ?> <sitemap> <loc><?php echo $xmlsf->get_index_url('home'); ?> </loc> <lastmod><?php echo mysql2date('Y-m-d\\TH:i:s+00:00', get_lastdate('gmt'), false); ?> </lastmod> </sitemap> <?php // add rules for public post types foreach ($xmlsf->have_post_types() as $post_type) { $archive = isset($post_type['archive']) ? $post_type['archive'] : ''; foreach ($xmlsf->get_archives($post_type['name'], $archive) as $m => $url) { ?> <sitemap> <loc><?php echo $url; ?> </loc> <lastmod><?php