1

我希望显示有多少 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>&nbsp;".$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();
}

我的问题在哪里?

4

2 回答 2

0
function show_number_of_downloads() {
    global $wpdb, $product;

    $product_id = ( is_object( $product ) && is_callable( array( $product, 'get_id' ) ) ) ? $product->get_id() : 0;

    if ( empty( $product_id ) ) return;

    $product_type = ( is_object( $product ) && is_callable( array( $product, 'get_type' ) ) ) ? $product->get_type() : 'simple';

    if ( 'variable' === $product_type ) {
        $product_ids = $product->get_children();
    } else {
        $product_ids = array( $product_id );
    }

    $how_many_product_ids = count( $product_ids );
    $id_placeholder       = array_fill( 0, $how_many_product_ids, '%d' );

    $count = $wpdb->get_var(
        $wpdb->prepare(
            "SELECT SUM( download_count ) AS count
                FROM {$wpdb->prefix}woocommerce_downloadable_product_permissions
                WHERE product_id IN (".implode( ',', $id_placeholder ).")",
            $product_ids
        )
    );
    if ( ! empty( $count ) ) {
        echo '<strong>' . esc_html__( 'Total downloads' ) . '</strong>: ' . $count;
    }
}
add_action( 'woocommerce_single_product_summary', 'show_number_of_downloads' );
于 2020-02-22T12:59:50.897 回答
0

我添加了这段代码,效果很好

function add_download_count(){ global $product; $count = $product->get_total_sales(); echo “ Downloads:  ”.$count.” ”; } add_action(“woocommerce_single_product_summary”, “add_download_count”, 15); 

这就是它的样子

在此处输入图像描述

于 2022-02-13T15:21:39.060 回答