Яндекс рекомендует для облегчения индексирования сайта помочь ему — создать страничку, на которой будут ссылки на все страницы сайта (т.е. карту сайта). Опять же не будем доверять плагинам, займёмся этим сами…
Сделаем функцию в шаблоне и шорткод, для вызова на страничке, предназначенной для карты.
Функцию 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; } /* карта сайта*/ |
Вот что у нас получилось: