Как сделать трансляцию потока из Google Plus в WordPress в виде встроенных записей.

Важные требования:

  • каждый пост из G+ должен быть как отдельный пост в WordPress;
  • каждый пост из G+ размещённый в WordPress, должен выглядеть как embed («встроить запись»), т.е. так будто человек руками взял код для опубликованного поста и вставил;
  • публикация в WordPress должна быть полностью автоматизирована;
  • посты из G+ должны быть каждый по отдельности, и идти в общем потоке постов WordPress, а не отдельной лентой.

К сожалению аккуратных, качественных и удобных плагинов для решения этой задачи я найти не смог. Поэтому решил использовать популярный и любимый сервис ifttt.com , в связке с rss2lj.net/g+ . Это довольно распространённый способ, но он не учитывает то, что Google недавно ввёл новую опцию — «Встроить запись». Подробнее про это можно почитать тут: Встроенные записи Google+

Что официально позволяет отдельные посты из G+, со всем их функционалом, встраивать в любую страницу.

Код выдаваемя для этого Google Plus выглядит примерно так:

<!-- Place this tag in your head or just before your close body tag. --> <script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>

<!-- Place this tag where you want the widget to render. --> <div class="g-post" data-href="https://plus.google.com/100122111463843050660/posts/fmumYmSghi4"></div>

И схема поначалу казалась простой — первую часть кода вставляем в шаблон нашего WordPress, вторую часть генерируем и публикуем в WordPress силами ifttt. Но я столкнулся с неожиданным ограничением ifttt.com — при формировании поста для WordPress ifttt довольно строго фильтрует HTML. И в результате вырезает атрибут data-href убивая таким образом всю простоту способа. 🙁

Пришлось делать костыли — допиливать шаблон WordPress, вводить некоторые дополнительные моменты в публикации. И к сожалению способ сразу стал требовать некоторого опыта и минимального знания PHP — часть гугловского кода добавляется на лету уже на стороне WordPress…

Подготовительные действия:

  1. Заводим в блоге на WordPress нового пользователя, например с именем ifttt или gplus, или ещё каким то. Даём этому пользователю права на публикацию постов в блоге. Через этого пользователя будет заходить ifttt. Так безопаснее и корректнее.

  2. Подключаем в ifttt канал WordPress. Вводим там данные заведённого для этого пользователя, проверяемся и т.п. В результате ifttt должен сказать, что канал подключен и с ним всё в порядке.

  3. В блоге заводим новую рубрику (Category), например «G+» и даём ей ярлык (slug) «gplus». Это один из вариантов, как по простому можно в шаблоне будет понимать, что пост сформирован из Google Plus, ну и вообще позволит иметь порядок в блоге и т.п.

  4. Вносим в шаблон, который используется в нашем WordPress, в часть header отвечающую за Заголовок перед закрывающим тэгом код от гугла:

    <script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>

  5. Вносим в шаблон отвечающий за ленту новостей (Основной шаблон — index.php) код заменяющий участок выводящий содержимое новости. Выглядеть это может например так:

    <div class="entry"> <?php $category = get_the_category(); if($category[0]->slug=='gplus') : ?> <div class="g-post" data-href="<?php echo strip_tags(get_the_content()); ?>"></div> <?php else : ?> <?php the_content(__('Continue reading', 'elegant-grunge')); ?> <?php endif; ?> </div>

    Основная идея в том, что мы получаем рубрику поста, и смотрим не соответствует ли она «gplus», если да, то значит этот пост написал ifttt и дальше нам нужно, очистив от лишних тегов и получив чистую ссылку на G+ пост, вставить её в код гугла. Ну а если нет, то вывод делается как обычно.

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

  7. Далее на ifttt создаём рецепт из двух компонентов — RSS и WordPress:

  8. В рецепте ifttt в части для RSS вставляем ссылку на поток — http://rss2lj.net/g+/ваш_G+_ID , например в моём случае получается RSS Feed: **http://rss2lj.net/g+/100122111463843050660
    **ID можно взять из URL вашего G+ профиля или подсмотреть в любом вашем публичном посте в G+ выбрав из выпадающего по галочке списка пункт «Встроить запись».

  9. В рецепте ifttt в части Wordpress: в поле Body всё удаляем и ставим только {{EntryUrl}}, таким образом в тело поста в WordPress будет попадать только текст ссылка на пост в Г+; а в поле Categories ставим G+ — обратите внимание, тут ставится именно имя рубрики, а не её ярлык. У меня это имя = G+

  10. Остальные параметры выставляем по вашему усмотрению. Например можно для начала поставить Post status — Draft, и тогда то, что будет писать ifttt будет попадать в черновики, сможете отладить и проверить, так ли он формирует посты как мы хотим.

Теперь алгоритм получается таким:

  1. Вы публикуете в своем Google Plus новый публичный (разумеется только публичный будет видно) пост.
  2. ifttt через http://rss2lj.net/g+ следит за RSS лентой постов в Г+ и видит новую запись. Обычно на это требуется до 15 минут, или при тестировании вы можете нажать Check.
  3. ifttt через http://rss2lj.net/g+ получает URL новой записи в Google Plus.
  4. ifttt формирует пост для вашего блога с этой ссылкой и публикует его в вашем блоге, в рубрике «G+». В теле поста в блоге чистый текст ссылки на новый пост в G+.
  5. Все заходящие на ваш блог в ленте новостей теперь видят встроенную запись из вашего Google+, которая доформировывается на лету шаблоном из ссылки.

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

На основе этой идеи можно много чего сделать, например:

  • сильно видоизменить WordPress-овое сопровождение постов из Г+ — удалить комментарии, заголовок, даты и т.п.
  • применять другие трансляторы RSS.
  • использовать теги.
  • понимать, что пост из Г+ не по рубрике, а например только по пользователю и т.п.
  • дождаться что ifttt отменит такое сильное фильтрование HTML в постах в WordPress и отказаться от допиливания шаблонов 😉