我希望显示有多少 ppl hv 下载了该产品,请注意,而不是销售数量。因为有时我会免费提供产品,我希望每次点击都能操纵这个数字。
第一部分我尝试显示下载次数:
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");
我从这里的另一篇文章中了解到这一点: Download Count on WooCommerce Free Product 这是一篇非常过时的文章,所以现在我尝试了代码但无济于事,因为它返回错误:Call to a member function get_var() on null
第二部分,我希望通过点击以下添加下载数量:
foreach( $downloads as $key => $each_download ) {
echo '<a href="'.$each_download["file"].'">Download</a>';
}
但是我不确定如何做到这一点?我在想是否可以单击并触发以将 +1 更新为下载计数。
还是我在这里的逻辑错误?
更新
稍微折腾了一下,发现这个方法行不通。
甚至没有投入global $wpdb;
它。
点击后将数字添加到下载计数的原因是:
用户通过 $product->get_downloads() 生成的链接下载不会通过 WooCommerce 的购物车系统。
因此它不会自动反映购买或下载的数量。
我认为这是一个糟糕的逻辑,也许不是实现这个想法的好方法。我继续前进并尝试使用默认值$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(内部服务器错误)
而且我不确定如何从这里继续前进。
我的函数在functions.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();
}
我的问题在哪里?