карта сайта для wordpress

Как сделать карту сайта без плагинов в wordpress?

Воспользуйтесь минимальной настройкой темы для формирования карты сайта (sitemap.xml) в Wordpress. Никаких плагинов или агрегаторов.


Карта сайта или sitemap генерируется по-умолчанию в WordPress. Но из опыта разработки, можно утверждать, что такая генерация не всегда функциональна и подходит для поисковых систем. Так как сделать карту сайта или sitemap без плагинов в wordpress?

Какие недостатки стандартной карты сайта от WordPress

Основным недостатком являются проблемы с произвольными типами записей, которые могут не отображаться или выводится с ошибками. Например, если вы самостоятельно внедряете дополнительный тип записи: услуги, отзывы и др.

Во-вторых, опять же из личного опыта, как сам wordpress так и дополнительные плагины могут создавать излишнюю нагрузку на базу, например: через вызов функции wp_sitemaps_get_server ().

В-третьих, разбивка по типам записей с указанием принадлежности к wordpress (wp-post, wp-page и др.) — не всегда удобный вариант при необходимости применения полноценного SEO. В данном случае имеется в виду: акцент на уникализацию исходного кода.

И еще дополнительный момент, возможно и основной — стандартный sitemap сложен во внесении правок и настройке. Так как находится внутри самого движка — в исходном коде cms. Понятно, что лучше в исходный код самой системы не вносить правки, тем более они откатится к стандартным при обновлении версии.

Решение для sitemap в WordPress

Предлагаем использовать решение для генерации sitemap.xml в WordPress. Указанный ниже код вносится в файл functions.php в папке с используемой темой.

/* ------------------------------------------------------------------------- *
* Карта сайта от max-site.ru
/* ------------------------------------------------------------------------- */
add_action("publish_post", "max_create_sitemap");
add_action("publish_page", "max_create_sitemap");
function max_create_sitemap() {
$postsForSitemap = get_posts(array(
'numberposts' => -1,
'orderby' => 'modified',
'post_type' => array('post','page'),
'order' => 'DESC'
));
$sitemap = '<?xml version="1.0" encoding="UTF-8"?>';
$sitemap .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
foreach($postsForSitemap as $post) {
setup_postdata($post);
$postdate = explode(" ", $post->post_modified);
$sitemap .= '<url>'.
'<loc>'. get_permalink($post->ID) .'</loc>'.
'<priority>1</priority>'.
'<lastmod>'. $postdate[0] .'</lastmod>'.
'<changefreq>daily</changefreq>'.
'</url>';
}
$sitemap .= '</urlset>';
$fp = fopen(ABSPATH . "max-sitemap.xml", 'w');
fwrite($fp, $sitemap);
fclose($fp);
}

Обратите внимание на 4,5 и 10 строки кода — они указывают на типы записей используемые при генерации карты сайта.

Sitemap для произвольного типа записи

В качестве примера используется тип записи otziv (таксономия аналогичных записей всегда на латинице).

/* ------------------------------------------------------------------------- *
* Карта сайта от max-site.ru для произвольных записей
/* ------------------------------------------------------------------------- */
add_action("publish_post", "max_create_sitemap");
add_action("publish_page", "max_create_sitemap");
add_action("publish_otziv", "max_create_sitemap");//тип записи
function max_create_sitemap() {
$postsForSitemap = get_posts(array(
'numberposts' => -1,
'orderby' => 'modified',
'post_type' => array('post','page','otziv'), //типы записей
'order' => 'DESC'
));
$sitemap = '<?xml version="1.0" encoding="UTF-8"?>';
$sitemap .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
foreach($postsForSitemap as $post) {
setup_postdata($post);
$postdate = explode(" ", $post->post_modified);
$sitemap .= '<url>'.
'<loc>'. get_permalink($post->ID) .'</loc>'.
'<priority>1</priority>'.
'<lastmod>'. $postdate[0] .'</lastmod>'.
'<changefreq>daily</changefreq>'.
'</url>';
}
$sitemap .= '</urlset>';
$fp = fopen(ABSPATH . "max-sitemap.xml", 'w');
fwrite($fp, $sitemap);
fclose($fp);
}

 

Что делать дальше?

Необходимо отключить генерацию sitemap по-умолчанию. Для этого в файл functions.php добавить одну строчку кода.

 

/**
 * отключение стандартной карты сайта в wordpress
 */

add_filter( 'wp_sitemaps_enabled' , '__return_false' );

Далее в панели администратора обновите любую запись или страницу. После этого в корне сайта появиться файл max-sitemap.xml, который доступен по адресу: ваш-сайт.ру/max-sitemap.xml

P.S. Не забудьте добавить этот url в файл robots и в соответствующие сервисы поисковых систем

Карта сайта — какие преимущества этого решения?

Основное преимущество — это возможность публикации в sitemap любых типов записей. Причем sitemap формировать как одиночный, так и множественный — при большом числе произвольных записей. Для этого необходимо продублировать функцию max_create_sitemap() с другим названием и заменить имя конечного файла xml.

Рекомендуем использовать своеобразную разбивку, для минимизации нагрузки на functions.php

 

/**
 * Карта сайта
 */
require get_template_directory() . '/inc/karta-xml-1.php';
require get_template_directory() . '/inc/karta-xml-2.php';

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

Ну и в-третьих, никаких стилей или дополнительной «мусорной» красоты оформления формируемая карта сайта не имеет — это чистый и правильный код, что существенно снижает ее размер. Что достаточно важно при обходе или индексировании sitemap.xml поисковыми системами.