Карты сайта в формате HTML, в отличии от XML, часто упоминаются как полезные для SEO. Это безусловно так, если их использовать с умом, но я люблю их ещё и за то, что они нравятся многим пользователям и не редко используются ими для навигации по сайту.
Существует множество плагинов, которые могут помочь Вам сделать HTML карту сайта. Я тоже до определённого времени использовал популярный плагин DDSitemapGen (Dagon Design Sitemap Generator). Не знаю как у других, но данный плагин делал большое количество запросов к базе данных. Их было более 150, что напрягало сервера моего хостинга. Походив по интернету я всё таки нашел альтернативу, устраивающую меня. Он основан на создании шаблона карты сайта, внутри темы Вашего сайта. Вы можете включать или исключать определенные страницы, категории, менять дизайн на своё усмотрение и т.д. Короче, функциональность почти не потеряна. Кстати, после установки карты сайта, число запросов снизилось до 50.
Для того чтобы создать такую карту сайта, перейдите в папку с шаблоном сайта и создайте там файл, например sitemap.php. Далее, вставьте туда следующий код и адаптируйте его по мере необходимости для Вашего сайта:
<h2 id="authors">Авторы</h2> <ul> <?php wp_list_authors( array( 'exclude_admin' => false, ) ); ?> </ul> <h2 id="pages">Страницы</h2> <ul> <?php // Add pages you'd like to exclude in the exclude here wp_list_pages( array( 'exclude' => '', 'title_li' => '', ) ); ?> </ul> <h2 id="posts">Статьи</h2> <ul> <?php // Add categories you'd like to exclude in the exclude here $cats = get_categories('exclude='); foreach ($cats as $cat) { echo '<li><strong>Категория:</strong> <a href="' . get_category_link( $cat->term_id ) . '" title="' . sprintf( __( "View all posts in %s" ), $cat->cat_name ) . '" ' . '>' . $cat->cat_name.'</a>'; echo "<ul>"; query_posts('posts_per_page=-1&cat='.$cat->cat_ID); while(have_posts()) { the_post(); $category = get_the_category(); // Only display a post link once, even if it's in multiple categories if ($category[0]->cat_ID == $cat->cat_ID) { echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>'; } } echo "</ul>"; echo "</li>"; } ?> </ul>
Теперь, когда у нас есть код карты сайта, нужно вывести его на страницу блога. В шаблоне Вашего блога, Вы можете скопировать данные из файла page.php в sitemap.php. Например, у меня в конечном итоге всё расположено так:
<?php /* Template Name: Sitemap Page */ ?> <?php get_header(); ?> <?php get_sidebar(); ?> <div id="content"> <div class="single"> <div class="cover"> <div class="entry"> /* код карты сайты, указанный выше */ <div class="clear"></div> </div> </div> </div> </div> <?php get_footer(); ?>
В первой строке файла необходимо прописать значение(Template Name: Sitemap Page), которое будет определяться WordPress и придаст файлу статус шаблона карты сайта. Далее, заходим в админку и создаём новую страницу, где в правой панели управления выбираем наш шаблон, который будет выводиться на странице блога.


23 комментариев к “Создать карту сайта в WordPress без плагинов”
Я все ломал голову как сделать карту сайта для блога. Постоянно сторонними сервисами пользоваться неудобно. А плагины некоторые не хотят работать с определенным видом вывода записей. Спасибо будем это пробовать
Спасибо огромное за пост пошла пробовать.Т.к. у меня вордпресс так загрузил сервак,что и делать не знаю.Буду заниматься оптимизацией всего чего только можно , и карта блога в том числе. Если будут вопросы напишу.Спасибо ещё раз за подробный мануал.
Быстро же я нашол сей совет) это радует. Избавился таки от DDSitemapGen, что тоже радует)
а еще радует, что сей код гораздо корректней работает с плагином qtranslate, чем DDSitemapGen (он кстати, неправильно отображал ссылки на категории и без внедрения в код совершенно криво выдавал названия записей)
Большой человеческий спасиб.!
познавательно
а как сделать чтобы эта карта сайта записывалась в текстовый файл на хостинге?
ну очень надо
Что-то я почти ничего не понял...
Не работает у меня этот код. Увы.
Сенкс за инфу
очень интересно, спасибо
Спасибо большое! Все работает!
Мегаполезная статья, спасибо. Внедрил у себя в блоге.
Доброго времени суток. Спасибо за карту сайта, полезно. Можете помочь? Мне нужно вывести все записи согласно меню. Спасибо.
leonking, Я не знаю какое у Вас меню, но в WordPress оно обычно состоит из списка рубрик или страниц. Данная карта сайта выводит заголовки страниц и записей из рубрик, часть которых, по Вашему желанию, можно исключить в самом коде, перечислив значения ID в условии exclude соответствующих функций. Вот и настраивайте карту сайта так как Вам нужно.
Плагин выводит записи по алфавиту а мне нужно что бы он выводил записи согласно меню (категории и записи что бы были в том порядке в котором они идут в меню).
leonking, В каком порядке у Вас отсортировано меню, в таком и выводите. Читайте кодекс WordPress http://codex.wordpress.org/Function_Reference/get_categories для сортировки категорий используйте параметр «orderby» и «order». Чтобы упорядочить записи в рубриках, смотрите примеры как это можно сделать http://codex.wordpress.org/Function_Reference/query_posts
код почти работает... но заметил у себя странность
в заголовке страницы отображается название последней в списке категории... http://viaestvita.net/sitemap
никакие изменения в заголовках и дополнительных плагинах не помогли
Спасибо огромное! Замечательная статья! Сделала и себе такую карту сайта
А можно вопрос: раскрывающийся список сюда уже никак не поставишь?)
(чтобы список статей раскрывался при нажатии на категорию)
Ирина, можно, используйте яваскрипт, в интернете много об этом написано.
Антон, Странно, получается что на статичной странице появился заголовок из категории(рубрики, записи если я правильно понял). Может в плагине каком-то проблема или в ядре что-то изменили?
не знаю в чем беда, пока что просто убрал тег title из шаблона страницы, в заголовке отображает просто адрес страницы
ядро не трогал
Антон, Вы как осуществляете вывод заголовка. Так же как и на других страницах или особым методом? Кстати у Вас на странице карты сайта, в исходном коде DOCTYPE куда-то пропал, это я так к сведению.
Ratemir, у меня как и у Антона заголовок страницы — последняя созданная категория)))
Точно, страницу сделала, а не добавила)) код работает отлично!!!