Яндекс рекомендует для облегчения индексирования сайта помочь ему —  создать страничку, на которой будут ссылки на все страницы сайта (т.е. карту сайта). Опять же не будем доверять плагинам, займёмся этим сами…

Сделаем функцию в шаблоне и шорткод, для вызова на страничке, предназначенной для карты.

Функцию site_map необходимо добавить в functions.php вашей темы. Код ниже:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 //карта сайта
function site_map()
{
$sp_st = '<h3>Страницы</h3>';
$sp_st.= '<ul class="map_site_list">';
$pages = get_pages( array(
'post_status' => 'publish'
)
);

foreach ($pages as $page)
{
$link = get_permalink($page->ID);
$title = get_the_title($page->ID);
$date = mysql2date('d-m-Y', $page->post_date);
$sp_st.= '<li class="map_site_list">'.$date.' <a href='.$link.'>'.$title.'</a></li>';
}

echo '<div class="map_site">'.$sp_st.'</div>';

$cats = get_categories('');
$sp_post = '<br><h3>Записи</h3><br>';

foreach ($cats as $category)
{
$sp_post.= '<h4>'.$category->cat_name.'</h4>';
$sp_post.= '<ul class="map_site_list">';
$category_posts = get_posts( array(
'category' => $category->cat_ID,
'post_status' => 'published'
));

foreach ($category_posts as $post)
{
$cat0 = get_the_category($post->ID);
if ($cat0[0]->cat_ID == $category->cat_ID)
{
$link = get_permalink($post->ID);
$title = get_the_title($post->ID);
$date = mysql2date('d-m-Y', $post->post_date);
$sp_post.= '<li class="map_site_list">'.$date.' <a href='.$link.'>'.$title.'</a></li>';
}
}
$sp_post.='</ul>';
}
echo '<div class="map_site">'.$sp_post.'</div>';
}
add_shortcode('karta_saita', 'site_map');

Небольшие пояснения:

  • get_pages получает список всех страниц сайта. выводим их просто списком, предварительно получив дату и ссылку на них
  • get_categories получает список всех категорий (они же рубрики) сайта
  • get_posts получает список всех записей (постов) сайта, но на него мы накладываем условие, что запись в выбранной рубрике (‘category’ => $category->cat_ID)
  • если наша запись находится более чем в одной теме она выведется в каждой. чтобы яндекс не паниковал по этому поводу мы сделаем так: запись будет выводится в определённую рубрику только если эта рубрика первая по счёту для данной записи ($cat0[0]->cat_ID == $category->cat_ID) вот так вот 🙂

Ну и для украшательства немного добавим в style.css

1
2
3
4
5
6
7
8
9
10
/* карта сайта*/
.map_site
{
padding: 10px 10px 10px 10px;
}

.map_site_list {
padding: 5px 10px 5px 10px;
}
/* карта сайта*/

Вот что у нас получилось:

Карта сайта

Карта сайта