获取可下载产品的下载计数以在 Woocommerce 中显示
Get download count of downloadable product to display in Woocommerce
我希望显示有多少人下载了该产品,
注意,不是销售数量。
因为有时我会免费提供产品,
我希望每次点击都能操纵这个数字。
第一部分我尝试显示下载数:
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");
我是从另一个 post 那里学到的:
这是一个非常过时的 post 所以现在我尝试了代码但无济于事,因为它 returns 一个错误:调用成员函数 get_var() on null
第二部分,希望通过点击以下添加下载数:
foreach( $downloads as $key => $each_download ) {
echo '<a href="'.$each_download["file"].'">Download</a>';
}
但是我不确定如何做到这一点?我在想是否可以点击并触发更新 +1 到 download_count.
还是我逻辑有误?
UPDATE
修改了一下,发现这个方法不行。
连 global $wpdb;
都没有。
点击后下载次数加数的原因是:
通过 $product->get_downloads() 生成的 link 的用户下载不会通过 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 (Internal Server Error)
而且我不确定如何从这里前进。
我在 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();
}
我的问题在哪里?
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' );
我添加了这段代码并且效果很好
function add_download_count(){ global $product; $count = $product->get_total_sales(); echo “ Downloads: ”.$count.” ”; } add_action(“woocommerce_single_product_summary”, “add_download_count”, 15);
原来是这样
我希望显示有多少人下载了该产品, 注意,不是销售数量。 因为有时我会免费提供产品, 我希望每次点击都能操纵这个数字。
第一部分我尝试显示下载数:
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");
我是从另一个 post 那里学到的:
第二部分,希望通过点击以下添加下载数:
foreach( $downloads as $key => $each_download ) {
echo '<a href="'.$each_download["file"].'">Download</a>';
}
但是我不确定如何做到这一点?我在想是否可以点击并触发更新 +1 到 download_count.
还是我逻辑有误?
UPDATE
修改了一下,发现这个方法不行。
连 global $wpdb;
都没有。
点击后下载次数加数的原因是:
通过 $product->get_downloads() 生成的 link 的用户下载不会通过 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 (Internal Server Error)
而且我不确定如何从这里前进。
我在 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();
}
我的问题在哪里?
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' );
我添加了这段代码并且效果很好
function add_download_count(){ global $product; $count = $product->get_total_sales(); echo “ Downloads: ”.$count.” ”; } add_action(“woocommerce_single_product_summary”, “add_download_count”, 15);
原来是这样