Сегодня хочу поделится с вами очередной функцией вывода записей. Функция является прямым дополнением статьи «Считаем количество посещений страниц на WordPress без плагинов». В задачу функции входит вывод записей отсортированных по произвольному полю, в котором собирается количество просмотров каждого поста. Проще говоря, функция выводит самые просматриваемые записи блога/сайта на WordPress.
Однако, чтобы применить эту функцию для начала необходимо использовать код из статьи, ссылку на которую я дал выше, именно тот код будет считать количество посещений страницы и записывать их в произвольное поле, а функция из этой статьи будет выводить записи по этому произвольному полю, т.е. по наибольшему количеству просмотров.
/**
* Функция для вывода записей по произвольному полю содержащему числовое значение.
*
* Пример вызова:
* kama_get_most_viewed( "num=5 &key=views &cache=1 &format={a}{title}{/a} - {date:j.M.Y} ({views}) ({comments})" );
*
* @param string $args {
*
* @type string $key (views) Ключ произвольного поля, по значениям которого будет проходить выборка.
* @type int|string $num (10) Количество постов или offset для пагинации - 10 или 20,10.
* @type string $order (desc) Порядок вывода записей. Может быть: asc|desc.
* @type string $format ('') Формат выводимых ссылок. По дефолту такой: ({a}{title}{/a}).
* Можно использовать, например, такой:
* {date:j.M.Y} - {a}{title}{/a} ({views}, {comments}).
* @type int $days (0) Число последних дней, записи которых нужно вывести
* по количеству просмотров. Если указать год (2011,2010),
* то будут отбираться популярные записи за этот год.
* @type int $cache (0) Использовать кэш или нет. Варианты 1 - кэширование включено, 0 - выключено (по дефолту).
* @type string $echo (1) Выводить на экран или нет. Варианты 1 - выводить (по дефолту), 0 - вернуть для обработки (return).
* @type string $return (string) Может быть: string|array. Позволяет вернуть массив объектов постов, а не готовый HTML.
* }
*
* @return bool|int|mixed|string
*
* @ver 1.2
*/
function kama_get_most_viewed( $args = '' ){
global $wpdb, $post;
parse_str( $args, $i );
$num = isset( $i['num'] ) ? preg_replace( '/[^0-9,\s]/', '', $i['num'] ) : 10; // 20,10 | 10
$key = isset( $i['key'] ) ? sanitize_text_field($i['key']) : 'views';
$order = isset( $i['order'] ) && in_array( strtoupper($i['order']), [ 'ASC', 1 ] ) ? 'ASC' : 'DESC';
$days = isset( $i['days'] ) ? (int) $i['days'] : 0;
$format = isset( $i['format'] ) ? stripslashes( $i['format'] ) : '';
$cache = isset( $i['cache'] );
$echo = isset( $i['echo'] ) ? (int) $i['echo'] : 1;
$return = isset( $i['return'] ) ? $i['return'] : 'string';
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";
}
$esc_key = esc_sql( $key );
$sql = "SELECT *, (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 = '$esc_key' $AND_days
AND p.post_type = 'post'
AND p.post_status = 'publish'
ORDER BY views $order LIMIT $num";
$posts = $wpdb->get_results( $sql );
if( ! $posts )
return false;
if( 'array' === $return )
return $posts;
$out = $x = '';
preg_match( '!{date:(.*?)}!', $format, $date_m );
foreach( $posts as $pst ){
$x = ( $x == 'li1' ) ? 'li2' : 'li1';
if( $pst->ID == $post->ID )
$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( [ '{a}', '{title}', '{/a}', '{comments}', '{views}' ], [ $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 )
echo $out;
else
return $out;
}
/**
* 1.2 - параметр return + небольшой рефакторинг
* 1.1 - в num можно указывать offset
*/
Как обычно, этот код нужно поместить в ваш файл шаблона functions.php или в то место где будет использована эта функция. Если такого файла у вас нет, то его можно и даже нужно создать!
После того, как функция скопирована в functions.php её можно использовать. Как? Очень просто: открываете файл шаблона (темы) и в то место где нужно вывести список самых просматриваемых записей вызываете функцию (вставляете следующий код):
<ul>
<?php kama_get_most_viewed("num=10"); ?>
</ul>
где, num=10 — это указание сколько записей показывать в списке.
Это все, функция должна работать.
Те, кто заглянул в код функции, наверняка увидели вначале строчку «Параметры передаваемые функции» и догадались что функция то не простая, вывод можно немного настроить, а как это сделать я, конечно, сейчас расскажу.
При этом в списке нужно указать дату записи и количество просмотров. Реализуется так:
<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 — комментарии.
Для этого добавляем в параметры &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».
<ul>
<?php kama_get_most_viewed("num=15 &days=90"); ?>
</ul>
На этом все.
Если появятся вопросы по ходу прочтения или при установке этой функции, комментарии на блоге как раз для них.
—
Быстро, а главное — недорого купить подписчиков в группу Телеграмм Вам поможет сервис Avi1.ru. На страницах данного сайта Вы можете также получить различные услуги по развитию страниц в данной социальной сети. При желании, Вам помогут опытные и квалифицированные специалисты технической поддержки сайта.