Поздравляю вас с тем, что на вашем сайте теперь будет -1 плагин! 🎉 Потому что начиная с версии WordPress 5.5 в ядре движка будет присутствовать расширяемая карта сайта!
Карта сайта будет находиться по адресу /wp-sitemap.xml
, если вы уже обновились и у вас версия WordPress 5.5 или выше, попробуйте перейти по этому адресу и у вас откроется XML карта сайта. Если же при переходе у вас возникла ошибка 501, то значит у вас не стоит расширение для PHP, SimpleXML, которое необходимо для создание XML карты сайта.
Индекс карты сайта может содержать до 20000 карт сайта, в каждой по 2000 страниц (можно изменить при помощи хука).
По умолчанию в карту сайта попадают все типы постов с параметрами public и publicly_queryable и таксономии, а также архивы автора и главная страница сайта.
Как отключить карту сайта WordPress
Допустим я уже использую какой-то плагин для WordPress для создания карты сайта, например Google XML Sitemaps и он меня полностью устраивает, а тестить новый функционал у меня пока что нет времени.
Вы можете вставить этот код в functions.php
вашей текущей или дочерней темы:
add_filter( 'wp_sitemaps_enabled', '__return_false' );
И всё, карта сайта по адресу /wp-sitemap.xml
исчезнет и будет выводиться ошибка 404.
Кроме того, хочу добавить, что карта сайта будет выдавать 404 ещё в одном случае – когда в настроках чтения у вас включена галка «Попросить поисковые системы не индексировать сайт».
Также у вас есть возможность проверить, что карты сайта включены при помощи метода wp_sitemaps_get_server()->sitemaps_enabled()
:
if( wp_sitemaps_get_server()->sitemaps_enabled() ) { // ага, включены }
Удаляем определённые карты сайта из индекса
У вас также есть возможность удалить определённые провайдеры (карты сайта) из индекса, например если вам не нужны в вашей карте архивы постов пользователей, то вы можете использовать этот фильтр-хук:
add_filter( 'wp_sitemaps_add_provider', 'truemisha_remove_user_sitemap', 25, 2 ); function truemisha_remove_user_sitemap( $provider, $name ) { if ( 'users' === $name ) { // если архивы пользователей, то отключаем return false; } return $provider; }
Убираем определённые типы постов из карты
Для этого существует отдельный хук wp_sitemaps_post_types
, если вы например хотите исключить из вашей карты сайта тип постов Страницы, то код будет выглядеть так:
add_filter( 'wp_sitemaps_post_types', 'truemisha_remove_pages', 25 ); function truemisha_remove_pages( $post_types ) { unset( $post_types['page'] ); return $post_types; }
Удаляем определённые таксономии из карты сайта
Похожая ситуация и для таксономий – есть хук wp_sitemaps_taxonomies
, при помощи которого легко это сделать, например для таксономии Теги post_tag
:
add_filter( 'wp_sitemaps_taxonomies', 'truemisha_remove_tags', 25 ); function truemisha_remove_tags( $taxonomies ) { unset( $taxonomies['post_tag'] ); return $taxonomies; }
Добавляем теги XML
По умолчанию карта сайта в WordPress содержит только один тег XML – URL (loc
).
Другие же теги, такие как changefreq
, priority
и lastmod
не являются обязательными и поэтому не присутствуют сразу же по умолчанию в вашей карте, для оптимизации производительности.
Тем не менее вы можете добавить их в определённую карту при помощи этих хуков:
Хорошо, допустим я хочу добавить все три тега в карту с постами:
add_filter( 'wp_sitemaps_posts_entry', 'truemisha_add_sitemap_tags', 25, 2 ); function truemisha_add_sitemap_tags( $entry, $post ) { $entry[ 'priority' ] = '40%'; $entry[ 'changefreq' ] = 'Monthly'; $entry[ 'lastmod' ] = $post->post_modified_gmt; return $entry; }
Готово, внутри функции хука доступен также объект поста $post
, благодаря которому мы легко получаем время последнего изменения.
Если вы попробуете добавить несуществующие теги, то это приведёт к уведомлению _doing_it_wrong.
Исключаем определённую страницу из карты сайта
Предположим, что вы создали какой-то SEO-плагин, который позволяет добавлять мета-тег robots noindex для определённых страниц или записей сайта, тогда вполне логично, что их нужно исключать и из карты сайта.
В этом вам поможет фильтр-хук wp_sitemaps_posts_query_args
:
add_filter( 'wp_sitemaps_posts_query_args', 'truemisha_exclude_post', 25, 2 ); function truemisha_exclude_post( $args, $post_type ) { // ничего не делаем, если тип поста не post if ( 'post' !== $post_type ) { return $args; } // параметр post__not_in уже может существовать, не теряем его $args[ 'post__not_in' ] = isset( $args[ 'post__not_in' ] ) ? $args[ 'post__not_in' ] : array(); // исключаем запись с ID 1, да, которая "Привет мир" $args[ 'post__not_in' ][] = 1; return $args; }
Количество URL в одной карте
Ещё один хук, который хочу вам показать – это wp_sitemaps_get_max_urls
. Как я уже сказал в самом начале урока – по умолчанию содержится 2000 URL в одной карте, но мы можем изменить это значение.
add_filter( 'wp_sitemaps_max_urls', 'truemisha_url_v_karte', 25 ); function truemisha_url_v_karte( $object_type ){ // $object_type может быть 'post', 'term', 'user' return 1000; }