Як працює Карта сайту WordPress
Нижче докладно розглянемо, як працює карта сайту WordPress. Розуміння принципу роботи може спростити деякі моменти при зміні існуючої або створення своєї Карти сайту.
Опрацювання запиту
WP_Sitemaps – це головний клас, який відповідає за:
- Створення правил перезапису (ППУ). WP_Sitemaps ::register_rewrites() .
- Обробку запитів :
/wp-sitemap.xml
або/wp-sitemap-posts-post-1.xml
– сторінки Карти.wp-sitemap-index.xsl
абоwp-sitemap.xsl
– сторінки стилів Карти.
- Реєстрація провайдерів . Дивіться: WP_Sitemaps::register_sitemaps() .
- Посилання у файлі robots.txt . Дивіться: WP_Sitemaps::add_robots() .
- Опрацювання редиректів на карті сайту. Наприклад, можна перейти по URL
/sitemap-xml
(залежить від ЧПУ ваших постів) і вас перенаправить з 302 кодом на сторінку Карти сайту/wp-sitemap.xml
.
Ініціалізується цей клас функцією init :
add_action( 'init', 'wp_sitemaps_get_server'); // wp_sitemaps_get_server() запускає WP_Sitemaps::init() $wp_sitemaps = новий WP_Sitemaps(); $wp_sitemaps->init();
Функція ініціалізації WP_Sitemaps::init() виглядає так:
public function init() { // These will all fire on the init hook. $this->register_rewrites(); add_action( 'template_redirect', array( $this, 'render_sitemaps' ) ); if ( ! $this->sitemaps_enabled() ) { return; } $this->register_sitemaps(); //Add additional action callbacks. add_filter( 'pre_handle_404', array( $this, 'redirect_sitemapxml' ), 10, 2 ); add_filter( 'robots_txt', array( $this, 'add_robots' ), 0, 2); }
Як бачимо з коду, у момент ініціалізації створюються правила перезапису (ЧПУ) і подія WP_Sitemaps::render_sitemaps() .
Далі метод render_sitemaps() , перевіряє параметри запиту і якщо це:
- Будь-яка сторінка Карти сайту (або стилів картки):
- Якщо карту вимкнено, то ставиться статус відповіді 404.
- Якщо картку увімкнено, то виводиться контент сторінки і робота PHP обривається через
exit;
.
- Інша сторінка, то метод припиняє свою роботу.
Виглядає це в коді так:
public function render_sitemaps() { $sitemap = sanitize_text_field( get_query_var( 'sitemap' ) ); $object_subtype = sanitize_text_field( get_query_var( 'sitemap-subtype' ) ); $stylesheet_type = sanitize_text_field( get_query_var( 'sitemap-stylesheet' ) ); $ paged = absint (get_query_var ( 'paged')); // не сторінка карти сайту if (! ($ sitemap | | $ stylesheet_type)) return; } // карта відключена if ( ! $this->sitemaps_enabled() ) { $wp_query->set_404(); status_header(404); return; } // карта включена, виводимо контент (карту xml або стилі картки xls). exit; }
Якщо карта не відключена і ми відвідуємо будь-яку іншу сторінку сайту (не карту), то все одно спрацьовує реєстрація провайдерів Карти, завжди спрацьовує цей код з методу init() .
$this->register_sitemaps(); //Add additional action callbacks. add_filter( 'pre_handle_404', array( $this, 'redirect_sitemapxml' ), 10, 2 ); add_filter( 'robots_txt', array( $this, 'add_robots' ), 0, 2);
Навіщо потрібні хуки зрозуміло, щоб відредагувати на карту або якщо це запит на robots.txt додати посилання туди на карту. Але навіщо потрібна реєстрація провайдерів на кожній сторінці WP на фронті, мені щось незрозуміло. Цей момент потрібно знати, щоб не виконувати жодної логіки в момент реєстрації свого провайдера !
ЧПУ правила для Картки сайту
Вище я згадував, що для Карти сайту створюються свої правила перезапису, ось так виглядає код методу WP_Sitemaps::register_rewrites() :
public function register_rewrites() { / / Add rewrite tags. add_rewrite_tag( '%sitemap%', '([^?]+)' ); add_rewrite_tag( '%sitemap-subtype%', '([^?]+)' ); // Register index route. add_rewrite_rule( '^wp-sitemap.xml З коду видно які параметри запиту можуть бути на сторінці Карти сайту. Це:// провайдер карти сайту // Posts, Taxinomies, Users, Index - це головна сторінка get_query_var('sitemap'); // тип у провайдера: тип запису, назва таксономії: post, page, category, post_tag get_query_var('sitemap-subtype'); // сторінка пагінації: 1, 2, 3 ... get_query_var('paged'); // тип стилів: index – стилі головної, sitemap – стилі карти посилань get_query_var('sitemap-stylesheet');
Як працюють СтиліЯкщо ви подивитеся на вихідний код будь-якої сторінки карти, то ви не побачите там стилів, проте браузер відображає картку не як XML-код.
Так відбувається завдяки цьому рядку:
<?xml-stylesheet type="text/xsl" href="https://example.com/wp-sitemap-index.xsl" ?>Вона вказує на схему стилів. У цьому файлі (який генерується нальоту) схематично пояснюється браузеру як потрібно відобразити поточний код XML. Наприклад, текст "XML-карта сайту" можна знайти на сторінці стилів.
Сторінку стилів можна змінити за допомогою наступних фільтрів:
Стилі (Stylesheets): | |
---|---|
wp_sitemaps_stylesheet_css | Фільтрує CSS стилі карти сайту. |
wp_sitemaps_stylesheet_content | Фільтрує вигляд карти сайту. |
wp_sitemaps_stylesheet_index_content | Фільтрує зовнішній вигляд головної сторінки картки сайту. |
, ‘index.php?sitemap=index’, ‘top’ );
/ / Registry rewrites for XSL stylesheet.
add_rewrite_tag( ‘%sitemap-stylesheet%’, ‘([^?]+)’ );
add_rewrite_rule( ‘^wp-sitemap.xslЗ коду видно які параметри запиту можуть бути на сторінці Карти сайту. Це:
Як працюють Стилі
Якщо ви подивитеся на вихідний код будь-якої сторінки карти, то ви не побачите там стилів, проте браузер відображає картку не як XML-код.
Так відбувається завдяки цьому рядку:
Вона вказує на схему стилів. У цьому файлі (який генерується нальоту) схематично пояснюється браузеру як потрібно відобразити поточний код XML. Наприклад, текст “XML-карта сайту” можна знайти на сторінці стилів.
Сторінку стилів можна змінити за допомогою наступних фільтрів:
Стилі (Stylesheets): | |
---|---|
wp_sitemaps_stylesheet_css | Фільтрує CSS стилі карти сайту. |
wp_sitemaps_stylesheet_content | Фільтрує вигляд карти сайту. |
wp_sitemaps_stylesheet_index_content | Фільтрує зовнішній вигляд головної сторінки картки сайту. |
, ‘index.php?sitemap-stylesheet=sitemap’, ‘top’ );
add_rewrite_rule( ‘^wp-sitemap-index.xslЗ коду видно які параметри запиту можуть бути на сторінці Карти сайту. Це:
Як працюють Стилі
Якщо ви подивитеся на вихідний код будь-якої сторінки карти, то ви не побачите там стилів, проте браузер відображає картку не як XML-код.
Так відбувається завдяки цьому рядку:
Вона вказує на схему стилів. У цьому файлі (який генерується нальоту) схематично пояснюється браузеру як потрібно відобразити поточний код XML. Наприклад, текст “XML-карта сайту” можна знайти на сторінці стилів.
Сторінку стилів можна змінити за допомогою наступних фільтрів:
Стилі (Stylesheets): | |
---|---|
wp_sitemaps_stylesheet_css | Фільтрує CSS стилі карти сайту. |
wp_sitemaps_stylesheet_content | Фільтрує вигляд карти сайту. |
wp_sitemaps_stylesheet_index_content | Фільтрує зовнішній вигляд головної сторінки картки сайту. |
, ‘index.php?sitemap-stylesheet=index’, ‘top’ );
// Register routes for providers.
add_rewrite_rule(
‘^wp-sitemap-([az]+?)-([azd_-]+?)-(d+?).xmlЗ коду видно які параметри запиту можуть бути на сторінці Карти сайту. Це:
Як працюють Стилі
Якщо ви подивитеся на вихідний код будь-якої сторінки карти, то ви не побачите там стилів, проте браузер відображає картку не як XML-код.
Так відбувається завдяки цьому рядку:
Вона вказує на схему стилів. У цьому файлі (який генерується нальоту) схематично пояснюється браузеру як потрібно відобразити поточний код XML. Наприклад, текст “XML-карта сайту” можна знайти на сторінці стилів.
Сторінку стилів можна змінити за допомогою наступних фільтрів:
Стилі (Stylesheets): | |
---|---|
wp_sitemaps_stylesheet_css | Фільтрує CSS стилі карти сайту. |
wp_sitemaps_stylesheet_content | Фільтрує вигляд карти сайту. |
wp_sitemaps_stylesheet_index_content | Фільтрує зовнішній вигляд головної сторінки картки сайту. |
,
‘index.php?sitemap=$matches[1]&sitemap-subtype=$matches[2]&paged=$matches[3]’,
‘top’
);
add_rewrite_rule(
‘^wp-sitemap-([az]+?)-(d+?).xmlЗ коду видно які параметри запиту можуть бути на сторінці Карти сайту. Це:
Як працюють Стилі
Якщо ви подивитеся на вихідний код будь-якої сторінки карти, то ви не побачите там стилів, проте браузер відображає картку не як XML-код.
Так відбувається завдяки цьому рядку:
Вона вказує на схему стилів. У цьому файлі (який генерується нальоту) схематично пояснюється браузеру як потрібно відобразити поточний код XML. Наприклад, текст “XML-карта сайту” можна знайти на сторінці стилів.
Сторінку стилів можна змінити за допомогою наступних фільтрів:
Стилі (Stylesheets): | |
---|---|
wp_sitemaps_stylesheet_css | Фільтрує CSS стилі карти сайту. |
wp_sitemaps_stylesheet_content | Фільтрує вигляд карти сайту. |
wp_sitemaps_stylesheet_index_content | Фільтрує зовнішній вигляд головної сторінки картки сайту. |
,
‘index.php?sitemap=$matches[1]&paged=$matches[2]’,
‘top’
);
}З коду видно які параметри запиту можуть бути на сторінці Карти сайту. Це:
Як працюють Стилі
Якщо ви подивитеся на вихідний код будь-якої сторінки карти, то ви не побачите там стилів, проте браузер відображає картку не як XML-код.
Так відбувається завдяки цьому рядку:
Вона вказує на схему стилів. У цьому файлі (який генерується нальоту) схематично пояснюється браузеру як потрібно відобразити поточний код XML. Наприклад, текст “XML-карта сайту” можна знайти на сторінці стилів.
Сторінку стилів можна змінити за допомогою наступних фільтрів:
Стилі (Stylesheets): | |
---|---|
wp_sitemaps_stylesheet_css | Фільтрує CSS стилі карти сайту. |
wp_sitemaps_stylesheet_content | Фільтрує вигляд карти сайту. |
wp_sitemaps_stylesheet_index_content | Фільтрує зовнішній вигляд головної сторінки картки сайту. |