
После длительного перерыва в 11 месяцев решил снова приступить к работе над блогом и первая проблема, с которой я столкнулся – перестала работать карта сайта, выводимая плагином Dagon Design Sitemap Generator. Чтобы решить проблему и избежать ее повторения в будущем, я решил написать простую карту сайта для WordPress без использования плагина, о чем и пойдет речь в данной статье.
Способов решения проблемы было несколько:
- Написать плагин. Я не фанат плагинов, да и работать с ними менее удобно, учитывая тот факт, что карта сайта является частью базового функционала. Исходя из этого, данный вариант исключаем.
- Написать функцию генерации карты сайта и выводить ее шорткодом. Тоже не совсем удобно, учитывая использование шорткода.
- Создать отдельный шаблон страницы. На мой взгляд, самый удачный вариант, в силу быстрой реализации и простоты использования.
Создание отдельного шаблона страницы
Первым делом нам нужно создать отдельный шаблон страницы для нашей карты сайта. Для этого создаем файл, например, 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
Красота, обязательно надо попробовать, всем!!!
Еще хотел спросить, для чего после 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 — это опечатка. Уже исправил.