В первой части я показал, как без плагинов вывести похожие записи с миниатюрами по тегам. Однако похожесть можно еще и определить по категории. Если для объединения схожих по тематике постов вы используете категории, то можно этим воспользоваться.
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 по-своему работает с изображениями, поэтому если вы в теме используете автоматически создаваемые миниатюры, лучше использовать встроенный редактор.
Ваш рассказ заканчивается словами “и вставляем после него такой код:” — и дальше пусто. Так какой код надо вставлять?
Обновите страницу.
Приветствую.
Подскажите как доделать так, чтобы если в записи нет изображений, отображалась картинка заглушка? Спасибо.
Как вариант, можно использовать такой способ: Как вывести первое изображение из поста, а если его нет, то показать случайно выбранную картинку-заглушку.
Либо выводить миниатюру примерно так:
<? if($post->files[0]->thumbnail) echo '<img src="'.$post->files[0]->thumbnail.'" />'; elseif($html = get_the_post_thumbnail('thumbnail') ) echo $html; else echo ''; ?>Спасибо за быстрый ответ.
Правда у меня что-то не получилось.
Поставил предложенный вами код (заменил
) и теперь вместо первых картинок, везде отображается только заглушка. В чем может быть дело?
Было бы замечательно если бы получилось объединить 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/
Первая картинка и миниатюра поста – это разные штуки. Вы какой код использовали?
Если код:
" title="<?php the_title('', ''); ?>"> <div class="prev-block"> <div class="prev-thumb"><?php ordered_thumbnails(); ?></div> <div class="prev-title"><?php the_title(); ?></div> </div>то так:
Если код:
" title="<?php the_title('', ''); ?>"> <div class="prev-block"> <div class="prev-thumb"> <? if($post->files[0]->thumbnail) echo '<img src="'.$post->files[0]->thumbnail.'" />'; elseif($html = get_the_post_thumbnail('thumbnail') ) echo $html; else echo ''; ?> </div> <div class="prev-title"><?php the_title(); ?></div> </div>то так
Попробуйте так:
<?php if(has_post_thumbnail()) { the_post_thumbnail(); } else { echo ''; } ?>Большое спасибо за помощь.
Прибавил код от https://n-wp.ru/kak-vyivesti-pervoe-izobrazhenie-iz-posta-a-esli-ego-net-to-pokazat-sluchayno-yibrannuyu-zaglushku/.
Получилось так
Все прекрасно работает.
Если можно удалите пожалуйста два моих комментария выше.
Комментарии выше тоже полезные. Вы спрашивали о том, как выводить картинку-заглушку, если в посте нет миниатюр, а воспользовались способом, выводящим первое изображение поста – это не одно и то же. Хотя можно и так и сяк.
Здравствуйте. Реально ли запихнуть сей код в сайдбар, и подключить миниатюры которые генерирует мой шаблон(onecool-thumb).
Скажите, как сие чудо сотворить.. Спасибо.