Вопрос или проблема
У меня есть сайт с 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. Ниже приведено подробное и технически обоснованное руководство, как вы можете внедрить данную функциональность на свой ресурс.
-
Формулирование задачи
Вам необходимо подсчитывать количество загрузок файлов на вашем сайте для каждого продукта, чтобы отображать это количество на странице продукта. Для этого мы будем использовать JavaScript и AJAX для отслеживания кликов и обновления базы данных WordPress.
-
Обзор предложенных решений
Вам был предоставлен код, который работает для внешних ссылок. Однако, в вашем случае необходимо модифицировать его для использования с внутренними ссылками на скачивание файлов, хранящихся в WooCommerce.
-
Техническое решение
Вы можете использовать предоставленный код для отслеживания загрузок, но вам нужно будет внести несколько изменений:
-
Добавление функции JavaScript и AJAX. Для отслеживания кликов создайте скрипт, который будет на каждое нажатие на ссылку отправлять AJAX-запрос, обновляющий счетчик загрузок для соответствующего продукта.
-
Обновление базы данных. Используйте мета-поля WordPress для хранения и обновления значений счетчика.
-
Вывод информации о количестве загрузок. Интегрируйте полученное значение счетчика в отображаемый текст рядом с ссылкой на скачивание.
-
-
Реализация
Вот обновленный код, который интегрирует подсчет кликов для вашего сайта:
// В 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 } }
-
Обновление файла шаблона
Убедитесь, что ваши ссылки на скачивание содержат 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>'; }
-
Заключение
Настоящее решение использует стандартные функции WordPress и WooCommerce для обновления и отображения счетчика загрузок. Оно полностью интегрируется в архитектуру WordPress и не требует использования внешних ресурсов, что гарантирует безопасность и производительность.
Я надеюсь, этот подробный подход поможет вам успешно реализовать систему отслеживания загрузок файлов на вашем веб-сайте. Если понадобятся дополнительные разъяснения или помощь, всегда можете обратиться ко мне.