В ходе этого небольшого урока мы сделаем новое дополнение для WordPress плагина WP-Recall, а именно: карту форума, под руководством дополнения PrimeForum, для поисковых систем. Потом мы пропишем для поисковых систем в файле robots.txt и отправим ее в гугл и в яндекс.
Раз в день будет формироваться в корне вашего сайта файл primeforum-sitemap.xml (и обновляться)
Админ его вручную по секретному урл сможет обновить в любой момент
Ограничение файла - 50000 тем форума.
Создать дополнение для WP-Recall очень просто. Вот список уроков по этой теме:
Создаем свое дополнение для Wp-Recall, выводим свою вкладку в личном кабинете
Создаём дополнение для плагина WP-Recall. Структура дополнений. Подключаем скрипты и стили. Ajax
Что необходимо знать для этого урока:
1. Синтаксис php (начальный уровень)
2. Иметь представление о работе wp-cron планировщика. И рекомендую ознакомиться с этой статьёй: Работа WordPress крона (cron), принудительное выполнение крон-задач для WP-Recall
3. По второму руководству я объяснял уже значение файла info.txt - в этом уроке повторять эту информацию не буду.
Структура нашего дополнения:
info.txt - файл необходимый для подключения в списке дополнений
index.php - основной файл с кодом.
Чтобы плагин WP-Recall увидел наше дополнение на странице дополнений плагина в админке, и при включении дополнения мы получили его работу, необходимо следующее:
1. Без пробелов создать папку prime-sitemap
по следующему пути:
ваш-сайт/wp-content/wp-recall/add-on/
Получится так:
ваш-сайт/wp-content/wp-recall/add-on/prime-sitemap/
2. В корне создать 2 файла в кодировке UTF-8 (без BOM) - info.txt и index.php
Дополнительно в корень дополнения вы можете положить иконку дополнения - для отображения ее в менеджере дополнений. Сделайте иконку icon.jpg размерами 50x70 пикселей и поместите ее в корне дополнения.
Содержимое файлов:
Файл info.txt:
Name: Prime Sitemap; Version: 0.1; Support Core: 16.10.0; Parent Addon: prime-forum; Description: Формирует карту форума в формате xml для поисковых систем; Author: Владимир Дружаев (Otshelnik-Fm); Author URI: https://otshelnik-fm.ru/; Add-on URI: https://codeseller.ru/products/prime-sitemap/;
Строка Parent Addon: prime-forum;
- это значит что наше дополнение зависит от прайм форума, и если он не активен - то и наш доп не активируется.
Файл index.php:
Содержит 3 функции:
1-я - запрос к базе данных. Там мы выбираем последние темы по обновлении и устанавливаем лимит в 50000 строк.
2. Сама функция генерации xml файла. Она висит на расписании, которое выполняется раз в день.
3. Функция, которая при переходе по секретному урл от лица админа перегенерирует файл карты форума.
Весь код:
<?php // получаем из бд function otfm_get_all_forum_topics(){ global $wpdb; $data = $wpdb->get_results( "SELECT topics.topic_id, MAX(posts.post_date) AS lastmod FROM ".RCL_PREF."pforum_topics AS topics LEFT JOIN ".RCL_PREF."pforum_posts AS posts ON topics.topic_id = posts.topic_id WHERE posts.post_date IS NOT NULL GROUP BY topics.topic_id ORDER BY lastmod DESC LIMIT 0,50000" // не более 50000 результатов выберем , ARRAY_A); /* Array( [0] => Array( [topic_id] => 6 [lastmod] => 2018-01-13 16:45:23 ) */ return $data; } // формируем карту сайта форума function otfm_create_prime_forum_sitemap(){ $i = 0; $datas = otfm_get_all_forum_topics(); // https://www.sitemaps.org/protocol.html $xml = '<?xml version="1.0" encoding="UTF-8"?>'; $xml .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; foreach($datas as $data) { $i++; $changefreq = 'monthly'; //always, hourly, daily, weekly, monthly, yearly, never if($i >= 1 && $i < 11){ $changefreq = 'daily'; // первые 10 пунктов установим частоту обновления роботу: раз в день } $date = mysql2date( 'Y-m-d\TH:i:s+00:00', $data['lastmod'] ); // дата в нужном формате $xml .= '<url>'; $xml .= '<loc>' . pfm_get_topic_permalink( $data['topic_id'] ) . '</loc>'; $xml .= '<lastmod>' . $date . '</lastmod>'; $xml .= '<changefreq>' . $changefreq . '</changefreq>'; $xml .= '</url>'; } $xml .= '</urlset>'; $handle = fopen(ABSPATH . 'primeforum-sitemap.xml', 'w'); // имя файла карты fwrite($handle, $xml); fclose($handle); } add_action('rcl_cron_daily_schedule','otfm_create_prime_forum_sitemap',10); // раз в сутки карта формируется // по гет запросу, если админ, обновим карту (ваш-сайт/?prime_forum_sitemap_secret_reload) function otfm_prime_forum_sitemap_catcher(){ if(isset($_GET['prime_forum_sitemap_secret_reload']) && current_user_can('manage_options') ){ otfm_create_prime_forum_sitemap(); } } add_action('init', 'otfm_prime_forum_sitemap_catcher');
Что дальше:
1. Переходите в менеджер дополнений - активируете дополнение Prime Sitemap.
2. В адресной строке сайта вводите ваш-сайт/?prime_forum_sitemap_secret_reload
- и в корне вашего сайта создастся файл primeforum-sitemap.xml
. В дальнейшем, если вы не хотите ждать суточного обновления карты форума, можете от лица админа переходить по этому урл и карта будет обновляться. Но вы можете изменить событие крона на выполняемое раз в час или дважды в день - заменив rcl_cron_daily_schedule
на rcl_cron_hourly_schedule
или rcl_cron_twicedaily_schedule
соответственно.
3. Открываем файл robots.txt и вписываем новую карту, у меня это: Sitemap: https://otshelnik-fm.ru/primeforum-sitemap.xml
4. Переходите в гугл: "Search Console" -> "Сканирование" -> "Файлы Sitemap" и справа вверху жмёте "Добавление/проверка файла sitemap". Добавляем туда наш файл:
5. Переходим в яндекс: "Яндекс Вебмастер" -> "Индексирование" -> "Файлы Sitemap" и в форму "Добавить файл Sitemap" вписываете урл карты форума:
Наше дополнение готово. По FTP копируем папку prime-sitemap на свой компьютер, архивируем в zip и теперь, поделившись им с другими людьми, они этот архив могут загружать через менеджер дополнений, в админке своего сайта, со страницы "Дополнения"
Все исходники и готовое дополнение здесь.
не только готовый доп, но и полное руководство по его созданию - это круто! Я бы только работу с XML переложил бы на класс DomDocument(), было бы более красиво, а в общем все здорово 8)
Посмотрел его - согласен. Вопрос только по классу - он включен в все php сборки? Или надо отдельным расширением его в панели включать? - если второе - то наживем гемора в поддержке. Я что-то из описания класса не понял этот момент
не вижу в этом проблемы, лепить свои велосипеды только потому что у кого то отключены инструменты для работы с xml точно не стоит.
Шикарно, Владимир. Приеду на место буду внедрять!