Публикация в группе: Otshelnik-Fm - мои работы (код, плагины, дополнения, статьи и руководства)

Категории группы: Работаем с Wp-Recall

 В ходе этого небольшого урока мы сделаем новое дополнение для 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 и теперь, поделившись им с другими людьми, они этот архив могут загружать через менеджер дополнений, в админке своего сайта, со страницы "Дополнения"

Все исходники и готовое дополнение здесь.

6

Автор публикации

не в сети 8 часов

Владимир (Otshelnik-Fm)

4 341
Перегорел
Почитать: https://otshelnik-fm.ru/post-group/goodbye-open-source/
Комментарии: 2187Публикации: 245Регистрация: 27-01-2013Продаж/Покупок: 0/0