Яндекс.Турбо

Описание

Данный плагин автоматически создаст на вашем сайте новую RSS-ленту (или несколько лент) для сервиса «Яндекс.Турбо» в полном соответствии с техническими требованиями Яндекса.

После установки плагина не забудьте проверить его настройки в «Настройках\Яндекс.Турбо».

Чтобы добавить свою ленту в Яндекс.Турбо вам надо будет отправить заявку в Яндекс.Вебмастере («Турбо-страницы\Источники»).

Если вам понравился этот плагин, то, пожалуйста, поставьте ему 5 звезд.

Скриншоты

  • Пример добавленных RSS-лент в Яндекс.Вебмастере.
  • Настройки плагина.
  • Метабокс плагина.

Часто задаваемые вопросы

Инструкция по установке
  1. Установите плагин через меню «Плагины\Добавить новый» (искать «RSS for Yandex Turbo» или «Яндекс.Турбо»).
  2. Активируйте плагин в меню «Плагины».
  3. Зайдите в настройки плагина «Настройки\Яндекс.Турбо» и сохраните их.
  4. Это все.
Лента не проходит валидацию, что делать?

Лента для Яндекс.Турбо никогда не сможет пройти валидацию, так как технические требования Яндекс.Турбо несовместимы со стандартами обычного RSS.

Лента отдается с неправильным content type, что делать?

Плагин создает ленту с правильным контент типом «application/rss+xml». Если у вас лента отдается с другим контент типом, то весьма вероятно, что в этом виноват ваш плагин кэширования. Добавьте урл ленты в исключения плагина (все плагины кэширования имеют опцию исключения определенных страниц). Но на практике — это не имеет никакого значения, так как боту Яндекса все равно с каким контент-типом отдается RSS-лента.

URL источника запрещен в robots.txt, что делать?

Добавьте в robots.txt директиву:

Allow: /feed/turbo/

Где «turbo» это имя вашей RSS-ленты.
Учтите, что сервис Яндекс.Турбо кэширует полученный robots.txt, так что изменения в robots.txt он заметит не сразу!

Как добавить «подпись» к записям ленты?

В плагине есть фильтр yturbo_the_content для обработки контента записей.

Пример использования (добавьте этот код в файл functions.php вашей темы):

function yturbo_sign($content) {

    $rsspermalink = esc_url( apply_filters( 'the_permalink_rss', get_permalink() ) ); 
    $sign = 'Сообщение "<a href="'.$rsspermalink.'">'.get_the_title_rss().'</a>" появилось сначала на "<a href="'.get_bloginfo_rss('url').'">'.get_bloginfo_rss('title').'</a>".';

    $content .= $sign;
    return $content;
}    
add_filter('yturbo_the_content', 'yturbo_sign');

И вы получите подпись, аналогичную подписи от плагина Yoast SEO.

Как использовать кнопки с произвольным содержимым?

Добавляем кнопку в качестве «подписи».

function my_yturbo_sign_buttons($content) {

    $sign = '

<p><b>ДОРОГИЕ ЧИТАТЕЛИ!</b></p>
<p>Если вам необходимо с нами связаться — позвоните нам (круглосуточно).</p>
<p><b>Это быстро и бесплатно!</b></p>

<button formaction="tel:+74991111111" 
data-background-color="#5B97B0" 
data-color="white" 
data-primary="true">Москва</button>

    ';

    $content .= $sign;
    return $content;
}    
add_filter('yturbo_the_content', 'my_yturbo_sign_buttons');

Добавляем кнопку в виде шорткода.

function turbobutton_shortcode($atts, $content) {
    //получаем настройки плагина, чтобы узнать имя RSS-ленты
    $yturbo_options = get_option('yturbo_options');
    $rssturboname = $yturbo_options['ytrssname'];

    //если это не наша RSS-лента, то шорткод будет удален
    if ( !is_feed($rssturboname) ) return '';

    //формируем кнопку шорткода
    $content = '

<button formaction="https://www.yandex.ru" 
data-background-color="#5B97B0" 
data-color="white" 
data-primary="true">Яндекс</button>

    ';    

    return $content;
}
add_shortcode ('turbobutton', 'turbobutton_shortcode');

