Летнего настроения всем читателям — 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 стили, которые будут отличаться от тех, что в теме оформления. Но это уже другая история.

На сегодня, это всё. До новых встреч!

С уважением, Денис Черников!