Новая функциональность XML Sitemaps в WordPress 5.5

В WordPress 5.5 вводится новая функция, которая добавляет базовую расширяемуюфункциональность XML sitemaps в ядро WordPress .

В то время как веб-искатели могут обнаруживать страницы по ссылкам внутри сайта и с других сайтов, карты сайтов дополняют этот подход, позволяя искателям быстро и всесторонне идентифицировать все URL-адреса, включенные в карту сайта, и изучать другие сигналы об этих URL-адресах, используя соответствующие метаданные.

В этой статье подробно объясняются различные способы настройки этой новой функции разработчиками. Например, если вы разрабатываете плагин с аналогичной функциональностью, этот пост покажет вам, как вы можете интегрировать его с новой функцией sitemaps ядра.

Ключевые Выносы

С версией 5.5., WordPress будет выставлять индекс sitemap по адресу /wp-sitemap.xml. Это основной XML-файл, содержащий список всех страниц sitemap, представленных сайтом WordPress.

Индекс sitemap может содержать максимум 50000 карт сайта, а один файл sitemap может содержать (фильтруемый) максимум 2000 записей.

По умолчанию карты сайтов создаются для всех общедоступных и общедоступных типов сообщений и таксономий, а также для архивов авторов и, конечно же, для главной страницы сайта.

robots.txtФайл, открытый WordPress, будет ссылаться на индекс sitemap, так что я могу быть легко обнаружен поисковыми системами.

технические условия

Для рендеринга карт сайтов на интерфейсе требуется расширение SimpleXML PHP. Если это расширение недоступно, вместо карты сайта будет отображаться сообщение об ошибке. Код состояния HTTP 501 (“не реализовано”) будет отправлен соответствующим образом.

Настройка Поведения Карт Сайтов

Добавление Пользовательских Карт Сайтов

WordPress предоставляет карты сайтов для встроенных типов контента, таких как страницы и архивы авторов из коробки. Если вы разрабатываете плагин, который добавляет пользовательские функции помимо этих стандартных, или просто хотите включить некоторые пользовательские URL-адреса на свой сайт,возможно, имеет смысл добавить пользовательский поставщик sitemap.

Для этого все, что вам нужно сделать, это создать пользовательский PHP-класс, который расширяет абстрактный WP_Sitemaps_Providerкласс В core. Затем вы можете использовать эту wp_register_sitemap_provider()функцию для его регистрации. Вот вам пример:

1
2
3
4
5
6
7
add_filter(
    'init',
    function() {
        $provider = new Awesome_Plugin_Sitemaps_Provider();
        wp_register_sitemap_provider( 'awesome-plugin', $provider );
    }
);

Поставщик будет нести ответственность за получение всех карт сайта и записей карты сайта, а также за определение разбиения на страницы.

Удаление Определенных Карт Сайта

Существует три существующих поставщика sitemaps для типов объектов WordPress, таких как сообщения, таксономии и пользователи. Если вы хотите удалить один из них, скажем, провайдера “пользователи”, Вы можете использовать wp_sitemaps_add_provider фильтр для этого. Вот вам пример:

1
2
3
4
5
6
7
8
9
10
11
12
add_filter(
    'wp_sitemaps_add_provider',
    function( $provider, $name ) {
        if ( 'users' === $name ) {
            return false;
        }
        return $provider;
    },
    10,
    2
);

Если вместо этого вы хотите отключить генерацию sitemap для определенного типа записей или таксономии, используйте wp_sitemaps_post_typeswp_sitemaps_taxonomiesфильтр или соответственно.

Пример: отключение sitemaps для pageтипа post

1
2
3
4
5
6
7
add_filter(
    'wp_sitemaps_post_types',
    function( $post_types ) {
        unset( $post_types['page'] );
        return $post_types;
    }
);

Пример: отключение sitemaps для post_tagтаксономии

1
2
3
4
5
6
7
add_filter(
    'wp_sitemaps_taxonomies',
    function( $taxonomies ) {
        unset( $taxonomies['post_tag'] );
        return $taxonomies;
    }
);

