В первой части я показал, как без плагинов вывести похожие записи с миниатюрами по тегам. Однако похожесть можно еще и определить по категории. Если для объединения схожих по тематике постов вы используете категории, то можно этим воспользоваться.
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 '<br /><span style="color:#666">',the_time('d·m·Y '),'</span> <span class="write-comment" style="font-size:1.0em">'.get_the_title().'</span>'; $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 '<br /><span style="color:#666">',the_time('d·m·Y'),'</span> <span class="write-comment" style="font-size:1.0em">'.get_the_title().'</span>'; }} echo ''; wp_reset_query(); }
Функция создает список из пяти ссылок с названиями записей, которые были опубликованы последними в этой же категории, что и текущий пост. Теперь этот список нужно вывести в посте. Для этого открываем файл single.php, находим в нем вывод содержимого (обычно это функция the_content), и вставляем после него такой код:
<div> 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(); ?> <div style="width:210px;padding:10px;text-align:center;vertical-align:top;float:left"> <div style="text-align:center"><a href="" title=""></div> <div style="text-align:center"></a></div> </div> </div>
В этом коде мы используем функцию ordered_thumbnails, отвечающую за вывод миниатюры поста – эту функцию мы подключили в первом пункте. Обратите внимание на количество выводимых ссылок (‘showposts’=>5) – оно должно быть таким же, как и в том коде, который вы вставили в файл functions.php (post_num = 5). Для наглядности я оставил оформление ссылок неизменным – возможно, что вам придется немного поработать над ним, адаптируя к дизайне своего блога.
А можно ли сделать так, чтобы миниатюрой бралось первое изображение из поста?
Спасибо.
В качестве изображения берется первая миниатюра из поста.
а если я загружал изображения не через админку?
пользуюсь Win Live Writer для написания, а он грузит изображения напрямую на фтп.
я вставил код, но не вижу превью.
На сколько я знаю, Windows Live Writer по-своему работает с изображениями, поэтому если вы в теме используете автоматически создаваемые миниатюры, лучше использовать встроенный редактор.
Ваш рассказ заканчивается словами “и вставляем после него такой код:” — и дальше пусто. Так какой код надо вставлять?
Обновите страницу.
Приветствую.
Подскажите как доделать так, чтобы если в записи нет изображений, отображалась картинка заглушка? Спасибо.
Как вариант, можно использовать такой способ: Как вывести первое изображение из поста, а если его нет, то показать случайно выбранную картинку-заглушку.
Либо выводить миниатюру примерно так:
Спасибо за быстрый ответ.
Правда у меня что-то не получилось.
Поставил предложенный вами код (заменил
) и теперь вместо первых картинок, везде отображается только заглушка. В чем может быть дело?
Было бы замечательно если бы получилось объединить https://n-wp.ru/kak-vyivesti-pervoe-izobrazhenie-iz-posta-a-esli-ego-net-to-pokazat-sluchayno-yibrannuyu-zaglushku/ и https://n-wp.ru/kak-bez-plaginov-vyivesti-pohozhie-zapisi-s-miniatyurami-chast-2/
Первая картинка и миниатюра поста – это разные штуки. Вы какой код использовали?
Если код:
то так:
Если код:
то так
Попробуйте так:
Большое спасибо за помощь.
Прибавил код от https://n-wp.ru/kak-vyivesti-pervoe-izobrazhenie-iz-posta-a-esli-ego-net-to-pokazat-sluchayno-yibrannuyu-zaglushku/.
Получилось так
Все прекрасно работает.
Если можно удалите пожалуйста два моих комментария выше.
Комментарии выше тоже полезные. Вы спрашивали о том, как выводить картинку-заглушку, если в посте нет миниатюр, а воспользовались способом, выводящим первое изображение поста – это не одно и то же. Хотя можно и так и сяк.
Здравствуйте. Реально ли запихнуть сей код в сайдбар, и подключить миниатюры которые генерирует мой шаблон(onecool-thumb).
Скажите, как сие чудо сотворить.. Спасибо.