Create New Item
×
Item Type
File
Folder
Item Name
×
Search file in folder and subfolders...
File Manager
/
wp-includes
/
sitemaps
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php class WP_Sitemaps_Renderer { protected $stylesheet = ''; protected $stylesheet_index = ''; public function __construct() { $stylesheet_url = $this->get_sitemap_stylesheet_url(); if ($stylesheet_url) { $this->stylesheet = '<?xml-stylesheet type="text/xsl" href="' . esc_url($stylesheet_url) . '" ?>'; } $stylesheet_index_url = $this->get_sitemap_index_stylesheet_url(); if ($stylesheet_index_url) { $this->stylesheet_index = '<?xml-stylesheet type="text/xsl" href="' . esc_url($stylesheet_index_url) . '" ?>'; } } public function get_sitemap_stylesheet_url() { global $wp_rewrite; $sitemap_url = home_url('/wp-sitemap.xsl'); if (!$wp_rewrite->using_permalinks()) { $sitemap_url = home_url('/?sitemap-stylesheet=sitemap'); } return apply_filters('wp_sitemaps_stylesheet_url', $sitemap_url); } public function get_sitemap_index_stylesheet_url() { global $wp_rewrite; $sitemap_url = home_url('/wp-sitemap-index.xsl'); if (!$wp_rewrite->using_permalinks()) { $sitemap_url = home_url('/?sitemap-stylesheet=index'); } return apply_filters('wp_sitemaps_stylesheet_index_url', $sitemap_url); } public function render_index($sitemaps) { header('Content-type: application/xml; charset=UTF-8'); $this->check_for_simple_xml_availability(); $index_xml = $this->get_sitemap_index_xml($sitemaps); if (!empty($index_xml)) { echo $index_xml; } } public function get_sitemap_index_xml($sitemaps) { $sitemap_index = new SimpleXMLElement(sprintf('%1$s%2$s%3$s', '<?xml version="1.0" encoding="UTF-8" ?>', $this->stylesheet_index, '<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" />')); foreach ($sitemaps as $entry) { $sitemap = $sitemap_index->addChild('sitemap'); foreach ($entry as $name => $value) { if ('loc' === $name) { $sitemap->addChild($name, esc_url($value)); } elseif ('lastmod' === $name) { $sitemap->addChild($name, esc_xml($value)); } else { _doing_it_wrong(__METHOD__, sprintf(__('Fields other than %s are not currently supported for the sitemap index.'), implode(',', array('loc', 'lastmod'))), '5.5.0'); } } } return $sitemap_index->asXML(); } public function render_sitemap($url_list) { header('Content-type: application/xml; charset=UTF-8'); $this->check_for_simple_xml_availability(); $sitemap_xml = $this->get_sitemap_xml($url_list); if (!empty($sitemap_xml)) { echo $sitemap_xml; } } public function get_sitemap_xml($url_list) { $urlset = new SimpleXMLElement(sprintf('%1$s%2$s%3$s', '<?xml version="1.0" encoding="UTF-8" ?>', $this->stylesheet, '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" />')); foreach ($url_list as $url_item) { $url = $urlset->addChild('url'); foreach ($url_item as $name => $value) { if ('loc' === $name) { $url->addChild($name, esc_url($value)); } elseif (in_array($name, array('lastmod', 'changefreq', 'priority'), true)) { $url->addChild($name, esc_xml($value)); } else { _doing_it_wrong(__METHOD__, sprintf(__('Fields other than %s are not currently supported for sitemaps.'), implode(',', array('loc', 'lastmod', 'changefreq', 'priority'))), '5.5.0'); } } } return $urlset->asXML(); } private function check_for_simple_xml_availability() { if (!class_exists('SimpleXMLElement')) { add_filter('wp_die_handler', static function () { return '_xml_wp_die_handler'; }); wp_die(sprintf(esc_xml(__('Could not generate XML sitemap due to missing %s extension')), 'SimpleXML'), esc_xml(__('WordPress › Error')), array('response' => 501)); } } }