Теперь вам достаточно добавить в контент код [turbobutton] и в нужном месте записи будет выведена кнопка (только на турбо-страницах).

Замена указанной ссылки на кнопку.

Предположим, что у вас имеется конкретная ссылка и вы хотите ее заменить на кнопку на турбо-страницах. Например, ваша ссылка выглядит так:

<a class="phone" href="tel:+74959998877">+7(495)999-88-77</a>

Чтобы заменить ее на турбо-страницах на кнопку вам надо использовать код:

function yturbo_replace_link($content) {

    //что заменить
    $link = '<a class="phone" href="tel:+74959998877">+7(495)999-88-77</a>';

    //на что заменить
    $button = '<button formaction="tel:+74959998877" data-background-color="#5B97B0" data-color="white" data-primary="true">+7(495)999-88-77</button>';

    //производим замену
    $content = str_replace($link, $button, $content);

    return $content;
}    
add_filter('yturbo_the_content', 'yturbo_replace_link');

Замена всех ссылок на кнопки по регулярному выражению.

Предположим, что у вас есть однотипные ссылки вида:

<a class="buy" href="http://www.wptest.ru/buy_test/">Купить товар «Название товара»</a>
<a class="buy" href="http://www.wptest.ru/buy_test2/">Купить товар «Название товара 2»</a>

Чтобы заменить их на кнопки на турбо-страницах вы должны использовать код:

function yturbo_replace_all_links($content) {

    //что заменить
    $pattern = '/<a class="buy" href="(.*?)">Купить товар «(.*?)»<\/a>/i';
    //на что заменить
    $replacement = '<button formaction="$1" data-background-color="#5B97B0" data-color="white" data-primary="true">$2</button>';
    //производим замену
    $content = preg_replace($pattern, $replacement, $content);

    return $content;
}    
add_filter('yturbo_the_content', 'yturbo_replace_all_links');

Если вам нужна будет помощь с регулярками, то спрашивайте на форуме плагина.

Как использовать форму обратной связи?

Есть 3 способа использования формы обратной связи:

а) Вы можете использовать «блок обратной связи» (включается в настройках плагина). Форма обратной связи будет выведена при клике на соответствующую кнопку в этом блоке.

б) Вы можете вывести готовую форму обратной связи прямо в контенте записи (шорткодом, выводимым только на турбо-страницах). Для этого используйте код:

function turbocontactform_shortcode($atts, $content) {
    //получаем настройки плагина, чтобы узнать имя RSS-ленты
    $yturbo_options = get_option('yturbo_options');
    $rssturboname = $yturbo_options['ytrssname'];

    //если это не наша RSS-лента, то шорткод будет удален
    if ( !is_feed($rssturboname) ) return '';

    //создаем форму обратной связи
    //data-send-to должен содержать email, принадлежащий вашему домену
    //при заполнении data-agreement-company обязательно нужно указать и data-agreement-link
    $content = '

<form 
data-type="callback" 
data-send-to="mail@example.com" 
data-agreement-company="ООО Ромашка" 
data-agreement-link="http://example.com">
</form>

    ';    

    return $content;
}
add_shortcode ('turbocontactform', 'turbocontactform_shortcode');

Форма обратной связи будет выведена в полном виде только на турбо-страницах при использовании шорткода [turbocontactform].

в) Вы можете вывести кнопку, при клике на которую будет выведена форма обратной связи (шорткодом, выводимым только на турбо-страницах). Для этого используйте код:

