WordPress как на ладони

Динамический файл `/mysitemap.xml` без размещения на хостниге

Подскажите как на ВП перехватить УРЛ файла и выдать туда php скрипт?
Подробнее. Я хочу сделать свою собственную карту сайта в формате xml. Для этого мне нужно:

  1. Перехватить УРЛ (например, example.com/mysitemap.xml)
  2. Сделать чтобы туда выдавался php скрипт из внутреннего файла.
    Смысл в том чтобы не хранить файл на хостинге, а генерировать его динамически на лету, в момент запроса.
    Просьба плагины карт сайта не предлагать, для моих задач они не подходят.
0
maxxwell
6.6 лет назад 19
  • 0
    campusboy4742 www.youtube.com/c/wpplus

    Можешь за основу взять создание RSS ленты:

    add_action( 'init', function () {
    	add_feed( 'my_feed', 'feed_markup' );
    	function feed_markup() {
    		do_action( 'my_before_feed' );
    		header( 'Content-Type: ' . feed_content_type( 'rss' ) . '; charset=' . get_option( 'blog_charset' ), true );
    		status_header( 200 );
    		echo '<?xml version="1.0" encoding="UTF-8"?>';
    		?>
    
    		<rss version="2.0"
    			 xmlns:content="http://purl.org/rss/1.0/modules/content/"
    			 xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    			 xmlns:dc="http://purl.org/dc/elements/1.1/"
    			 xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    			 xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    		>
    			<channel>
    				<title>example.com</title>
    				<link>
    				https://example.com/my_feed</link>
    				<description>My new feed</description>
    				<lastBuildDate>Tue, 28 Feb 2017 13:00:41 +0000</lastBuildDate>
    				<language>ru-RU</language>
    				<sy:updatePeriod>hourly</sy:updatePeriod>
    				<sy:updateFrequency>1</sy:updateFrequency>
    				<item>
    					<title>Hello world text</title>
    					<pubDate>Tue, 28 Feb 2017 13:00:41 +0000</pubDate>
    					<description><![CDATA[<p></p> Hello World </a> ]]></description>
    				</item>
    			</channel>
    		</rss>
    		<?php
    		exit;
    	}
    } );

    После вставки кода надо зайти в настройки ЧПУ и нажать Сохранить. По пути мой-сайт/my_feed/ будет отображаться содержимое, генерируемое пользовательской функцией feed_markup. То есть в ней ты можешь писать всё, что тебе вздумается. Slug ссылки my_feed можно заменить на что захочешь, к примеру, на тот же mysitemap.xml.

    maxxwell 6.6 лет назад

    Спасибо, очень интересный способ. Буду пробовать.

    maxxwell 6.6 лет назад

    В итоге вот такой скрипт настрадал

    /*>>> кастомный sitemap.xml <<<*/
    
    add_action('init', 'customsitemap');
    function customsitemap(){
    	   if ( $_SERVER['REQUEST_URI'] == '/mysitemap.xml' ) {
    		   status_header(200); //отправка ответа 200 ОК
    		   header("X-Robots-Tag: noindex, follow"); //отправка директивы для поисковиков не брать страницу в индекс, но чтобы робот мог индексировать сссылки на странице
    
    		   // код скрипта;
    
    		   exit();  
    	   }
    	   else {
    		   return;
    	   }
    }
    
    /*>>> кастомный sitemap.xml <<<*/
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация