Сегодня хочу поделится с вами очередной функцией вывода записей. Функция является прямым дополнением статьи «Считаем количество посещений страниц на 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. На страницах данного сайта Вы можете также получить различные услуги по развитию страниц в данной социальной сети. При желании, Вам помогут опытные и квалифицированные специалисты технической поддержки сайта.