function turbocontactformbutton_shortcode($atts, $content) {
    //получаем настройки плагина, чтобы узнать имя RSS-ленты
    $yturbo_options = get_option('yturbo_options');
    $rssturboname = $yturbo_options['ytrssname'];

    //если это не наша RSS-лента, то шорткод будет удален
    if ( !is_feed($rssturboname) ) return '';

    //создаем кнопку, выводящую по клику форму обратной связи
    //data-send-to должен содержать email, принадлежащий вашему домену
    //при заполнении data-agreement-company обязательно нужно указать и data-agreement-link
    $content = '

<button 
formaction="mailto:mail@example.com" 
data-background-color="#5B97B0" 
data-color="white" 
data-primary="true" 
data-send-to="mail@example.com" 
data-agreement-company="ООО Ромашка" 
data-agreement-link="http://example.com">Оставить заявку
</button>

    ';    

    return $content;
}
add_shortcode ('turbocontactformbutton', 'turbocontactformbutton_shortcode');

Шорткод [turbocontactformbutton] выведет кнопку «Оставить заявку», при клике на которую будет открыта форма обратной связи (и кнопка и форма обратной связи будут выведены только на турбо-страницах).

Шаблоны и плагин Advanced Custom Fields

В шаблонах записей можно использовать произвольные поля. Для этого достаточно обернуть название произвольного поля символами %% (пример — %%_aioseop_title%%). Однако, при использовании произвольных полей, созданных плагином Advanced Custom Fields зачастую получить значение этих произвольных полей затруднительно, так как ACF хранит многие поля в своем собственном формате. Как это обойти? В плагине есть фильтр шаблонов yturbo_the_template, которым можно воспользоваться.

Покажу на примере, предположим у вас в ACF созданы произвольное поля:

myimage — тип «Изображение», возвращаемое значение «Массив изображения».

steps — тип «Повторитель», внутри есть произвольные поля:

    image — тип «Изображение», возвращаемое значение «Ссылка на изображение»;
    text — тип «Текст».

Если вы пропишите в шаблоне:

%%myimage%%

%%steps%%

%%post_content%%

То в результате получите что-то типа:

<p>92332</p>

<p>контент записи</p>

То есть вместо картинки вы получили ID этого массива картинок, а поле типа «Повторитель» вообще было проигнорировано.

Вот для обработки таких нестандартных произвольных полей и нужен фильтр yturbo_the_template. Вот пример кода, обрабатывающего эти поля:

//обработка произвольных полей плагина ACF begin
function yturbo_acf_template($content) {

    //обрабатываем только нужные нам поля (остальные обработает плагин RSS for Yandex Turbo)
    if (preg_match_all("/%%(.*?)%%/i", $content, $res)) {
        foreach ($res[0] as $r) {
            //обрабатываем поле %%myimage%% (заменяем его на результат работы функции ct_get_myimage)
            if($r == '%%myimage%%') {
                $content = str_replace($r, ct_get_myimage(), $content);
            }
            //обрабатываем поле %%steps%% (заменяем его на результат работы функции ct_get_steps() )
            if($r == '%%steps%%') {
                $content = str_replace($r, ct_get_steps(), $content);
            }
        }    
    }

    return $content;
}    
add_filter('yturbo_the_template', 'yturbo_acf_template');
//обработка произвольных полей плагина ACF end

//обработка произвольного поля %%myimage%% begin
function ct_get_myimage() {

    if ($field = get_field('myimage')) {
        $output = '<figure><img src="' . $field['sizes']['photo'] . '" alt="' . get_the_title() . '" /></figure>';
    } 
    return $output;
}    
//обработка произвольного поля %%myimage%% end

//обработка произвольного поля %%steps%% begin
function ct_get_steps() {

    if ($items = get_field('steps')) {

        $count = 0;
        $i = 1;
        foreach ($items as $item) {$count++;}

        foreach ($items as $item) {
            $output .= '<h3>Шаг ' . $i . ' из ' . $count . ' </h3>';
            $i++;
            $output .= '<figure><img src="' . $item['image'] . '" /></figure>';
            $output .=  $item['text'];
        }     

    }       
    return $output;
}    
//обработка произвольного поля %%steps%% end

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

