Архив месяца: Сентябрь 2021

Вывод количества просмотров записей WordPress без плагина

views-post-wordpress

views-post-wordpress

Привет, друзья. Вы наверняка видели на некоторых WordPress сайтах показывается количество просмотров статей и таким образом можно понять на сколько та или иная статья популярна. И однажды я показывал как сделать счетчик просмотров страниц на PHP, но там мы хранили просмотры в текстовом файле. Сейчас же мы будем подсчитывать количество просмотров записей и хранить их в базе данных и сделаем это без каких-либо плагинов. Так же выведем просмотры статей в админке. И для начала открываем в редакторе на редактирование файл темы — functions.php и вставляем в него этот кусок кода:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
add_filter("wp_head", "wpds_increament_post_view");
function get_post_views($post_id=NULL){
    global $post;
    if($post_id==NULL)
        $post_id = $post->ID;
    if(!empty($post_id)){
        $views_key = 'wpds_post_views';
        $views = get_post_meta($post_id, $views_key, true);
        if(empty($views) || !is_numeric($views)){
            delete_post_meta($post_id, $views_key);
            add_post_meta($post_id, $views_key, '0');
            return "<img src='". get_template_directory_uri()."/images/eye.svg' width='15'/> 0";
        }
        else if($views == 1)
            return "<img src='". get_template_directory_uri()."/images/eye.svg' width='15'/> 1";
        return "<img src='". get_template_directory_uri()."/images/eye.svg' width='15'/> ".$views;
    }
}
function wpds_increament_post_view() {
    global $post;
 
    if(is_singular()){
        $views_key = 'wpds_post_views';
        $views = get_post_meta($post->ID, $views_key, true);
        if(empty($views) || !is_numeric($views)){
            delete_post_meta($post->ID, $views_key);
            add_post_meta($post->ID, $views_key, '1');
        }else
            update_post_meta($post->ID, $views_key, ++$views);
    }
}

На 12, 15 и 16 строках необходимо указать ссылку на картинку в виде глаза. И в месте, где мы хотим вывести количество просмотров статей, как правило в самом верху между заголовком и тело статьи, вставляем функцию вывода:

<span class="meta_views">< ?php echo get_post_views(get_the_ID()); ?></span>

Класс meta_views ужен для того, чтобы была возможность выровнять изображение, которое может позиционироваться неправильно. Вот примерные стили для нормального отображения, которые использовал я:

1
2
3
4
span.meta_views img {
    position: relative;
    top: 3px;
}

В итоге должно получиться следующее:

views-wordpress

Само собой у всех ваших записей, если они существуют уже давно, счетчик просмотров будет 0. Но вы можете самым популярным записям самостоятельно указать необходимое количество, взяв данные из аналитики. Количество просмотров хранится в базе данных WordPress в таблице wp_postmeta в колонке meta_value.

table_mysql

Но это занятие может утомить, если записей слишком много, поэтому могу предложить вариант автоматизации. Заключается он в том, что мы можем установить всем старым статьям определенное значение, например 500 просмотров для каждой. Но целесообразней будет заполнить ячейку таблицы разными значениями и мы тоже может это сделать выполнив такой запрос в mySQL:

Рандомно разные значения

UPDATE wp_postmeta SET meta_value= FLOOR(500 + (RAND() * 1000));

Одинаковые значения

UPDATE wp_postmeta SET meta_value= 500;

И теперь давайте отобразим это в админке.

1
2
3
4
5
6
7
8
9
10
add_filter('manage_posts_columns', 'posts_column_views');
add_action('manage_posts_custom_column', 'posts_custom_column_views',5,2);
function posts_column_views($defaults){
    $defaults['post_views'] = __('Просмотры');
    return $defaults;
}
function posts_custom_column_views($column_name, $id){
    if($column_name === 'post_views')
        echo get_post_views(get_the_ID());
}

И получаем:
views-wp

