Летнего настроения всем читателям — Sozdaiblog.ru!
Сегодня Вы узнаете, как сделать карту сайта без плагинов.
В одном из своих старых постов я уже писал, как сделать карту сайта для людей при помощи плагина DDS Generator. Так как я не особо разбирался в вёрстке шаблонов и вообще в WordPress, то на тот момент мне казалось, что это является самым оптимальным решением.
В принципе, так оно и было, и какое-то время я даже не искал возможные альтернативы. Всё работало и меня это устраивало. Возможно, что и сегодня я не опубликовал бы этот пост, если б не одно «НО».
Что же случилось?
Пожалуйста, не волнуйтесь, ничего криминального не произошло. Просто один из моих клиентов заказал сборку сайта на WordPress без единого плагина. Говорит, что знает о вреде использования посторонних гаджетов и просит избавить его будущее детище от лишней нагрузки.
Вот мне и пришлось икать способ вывода карты сайта без плагина. К счастью решение нашлось быстро, а реализовалось оно ещё быстрей.
Итак.
Карта сайта без плагинов.
Чтобы сделать карту сайта на WordPress без плагинов, Вам потребуется текстовый редактор Notepad++ и любой FTP-клиент. Лично я выбираю FileZilla (как настроить ftp-клиента).
Далее при помощи FTP-клиента докапываемся до папки с файлами Вашей активной темы оформления, находим там page.php и копируем (переносим, дублируем) на свой компьютер.
Файл page.php отвечает за вывод статических страниц Вашего Веб-ресурса. Из него то мы и будем делать карту сайта.
После копирования, меняем его название на map.php и закидываем обратно.
Теперь самое сложное. Вам придётся открыть на редактирование map.php и внести кое-какие изменения.
К сожалению, дать Вам универсальное решение невозможно, так как темы оформления у всех разные. Поэтому за пример я возьму код из темы заказчика. Вот то, что было до того, как я внёс изменения в map.php:
<div id="content"> <div id="content_inside"> <div class="blog_box"> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <h1><?php the_title(); ?></h1> <?php the_content(); ?> <br /><br /> <?php //comments_template(); ?> <?php endwhile; else: ?> <h3>К сожалению, по вашему запросу ничего не найдено.</h3> <?php endif; ?> <div class="clear"></div> </div><!--//blog_box--> <div class="clear"></div> </div><!--//content_inside--> </div><!--//content--> <?php get_sidebar(); ?> <?php get_footer(); ?>
А это то, что стало после редактирования:
<?php /* Template Name: Карта */ ?> <?php get_header(); ?> <div id="content"> <div id="content_inside"> <div class="blog_box"> <h3>Все посты:</h3> <ul> <?php $cats = get_categories('exclude='); //***Сюда вставьте через запятую ID категорий, которые желаете исключить. Если таких категорий нет, то оставьте поле пустым. foreach ($cats as $cat) { echo '<li>'."\n".'<strong>Категория:</strong> '.$cat->cat_name.''."\n"; echo '<ul>'."\n"; query_posts('posts_per_page=-1&cat='.$cat->cat_ID); //-1 показывать все статьи категории. 1 показывать последние статьи. while(have_posts()): the_post(); $category = get_the_category(); if ($category[0]->cat_ID == $cat->cat_ID) {?> <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li> <?php } endwhile; ?> </ul> </li> <?php } ?> </ul> <?php wp_reset_query(); ?> </div><!--//blog_box--> <div class="clear"></div> </div><!--//content_inside--> </div><!--//content--> <?php get_sidebar(); ?> <?php get_footer(); ?>
Что я сделал? Давайте разберёмся!
Для начала я связал новую страницу (map.php) с существующей темой оформления вставив в самое начало следующий код:
<?php /* Template Name: Карта */ ?>
Затем я нашёл то место, где начинается вывод контента с применением определённого класса (class) присвоенного разработчиками. В моём случае:
<div class="blog_box">
Удалив все циклы контейнера (до закрывающего тега </DIV>) я вставил свой код:
<h3>Все посты:</h3> <ul> <?php $cats = get_categories('exclude='); //***Сюда вставьте через запятую ID категорий, которые желаете исключить. Если таких категорий нет, то оставьте поле пустым. foreach ($cats as $cat) { echo '<li>'."\n".'<strong>Категория:</strong> '.$cat->cat_name.''."\n"; echo '<ul>'."\n"; query_posts('posts_per_page=-1&cat='.$cat->cat_ID); //-1 показывать все статьи категории. 1 показывать последние статьи. while(have_posts()): the_post(); $category = get_the_category(); if ($category[0]->cat_ID == $cat->cat_ID) {?> <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li> <?php } endwhile; ?> </ul> </li> <?php } ?> </ul> <?php wp_reset_query(); ?>
В таком исполнении на странице карты сайта будут отображаться все категории и посты, как при использовании плагина.
На этом редактирование окончено. Осталось показать карту сайта людям.
Для этого, обычным способом в WordPress, создайте новую статическую страницу. Напишите необходимый заголовок и в режиме редактирования отыщите справа виджет «Атрибуты страницы». Из выпадающего списка выберите «Карта» и опубликуйте страницу:
После всех вышеописанных манипуляций у Вас появится карта сайта, которая будет работать без плагинов.
При желании Вы можете добавить необходимые CSS стили, которые будут отличаться от тех, что в теме оформления. Но это уже другая история.
На сегодня, это всё. До новых встреч!
С уважением, Денис Черников!
Спасибо Денис! Сейчас испытаю. Если бы еще миниатюры добавить, вообще бомба.
Пожалуйста, Константин! Миниатюры чего добавить нужно?
А обновляться эта карта сама будет?
А как по-другому?)))
А я просто вывел все записи (список записей блога) на одной странице без разбиения на рубрики, так как некоторые записи имеют принадлежность сразу к двум рубрикам (например, html и css).
Это уже кому как удобней!
Кстати, хотел задать Вам вопрос: Влияет ли принадлежность статьи к двум и более рубрикам на отношение к блогум поисковиков? То есть не происходит ли дублирования контента, и т.д. Наверное лучше, чтобы запись была привязана строго к одной рубрике? Спасибо!
Интересный вопрос, Никита! Если честно, то я не анализировал такие случаи, но склоняюсь к тому, что лучше размещать для одной рубрики.
Денис, а файл page.php после установления нового map удалять или нет? Я попробовала, оставила оба. Но страница с картой не отображается. Т.е. сам саqn работает, а когда открываешь карту, то выглядит так, когда все слетает. Т.е. вообще не загружает ничего.
Татьяна, зачем удалять page.php, это же файл отвечающий за вывод страниц на Вашем ресурсе. Просто мы его взяли, как донора кода!
Татьяна, что-то Вы где-то не учли или не туда прописали. Смотрите внимательней, данный способ проверен и отлично работает на одном из моих тестовых сайтов.
сделала. правда с другим, похожим очень на ваш, код и пришлось повозиться, буквально по строчкам вставляла. Горжусь собой ужасно
Денис, вопрос не по теме — вот у вас плавающий подвал с кнопками внизу. Он у вас с какого-то другого ресурса подгружается или нет? Нашла сейчас один вариант, но там подгружается со стороннего ресурса, а код на сайте.
У вас про этот ваш подвал нет ничего почитать?
Молодец, Татьяна!
Плавающий подвал реализован кодом и подгружается с моего блога! Про это я ещё не писал!
Денис, карта категорий получилась на УРА! Подскажите, а какой код добавить в файл Map.php , чтобы там же была и карта страниц? Заранее спасибо. Марина.
Я рад!
Добавьте wp_list_pages ('exclude='); перед $cats = get_categories ('exclude='); и всё будет хоккей!
Добрый день. Очень полезная статья, но, вот, у меня возникли пару вопросов, которые я никак не могу понять, возможно, вы мне подскажете?
1.Я читала, что файл с картой сайта должен быть xml, а у Вас получается php или я что-то недопонимаю?
2.При регистрации сайта в поисковиках, просят добавить ссылку на карту сайта. Как будет выглядеть та самая ссылка или где можно ее посмотреть.
Делаю все, как у вас написано в этом посте. Спасибо за ответ
Здравствуйте!
1. У меня есть xml карта. Она редактируется с помощью плагина. А эта карта для людей, а не ПС!
2. http:// Ваш сайт.ru/sitemap.xml она в корне сайта!
Здравствуйте, воспользовался вашим способом сделал карту сайта без плагина все супер, подскажите что нужно добавить в код чтобы отображалась иерархия в рубриках(у меня на сайте есть подрубрики)