WordPress как на ладони
wordpress jino

Функция вывода записей по количеству просмотров

Сегодня хочу поделится с вами очередной функцией вывода записей. Функция является прямым дополнением статьи "Считаем количество посещений страниц на WordPress без плагинов". В задачу функции входит вывод записей отсортированных по произвольному полю, в котором собирается количество просмотров каждого поста. Проще говоря, функция выводит самые просматриваемые записи блога/сайта на WordPress.

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

Итак, знакомьтесь:

Функция для вывода самых просматриваемых записей:

/** Функция для вывода записей по произвольному полю содержащему числовое значение.
-------------------------------------
Параметры передаваемые функции (в скобках дефолтное значение):
num (10) - количество постов.
key (views) - ключ произвольного поля, по значениям которого будет проходить выборка.
order (DESC) - порядок вывода записей. Чтобы вывести сначала менее просматириваемые устанавливаем order=1
format(0) - Формат выводимых ссылок. По дефолту такой: ({a}{title}{/a}). Можно использовать, например, такой: {date:j.M.Y} - {a}{title}{/a} ({views}, {comments}).
days(0) - число последних дней, записи которых нужно вывести по количеству просмотров. Если указать год (2011,2010), то будут отбираться популярные записи за этот год.
cache (0) - использовать кэш или нет. Варианты 1 - кэширование включено, 0 - выключено (по дефолту).
echo (1) - выводить на экран или нет. Варианты 1 - выводить (по дефолту), 0 - вернуть для обработки (return).
Пример вызова: kama_get_most_viewed("num=5 &key=views &cache=1 &format={a}{title}{/a} - {date:j.M.Y} ({views}) ({comments})");
*/
function kama_get_most_viewed($args=''){
	parse_str($args, $i);
	$num    = isset($i['num']) ? $i['num']:10;
	$key    = isset($i['key']) ? $i['key']:'views';
	$order  = isset($i['order']) ? 'ASC':'DESC';
	$cache  = isset($i['cache']) ? 1:0;
	$days   = isset($i['days']) ? (int)$i['days']:0;
	$echo   = isset($i['echo']) ? 0:1;
	$format = isset($i['format']) ? stripslashes($i['format']):0;
	global $wpdb,$post;
	$cur_postID = $post->ID;

	if( $cache ){ $cache_key = (string) md5( __FUNCTION__ . serialize($args) );
		if ( $cache_out = wp_cache_get($cache_key) ){ //получаем и отдаем кеш если он есть
			if ($echo) return print($cache_out); else return $cache_out;
		}
	}

	if( $days ){
		$AND_days = "AND post_date > CURDATE() - INTERVAL $days DAY";
		if( strlen($days)==4 )
			$AND_days = "AND YEAR(post_date)=" . $days;
	}

	$sql = "SELECT p.ID, p.post_title, p.post_date, p.guid, p.comment_count, (pm.meta_value+0) AS views
	FROM $wpdb->posts p
		LEFT JOIN $wpdb->postmeta pm ON (pm.post_id = p.ID)
	WHERE pm.meta_key = '$key' $AND_days
		AND p.post_type = 'post'
		AND p.post_status = 'publish'
	ORDER BY views $order LIMIT $num";
	$results = $wpdb->get_results($sql);
	if( !$results ) return false;

	$out= '';
	preg_match( '!{date:(.*?)}!', $format, $date_m );
	foreach( $results as $pst ){
		$x == 'li1' ? $x = 'li2' : $x = 'li1';
		if ( (int)$pst->ID == (int)$cur_postID ) $x .= " current-item";
		$Title = $pst->post_title;
		$a1 = "<a href='". get_permalink($pst->ID) ."' title='{$pst->views} просмотров: $Title'>";
		$a2 = "</a>";
		$comments = $pst->comment_count;
		$views = $pst->views;
		if( $format ){
			$date = apply_filters('the_time', mysql2date($date_m[1],$pst->post_date));
			$Sformat = str_replace ($date_m[0], $date, $format);
			$Sformat = str_replace(array('{a}','{title}','{/a}','{comments}','{views}'), array($a1,$Title,$a2,$comments,$views), $Sformat);
		}
		else $Sformat = $a1.$Title.$a2;
		$out .= "<li class='$x'>$Sformat</li>";
	}

	if( $cache ) wp_cache_add($cache_key, $out);

	if( $echo )
		return print $out;
	else
		return $out;
}

Как обычно, этот код нужно поместить в ваш файл шаблона functions.php или в то место где будет использована эта функция. Если такого файла у вас нет, то его можно и даже нужно создать!

После того, как функция скопирована в functions.php её можно использовать. Как? Очень просто: открываете файл шаблона (темы) и в то место где нужно вывести список самых просматриваемых записей вызываете функцию (вставляете следующий код):

<ul>
	 <?php kama_get_most_viewed("num=10"); ?>
</ul>

где,  num=10 — это указание сколько записей показывать в списке.

Это все, функция должна работать.

Расширенное использование

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

