Поздравляю вас с тем, что на вашем сайте теперь будет -1 плагин! 🎉 Потому что начиная с версии WordPress 5.5 в ядре движка будет присутствовать расширяемая карта сайта!
Карта сайта будет находиться по адресу /wp-sitemap.xml
, если вы уже обновились и у вас версия WordPress 5.5 или выше, попробуйте перейти по этому адресу и у вас откроется XML карта сайта. Если же при переходе у вас возникла ошибка 501, то значит у вас не стоит расширение для PHP, SimpleXML, которое необходимо для создание XML карты сайта.
Индекс карты сайта может содержать до 20000 карт сайта, в каждой по 2000 страниц (можно изменить при помощи хука).
По умолчанию в карту сайта попадают все типы постов с параметрами public и publicly_queryable и таксономии, а также архивы автора и главная страница сайта.
Также рекомендую вам свой видеокурс по WordPress, в котором мы создаём тему для сайта на основе готовой HTML вёрстки с учётом всех последних изменений в движке – вот ссылка.
Допустим я уже использую какой-то плагин для 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; }
По умолчанию карта сайта в WordPress содержит только один тег XML – URL (loc
).
Другие же теги, такие как changefreq
, priority
и lastmod
не являются обязательными и поэтому не присутствуют сразу же по умолчанию в вашей карте, для оптимизации производительности.
Тем не менее вы можете добавить их в определённую карту при помощи этих хуков:
wp_sitemaps_index_entry
– основной индекс,wp_sitemaps_posts_entry
– карта с типами постов,wp_sitemaps_taxonomies_entry
– карта с таксономиями,wp_sitemaps_users_entry
– архивы пользователей.Хорошо, допустим я хочу добавить все три тега в карту с постами:
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; }
Ещё один хук, который хочу вам показать – это 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; }
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Михаил, дико извиняюсь, но хочу задать вопрос не по теме поста. К соответствующих темах комменты закрыты, к сожалению.
Пытаюсь подключить скрипт, который находится в корневой папке сайта функцией
wp_enqueue_scripts
, не получается. В корне хостинга 2 папки: с сайтом и с upload, условно говоря. Как мне подключить скрипт из папки, не находящейся в папке WP? Регистрацией скрипта?На первый раз ваши извинения принимаются 🙃 Но впоследствии будьте пожалуйста внимательнее, есть ведь причина, по которой комментарии к старым постам закрыты.
Добрый день, в yost seo выключил sitemap, но теперь не заходит по адресу адрес сайта/sitemap.xml. Как установить SimpleXML?
Добрый день,
адрес сайта/wp-sitemap.xml
Что выбрать для использования: встроенную карту wordpress или карту yoast?
Изначально я думал что использовать встроенную карту предпочтительней, можно избавиться от лишнего плагина yoast, он у меня установлен чисто из-за карты.
Теперь из вашего поста я узнал что встроенную карту нужно будет настраивать под себя, а значить добавлять лишний код в functions.php Для меня это не очень хороший вариант, не хочется превращать этот файл в портянку.
И теперь я в раздумье что выбрать?
Да, перед вами встал непростой выбор.
Привет, у меня есть вопрос и я как-то не знаю как мне ее решить, мне нужны для страниц и постов разные приоритеты, и еще мне нужно чтобы у главной страницы был приоритет свой
я написал вроде исключения и получилось почти то, что нужно, но я не могу понять как мне указать для главной страницы свой приоритет, буду благодарен за помощь
я использовал wp_sitemaps_posts_entry но я в упор не вижу в этом фильтре за что мне зацепиться чтобы главную отфильтровать
Да, очень актуальный вопрос. И еще не понятно, как задать changefreq, lastmod и priority для категорий
плюсую к вопросу, он все еще актуален, как задать changefreq, lastmod и priority для категорий тоже актуально если можно и кто-то знает подскажите пожалуйста
А вы не пробовали вот так:
Спасибо за дополнение!
zaebok
Не хочет её обрабатывать Google Search Console. Получаю сообщение «Не удалось обработать файл Sitemap. Общая ошибка HTTP». При этом карта по ссылке открывается.
В чём может быть проблема?
Первое, что заметил – у вас в robots.txt она неправильно указана.
а можно как-то адрес поменять?)))