Получить количество загрузок загружаемого продукта для отображения в Woocommerce - PullRequest
1 голос
/ 22 февраля 2020

Я надеюсь показать, сколько человек скачало продукт, обратите внимание, а не количество продаж. Потому что иногда я буду предлагать продукт бесплатно, и я надеялся манипулировать этим числом с каждым кликом.

Первая часть, в которой я пытался отобразить количество загрузок:

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>&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 (Внутренний сервер Ошибка)

и я не уверен, как двигаться дальше.

мой вызов функции обратно в функциях. 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();
}

Где моя проблема?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2020

Первая часть - ошибка: вызов функции-члена get_var () со значением NULL) - глобализация $ wpdb до этого

function add_download_count(){
    global $wpdb, $product;
    // etc..

Вторая Часть - Я надеюсь добавить количество загрузок, нажав на следующее:

Можете ли вы уточнить это? каково ваше намерение? общее количество загрузок уже показано через код?

0 голосов
/ 22 февраля 2020

Надеюсь, это поможет вам.

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' );
...