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

Опубликовано: 22 июля 2018 / Обновлено: 23 августа 2018
Раздел(ы): WordPress
Просмотры: 2973
Комментарии: 8

HTML карта сайта — это отдельная веб-страница, которая содержит список всех страниц и разделов сайта (и ссылки на них!). Очень полезна как для посетителей, так и для SEO, поэтому должна быть на каждом сайте.

WordPress «из коробки» не умеет автоматически создавать карту сайта. Для этого написано множество плагинов. Но реализовать эту функцию можно и не прибегая к дополнительному ПО.

Как создать карту сайта для WordPress

Для удобства создайте отдельный файл htmlsitemap.php в корне вашей темы, и подключите его в файле functions.php:

/* Подключаем карту сайта */
require_once 'htmlsitemap.php';

Делаем мы это чтобы не захламлять код.

Добавьте следующие строки в файл htmlsitemap.php:

<?php

function mb_htmlsitemap( $atts ) {
    global $post;
    echo "\n" . '<div class="htmlsitemap">' . "\n";
    $cats = get_categories();
    foreach ($cats as $cat) {
        echo '<h2><a href="' . get_category_link($cat->term_id) . '">' . $cat->cat_name . '</a></h2>' . "\n";
        echo '<ul class="htmlsitemap-list">' . "\n";
        $posts = get_posts(array('category' => $cat->term_id, 'posts_per_page' => '-1'));
        foreach ($posts as $post) {
                echo "\t" . '<li><a href="' . get_permalink($post->ID) . '">'."$post->post_title" . '</a></li>' . "\n";
        }
        echo '</ul>' . "\n";
    }
    echo '<h2>Страницы</h2>' . "\n";
    echo '<ul class="htmlsitemap-list">' . "\n";
    $pages = get_pages(array('posts_per_page' => '-1'));
    foreach ($pages as $page) {
            echo "\t" . '<li><a href="' . get_permalink($page->ID) . '">'."$page->post_title" . '</a></li>' . "\n";
        }
    echo '</ul>' . "\n";
    echo '</div>';
}

add_shortcode( 'htmlsitemap', 'mb_htmlsitemap' );

Подправьте стили на свое усмотрение:

/* Карта сайта */

ul.htmlsitemap-list li {
list-style-position:inside;
list-style-type: disc;
line-height: 1.4;
margin: 0 0 0 2%;
}

Как использовать скрипт создания карты сайта

Мой скрипт резервирует шорт-код. Поэтому создаем новую веб-страницу и просто вставляем на нее шорт-код [htmlsitemap]:

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

При ее посещении, в моем примере это https://info.net.ru/sitemap/, вы увидите следующее:

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

На мой взгляд она выглядит лаконично и симпатично.

Как работает скрипт карты сайта для WordPress

Скрипт создает список ссылок всех записей и страниц сайта группируя их по рубрикам. Если заглянете в код созданной страницы, то увидите следующее:

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

Плюсы от использования своего PHP скрипта карты сайта

Если использовать предложенный мною код, то получим чуть большую скорость работы сайта и немного меньшее потребление памяти. При этом вы полностью контролируете вывод и можете его настроить по своему усмотрению.

У вашего сайта исчезнет зависимость от еще одного плагина. Последнее время постоянного кто-то кого-то взламывает, в том числе и хранилища плагинов, поэтому с очередным обновлением вам не прилетит никакая гадость.

Благодарности

При написании статьи были использованы следующие источники:

  1. http://kostyakhmelev.ru/texnicheskaya-chast/karta-sajta-wordpress-bez-plagina-legko-i-bystro.html
  2. http://smarticle.ru/kak-sdelat-kartu-sajjta-na-wordpress-bez-plagina/
  3. https://pribylwm.ru/samoobrazovanie/karta-sajta-dlya-wordpress.html

Обсуждение (комментарии к статье)

  1. Спасибо за карту! Как убрать некоторые страницы из карты? Например: Корзина, Оформление заказа

  2. Здравствуйте. Подскажите как сделать, чтобы можно было убирать страницы по id? А также, сделать свой порядок страниц по id?

  3. Самое лучшее решение, что я нашел, но явно написанное с минимальными знаниями PHP ))

    Нет смысла ставить переносы строк и использовать echo в принципе. Лучше разрыв кода. А данное решение проще поместить в код PHP файла-шаблона и в самом начале, перед инклудом хэдера, указать ему принадлежность к шаблону:

    /*
    Template Name: HTML Карта сайта
    */

    А в код файла вставить код в таком виде:

    <a href="term_id) ?>»>cat_name ?>

    $cat->term_id, ‘posts_per_page’ => ‘-1’));

    foreach ($posts as $post){ ?>

    <a href="' ID) ?>»>post_title ?>

    и подтянуть его через шаблоны внутри редактора страницы

  4. Я обычно с помощью WP Sitemap Page делаю, чтобы с кодом не ковыряться) и стараюсь как-то повеселее сделать, https://sverchokcorm.ru/sitemap/ тут например пару картинок добавил) а то что у вас нет возможности убрать по ID страницу я считаю это минус, иногда нужно бывает

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных", на условиях и для целей определенных политикой конфиденциальности сайта.
© Юрий Рассадников, 2011 - 2024
uptime узнать
Домен : reg.ru
Хостинг : adman.com
SQL - 6 | 0,129 сек. | 8.35 МБ