Я надеюсь показать, сколько человек скачало продукт, обратите внимание, а не количество продаж. Потому что иногда я буду предлагать продукт бесплатно, и я надеялся манипулировать этим числом с каждым кликом.
Первая часть, в которой я пытался отобразить количество загрузок:
function add_download_count(){
global $product;
if ($product->is_downloadable('yes')){
$query = "SELECT SUM( download_count ) AS count FROM {$wpdb->prefix}woocommerce_downloadable_product_permissions WHERE product_id = $product->id";
$count = $wpdb->get_var( $query );
echo "Downloads: ".$count;
}
}
add_action("woocommerce_before_single_product_summary", "add_download_count");
Я узнал это из другого поста здесь: Скачать Count на WooCommerce Free Product это очень устаревший пост, так что, возможно, что-то изменилось сейчас, когда я попробовал код безрезультатно, потому что он возвращает ошибку: вызов функции-члена get_var () на null
Вторая часть, я надеюсь добавить количество загрузок, нажав следующее:
foreach( $downloads as $key => $each_download ) {
echo '<a href="'.$each_download["file"].'">Download</a>';
}
однако я не уверен, как это сделать? Я думаю, можно ли щелкнуть и вызвать триггер, чтобы обновить +1 до download_count.
Или я не в том логи c здесь?
ОБНОВЛЕНИЕ
Немного повозившись, я обнаружил, что этот метод не работает.
, даже не добавляя к нему global $wpdb;
.
Причина добавления числа к количеству загрузок после клика заключается в том, что:
загрузка пользователем по ссылке, сгенерированной $ product-> get_downloads (), не go через систему корзины WooCommerce. ,
, таким образом, он не отражается автоматически на количестве покупок или загрузок.
Я думаю, что это плохая логика c и, возможно, не хороший способ реализовать идею. Я продолжаю и пытался использовать вместо него значение по умолчанию $product->get_total_sales()
. Это казалось более безопасным способом, как и предполагалось в оригинальном дизайне.
Я успешно отображаю количество продаж с помощью:
function add_download_count(){
global $product;
$count = $product->get_total_sales();
echo "<span id='downloadcount' data-downloadcount='".$count."'><span class='enclass'>Downloads:</span> ".$count."</span>";
}
add_action("woocommerce_single_product_summary", "add_download_count", 15);
Как вы можете видеть, я пытался сохранить счетное число в data-count
, поэтому им можно манипулировать через AJAX.
jQuery(document).ready(function($) {
$( ".downloadbtn_now" ).click(function() {
//aJAX
let wasdownloadcount = parseInt($( "#downloadcount" ).data( "downloadcount" ) ) ;
let downloadcount = wasdownloadcount + 1;
$.ajax({
type: "POST",url: "<? admin_url('admin-ajax.php') ?>",
dataType: "json",
data: { downloadcount: downloadcount, action: 'download_count' }
}).done(function() {
alert( "Data was " + wasdownloadcount + " but now is: " +downloadcount );
});
});
});
Я получил:
POST http://localhost/wp-admin/admin-ajax.php 500 (Внутренний сервер Ошибка)
и я не уверен, как двигаться дальше.
мой вызов функции обратно в функциях. php следующим образом, она использует функцию по умолчанию в woocommerce set_total_sales
:
//AJAX
add_action('wp_ajax_download_count', 'download_count_callback');
add_action('wp_ajax_nopriv_download_count', 'download_count_callback');
function download_count_callback(){
$downloadcount = $_POST['downloadcount'];
set_total_sales($downloadcount);
die();
}
Где моя проблема?