Параметры, которые можно передать функции:
  • num - количество выводимых ссылок в списке (постов). по умолчанию выводится 10;

  • key - название ключа произвольного поля, по значениям которого будет проходить выборка. Так как в функции для подсчета просмотров используется ключ "Просмотров", то этот параметр по умолчанию равен "Просмотров".

  • format - Формат выводимых ссылок. По умолчанию формат такой: {a}{title}{/a}. При изменении формата можно использовать, следующие шоткоды:
  • {comments} - покажет колличество комментариев у статьи;
  • {title} - заголовок статьи;
  • {date:j.M.Y} - дата в формате j.M.Y (11.Апр.2010);
  • {a} и {/a} - тег ссылки. Открывается и закрывается.
  • {views} - число просмотров поста.

  • days - число последних дней, записи которых нужно вывести по количеству просмотров. Если указать год (2011,2010), то будут отбираться популярные записи за этот год.

  • cache - использовать кэш или нет. Варианты 1 - кэширование включено, 0 - выключено (по дефолту). Кэш будет работать только совместно с плагинами кэширования запросов. По умолчанию кэширование отключено.

  • echo - выводить на экран или возвращать для обработки. 1 - выводить на экран (по дефолту), 0 - вернуть для обработки (return).

Примеры использования

#1. Список из 15 самых просматриваемых записей

При этом в списке нужно указать дату записи и количество просмотров. Реализуется так:

<ul>
	 <?php kama_get_most_viewed("num=15 &format={a}{title}{/a} - {date:j.M.Y} ({views}, {comments})"); ?>
</ul>

выведет список в формате: Заголовок статьи - 11.Апр.2010 (2300, 25) где, 2300 - просмотры, 25 - комментарии.

#2. Изменим ключ произвольного поля

Для этого добавляем в параметры &key=<название нового ключа>

<ul>
	 <?php kama_get_most_viewed("num=15 &format={a}{title}{/a} - {date:j.M.Y} ({views}, {comments}) &key=views"); ?>
</ul>

выведет список в формате: Заголовок статьи - 11.Апр.2010 (2300, 25). Выборка постов будет проходить по произвольному полю со значением "views".

#3. Выведем 15 самых просматриваемых записей за последние 3 месяца (90 дней):

<ul>
	 <?php kama_get_most_viewed("num=15 &days=90"); ?>
</ul>

На этом все.

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

А пока, вопрос со своей стороны, - думаю собрать обе эти функции и сделать плагин, нечто подобное wp-postviews. Только гораздо проще. Стоит ли стараться?

Раклама сайта www.seop.ru

раклама сайта www.seop.ru

www.seop.ru

Функция вывода записей по количеству просмотров 181 комментарий
Полезные 4 Вопросы 5 Все
  • Для примера

    <?php $orig_post = $post;
    	global $post;
    	$tags = wp_get_post_tags($post->ID);
    	if ($tags) {
    	$tag_ids = array();
    	foreach($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;
    	$args=array(
    	'tag__in' => $tag_ids,
    	'post__not_in' => array($post->ID),
    	'posts_per_page'=>10, // Количество похожих записей.
    	'caller_get_posts'=>1
    	);
    	$my_query = new wp_query( $args );
    	if( $my_query->have_posts() ) {
    	echo '<div id="relatedposts"><h3 class="reltopp"></h3><ul>';
    	while( $my_query->have_posts() ) {
    	$my_query->the_post(); ?>
    	<li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><div id="box-cel">**<?php the_post_thumbnail(array(139,91)); ?>**<h3 style="padding: 10px;"><?php the_title(); ?></h3></div></a></li>
    	<? }
    	echo '</ul></div>';
    	}
    	}
    	$post = $orig_post;
    	wp_reset_query(); ?>

    Вывод миниатюры
    **<?php the_post_thumbnail(array(139,91)); ?>**
    Как такое реализовать в рассматриваемом вопросе в функции?
    $out .= "<li class='$x'>$Sformat</li>";
    Просмотрел комментарии и нашел только про реализацию через плагин Kama Thumbnail.
    В другом комментарии следующее:
    $out .= "\n<li class='$x'>". get_the_post_thumbnail($pst->ID) ."$Sformat</li>";
    Все просто. Но не работает. В чем подвох?

  • Вася

    Здравствуйте, а как можно с помощью этой функции вывести текст статьи и список категорий поста?

  • Dzmitry Roshchyn cайт: pribylvseti.ru

    Жаль конечно, что кнопки сброса нет или хотя бы функции раз в месяц обнуляющей.

  • elephant1 cайт: work-click.ru

    Спасибо, автору! функция действительно простая и рабочая. Можно видоизменять вывод под свой шаблон. Создание полноценного плагина хорошая идея! good

    1
    Ответить3 месяца назад #
  • Давно использую этот плагин на сайте. Кама, огромное спасибо!

    Ответить3 месяца назад #
  • Михаил cайт: beautifuhouse.com

    Приветствую,
    использую с плагином Kama Thumbnail и иконками Font Awesome через допполе Advanced Custom Fields, примерно так

    <div class="cb-mask" style="background-color:;">
    	  <a href="" rel="bookmark" title="">
    <?php if( get_field('icfa') )
    { echo '';}
    ?>
    

    Можно ли иконки прикрутить и сюда тоже

    $out .= "\nID) ."'>". kama_thumb_img("post_id=$pst->ID &w=360 &h=240 &class=image_frame effect-blur &q=85") ."$Sformat";

    Мои эксперименты приводят к белому экрану. dash

    Ответить2 месяца назад #
  • Андрей

    А подскажите как можно ваш код использовать, что бы сделать выборку через WP_Query ?

    Ответитьмесяц назад #

Здравствуйте, !

Ваш комментарий