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

Logo
Простая карта сайта для Wordpress без использования плагина

После длительного перерыва в 11 месяцев решил снова приступить к работе над блогом и первая проблема, с которой я столкнулся – перестала работать карта сайта, выводимая плагином Dagon Design Sitemap Generator. Чтобы решить проблему и избежать ее повторения в будущем, я решил написать простую карту сайта для WordPress без использования плагина, о чем и пойдет речь в данной статье.

Способов решения проблемы было несколько:

  1. Написать плагин. Я не фанат плагинов, да и работать с ними менее удобно, учитывая тот факт, что карта сайта является частью базового функционала. Исходя из этого, данный вариант исключаем.
  2. Написать функцию генерации карты сайта и выводить ее шорткодом. Тоже не совсем удобно, учитывая использование шорткода.
  3. Создать отдельный шаблон страницы. На мой взгляд, самый удачный вариант, в силу быстрой реализации и простоты использования.

Создание отдельного шаблона страницы

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

Далее для ускорения процесса просто копируем содержимое из файла page.php и в самом верху добавляем комментарий с названием шаблона. Он необходим для идентификации файла WordPress. В нашем случае это:

/*
Template Name: Sitemap
*/

Где Sitemap – название шаблона, которое будет отображаться в списке шаблонов при публикации страницы.

Не забываем, что файл необходимо сохранять в кодировке UTF-8 без БОМ во избежание проблем с отображением русских символов.

Функции вывода элементов карты сайта

Если вы используете базовый функционал WordPress со стандартными типами записей, то для построения карты сайта достаточно вывести ссылки для трех типов страниц: категорий (рубрик), статических страниц и страниц постов. Для этого можно использовать следующие функции:

Список категорий (рубрик)

function sitemap_categories () {
global $post;
$args = array(
'orderby'      => 'name',  // сортировка по названиям
'show_count'   => 0,       // не показываем количество записей
'pad_counts'   => 0,       // не показываем количество записей у родителей
'hierarchical' => 1,       // древовидное представление
'title_li'     => ''       // список без заголовка
);
echo '<h2>Рубрики</h2>';
echo '<ul>';
wp_list_categories( $args );
echo '</ul>';
}

Список статических страниц

function sitemap_pages () {
global $post;
$args = array (
'post_type' => 'page',
'nopaging' => true
);
$echoposts = get_posts( $args );
echo '<h2>Страницы</h2>';
echo '<ul>';
foreach($echoposts as $post) : setup_postdata($post);
echo '<li><a href="';
the_permalink();
echo '">';
the_title();
echo '</a></li>';
endforeach;
echo '</ul>';
// Restore original Query & Post Data
wp_reset_query();
wp_reset_postdata();
}

Список постов

function sitemap_posts () {
global $post;
$args = array (
'post_type' => 'post',
'nopaging' => true,
'order' => 'DESC',
'orderby' => 'date'
);
$echoposts = get_posts( $args );
echo '<h2>Записи</h2>';
echo '<ul>';
foreach($echoposts as $post) : setup_postdata($post);
echo '<li>';
echo the_time('d.m.y').': ';
echo '<a href="';
the_permalink();
echo '">';
the_title();
echo '</a></li>';
endforeach;
echo '</ul>';
// Restore original Query & Post Data
wp_reset_query();
wp_reset_postdata();
}

Вышеприведенные функции можно разместить как в файле functions.php, так и непосредственно в шаблоне sitemap.php. Лично я стараюсь размещать функции в functions.php, так как это более удобно и правильно с технической точки зрения. Просто скопируйте код функций и добавьте в конец файла functions.php перед закрывающим тегом ?>.

Теперь откройте файл sitemap.php и сразу после функции the_content() добавьте вызов созданных нами функций sitemap_.

sitemap_categories();
sitemap_pages();
sitemap_posts();

Далее перейдите в административную панель сайта – страницы, создайте новую страницу и в атрибутах страницы выберите шаблон «Sitemap».

После сохранения результатов на странице появится карта сайта, как на данном блоге.

На этом создание простой карты для WordPress подошло к концу. Обращаю ваше внимание на то, что вышеприведенные функции выводят все результаты на одной страницы, поэтому данный вариант не подойдет для больших сайтов.

На этом все. Удачи вам и до скорых встреч на страницах блога DmitiyDenisov.com

Обнаружили ошибку? Выделите ее и нажмите Ctrl+Enter

Комментарии 6

  • Юрий

    Красота, обязательно надо попробовать, всем!!!

  • Юрий

    Еще хотел спросить, для чего после HTML, дополнение адреса, ?utm_source=feedburner&utm_medium=email& utm_campaign=Feed%3A+dmitriydenisov+%28dmitriydenisov.com +-+создание+и+продвижение+сайтов%2C+блогов.%29,?

  • Дмитрий

    Юрий, не вижу данного кода в статье. Если же Вас интересует вопрос в общем, то смотрите здесь — dmitriydenisov.com/php-mysql/php-basics/metody-get-i-post.html

  • Дмитрий

    Я нубка, ничего не получилось, куча нестыковок, которые не получается состыковать )))Для меня фраза "page.php и в самом верху" означает действительно в самом верху, а не после тега "<?php". В итоге функция эта "Template Name: Sitemap" вообще по началу не воспринималась сайтом. Когда покумекал и разместил комментарий после "<?php", то все встало на свои места и перекосы на сайте пропали.

    С UTF-8 поступил на удачу, т.е. ничего предпринимать не стал. Знакома кодировка windows-1251 или чет типа того, раньше частенько встречал в html файлах и без нее русские шрифты просто не отображались В файле php ничего близкого к этому не нашел))

    Касаемо function.php, то я так понимаю, что этот файл должен быть уже в корневом каталоге сайта, вбил через тотел командер имя и он его не нашел. На этом все собственно и остановилось. Есть фаил functions.php, но я так понимаю это не он, верно? Если даже и он, то там заметил странность, есть открывающийся тег "<?php", но нет закрывающегося "?>"

  • Дмитрий

    Однако, в любом случае статья оказалась полезной и узнал 1 новый для себя нюанс. Время не потрачено зря, спасибо )

  • Дмитрий

    Дмитрий, всегда рад помочь:) Что касается function.php — это опечатка. Уже исправил.

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

отменить ответ