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


Характеристики:
Счётчик скачиваний файлов протестирован на версии php 8.2
Нужен установленный WordPress (Как установить на хостинг почитать можно Тут)
Для пользования используем шорткод
[download_counter file="Сюда ссылка на файл" label="⬇ Скачать"]
Сам код поместился в один файл.
<?php
/**
* Plugin Name: Счётчик скачиваний с кнопкой
* Plugin URI: https://plagins.com/счётчик-скачиваний/
* Description: Счётчик скачиваний файлов с кнопкой и админкой.
* Version: 1.1 * Author: plagins * Author URI: https://plagins.com
* License: GPL2
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
*/
if (!defined('ABSPATH')) exit;
// Хук на скачивание function dc_handle_download() {
if (isset($_GET['dc_download'])) {
$file_url = esc_url_raw($_GET['dc_download']);
$hash = md5($file_url);
// Счётчик $count = get_option('dc_count_' . $hash, 0);
update_option('dc_count_' . $hash, $count + 1);
// Сохраняем URL update_option('dc_url_' . $hash, $file_url);
wp_redirect($file_url); exit;
} } add_action('init', 'dc_handle_download');
// Шорткод
function dc_download_shortcode($atts) {
$atts = shortcode_atts(array( 'file' => '', 'label' => '⬇ Скачать файл', ), $atts);
if (empty($atts['file'])) {
return 'Не указан файл для скачивания.';
} $file_url = esc_url($atts['file']);
$hash = md5($file_url);
$count = get_option('dc_count_' . $hash, 0);
$download_link = esc_url(add_query_arg('dc_download', urlencode($file_url), home_url()));
return sprintf( '
<center><a class="dc-download-button" href="%s" download="">%s</a> <span class="dc-count">
(Скачиваний: %d)
</span></center>
', $download_link, esc_html($atts['label']), $count );
} add_shortcode('download_counter', 'dc_download_shortcode');
// Стили function
dc_enqueue_styles() { wp_register_style('dc_styles', false);
wp_enqueue_style('dc_styles');
$custom_css = " .dc-download-button {
display: inline-block;
background-color: #0073aa; color: #fff;
padding: 10px 20px;
border-radius: 6px;
text-decoration: none;
font-weight: 600;
transition: background 0.3s ease;
} .dc-download-button:hover {
background-color: #005177; } .dc-count {
font-size: 14px;
color: #555;
} ";
wp_add_inline_style('dc_styles', $custom_css);
} add_action('wp_enqueue_scripts', 'dc_enqueue_styles');
// Админ-меню
function dc_admin_menu() {
add_menu_page( 'Скачивания', 'Скачивания', 'manage_options',
'dc-downloads', 'dc_admin_page', 'dashicons-download', 20 );
}
add_action('admin_menu', 'dc_admin_menu');
// Страница в админке function dc_admin_page() {
if (!current_user_can('manage_options')) return;
// Удаление записи
if (isset($_GET['delete']) && isset($_GET['_wpnonce']) && wp_verify_nonce($_GET['_wpnonce'], 'dc_delete_'
. $_GET['delete']))
{ delete_option('dc_count_' . $_GET['delete']);
delete_option('dc_url_' . $_GET['delete']);
echo '
<div class="notice notice-success">
Запись удалена.
</div>
'; } echo '
<div class="wrap">
<h1>Скачивания файлов</h1>
';
echo '';
global $wpdb;
$options = $wpdb->get_results(" SELECT option_name, option_value FROM
{$wpdb->options} WHERE option_name LIKE 'dc_count_%' ");
if ($options) { foreach ($options as $option) {
$hash = str_replace('dc_count_', '', $option->option_name);
$count = intval($option->option_value);
$url = get_option('dc_url_' . $hash);
$delete_url = wp_nonce_url(admin_url("admin.php?page=dc-downloads&delete=$hash"),
'dc_delete_' . $hash);
echo '';
echo '';
echo '';
echo '';
echo '';
} } else { echo ''; } echo '
<table class="widefat fixed striped">
<thead>
<tr>
<th>Файл</th>
<th>Скачиваний</th>
<th>Действия</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="' . esc_url($url) . '" target="_blank" rel="noopener">'
. esc_html($url) . '</a></td>
<td>' . $count . '</td>
<td><a class="button" href="' . esc_url($delete_url) . '">Удалить</a></td>
</tr>
<tr>
<td colspan="3">Нет данных.</td>
</tr>
</tbody>
</table>
</div>
'; }
(Скачиваний: 52)