Добавление дополнительных тегов к записям карты сайта

Протокол sitemaps определяет определенный набор поддерживаемых атрибутов для записей sitemap. Из них требуется только тег URL (loc). Все остальные (напримерchangefreq, и priority) являются необязательными тегами в протоколе sitemaps и обычно не используются поисковыми системами, поэтому WordPress перечисляет только сам URL-адрес. Разработчики все еще могут добавлять эти теги, если они действительно этого хотят.

Вы можете использовать wp_sitemaps_posts_entrywp_sitemaps_users_entrywp_sitemaps_taxonomies_entryфильтры / / для добавления дополнительных тегов, таких какchangefreq,priority, или lastmodк отдельным элементам карты сайта.

Пример: добавление даты последнего изменения для записей

1
2
3
4
5
6
7
8
9
add_filter(
    'wp_sitemaps_posts_entry',
    function( $entry, $post ) {
        $entry['lastmod'] = $post->post_modified_gmt;
        return $entry;
    },
    10,
    2
);

Аналогично, вы можете использовать wp_sitemaps_index_entryфильтр для добавления lastmodиндекса sitemap. Примечание: протокол sitemaps не поддерживает индекс sitemap.

Попытка добавить любые неподдерживаемые теги приведет к _doing_it_wrongуведомлению.

Исключение одного поста из карты сайта

Если вы разрабатываете плагин, который позволяет установить определенные сообщения или страницы в noindex,то неплохо бы исключить их и из sitemap.

wp_sitemaps_posts_query_argsФильтр может быть использован для исключения определенных сообщений из карты сайта. Вот вам пример:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
add_filter(
    'wp_sitemaps_posts_query_args',
    function( $args, $post_type ) {
        if ( 'post' !== $post_type ) {
            return $args;
        }
        $args['post__not_in'] = isset( $args['post__not_in'] ) ? $args['post__not_in'] : array();
        $args['post__not_in'][] = 123; // 123 is the ID of the post to exclude.
        return $args;
    },
    10,
    2
);

Полное Отключение Функциональности Sitemaps

Если вы обновите настройки видимости сайта в WordPress admin, чтобы запретить поисковым системам индексировать ваш сайт, карты сайтов будут отключены. Вы можете использовать wp_sitemaps_enabledфильтр, чтобы переопределить поведение по умолчанию.

Вот пример того, как полностью отключить sitemaps, несмотря ни на что:

1
add_filter( 'wp_sitemaps_enabled', '__return_false' );

Примечание: это не приведет к удалению правил перезаписи, используемых для карт сайтов, поскольку они необходимы для отправки соответствующих ответов, когда карты сайтов отключены.

Хотите знать, включены ли в настоящее время карты сайтов или нет? Пользуйся wp_sitemaps_get_server()->sitemaps_enabled().

Изображение/Видео/Новости Sitemaps

WordPress в настоящее время реализует и поддерживает основной формат sitemaps, определенный на sitemaps.org расширения Sitemap, такие как изображения, видео и новостные карты сайтов, не охватываются этой функцией, так как они обычно полезны только для небольшого числа веб-сайтов. В будущих версиях WordPress могут быть добавлены фильтры и крючки, позволяющие добавлять такую функциональность. На данный момент это все еще будет оставлено плагинам для реализации.

Новые классы и функции

На момент написания этой статьи это полный список новых классов и функций, введенных с помощью этой функции.

Функции:

  • wp_sitemaps_get_server – Извлекает текущий экземпляр сервера Sitemaps.
  • wp_get_sitemap_providers – Получает массив поставщиков sitemap.
  • wp_register_sitemap_provider – Регистрирует нового поставщика sitemap.
  • wp_sitemaps_get_max_urls – Получает максимальное количество URL-адресов для карты сайта.

