Функция вывода записей по количеству просмотров
Сегодня хочу поделится с вами очередной функцией вывода записей. Функция является прямым дополнением статьи "Считаем количество посещений страниц на WordPress без плагинов". В задачу функции входит вывод записей отсортированных по произвольному полю, в котором собирается количество просмотров каждого поста. Проще говоря, функция выводит самые просматриваемые записи блога/сайта на WordPress.
Однако, чтобы применить эту функцию для начала необходимо использовать код из статьи, ссылку на которую я дал выше, именно тот код будет считать количество посещений страницы и записывать их в произвольное поле, а функция из этой статьи будет выводить записи по этому произвольному полю, т.е. по наибольшему количеству просмотров.
Итак, знакомьтесь.
Смотрите также платный плагин Kama Postviews.
Функция для вывода самых просматриваемых записей
/** * Функция для вывода записей по произвольному полю содержащему числовое значение. * * Пример вызова: * 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 string|array Depends on `return` argument. * * @ver 1.3 */ 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'] ) && ( strtoupper( $i['order'] ) === 'ASC' ) ? '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 = md5( __FUNCTION__ . serialize( $args ) ); if( $cache_out = wp_cache_get( $cache_key ) ){ if( $echo ){ return print( $cache_out ); } return $cache_out; } } $AND_days = $days ? "AND post_date > CURDATE() - INTERVAL $days DAY" : ''; if( 4 === strlen( $days ) ){ $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; } return $out; } /** * 1.3 - Мелкие правки. * 1.2 - Параметр return + небольшой рефакторинг. * 1.1 - В `num` можно указывать `offset`. */
Как обычно, этот код нужно поместить в ваш файл шаблона 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>
На этом все.
Если появятся вопросы по ходу прочтения или при установке этой функции, комментарии на блоге как раз для них.
—
Быстро, а главное — недорого купить подписчиков в группу Телеграмм Вам поможет сервис Avi1.ru. На страницах данного сайта Вы можете также получить различные услуги по развитию страниц в данной социальной сети. При желании, Вам помогут опытные и квалифицированные специалисты технической поддержки сайта.