Yet Another Related Posts Plugin: использование шаблонов

Дата публикации:Январь 7, 2011

Начиная с версии 3.0, WordPress плагин Yet Another Related Posts Plugin включил в себя две новых возможности: кэширование и обработку шаблонов. В данной статье я покажу вам, как можно использовать шаблоны для настройки представления связанных записей.

Предыдущие версии плагина YARPP предлагали довольно ограниченное число способов изменения вида связанных записей. Вы могли устанавливать некоторые HTML-теги, для того чтобы обернуть ими свои записи, а также выбрать, какое количество цитат (если они есть) выводить на экран. Указанного интерфейса вполне хватало большинству пользователей — к слову говоря, приведенные настройки остались и в версии YARPP 3.0.

Однако, вместе с тем появились и новая опция, позволяющая в полной мере проявить свои навыки PHP-кодирования и получить более полный контроль над отображением связанных записей. Указанная опция дает возможность выбирать любые файлы в подкаталоге templates плагина YARPP.

Структура шаблона YARPP

Давайте взглянем на тестовый шаблон, поставляемый вместе с плагином YARPP 3 (yarpp-template-example.php):

<h3>Related Posts</h3>
<?php if ($related_query->have_posts()):?>
<ol>
<?php while ($related_query->have_posts()) : $related_query->the_post(); ?>
<li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ol>
<?php else: ?>
<p>No related posts.</p>
<?php endif; ?>

Указанный шаблон (а также большинство других шаблонов) состоит из двух базовых частей: (а) что будет выводиться на экран, если связанные записи есть, и (b) что будет выводиться на экран, если связанных записей нет. Проверка на наличие связанных записей находится во второй строке. Если они есть, то мы выводим на экран упорядоченный список и заходим в цикл while, который выполняется до тех пор, пока существуют связанные записи. Для каждой записи мы используем сниппет $related_query->the_post();, который загружает необходимые данные записи и печатает новый пункт списка.

Вы можете заметить, что мы использовали здесь некоторые теги шаблона, такие как the_permalink() и the_title(). Если вы занимались разработкой тем WordPress, то они должны быть вам знакомы. Я затрону их снова чуть позже.

Мощь PHP

Одно неоспоримое преимущество новой системы шаблонов заключается в том, что вы можете напрямую влиять на количество выводимых записей, избегая всех предыдущих структурных ограничений. К примеру, в шаблоне template-list.php мы записываем информацию для каждой связанной записи в массив и затем объединяем строки при помощи функции implode. Таким образом, мы получаем список разделенных запятой значений без любых беспризорных запятых до или после списка, что до сих пор было невозможно.

$postsArray = array();
while ($related_query->have_posts()) : $related_query->the_post();
$postsArray[] = '<li><a href="'.get_the_permalink().'" rel="bookmark">'.get_the_title().'</a></li>';
endwhile;echo implode(', ',$postsArray); // print out a list of the related items, separated by commas

Также вы можете запускать произвольные PHP функции в вашем шаблоне — вплоть до прокрутки другого WP_Query, как это сделано в шаблоне template-random.php: в случае отсутсвия связанных записей на экран будет выведена случайная запись.

Знакомые теги шаблона

Как было замечено ранее, теги, которые мы используем в шаблонах YARPP, являются обычными тегами шаблона, применяющимися в любых шаблонах WordPress. Фактически, любой тег шаблона WordPress будет работать и в цикле YARPP. Вы можете использовать эти теги шаблона для того чтобы выводить на экран цитаты, дату публикации записи, счетчик комментариев, а также некоторые произвольные метаданные. Также в плагине имеются и два собственных тега шаблона, работающих только в пределах цикла YARPP: the_score () и get_the_score (). Как вы и ожидаете, они позволяют напечатать или возвратить число соответствия для конкретной записи.

Стоит отметить, что теги шаблонов других плагинов также будут работать в шаблонах YARPP. Для примера достаточно посмотреть на файл yarpp-template-photoblog.php:

