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

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

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

1. Для того, чтобы подключить использование миниатюр в подобных целях, прочтите первую часть поста Как без плагинов вывести похожие записи с миниатюрами | Часть 1. В ней я подробно описал, какие настройки нужно выставить в блоге и какой код добавить в файл functions.php. После выполнения инструкций первого пункта можете переходить к следующему абзацу.

2. Для формирования списка похожих постов по категориям, создадим в файле functions.php специальную функцию:

function show_previous_posts_from_category ($the_post_id, $the_category_id = 0, $post_num = 5){
$num = 0;
global $wpdb;
$sql = "SELECT wposts.* 
FROM $wpdb->posts wposts
  LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id)
  LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE $wpdb->term_taxonomy.taxonomy = 'category'
  AND $wpdb->term_taxonomy.term_id = '$the_category_id'
    AND wposts.post_status = 'publish'
    AND wposts.post_type = 'post'
  AND wposts.ID get_results($sql, OBJECT);
//if (!$result){ echo "Записей не найдено"; return false; }
global $post;
echo '';
foreach ($result as $post){ setup_postdata($post);
//выводим информацию как обычно в ВП это бывает :)
get_the_post_thumbnail($post->ID, 'thumbnail');
echo '
',the_time('d·m·Y '),' '.get_the_title().''; $num++; } // если предыдущих постов меньше заданого колличества, выводим ниже последние из рубрики if ( $num < $post_num || !$result ){ $need_more = $post_num-$num; $more_posts = get_posts("numberposts=$need_more&category=$the_category_id"); foreach ($more_posts as $post){ setup_postdata($post); //выводим информацию как обычно в ВП это бывает :) echo '
',the_time('d·m·Y'),' '.get_the_title().''; }} echo ''; wp_reset_query(); }

Функция создает список из пяти ссылок с названиями записей, которые были опубликованы последними в этой же категории, что и текущий пост. Теперь этот список нужно вывести в посте. Для этого открываем файл single.php, находим в нем вывод содержимого (обычно это функция the_content), и вставляем после него такой код:

ID); if ($categories) { $category_ids = array(); foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id; $args=array( 'category__in' => $category_ids, 'post__not_in' => array($post->ID), 'showposts'=>5, // количество ссылок 'caller_get_posts'=>1 ); $my_query = new wp_query($args); if( $my_query->have_posts() ) { echo ''; while ($my_query->have_posts()) { $my_query->the_post(); ?>
<a href="" title="">

В этом коде мы используем функцию ordered_thumbnails, отвечающую за вывод миниатюры поста – эту функцию мы подключили в первом пункте. Обратите внимание на количество выводимых ссылок (‘showposts’=>5) – оно должно быть таким же, как и в том коде, который вы вставили в файл functions.php (post_num = 5). Для наглядности я оставил оформление ссылок неизменным – возможно, что вам придется немного поработать над ним, адаптируя к дизайне своего блога.

Автор tiaurus 2182 Articles
Являюсь создателем n-wp.ru — блога о WordPress для новичков. Мне интересно многое, поэтому еще я сделал 123-box.ru — блог о программах для Windows, и tiaurus.info — блог о красоте.

16 Комментарии

  1. А можно ли сделать так, чтобы миниатюрой бралось первое изображение из поста?
    Спасибо.

      • а если я загружал изображения не через админку?
        пользуюсь Win Live Writer для написания, а он грузит изображения напрямую на фтп.
        я вставил код, но не вижу превью.

        • На сколько я знаю, Windows Live Writer по-своему работает с изображениями, поэтому если вы в теме используете автоматически создаваемые миниатюры, лучше использовать встроенный редактор.

  2. Ваш рассказ заканчивается словами “и вставляем после него такой код:” — и дальше пусто. Так какой код надо вставлять?

  3. Приветствую.
    Подскажите как доделать так, чтобы если в записи нет изображений, отображалась картинка заглушка? Спасибо.

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

    < ?php ordered_thumbnails_medium(); ?>

    ) и теперь вместо первых картинок, везде отображается только заглушка. В чем может быть дело?
    Было бы замечательно если бы получилось объединить https://n-wp.ru/8853 и https://n-wp.ru/5573

  5. Большое спасибо за помощь.
    Прибавил код от https://n-wp.ru/8853.
    Получилось так

    < ?php the_title(); ?>

    Все прекрасно работает.
    Если можно удалите пожалуйста два моих комментария выше.

    • Комментарии выше тоже полезные. Вы спрашивали о том, как выводить картинку-заглушку, если в посте нет миниатюр, а воспользовались способом, выводящим первое изображение поста – это не одно и то же. Хотя можно и так и сяк.

  6. Здравствуйте. Реально ли запихнуть сей код в сайдбар, и подключить миниатюры которые генерирует мой шаблон(onecool-thumb).
    Скажите, как сие чудо сотворить.. Спасибо.

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

Ваш электронный адрес не будет опубликован.


*