<figure><img src="http://site.com/wp-content/uploads/2018/06/cover-47-260x260.jpg" /><figcaption>Тут был alt</figcaption></figure>
<h3>Шаг 1 из 2 </h3>
<figure><img src="http://site.com/wp-content/uploads/2018/06/cover-45.jpg" /></figure>
<p>первое изображение</p>
<h3>Шаг 2 из 2 </h3>
<figure><img src="http://site.com/wp-content/uploads/2018/06/cover-38.jpg" /></figure>
<p>второе изображение</p>
<p>контент записи</p>

Атрибут alt был заменен на figcaption из-за настроек плагина (учтите, что результат вывода вашего шаблона будет потом обработан фильтрами плагина).

Отзывы

Отлично

Плагин отличный, но Яндекс в вебматере кричит, что XML-элементы указаны некорректно
стр. поз.
46 424 Неизвестное имя в конструкции &XXX;. Возможно не выполнено экранирование символа &

Отличный плагин

Отличный плагин, на 100 процентов справляющийся со своей задачей и один из важнейших плюсов, это быстрая и качественная поддержка плагина

Посмотреть все 48 отзывов

Участники и разработчики

«Яндекс.Турбо» — проект с открытым исходным кодом. В развитие плагина внесли свой вклад следующие участники:

Участники

«Яндекс.Турбо» переведён на 1 язык. Благодарим переводчиков за их работу.

Перевести «Яндекс.Турбо» на ваш язык.

Заинтересованы в разработке?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Журнал изменений

1.18

  • добавлен фильтр обработки контента шаблона «yturbo_the_template» записи.
  • обновлен FAQ (пример использования фильтра «yturbo_the_template» для произвольных полей, созданных плагином Advanced Custom Fields).
  • исправлена ошибка вывода миниатюр в похожих записях при включенном кэшировании списка похожих записей.
  • исправлена работа фильтра удаления точного контента.
  • исправлен вывод метабокса плагина при редактировании типов записей, не выбранных в настройках плагина.

1.17

  • исправлена ошибка версии 1.16 с фильтрами ("\n" и '\n' для функции explode совсем разные вещи).

1.16

  • появилась возможность добавить блок рейтинга на турбо-страницы.
  • добавлена возможность создания своих шаблонов для записей (использование произвольных полей).
  • добавлена возможность удалить турбо-страницу для указанной записи.
  • настройки плагина вынесены в табы (в связи с их большим количеством).
  • добавлены дополнительные проверки на введенные значения в опциях фильтров.
  • все счетчики выводятся в настройках сразу (в связи с частыми вопросами по поводу того, как установить больше одного счетчика).
  • изменены лимиты RSS-ленты в соответствии с новыми ограничениями Яндекса (1000 записей в ленте и 50 картинок в одной записи).
  • изменена установка новых опций при обновлении плагина.