<?php while ($related_query->have_posts()) : $related_query->the_post(); ?>
<?php if (function_exists('yapb_is_photoblog_post')): if (yapb_is_photoblog_post()):?>
<li><a href="<?php the_permalink() ?>" rel="bookmark"><?php yapb_get_thumbnail(); ?></a></li>
<?php endif; endif; ?>
<?php endwhile; ?>

В цикле этого шаблона YARPP мы используем теги шаблона другого плагина — Yet Another Photoblog. Если у вас установлен плагин Yet Another Photoblog, вы можете использовать эти шаблоны для отображения миниатюр связанных записей в заголовках. Заметьте, что в примере мы сначала проверяем, является ли каждая связанная запись фотографией, или не содержит ли она yapb_is_photoblog_post(), и затем используем тег шаблона yapb_get_thumbnail() для того чтобы узнать расположение миниатюры.

Шаблоны, появившиеся в YARPP 3.0, позволяют администратору блога по-новому взглянуть на настройку связанных записей.

Перевод статьи: http://mitcho.com/blog/projects/yarpp-3-templates/

Поделиться

21 комментарий

  1. функция "Делать перекрёстную перелинковку страниц и сообщений?" думал проблема исчезла, когда порог похожести с 3 на 5 перевел, но проблема появилась опять.

    Возникает проблема, дублирует в результатах вывода поста: Вот сам пост: http://times.fireg.ru/?p=1003

    Советуем прочитать:

    <a>Скоро открытие МакДональдс (McDonald’s) в Пятигорске (6.8)

    <a>Скоро открытие МакДональдс (McDonald’s) в Пятигорске (6.7)

    Хотя посты абсолютно одинаковые, и ссылка идет на один и тот же пост, но результаты похожести как видно разные почему-то, что за глюк? Неужели я такой один))) Что у меня за дела творятся, никто помочь не может(

  2. Нурлан says:

    А какой шаблон использовать, чтобы сделать как увас? Какие коды прописать?

    • Architect Of Ruin says:

      В настройках плагина

      до-после связанных постов:

      в первом поле

      &lt;div style=&quot;font-family: Georgia; font-size: 20px;&quot;&gt;Советуем также прочитать:&lt;/div&gt;<ol>

      во втором поле:

       
      </ol> 
      

      До-после каждого связанного поста:

      &lt;li style=&quot;margin-top:10px;&quot;&gt;
      </li>

      До-после выдержки:

      &lt;div style=&quot;font-family: Verdana; font-size: 10px; line-height:10px;&quot;&gt; 
      
       
      &lt;/div&gt; 
      

      На тот момент особо не старался, делал все атрибутами style, но в идеале лучше, конечно же, задавать id и прописывать это CSS стилями.

  3. Нурлан says:

    С html тегами все понятно, я имел виду какие php коды нужно прописывать.

    — это url поста,

    — это закаловок поста, а как прописать php код, чтобы вывести краткое описание поста?

    • Architect Of Ruin says:

      Насчет кода это вопрос к разработчикам плагина, а не ко мне. Я поставил в настройках плагина "Показывать выдержку" и настроил ее, вот и все.

  4. Нурлан says:

    Спасибо, разобрался. Нужно было поставить «Показать выдержку?».

  5. Вальдемар says:

    Доброго вечера!

    Не совсем разобрался я с плагином — где эти параметры, «критерии похожести»? У меня плагин ничего релэйтного не находит, т.е. ничего не выводит кроме фразы «Related Posts:».

    И как указать место для вывода этих постов? Ничего не понимаю, так мало настроек…

    • Architect Of Ruin says:

      Место вывода можно устанавливать через related_posts(), но для этого надо в настройках отключать Automatically display:. Там есть подсказка небольшая, что можно также вставлять related_pages() или related_entries() в зависимости от того, к какому типу материалов выводятся связанные записи.
      Критерии похожести известны только разработчику плагина. Как я понял, для статьи определяется некоторое число, которое формируется исходя из меток, заголовка статьи и каких-то других факторов, после чего выводятся похожие статьи (сортировка по этому числу, начиная с наибольшего). Раньше можно было подгонять это число, сейчас все делается автоматически.

  6. Вальдемар says:

    Убрал все галки в «Automatically display». Поставил ПХП код:

    Пишет то же самое — «No related posts».
    А вообще у меня в посте только заголовок есть — может, это влияет на отсутствие связанных записей?

    • Architect Of Ruin says:

      Возможно, что из-за отсутствия текста. Либо он работает только для последующих записей, опубликованных уже с момента его активации.

  7. Вчера искал плагин для вывода похожих статей. Нашел вот такой http://wordpress.org/plugins/contextual-related-posts/

    В принципе неплохой плагин. Можно настроить алгоритм, стили и т.д. и вроде бы неплохо отображает похожие статьи. Сегодня почитал вашу статью.

    Попробовал YARPP. Судя по всему он сейчас у вас стоит?

    Часто он работает отлично, а иногда ничего не выводит, несмотря на то, что например в определенной статье полно ключевых слов, встречающихся в других статьях.

    Не нашел как отключить цифру похожести, которую он выводит в списке. Нет никаких настроек алгоритма похожести. Нет опции вывода выдержки к миниатюрам. Миниатюры ужимаются «не по умному», т.е. без учета соотношения сторон и выглядят некрасиво.

    В целом, если сравнить эти два плагина, yarpp вроде бы чуток более точен, но выводит меньше постов, а иногда вообще ничего не выводит (Скорее всего больше подойдет для блогов, где много статей). Сontextual Related Posts более удобен и настраиваем.

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

  8. Architect Of Ruin says:

    Да, я пользуюсь YARPP уже давно. Тоже сталкивался у него с разными непонятными местами в работе, когда не выводились статьи, но в целом он работает довольно хорошо, правильно определяет тематику и выдает релевантные материалы.
    Вывод материалов, конечно, не настолько гибкий, потому что внесешь в код изменения, а плагин обновится и все пропадет — приходится работать с тем, что имеешь, либо не обновлять его вовсе. А обновления у него довольно частые.
    YARPP, как мне кажется, хорошо работает в том случае, если много постов. Можно калибровать точность алгоритма, чтобы он выводил более релевантные результаты и не было таких пустот.
    Вообще, он ориентируется именно на метки и рубрики, сам контент он слабо анализирует, судя по выдаваемым результатам.

    Есть плагин для ручной настройки похожих записей к каждой конкретной записи:

    http://wordpress.org/plugins/baw-manual-related-posts/

    А так — все остальные плагины ориентируются именно на таксономии — метки, форматы записей, рубрики, а сам контент не анализируют. YARPP является самым популярным и пока что, как мне кажется, самым удобным, как в плане настройки, так и в плане калибровки алгоритма.

  9. Rin says:

    Скажите пожалуйста, как мне вывести при помощи этого плагина статьи определенной категории на определенной странице?

    а то я вставляю код в нужном мне месте, а он показывает что подобных статей нет

    • Плагин не предназначен для этого. Если вам надо вывести допустим список постов из определенной категории в определенном месте, например в самом посте через шорткод, то можно воспользоваться этим http://wordpress.org/plugins/list-category-posts/

      • А если YARP говорит, что похожих статей нет, снизьте порог похожести: зайдите в его настройки, вверху в правом углу «настройки экрана», там галочку «Критерии похожести», после этого у вас появятся опции похожести. Там поставьте в поле «Порог похожести» например 1 или 2.

  10. Rin says:

    за List category posts спасибо, то что нужно. буду пробовать

  11. Андрей says:

    Здравствуйте, Дмитрий! Известен ли Вам плагин или способ с помощью которого возможно выводить различные заголовки связанных статей для разных рубрик?

  12. Toperwm says:

    Привет. Пересел на YARPP, но столкнулся с такой проблемой, как дублирование ссылок. Например ссылка есть в тексте статьи (поставлена вручную), и потом YARPP ставит ссылку в блоке похожие материалы. Для SEO такое дублирование ссылок противопоказано. Можно ли это подправить ?

    • Дмитрий says:

      Вряд ли можно что-то сделать в таком случае. Он определяет похожие посты по своим алгоритмам. Если только задавать критерий похожести, но он затронет все записи на сайте. Или исключать какую-то определенную рубрику, что, опять же, может быть, не подойдет.

Оставить комментарий

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

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

Предыдущая запись:

Следующая запись: