示例#1
0
文件: core.php 项目: jolay/maga2.0
 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;
 }
示例#2
0
 /**
  * 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;
 }
示例#3
0
// 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) {
示例#4
0
<!-- 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