1.15

  • исправлен баг с сохранением в блоке обратной связи звонка и контактной формы.
  • интегрирован ID плагина (https://yandex.ru/support/webmaster/turbo/plugins.html).

1.14

  • добавлена возможность подключить блок обратной связи на турбо-страницах.
  • добавлена возможность удалять указанные шорткоды из контента записей в RSS-ленте.
  • удален выбор тематики записи (по спецификации Яндекса тематика используется только в Дзене и Новостях).
  • обновлены часто задаваемые вопросы (добавлены подсказки по использованию кнопок и формы обратной связи).
  • добавлена возможность задавать заголовок записей (тег <h1>) в RSS-ленте из SEO-плагинов.
  • некоторые настройки плагина перенесены в другие секции настроек (для более удобной настройки плагина).
  • отключен вывод миниатюр для похожих записей при включении непрерывной ленты статей (так как они все равно не используются в этом случае).
  • добавлено ограничение на количество похожих записей (по спецификации их не может быть больше 30 штук).
  • добавлена возможность отключить аватары для комментариев (чтобы можно было уложиться в лимит Яндекса в 30 картинок на одну турбо-страницу).
  • добавлены теги <turbo:topic> и <turbo:source> (нужны для передачи данных в Яндекс.Метрику).

1.13

  • изменена система добавления рекламы (проверьте настройки плагина!) и добавлены 2 новых места размещения рекламы (после блока «Поделиться» и после блока с комментариями).
  • теги <yandex:adNetwork> и <yandex:analytics> были заменены на теги <turbo:adNetwork> и <turbo:analytics> (новая разметка в спецификациях).

1.12

  • добавлена возможность подключить вывод комментариев к записям.
  • добавлена возможность отключить вывод даты публикации записей в ленте.
  • добавлена возможность преобразования стандартных галерей движка в turbo-галереи.
  • добавлена возможность добавить блок «Поделиться».
  • добавлена возможность добавления меню.
  • добавлена возможность использовать «непрерывную ленту» статей.
  • добавлена возможность включения в начало записей их «отрывков».
  • исправлена вставка рекламных блоков ADFOX.
  • добавлено кэширование списка похожих записей (для ускорения генерирования ленты).
  • исправлено дублирование контента при использовании шорткодов некоторых плагинов (вукомерс и другие).
  • удалены все лишние фильтры в фиде (исправление невалидности ленты, когда некоторые плагины изменяли ленту под себя).

1.11

  • переписана функция удаления тегов с контентом (теперь она справляется со вложенностью).
  • из контента теперь удаляются лишние изображения (в одном item-элементе может быть только 30 уникальных изображений).

1.10

  • функция iconv_strlen была заменена на функцию mb_strlen (первая выдавала ошибку при плохой разметке записи — в результате отсутствовала реклама в середине записи).

1.09

  • добавлена возможность включения в rss-ленту записей только указанных таксономий.

1.08

  • добавлена возможность установить все поддерживаемые Яндексом счетчики.

1.07

  • добавлена возможность отключения рекламы для конкретной записи (в метабоксе плагина).
  • исправлена работа плагина, когда атрибуты тега img указаны в одинарных кавычках вместо двойных.

1.06

  • добавлена опция отключения вывода автора записи (тег <author> для Яндекс.Турбо не является обязательным).
  • из контента записей теперь удаляются все спец. символы юникода (как невалидные в rss).
  • полностью переписаны регулярки плагина — из тегов img теперь вырезаются все лишние атрибуты.

1.05

  • я дико извиняюсь за столь частые обновления плагина!
  • были оптимизированы регулярки плагина, так как в некоторых случаях мог удаляться контент записи в RSS-ленте.

1.04

  • к контенту записей больше не применяется фильтр «the_content_feed» (во избежание конфликтов с другими плагинами, работающими с RSS).
  • добавлен фильтр обработки контента «yturbo_the_content» записи.
  • удален action «rss2_item» (во избежание добавления в ленту левых тегов от плагинов вроде Jetpack).
  • при удалении плагина настройки плагина теперь будут полностью удалены из базы данных.
  • при деактивации плагина RSS-ленты плагина теперь будут выдавать обычную 404-ошибку.
  • исправлены тормоза в админке, если установлено слишком большое общее количество записей в RSS-ленте.

1.03

  • добавлен третий рекламный блок и возможность выводить рекламу в середине записи.
  • добавлена возможность отключения turbo-страниц (путем добавления turbo="false" к тегу <item>).
  • включение рекламных блоков больше не работает, если не указаны идентификаторы рекламных сетей.
  • добавлена возможность выводить блок «похожих» записей (тег <yandex:related>).
  • исправлено сохранение пустого значения счетчика метрики (чтобы удалить номер установленного счетчика).
  • на странице настроек плагина теперь не выводится больше 12 ссылок на RSS-ленты.
  • скрипты из кода плагина были перенесены во внешний файл (внутреннее изменение).

1.02

  • добавлена возможность изменения имени ленты в урле.
  • функция wpautop теперь обрабатывает контент после удаления тегов, а не до.
  • переписана функция удаления тегов без контента (теперь она справляется с большой вложенностью).

1.01

  • миниатюра в заголовке записи теперь выводится только, если включена соответствующая опция в настройках (проверьте настройки!).
  • из разметки изображений убраны атрибуты srcset и sizes.
  • исправлена ошибка парсинга изображений (когда пропадал весь текст записи).

1.00

  • первая версия.