Классы:

  • WP_Sitemaps – Основной класс, ответственный за настройку перезаписей и регистрацию всех поставщиков.
  • WP_Sitemaps_Index – Создает индексную страницу sitemap, на которой перечислены ссылки на все карты сайта.
  • WP_Sitemaps_Provider – Базовый класс для других поставщиков sitemap для расширения и содержит общие функциональные возможности.
  • WP_Sitemaps_Registry – Обрабатывает регистрацию поставщиков карт сайта.
  • WP_Sitemaps_Renderer – Ответственный за рендеринг данных Sitemaps в XML в соответствии с протоколом sitemap.
  • WP_Sitemaps_Stylesheet – Этот класс предоставляет таблицы стилей XSL для стилизации всех карт сайта.
  • WP_Sitemaps_Posts – Создает карты сайта для типа объекта “post” и его подтипов (пользовательские типы записей).
  • WP_Sitemaps_Taxonomies – Создает карты сайта для типа объекта “таксономия” и его подтипов (пользовательские таксономии).
  • WP_Sitemaps_Users – Создает карты сайта для типа объекта “пользователь”.

Доступные крючки и фильтры

На момент написания этой статьи это полный список доступных крючков и фильтров.

Общая информация:

  • wp_sitemaps_enabled – Фильтрует, включены ли XML-карты сайтов или нет.
  • wp_sitemaps_max_urls – Фильтрует максимальное количество URL-адресов, отображаемых на карте сайта.
  • wp_sitemaps_init – Срабатывает при инициализации карт сайта.
  • wp_sitemaps_index_entry – Фильтрует запись sitemap для индекса sitemap.

Услуги поставщиков:

  • wp_sitemaps_add_provider – Фильтрует поставщика sitemap перед его добавлением.
  • wp_sitemaps_post_types – Фильтрует список типов записей для включения в карты сайта.
  • wp_sitemaps_posts_entry – Фильтрует запись sitemap для отдельного поста.
  • wp_sitemaps_posts_show_on_front_entry – Фильтрует запись sitemap для домашней страницы, когда опция “show_on_front” равна “posts”.
  • wp_sitemaps_posts_query_args – Фильтрует аргументы запроса для запросов типа Post sitemap.
  • wp_sitemaps_posts_pre_url_list – Фильтрует список URL-адресов сообщений до его создания (короткое замыкание).
  • wp_sitemaps_posts_pre_max_num_pages – Фильтрует максимальное количество страниц до того, как она будет сгенерирована (короткое замыкание).
  • wp_sitemaps_taxonomies – Фильтрует список таксономий для включения в карты сайта.
  • wp_sitemaps_taxonomies_entry – Фильтрует запись sitemap для отдельного термина.
  • wp_sitemaps_taxonomies_query_args – Фильтрует аргументы запроса для запросов sitemap терминов таксономии.
  • wp_sitemaps_taxonomies_pre_url_list – Фильтрует список URL-адресов таксономий до его создания (короткое замыкание).
  • wp_sitemaps_taxonomies_pre_max_num_pages – Фильтрует максимальное количество страниц до того, как она будет сгенерирована (короткое замыкание).
  • wp_sitemaps_users_entry – Фильтрует запись sitemap для отдельного пользователя.
  • wp_sitemaps_users_query_args – Фильтрует аргументы запроса для пользовательских запросов sitemap.
  • wp_sitemaps_users_pre_url_list – Фильтрует список URL-адресов пользователей перед его формированием (короткое замыкание).
  • wp_sitemaps_users_pre_max_num_pages – Фильтрует максимальное количество страниц до того, как она будет сгенерирована (короткое замыкание).

Таблица стилей:

  • wp_sitemaps_stylesheet_css – Фильтрует CSS для таблицы стилей sitemap.
  • wp_sitemaps_stylesheet_url – Фильтрует URL-адрес для таблицы стилей sitemap.
  • wp_sitemaps_stylesheet_content – Фильтрует содержимое таблицы стилей sitemap.
  • wp_sitemaps_stylesheet_index_url – Фильтрует URL-адрес для таблицы стилей индекса sitemap.
  • wp_sitemaps_stylesheet_index_content – Фильтрует содержимое таблицы стилей индекса sitemap.