Как вывести самые комментируемые записи сайта/блога куда-то в сайдбар или на страничку.?. …причём, чтобы записи выводились с миниатюрой, количеством отзывов и пр. и пр. – и чтоб всё это запросто регулировалось: вот сегодня и решим сию задачу!
У меня несколько раз спрашивали – как выводить самые популярные записи, и неплохо бы с вариантом миниатюры… Я пару раз отвечал, а теперь решил написать пост, чтобы при случае отсылать на его страничку.
И снова представляю совершенно рабочий код с сайта wp-kama. Но – там этот код без вариаций вывода картинки (миниатюры).
Итак: и снова я немного дополнил код Тимура: т.е добавил несколько строк, цепляющих картинку к комментируемым статьям.
Приступим к концерту:
код вывода самых комментруемых записей сайта: с миниатюрой
Всё просто:
ниже дан код, который нужно поместить в файл functions.php активной темы, ну или в специальный плагин (что весьма сподручнее и оптимальнее)… как его создать… и все плюсы описаны тут…
Ну а касательно нынешней темы, много пояснять вряд ли стоит, ибо в комментариях кода даны все необходимые пояснения.
Мои пояснения обозначены ATs
– понятности ради.
Главное что нужно сказать: я не только прикрутил миниатюры, но и заменил теги списка (li и ul) на див классы: мне так сподручнее всегда… больше воли для работы с css.
Если вам это не подходит, то в моих комментариях дан оригинальный вариант: можете сделать как душе угодно.
Что ещё, – конечно же, в финале кое-какие примерные стили css (стили с плюшками красявостей, ибо в большинстве случаев сей код требуют барышни. Но вы всё сами замечательно поправите при строгости желаний)).
В общем, весь представленный код вывода самых комментируемых записей блога/сайта полностью рабочий… и готов к использованию…
А вот и сам код:
/*** ВЫВОДИМ САМЫЕ КОММЕНТИРУЕМОЕ - ЗАПИСИ **/
/* Функция для вывода постов по количеству комментариев
--------------------------------------------------------
Параметры передаваемые функции (в скобках указано дефолтное значение):
post_num (5) = количество ссылок
format ('') = {date:j.M.Y} - {a}{title}{/a} ({comments})
$days (0) = за последние n дней. Пример: $days=30 выведет посты за последние 30 дней. Или указиваем год за который нужно вывести комментарии. Пример:2009
cache ('') = включить кеш (по умолчанию выключен), указываем 1, чтобы включить
$post_type ('post') = тип записей
---
Вызываем функцию примерно так:
<?php echo kama_most_commented_posts(10, '{a}{title}{/a} <sup>{comments}</sup>', 0, 31); ?>
*/
function kama_most_commented_posts($post_num=4, $format='', $days=0, $cache='1', $post_type='post'){
global $wpdb;
if( $cache ){
$key = (string) md5( $post_num . $format . $days . $post_type );
if ( $cache_out = wp_cache_get($key, __FUNCTION__) )
return $cache_out;
}
if($days){
$AND_days = "AND post_date > CURDATE() - INTERVAL $days DAY";
if(strlen($days)==2017)
$AND_days = "AND YEAR(post_date)=" . trim($days);
}
$sql = "SELECT ID, post_title, post_date, comment_count, guid
FROM $wpdb->posts p
WHERE post_status = 'publish' AND post_type = '$post_type' $AND_days
ORDER BY comment_count DESC ".
($post_num ? " LIMIT $post_num" : '10');
$res = $wpdb->get_results($sql);
if(!$res) return false;
// Формировка вывода
if( $format ) preg_match ('!{date:(.*?)}!', $format, $date_m);
foreach ($res as $pst){
if($pst->comment_count==0) continue;
//прикрутил миниатюру
$Title = $pst->post_title; // ATs прицепляем миниатюру - title
$thumb_id = get_post_thumbnail_id($pst->ID); // прицепляем миниатюру
$thumb_url = wp_get_attachment_image_src($thumb_id,'full', true); // прицепляем миниатюру
$img_url = $thumb_url[0]; // прицепляем миниатюру - цепляет оригинал картинки (уменьшает)
$image = $pst->$img_url;
$x == 'div8' ? $x = 'div4' : $x = 'div8'; // как в оригинале $x == 'li1' ? $x = 'li2' : $x = 'li1';
$title = esc_attr($pst->post_title);
$a = "<div class='pos-cs'><div class='pos-ss'><img title='{$Title}' src='$img_url' alt='{$Title}' /></div><a title='$title' href='". get_permalink($pst->ID) ."' rel='bookmark' onclick='return !window.open(this.href)'>"; // здесь ссылка миниатюры
$Sformat = "$a$title ($pst->comment_count)</a>";
if($format){
$replacement = array(
'{title}' => $title
,'{a}' => $a
,'{/a}' => '</a></div>'
,'{comments}' => $pst->comment_count
);
if($date_m)
$replacement[$date_m[0]] = apply_filters('the_time', mysql2date($date_m[1], $pst->post_date));
$Sformat = strtr($format, $replacement);
}
$out .= "<div class='$x'>$Sformat</div><hr class='basar'>"; // как в оригинале $out .= "<li class='$x'>$Sformat</li>";
}
if( !$out )
return "<li>Нет записей с комментариями</li>";
if( $cache )
wp_cache_add($key, $out, __FUNCTION__);
return $out;
}
/*** ВЫВОДИМ САМЫЕ КОММЕНТИРУЕМОЕ - ЗАПИСИ **/
Вот строчка вызова функции в том месте, где эта функция самого-самого обсуждаемого необходима:
<div class="posts-widget-entry"><?php echo kama_most_commented_posts(4, '{a}{title}{/a} <sup>число коммов: {comments}</sup>', 0, 31); ?></div>
стили css для кода самых комментируемых записей
.pos-ss img{width:102px;height:72px;margin:0 7px 7px 0;float:left;box-shadow:1px 5px 17px -4px #777;transition:all 1s ease-out}
.pos-ss img:hover{transform:scale(1.8)}
.pos-ss{margin:0;border-radius:4px 4px}
.pos-ss a{border-radius:4px 4px;font-style:italic;font-size:12px;display:block;text-decoration:none}
.pos-ss:hover{}
.div4,.div8{background:#f8f8f8;padding:0 0 10px 0}
.div4:hover,.div8:hover{background:#e9e9e9;padding:0 0 10px 0}
.pos-cs{font-size:12px;}
.pos-cs a{}
.posts-widget-entry{} /** реплика о количестве комментариев **/
hr.basar{width:97%;clear:both;border:1px solid #F9F9F9}
Ко сведению:
картинки цепляются те, которые вы загружали в качестве заглавной мини-картинки статьи. Так они в нашем случае отображаются чётче… (хотя есть споры, о этаком варианте).
если кому-то полезно почитать, о том, как правильно настроить загрузку картинок в админке вордпресс, милости прошу взглянуть на ЭТУ инструкцию… в ней, кстати, описан функционал полезного плагина, который ищет ненужные картинки в ядре сайта (медиафайлы).
На этом занавес представления опускается…
…на рампы пыль печальная ложится…
Online консультация по настройкам и созданию сайтов на WordPress
mihalica.ru !