Существует немало плагинов, позволяющих скачивать файлы с сайта, так и я долгое время использовал плагин WP-Filebase, он был очень удобным, там и различные шаблоны кнопок скачивания и счетчик скачиваний. Плагин меня полностью устраивал — у меня была удобная кнопка скачивания файлов со счетчиком скачиваний, но со временем он перестал поддерживаться и возникла проблема — я не мог обновить PHP, при попытке обновления сайт «ломался». Решил в этот раз обойтись от плагина вообще. С помощью плагина Code Snippets, чтобы не трогать functions.php, написал несколько сниппетов: Обработчик скачивания треков, Вывод числа скачиваний, Счетчик скачиваний, создал кнопку и в кастомном поле темы Avada прописал  ссылку на файл.

Обработчик скачивания треков


add_action('init', function() {

if (!isset($_GET['mydl'])) return;

$id = intval($_GET['mydl']);
if (!$id) return;

// 🔒 защита от повторного клика/редиректа
$lock = 'dl_lock_' . $id . '_' . $_SERVER['REMOTE_ADDR'];

if (get_transient($lock)) {
return;
}

set_transient($lock, 1, 5); // 5 секунд блок

$count = get_post_meta($id, 'my_download_count', true);
$count = $count ? $count + 1 : 1;

update_post_meta($id, 'my_download_count', $count);

$url = get_post_meta($id, 'my_file_url', true);

if ($url) {
wp_redirect($url);
exit;
}

wp_die('File not found');
});

Вывод числа скачиваний


function my_download_meta($atts) {
    $atts = shortcode_atts(array(
        'id' => 0,
    ), $atts);

    $id = intval($atts['id']);
    if (!$id) return '';

    $count = get_post_meta($id, 'my_download_count', true);
    $count = $count ? $count : 0;

    return 'Скачано: ' . intval($count) . ' раз';
}
add_shortcode('my_meta', 'my_download_meta');

Счетчик скачиваний


add_action('init', function() {

    if (!isset($_GET['mydl'])) return;

    $id = intval($_GET['mydl']);
    if (!$id) return;

    $count = get_post_meta($id, 'my_download_count', true);
    $count = $count ? $count + 1 : 1;

    update_post_meta($id, 'my_download_count', $count);

    $url = get_post_meta($id, 'my_file_url', true);

    if ($url) {
        wp_redirect($url);
        exit;
    }

    wp_die('File not found');
});

Создал кастомное поле в произвольных полях темы Авада

Дал название полю — my_file_url и прописал туда адрес файла из библиотеки медиафайлов. Кастомные поля можно создавать также с помощью плагина Advanced Custom Fields (ACF)

В кнопку прописал полученный URL формата — https://site.com/?mydl=id

Под кнопкой поставил шорткод [my_meta id=»21129″], где 21129 — пример id поста.

В результате, получилась кнопка и под ней счетчик скачиваний, пример ЗДЕСЬ.

Стили для счетчика скачиваний


.sdc-meta {
display: block !important;
text-align: center !important;
font-size: 13px !important;
color: #9a9a9a !important;
margin-top: 6px !important;
opacity: 0.95 !important;
}