Создать карту сайта в WordPress без плагинов

Опубликовано: 10 Март 2011Автор ratemir

Карты сайта в формате 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 и придаст файлу статус шаблона карты сайта. Далее, заходим в админку и создаём новую страницу, где в правой панели управления выбираем наш шаблон, который будет выводиться на странице блога.

Создать карту сайта в WordPress без плагинов

Метки: Рубрика: Хаки и секреты WordPress


Опубликовать в twitter.comПоделиться ВКонтактеПоделиться в FacebookПоделиться В Моем МиреОпубликовать в своем блоге livejournal.com
Если Вам понравилась статья, Вы можете получать новые материалы Ratemir.ru по: RSS или можете просто получать обновления блога на e-mail:

23 комментариев к “Создать карту сайта в WordPress без плагинов”

  • Манимейкер
    8 Апрель, 2011, 19:05

    Я все ломал голову как сделать карту сайта для блога. Постоянно сторонними сервисами пользоваться неудобно. А плагины некоторые не хотят работать с определенным видом вывода записей. Спасибо будем это пробовать

  • Kuzuxa
    12 Апрель, 2011, 11:16

    Спасибо огромное за пост пошла пробовать.Т.к. у меня вордпресс так загрузил сервак,что и делать не знаю.Буду заниматься оптимизацией всего чего только можно , и карта блога в том числе. Если будут вопросы напишу.Спасибо ещё раз за подробный мануал.

  • Антон Белов
    29 Апрель, 2011, 19:11

    Быстро же я нашол сей совет) это радует. Избавился таки от DDSitemapGen, что тоже радует)

    а еще радует, что сей код гораздо корректней работает с плагином qtranslate, чем DDSitemapGen (он кстати, неправильно отображал ссылки на категории и без внедрения в код совершенно криво выдавал названия записей)

    Большой человеческий спасиб.!

  • seoonlybloger
    16 Май, 2011, 1:06

    познавательно

  • andnik
    20 Май, 2011, 15:13

    а как сделать чтобы эта карта сайта записывалась в текстовый файл на хостинге?

    ну очень надо

  • duSittin
    12 Июнь, 2011, 22:12

    Что-то я почти ничего не понял...

  • Сергей Юрченко
    4 Июль, 2011, 13:14

    Не работает у меня этот код. Увы.

  • seonick
    24 Август, 2011, 22:53

    Сенкс за инфу

  • dedycureravew
    7 Сентябрь, 2011, 15:28

    очень интересно, спасибо

  • Ильшат
    28 Декабрь, 2011, 10:30

    Спасибо большое! Все работает!

  • Евгений
    27 Январь, 2012, 14:39

    Мегаполезная статья, спасибо. Внедрил у себя в блоге.

  • leonking
    5 Март, 2012, 23:05

    Доброго времени суток. Спасибо за карту сайта, полезно. Можете помочь? Мне нужно вывести все записи согласно меню. Спасибо.

  • ratemir
    6 Март, 2012, 11:59

    leonking, Я не знаю какое у Вас меню, но в WordPress оно обычно состоит из списка рубрик или страниц. Данная карта сайта выводит заголовки страниц и записей из рубрик, часть которых, по Вашему желанию, можно исключить в самом коде, перечислив значения ID в условии exclude соответствующих функций. Вот и настраивайте карту сайта так как Вам нужно.

  • leonking
    6 Март, 2012, 12:22

    Плагин выводит записи по алфавиту а мне нужно что бы он выводил записи согласно меню (категории и записи что бы были в том порядке в котором они идут в меню).

  • ratemir
    6 Март, 2012, 17:33

    leonking, В каком порядке у Вас отсортировано меню, в таком и выводите. Читайте кодекс WordPress http://codex.wordpress.org/Function_Reference/get_categories для сортировки категорий используйте параметр «orderby» и «order». Чтобы упорядочить записи в рубриках, смотрите примеры как это можно сделать http://codex.wordpress.org/Function_Reference/query_posts

  • Антон
    20 Апрель, 2012, 10:14

    код почти работает... но заметил у себя странность

    в заголовке страницы отображается название последней в списке категории... http://viaestvita.net/sitemap

    никакие изменения в заголовках и дополнительных плагинах не помогли

  • Ирина
    22 Апрель, 2012, 20:15

    Спасибо огромное! Замечательная статья! Сделала и себе такую карту сайта :-)

    А можно вопрос: раскрывающийся список сюда уже никак не поставишь?)

    (чтобы список статей раскрывался при нажатии на категорию)

  • ratemir
    23 Апрель, 2012, 10:12

    Ирина, можно, используйте яваскрипт, в интернете много об этом написано.

  • ratemir
    23 Апрель, 2012, 11:07

    Антон, Странно, получается что на статичной странице появился заголовок из категории(рубрики, записи если я правильно понял). Может в плагине каком-то проблема или в ядре что-то изменили?

  • Антон
    23 Апрель, 2012, 12:55

    не знаю в чем беда, пока что просто убрал тег title из шаблона страницы, в заголовке отображает просто адрес страницы

    ядро не трогал

  • ratemir
    23 Апрель, 2012, 17:09

    Антон, Вы как осуществляете вывод заголовка. Так же как и на других страницах или особым методом? Кстати у Вас на странице карты сайта, в исходном коде DOCTYPE куда-то пропал, это я так к сведению.

  • Ирина
    23 Апрель, 2012, 19:11

    Ratemir, у меня как и у Антона заголовок страницы — последняя созданная категория)))

  • Ирина
    23 Апрель, 2012, 21:36

    Точно, страницу сделала, а не добавила)) код работает отлично!!!

Оставить комментарий

Наверх