Счётчик скачиваний файлов с кнопкой и админкой.
Счётчик скачиваний файлов предлагаю Вашему вниманию простой плагин для 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> '; }
(Скачиваний: 16)