В один прекрасный день, зайдя в панель вебмастера Google, я увидел предупреждение об ошибке в чтении файла sitemap.html. Проверив адрес в браузере, я увидел ошибку, которая предупреждала о превышении лимита выделенной памяти на хостинге. Проблему нужно было решать оперативно.
Поскольку сайт включает в себя более 600 записей, то сразу стало ясно, что проблема именно в этом, и нужно искать альтернативу установленному плагину — WordPress Simple HTML Sitemap. Первое, что было сделано – это установлено несколько плагинов из репозитория WordPress, таких как WP Sitemap Page, Easy HTML Sitemap и других, но результат оказался в тот же, ошибка никуда не пропала.
Стало понятно, что перебирать все варианты готовых решений нет никакого смысла и нужно искать способы вывести html карту сайта на WordPress без плагинов. И такое решение нашлось. Ниже привожу пошаговую инструкцию для его внедрения.
Карта сайта в формате html позволяет поисковикам иметь доступ ко всем записям вашего блога, даже со сложной структурой, что позитивно влияет на индексирование вашего ресурса.
Шаг 1. В папке вашей wordpress темы создаем php файл – page-sitemap.php. Путь к файлу должен иметь вид: /wp-content/themes/<Ваша тема>/page-sitemap.php.
Шаг 2. Добавляем следующий код в файл page-sitemap.php.
<?php
/**
* Template Name: HTML Sitemap Page
*
* Create Dynamic HTML Sitemap in WordPress
*/
get_header();
?>
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<div class="html-sitemap">
<h2>Автор(ы):</h2>
<ul class="sitemap-authors">
<?php wp_list_authors('exclude_admin=1&optioncount=1'); ?>
</ul>
<h2>Страницы:</h2>
<ul class="sitemap-pages">
<?php wp_list_pages(array('exclude' => '', 'title_li' => '')); // Exclude pages by ID ?>
</ul>
<h2>Записи:</h2>
<ul>
<?php
$categories = get_categories('exclude='); // Exclude categories by ID
foreach ($categories as $cat) {
?>
<li class="category">
<h3><span class="grey">Категория: </span><?php echo $cat->cat_name; ?></h3>
<ul class="cat-posts">
<?php
query_posts('posts_per_page=-1&cat='.$cat->cat_ID); //-1 shows all posts per category. 1 to show most recent post.
while(have_posts()):
the_post();
$category = get_the_category();
if ($category[0]->cat_ID == $cat->cat_ID) { ?>
<li>
<?php the_time('M d, Y')?> » <a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a> (<?php comments_number('0', '1', '%'); ?>)
</li>
<?php
}
endwhile;
?>
</ul>
</li>
<?php } ?>
</ul>
<?php wp_reset_query(); ?>
<h2>Архивы:</h2>
<ul class="sitemap-archives">
<?php wp_get_archives('type=monthly&show_post_count=true'); ?>
</ul>
</div>
</main>
</div>
<?php
get_sidebar();
get_footer();
Вверху, закомментировано название шаблона страницы «HTML Sitemap Page».
Разметку данной страницы вы также редактируете согласно своей темы, и добавляете или удаляете блоки, классы и id для всех контейнеров на странице.
В коде выводиться несколько блоков с информацией со ссылками на: авторов, записи, страницы, архивы. Вы можете удалить не нужные для вас куски кода, оставив, например, только страницы и записи.
Кстати все записи в карте сайта будут разбиты по категориям, что придает большей структурированности вашему контенту.
Шаг 3. Идем в админку, переходим в раздел «Страницы» и нажимаем «Добавить новую». Вводим название страницы, title и description, а также редактируем постоянную ссылку в формат «/sitemap». После чего справа в сайдбаре нажимаем вкладку «Атрибуты страницы», и в поле «Шаблон» выбираем созданный нами шаблон с названием «HTML Sitemap Page». Нажимаем опубликовать.

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