Так мы избавимся от нулевых просмотров у статей, которые были написаны уже давно. Пусть число будет далеко от реальности, но это лучше чем ноль. Я надеюсь, что смог понятно объяснить как вывести количество просмотров записей на WordPress сайте без использования плагинов и теперь вы сможете это сделать самостоятельно.

Экспорт данных в CSV файл (Excel) из PHP

export csv

export csv

Привет. Очень часто возникает необходимость экспортировать какие-то данные с сайта в Excel таблицу, например внутри личного кабинета компании формировать какой-то отчет и выгрузить его в формате CSV. PHP отлично с этим справляется и даже существуют специальные библиотеки, которые в значительной степени упрощают работу с экспортом данных в Excel. Но в данном примере мы их рассматривать не будем, а научимся это делать на чистом PHP. Ранее я публиковал материалы по созданию CRUD приложения на PHP, где мы помещали в базу данных некую информацию и выводили е на страницу. Я покажу, как можно сделать запись этих данных в CSV файл. И то же самое мы реализуем из другого приложения, где мы делали веб-приложение и хранили все записи в JSON файле. Как это выглядит можно посмотреть на демо странице:

Демо

Экспорт в CSV из БД MySQL

Для начала подготовим кнопку, по нажатию которой на компьютер будет происходить загрузка CSV файла с экспортированными данными. Соответственно она должна быть обернута в тег form. Я использую Bootstrap и FontAwesome, поэтому добавлю еще иконку.

1
2
3
4
5
<form action="" method="post">
  <button class="btn btn-primary mb-1" name="export_excel">
    <i class="fa fa-file-csv"></i>
  Export</button>
</form>

export-button-csv
PHP CSV

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (isset($_POST['export_exel'])) {
	header("Content-Type: text/csv; charset=utf-8");
	header("Content-Disposition: attachment; filename=download.csv");
	$output = fopen("php://output", "w");
	fputcsv($output, array('ID', 'Имя', 'Фамилия', 'Ставка'));
	$sql = "SELECT * FROM `crud` ORDER BY `id` DESC";
	$result = mysqli_query($mysqli, $sql);
 
while ($row = mysqli_fetch_assoc($result)) {
     fputcsv($output, $row);
 } 
 	fclose($output);
	 exit;
	}

Нажимаем кнопку экспорта и получаем CSV файл с данными:
test-export-csv-php

Эта таблица полностью повторяет все, что находится в базе данных MySQL, только в обратном порядке.

table-mysql

Если нужно экспортировать не все, а лишь некоторые ячейки таблицы, к примеру вы хотите из этой базы взять только Имя
Фамилию, то всего лишь нужно заменить пару строк кода:

5
fputcsv($output, array('Имя', 'Фамилия'));
10
fputcsv($output, [$row['first'], $row['description']]);

Конечно в этой БД полный бардак, но думаю, что принцип вам понятен. Для того, чтобы каждый раз вы экспортировали уникальный файл, то можно добавить в его имя временную метку:

1
$t = time();

И изменить 3 строчку на:

3
header("Content-Disposition: attachment; filename=download".$t .".csv");

Экспорт в CSV из JSON файла.

Как реализована запись в JSON — смотрите в предыдущем посте. Здесь будет чисто экспорт.

1
2
3
4
5
6
7
8
9
10
11
12
13
if (isset($_POST['export_exсel'])) {
  $t = time();
  header("Content-Type: text/csv; charset=utf-8");
  header("Content-Disposition: attachment; filename=download".$t .".csv");
  $output = fopen("php://output", "w");
  fputcsv($output, ['ID', 'Задача']);
 
foreach($jsonArray as $id => $arr) {
     fputcsv($output, [$id, $arr]);
 } 
 	fclose($output);
    exit;
}

export_excel_php
И запись в CSV из PHP
excel_php_export

Искренне надеюсь, что у меня получилось донести до вас информацию на тему экспорта из PHP CSV файл, а это значит, что мы можем открывать его в Excel. Если что — пишите комментарии.