n-wp.ru — блог о WordPress

Как без плагинов вывести похожие записи с картинками и анонсами | часть 2

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

Обратите внимание на скриншот — на нем выведены сначала изображения из похожих постов, потом идет название записи, а потом — выдержка из содержимого. Все это расположено горизонтально. Я пришел к выводу, что такое расположение наиболее удобно для современного блога с достаточной шириной, и наиболее информативно по содержанию.

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

Можно для определения похожести использовать название поста. Да, часто если в названиях нескольких записей фигурируют одни и те же слова, то можно предположить, что вероятность похожести содержимого будет достаточно большая. Однако это не всегда так, особенно когда речь идет о содержимом русскоязычных блогов. Иногда название записи вообще может ни о чем не говорить, иногда оно содержит слишком общие слова. Да и, опять таки, если записей слишком много, то сканирование всех названий может создать большую нагрузку на блог.

Именно на этих двух принципах и основана работа плагина contextual related post, одного из немногих плагинов, известных мне, который выводит похожие записи с изображениями и кратким содержимым. так же этот плагин создает или использует миниатюры изображений фиксированной пропорции. Последнее и явилось той причиной, по которой я отказался от использования этого плагина.

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

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

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

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

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

  • Спасибо. Полезный пост. Однако суть вопроса снова не расрыта. А вопрос был «Как выводить в сайдбаре определенное кол-во последних записей из определенной рубрики, с миниатюрами картинок, относящихся к этим записям, без плагинов». Вот Вы, Tiaurus, упрекнули меня в том, что я плохо ищу. Но на самом деле именно такой информации я так и не нашел. Вот только есть кусок кода, которым поделился еще один опытный блоггер.

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

    Кстати, а вот тот код выводящие случайный записи, тоже можно вставить в сайдбар или он только на страницах внутри поста работает?

    • Ну а если этот код доработать?

      Функцию catch_that_image() я описывал в первой части публикации.

  • А не подскажишь как изменить это для категорий?
    Я поменял wp_get_post_tags на wp_get_post_categories
    term_id на cat_id
    tag__in на category__in
    Но все равно ничего не работает :(

  • Можно дописать еще случайный вывод, если записей много:
    после

    вставить

  • Все прекрасно работает. Но хотелось бы чтобы превью выводилось ресайзнутое и по высоте, но без искажения пропорций (отрубая лишнее). Не подскажите как такое реализовать?

    Большое спасибо.

    • Пропорциональное изображение можно выводить либо ориентируясь по ширине, либо по высоте. Вам как нужно? Если чтобы вписывалось в ширину, то в коде изменяйте width="250". Если нужно, чтобы картинки вписывались по высоте, то используйте вместо ширины высоту — height="250".
      Если нужно картинку аккуратно обрезать, подгоняя под определенные размеры (скажем, 200 на 100), то лучше использоваться для этого стандартные миниатюры.
      Например, это умеет плагин Related Posts Thumbnails — http://n-wp.ru/4666 .

  • Спасибо за быстрый ответ.
    Да, тут либо высота либо ширина. А если все вместе — пропорции ползут. Плагины это понятно… Сейчас работаю над темой в которой предполагается инсталяха без привинчивания плагинов. Было бы круто если бы кто-то расковырял плагин и понял как там делается обрезание у картинки ). Сам пока недопер. )

    • Например, вот так?
      [img]http://dl.dropbox.com/u/2027201/Images/tiaurus-2010-12-07_213941.png[/img]
      Я сделал в своем блоге http://tiaurus.info вывод похожих постов без плагинов, используя миниатюры. Но это тема для отдельной статьи (а может быть и двух). Возможно, я скоро их напишу. Как говорится, оставайтесь на линии, не переключайтесь :)

  • именно! Нужно чтобы из поста хваталась первая попавшаяся картинка, ресайзилась пропорционально и обрезая лишнее.

    зы. если можно, поскорее )

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

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

  • ситуация такая как только код похожих записей добавляют в статьях коменты путаются, ну допустим есть статья «туризм» и есть «авто» коменты от статью туризм отображаются в статье «авто», а как только убираю код все норма, что делать как впихнуть код?

  • Здравствуйте, как сделать таблицу вертикальной (записи одна под другой)? Чтобы слева была картинка, справа заголовок, и записи отсортированы по дате от свежей к старой.