Динамический файл `/mysitemap.xml` без размещения на хостниге
Подскажите как на ВП перехватить УРЛ файла и выдать туда php скрипт?
Подробнее. Я хочу сделать свою собственную карту сайта в формате xml. Для этого мне нужно:
- Перехватить УРЛ (например, example.com/mysitemap.xml)
- Сделать чтобы туда выдавался php скрипт из внутреннего файла.
Смысл в том чтобы не хранить файл на хостинге, а генерировать его динамически на лету, в момент запроса.
Просьба плагины карт сайта не предлагать, для моих задач они не подходят.
Можешь за основу взять создание 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.Спасибо, очень интересный способ. Буду пробовать.
В итоге вот такой скрипт настрадал
/*>>> кастомный 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 <<<*/