Количество нажатий на кнопку «Скачать файл»

Вопрос или проблема

У меня есть сайт с WooCommerce для цифровых загрузок. Я делаю все бесплатным для скачивания, и вот мой код для загрузки файла:

$downloads = $product->get_files();

foreach( $downloads as $key => $each_download ) {
  echo '<a href="'.$each_download["file"].'">Download</a>';
}

Мой вопрос: как реализовать счетчик кликов на странице отдельного продукта, если люди нажимают на ссылку для скачивания файла? Я хочу показывать, сколько раз файл уже скачали… Можете рассказать, как написать код для этого? Спасибо…

РЕДАКТИРОВАТЬ:

Привет, я нашел этот код на https://wordpress.stackexchange.com/a/258902

<?php
/* functions.php */
add_action( 'wp_ajax_link_check_click_counter', 'link_check_click_counter');
add_action( 'wp_ajax_nopriv_link_check_click_counter', 'link_check_click_counter' );
function link_check_click_counter() {

    if ( isset( $_POST['nonce'] ) &&  isset( $_POST['post_id'] ) && wp_verify_nonce( $_POST['nonce'], 'link_check_click_counter_' . $_POST['post_id'] ) ) {
        $count = get_post_meta( $_POST['post_id'], 'link_check_click_counter', true );
        update_post_meta( $_POST['post_id'], 'link_check_click_counter', ( $count === '' ? 1 : $count + 1 ) );
    }
    exit();
}

add_action( 'wp_footer', 'link_click' );
//add_action( 'wp_head', 'link_click' );
function link_click() {
    global $post;

    if( isset( $post->ID ) ) {
?>
    <script type="text/javascript" >
    jQuery(function ($) {
        var ajax_options = {
            action: 'link_check_click_counter',
            nonce: '<?php echo wp_create_nonce( 'link_check_click_counter_' . $post->ID ); ?>',
            ajaxurl: '<?php echo admin_url( 'admin-ajax.php' ); ?>',
            post_id: '<?php echo $post->ID; ?>'
        };

        $( '#link_count a' ).on( 'click', function() {
            var href = $( this ).attr( "href" );
            var redirectWindow = window.open(href, '_blank');   
            $.post( ajax_options.ajaxurl, ajax_options, function() {
                redirectWindow.location;
            });
            return false;
        });
    });
    </script>
<?php
    }
}
?>

Но этот код для внешней ссылки, могу ли я применить его к своему коду? Можно? Как? Спасибо…

Используйте этот код…

$downloads = $product->get_files();
$product_id = $product->id;

foreach( $downloads as $key => $each_download ) {
    $query = "SELECT SUM( download_count ) AS count FROM {$wpdb->prefix}woocommerce_downloadable_product_permissions WHERE product_id = $product->id";
    $count = $wpdb->get_var( $query );
    if ( ! empty( $count ) ) {
      echo '<a href="'.$each_download["file"].'">Download ('.$count.')</a>';
    } else {
      echo '<a href="'.$each_download["file"].'">Download</a>';        
    }
}

Надеюсь, это сработает… 🙂

Ответ или решение

Конечно, я готов помочь с созданием функционала для подсчета кликов на скачивание файлов на вашем веб-сайте с использованием WooCommerce. Ниже приведено подробное и технически обоснованное руководство, как вы можете внедрить данную функциональность на свой ресурс.

  1. Формулирование задачи

    Вам необходимо подсчитывать количество загрузок файлов на вашем сайте для каждого продукта, чтобы отображать это количество на странице продукта. Для этого мы будем использовать JavaScript и AJAX для отслеживания кликов и обновления базы данных WordPress.

  2. Обзор предложенных решений

    Вам был предоставлен код, который работает для внешних ссылок. Однако, в вашем случае необходимо модифицировать его для использования с внутренними ссылками на скачивание файлов, хранящихся в WooCommerce.

  3. Техническое решение

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

    • Добавление функции JavaScript и AJAX. Для отслеживания кликов создайте скрипт, который будет на каждое нажатие на ссылку отправлять AJAX-запрос, обновляющий счетчик загрузок для соответствующего продукта.

    • Обновление базы данных. Используйте мета-поля WordPress для хранения и обновления значений счетчика.

    • Вывод информации о количестве загрузок. Интегрируйте полученное значение счетчика в отображаемый текст рядом с ссылкой на скачивание.

  4. Реализация

    Вот обновленный код, который интегрирует подсчет кликов для вашего сайта:

    // В functions.php добавьте:
    add_action('wp_ajax_link_check_click_counter', 'link_check_click_counter');
    add_action('wp_ajax_nopriv_link_check_click_counter', 'link_check_click_counter');
    
    function link_check_click_counter() {
       if (isset($_POST['nonce']) && isset($_POST['post_id']) && wp_verify_nonce($_POST['nonce'], 'link_check_click_counter_' . $_POST['post_id'])) {
           $count = get_post_meta($_POST['post_id'], 'link_check_click_counter', true);
           update_post_meta($_POST['post_id'], 'link_check_click_counter', ($count === '' ? 1 : $count + 1));
       }
       exit();
    }
    
    add_action('wp_footer', 'link_click');
    function link_click() {
       global $post;
       if (isset($post->ID)) {
           ?>
           <script type="text/javascript">
           jQuery(document).ready(function ($) {
               var ajax_options = {
                   action: 'link_check_click_counter',
                   nonce: '<?php echo wp_create_nonce('link_check_click_counter_' . $post->ID); ?>',
                   ajaxurl: '<?php echo admin_url('admin-ajax.php'); ?>',
                   post_id: '<?php echo $post->ID; ?>'
               };
    
               $('a.download-link').on('click', function(e) {
                   e.preventDefault();
                   var href = $(this).attr("href");
                   $.post(ajax_options.ajaxurl, ajax_options, function() {
                       window.location.href = href;
                   });
               });
           });
           </script>
           <?php
       }
    }
  5. Обновление файла шаблона

    Убедитесь, что ваши ссылки на скачивание содержат CSS-класс download-link. Это позволит JavaScript корректно идентифицировать нужные ссылки:

    $downloads = $product->get_files();
    $product_id = $product->get_id();
    
    foreach ($downloads as $key => $each_download) {
       $count = get_post_meta($product_id, 'link_check_click_counter', true);
       echo '<a href="' . esc_url($each_download["file"]) . '" class="download-link">Download (' . (int)$count . ')</a>';
    }
  6. Заключение

    Настоящее решение использует стандартные функции WordPress и WooCommerce для обновления и отображения счетчика загрузок. Оно полностью интегрируется в архитектуру WordPress и не требует использования внешних ресурсов, что гарантирует безопасность и производительность.

Я надеюсь, этот подробный подход поможет вам успешно реализовать систему отслеживания загрузок файлов на вашем веб-сайте. Если понадобятся дополнительные разъяснения или помощь, всегда можете обратиться ко мне.

Оцените материал
Добавить комментарий

Капча загружается...