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

Настройки

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

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

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

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

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

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

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

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

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

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

tiaurus

Автор n-wp.ru — блога о WordPress для новичков.

Оцените автора
Добавить комментарий

  1. Дмитрий

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

     <ul>
    <?php $recent = new WP_Query("cat=5&showposts=5"); while($recent->have_posts()) : $recent->the_post();?>
    <li><a href="<?php the_permalink() ?>" rel="bookmark">
    <?php the_title(); ?>
    </a></li>
    <?php endwhile; ?>
    </ul> 

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

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

    Ответить
    1. tiaurus

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

      <ul>
      <?php $recent = new WP_Query("cat=5&showposts=5"); while($recent->have_posts()) : $recent->the_post();?>
      <li>" rel="bookmark">
      <?php the_title(); ?>
      
      <br />
      <img align="left" style="-webkit-box-shadow:0 0 10px rgba(0, 0, 0, 0.4); -moz-box-shadow:0 0px 10px rgba(0, 0, 0, 0.4); margin: 2px 10px 2px 0px; display: inline" src="<?php echo catch_that_image() ?>" alt="<?php the_title(); ?>" width="80"/>
      <br /><?php the_content_rss('', TRUE, '', 16); ?>
      </li>
      <?php endwhile; ?>
      </ul>
      

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

      Ответить
    2. tiaurus

      Какой код, выводящий случайные записи?

      Ответить
  2. Step

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

    Ответить
    1. Ну так получилось?

      Ответить
  3. Step

    Извини, что не сразу отписался. Да, получилось, спасибо большое.

    Ответить
  4. VRS

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

     'showposts'=> 2, // Количество выводимых записей

    вставить

     'orderby'=> 'rand', 
    Ответить
  5. google.com/accounts/o8…

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

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

    Ответить
    1. Пропорциональное изображение можно выводить либо ориентируясь по ширине, либо по высоте. Вам как нужно? Если чтобы вписывалось в ширину, то в коде изменяйте width="250". Если нужно, чтобы картинки вписывались по высоте, то используйте вместо ширины высоту — height="250".
      Если нужно картинку аккуратно обрезать, подгоняя под определенные размеры (скажем, 200 на 100), то лучше использоваться для этого стандартные миниатюры.
      Например, это умеет плагин Related Posts Thumbnails — https://n-wp.ru/kak-vyivesti-pohozhie-zapisi-s-miniatyurami-related-posts-thumbnails/ .

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

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

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

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

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

      Ответить
  8. Прекрасно! Когда ждать публикации? )

    Ответить
  9. Иван

    скажите, а как сделать так чтобы между картинок был промужеток? а то вообще что то не могу разобраться http://dizajka.ru/urok-29-kakoj-dolzhna-byt-mebel-v-detskoj-komnate

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

      Ответить
  10. Сергей

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

    Ответить
    1. Похожая ситуация разбиралась вот тут: https://n-wp.ru/kak-vyivesti-pohozhie-zapisi-iz-kategorii-bez-plaginov/

      Ответить
      1. Сергей

        спасибо за быстрый ответ. очень благодарен

        Ответить
  11. Germez

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

    Ответить